mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-27 14:57:59 +01:00
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)
|
(setq type (slot-value obj 'type)
|
||||||
id (slot-value obj 'window)
|
id (slot-value obj 'window)
|
||||||
data (slot-value (slot-value obj 'data) 'data32))
|
data (slot-value (slot-value obj 'data) 'data32))
|
||||||
(exwm--log "atom=%s(%s)" (x-get-atom-name type exwm-workspace--current)
|
(exwm--log "atom=%s(%s) id=#x%x data=%s" (x-get-atom-name type exwm-workspace--current)
|
||||||
type)
|
type (or id 0) data)
|
||||||
(cond
|
(cond
|
||||||
;; _NET_NUMBER_OF_DESKTOPS.
|
;; _NET_NUMBER_OF_DESKTOPS.
|
||||||
((= type xcb:Atom:_NET_NUMBER_OF_DESKTOPS)
|
((= type xcb:Atom:_NET_NUMBER_OF_DESKTOPS)
|
||||||
|
@ -443,7 +443,8 @@
|
||||||
((= type xcb:Atom:_NET_ACTIVE_WINDOW)
|
((= type xcb:Atom:_NET_ACTIVE_WINDOW)
|
||||||
(let ((buffer (exwm--id->buffer id))
|
(let ((buffer (exwm--id->buffer id))
|
||||||
iconic window)
|
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
|
(with-current-buffer buffer
|
||||||
(when (eq exwm--frame exwm-workspace--current)
|
(when (eq exwm--frame exwm-workspace--current)
|
||||||
(if exwm--floating-frame
|
(if exwm--floating-frame
|
||||||
|
@ -457,7 +458,11 @@
|
||||||
(setq window (get-buffer-window nil t))
|
(setq window (get-buffer-window nil t))
|
||||||
(when (or iconic
|
(when (or iconic
|
||||||
(not (eq window (selected-window))))
|
(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.
|
;; _NET_CLOSE_WINDOW.
|
||||||
((= type xcb:Atom:_NET_CLOSE_WINDOW)
|
((= type xcb:Atom:_NET_CLOSE_WINDOW)
|
||||||
(let ((buffer (exwm--id->buffer id)))
|
(let ((buffer (exwm--id->buffer id)))
|
||||||
|
|
Loading…
Reference in a new issue