[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/exwm d8281ab 3/4: Avoid unnecessary changes of stacking
From: |
Chris Feng |
Subject: |
[elpa] externals/exwm d8281ab 3/4: Avoid unnecessary changes of stacking order |
Date: |
Wed, 03 Feb 2016 05:34:55 +0000 |
branch: externals/exwm
commit d8281abca4bc5182040a7866560a1806c59176d4
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>
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.
---
exwm-input.el | 30 ++++++++++++++++++++++--------
1 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/exwm-input.el b/exwm-input.el
index 156399c..f84b5fc 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -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-input--set-focus exwm--id)
;; Adjust stacking orders
- (xcb:+request exwm--connection
- (make-instance 'xcb:ConfigureWindow
- :window exwm--container
- :value-mask xcb:ConfigWindow:StackMode
- :stack-mode (if exwm--floating-frame
- xcb:StackMode:Above
- xcb:StackMode:Below)))
+ (if exwm--floating-frame
+ ;; Put this floating X window at top.
+ (xcb:+request exwm--connection
+ (make-instance 'xcb:ConfigureWindow
+ :window exwm--container
+ :value-mask xcb:ConfigWindow:StackMode
+ :stack-mode xcb:StackMode:TopIf))
+ ;; This should be the last X window but one in the siblings.
+ (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
(make-instance 'xcb:ConfigureWindow
:window (frame-parameter
(or exwm--floating-frame exwm--frame)
'exwm-outer-id)
:value-mask xcb:ConfigWindow:StackMode
- :stack-mode xcb:StackMode:Below))
+ :stack-mode xcb:StackMode:BottomIf))
(xcb:flush exwm--connection))
(when (eq (selected-window) exwm-input--focus-window)
(exwm--log "Focus on %s" exwm-input--focus-window)