Focus workspace frames upon _NET_ACTIVE_WINDOW
* exwm.el (exwm--on-ClientMessage): Take care of focusing
workspace frames when a _NET_ACTIVE_WINDOW message is received for
a workspace frame.  This is responsibility of the window manager
when it advertises _NET_ACTIVE_WINDOW support, which we do.
Emacs versions before 29 took care of setting the input focus to
the frame.
Thanks-to: Po Lu for the work on Emacs and assistance with this
           issue.
			
			
This commit is contained in:
		
							parent
							
								
									e43bd78258
								
							
						
					
					
						commit
						ce2191c444
					
				
					 1 changed files with 9 additions and 4 deletions
				
			
		
							
								
								
									
										13
									
								
								exwm.el
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								exwm.el
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -420,8 +420,8 @@
 | 
			
		|||
    (setq type (slot-value obj 'type)
 | 
			
		||||
          id (slot-value obj 'window)
 | 
			
		||||
          data (slot-value (slot-value obj 'data) 'data32))
 | 
			
		||||
    (exwm--log "atom=%s(%s)" (x-get-atom-name type exwm-workspace--current)
 | 
			
		||||
               type)
 | 
			
		||||
    (exwm--log "atom=%s(%s) id=#x%x data=%s" (x-get-atom-name type exwm-workspace--current)
 | 
			
		||||
               type (or id 0) data)
 | 
			
		||||
    (cond
 | 
			
		||||
     ;; _NET_NUMBER_OF_DESKTOPS.
 | 
			
		||||
     ((= type xcb:Atom:_NET_NUMBER_OF_DESKTOPS)
 | 
			
		||||
| 
						 | 
				
			
			@ -443,7 +443,8 @@
 | 
			
		|||
     ((= type xcb:Atom:_NET_ACTIVE_WINDOW)
 | 
			
		||||
      (let ((buffer (exwm--id->buffer id))
 | 
			
		||||
            iconic window)
 | 
			
		||||
        (when (buffer-live-p buffer)
 | 
			
		||||
        (if (buffer-live-p buffer)
 | 
			
		||||
          ;; Either an `exwm-mode' buffer (an X window) or a floating frame.
 | 
			
		||||
          (with-current-buffer buffer
 | 
			
		||||
            (when (eq exwm--frame exwm-workspace--current)
 | 
			
		||||
              (if exwm--floating-frame
 | 
			
		||||
| 
						 | 
				
			
			@ -457,7 +458,11 @@
 | 
			
		|||
                (setq window (get-buffer-window nil t))
 | 
			
		||||
                (when (or iconic
 | 
			
		||||
                          (not (eq window (selected-window))))
 | 
			
		||||
                  (select-window window))))))))
 | 
			
		||||
                  (select-window window)))))
 | 
			
		||||
          ;; A workspace.
 | 
			
		||||
          (dolist (f exwm-workspace--list)
 | 
			
		||||
            (when (eq id (frame-parameter f 'exwm-outer-id))
 | 
			
		||||
              (x-focus-frame f t))))))
 | 
			
		||||
     ;; _NET_CLOSE_WINDOW.
 | 
			
		||||
     ((= type xcb:Atom:_NET_CLOSE_WINDOW)
 | 
			
		||||
      (let ((buffer (exwm--id->buffer id)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue