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…
Reference in a new issue