mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-23 21:17:59 +01:00
Avoid unnecessary changes of stacking order
* exwm-input.el (exwm-input--update-focus): Only restack a tiling X window when it's not the last but one sibling. This should reduce flickering.
This commit is contained in:
parent
9c95c03e18
commit
d8281abca4
1 changed files with 22 additions and 8 deletions
|
@ -110,20 +110,34 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
|
||||||
(exwm--log "Set focus on #x%x" exwm--id)
|
(exwm--log "Set focus on #x%x" exwm--id)
|
||||||
(exwm-input--set-focus exwm--id)
|
(exwm-input--set-focus exwm--id)
|
||||||
;; Adjust stacking orders
|
;; Adjust stacking orders
|
||||||
|
(if exwm--floating-frame
|
||||||
|
;; Put this floating X window at top.
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ConfigureWindow
|
(make-instance 'xcb:ConfigureWindow
|
||||||
:window exwm--container
|
:window exwm--container
|
||||||
:value-mask xcb:ConfigWindow:StackMode
|
:value-mask xcb:ConfigWindow:StackMode
|
||||||
:stack-mode (if exwm--floating-frame
|
:stack-mode xcb:StackMode:TopIf))
|
||||||
xcb:StackMode:Above
|
;; This should be the last X window but one in the siblings.
|
||||||
xcb:StackMode:Below)))
|
(with-slots (children)
|
||||||
|
(xcb:+request-unchecked+reply exwm--connection
|
||||||
|
(make-instance 'xcb:QueryTree
|
||||||
|
:window
|
||||||
|
(frame-parameter exwm--frame
|
||||||
|
'exwm-workspace)))
|
||||||
|
(unless (eq (cadr children) exwm--container)
|
||||||
|
(xcb:+request exwm--connection
|
||||||
|
(make-instance 'xcb:ConfigureWindow
|
||||||
|
:window exwm--container
|
||||||
|
:value-mask xcb:ConfigWindow:StackMode
|
||||||
|
:stack-mode xcb:StackMode:Below)))))
|
||||||
|
;; Make sure Emacs frames are at bottom.
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ConfigureWindow
|
(make-instance 'xcb:ConfigureWindow
|
||||||
:window (frame-parameter
|
:window (frame-parameter
|
||||||
(or exwm--floating-frame exwm--frame)
|
(or exwm--floating-frame exwm--frame)
|
||||||
'exwm-outer-id)
|
'exwm-outer-id)
|
||||||
:value-mask xcb:ConfigWindow:StackMode
|
:value-mask xcb:ConfigWindow:StackMode
|
||||||
:stack-mode xcb:StackMode:Below))
|
:stack-mode xcb:StackMode:BottomIf))
|
||||||
(xcb:flush exwm--connection))
|
(xcb:flush exwm--connection))
|
||||||
(when (eq (selected-window) exwm-input--focus-window)
|
(when (eq (selected-window) exwm-input--focus-window)
|
||||||
(exwm--log "Focus on %s" exwm-input--focus-window)
|
(exwm--log "Focus on %s" exwm-input--focus-window)
|
||||||
|
|
Loading…
Reference in a new issue