[Top][All Lists]

[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--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)
                                :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)

reply via email to

[Prev in Thread] Current Thread [Next in Thread]