emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm c8c0bc7: Neglect trivial resizing requests


From: Chris Feng
Subject: [elpa] externals/exwm c8c0bc7: Neglect trivial resizing requests
Date: Fri, 11 Mar 2016 06:13:23 +0000

branch: externals/exwm
commit c8c0bc7b60c043d47e153e40c2ae139f513e9358
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Neglect trivial resizing requests
    
    * exwm-manage.el (exwm-manage--on-ConfigureRequest): Neglect trivial
    resizing requests since that cannot be done precisely.
---
 exwm-manage.el |   52 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/exwm-manage.el b/exwm-manage.el
index bb6d5ff..b0657b9 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -407,10 +407,14 @@ Would you like to kill it? "
                          (xcb:+request exwm--connection ,request))))
     (xcb:flush exwm--connection)))
 
+;; FIXME: Make the following values as small as possible.
+(defconst exwm-manage--width-delta-min 5)
+(defconst exwm-manage--height-delta-min 5)
+
 (defun exwm-manage--on-ConfigureRequest (data _synthetic)
   "Handle ConfigureRequest event."
   (let ((obj (make-instance 'xcb:ConfigureRequest))
-        buffer edges)
+        buffer edges width-delta height-delta)
     (xcb:unmarshal obj data)
     (with-slots (window x y width height
                         border-width sibling stack-mode value-mask)
@@ -421,7 +425,29 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
                  border-width sibling stack-mode)
       (if (and (setq buffer (exwm--id->buffer window))
                (with-current-buffer buffer
-                 (or exwm--fullscreen (not exwm--floating-frame))))
+                 (or exwm--fullscreen
+                     ;; Make sure it's a floating X window wanting to resize
+                     ;; itself.
+                     (or (not exwm--floating-frame)
+                         (progn
+                           (setq edges
+                                 (window-inside-pixel-edges
+                                  (get-buffer-window buffer t))
+                                 width-delta (- width (- (elt edges 2)
+                                                         (elt edges 0)))
+                                 height-delta (- height (- (elt edges 3)
+                                                           (elt edges 1))))
+                           ;; We cannot do resizing precisely for now.
+                           (and (if (= 0 (logand value-mask
+                                                 xcb:ConfigWindow:Width))
+                                    t
+                                  (< (abs width-delta)
+                                     exwm-manage--width-delta-min))
+                                (if (= 0 (logand value-mask
+                                                  xcb:ConfigWindow:Height))
+                                    t
+                                  (< (abs height-delta)
+                                     exwm-manage--height-delta-min))))))))
           ;; Send client message for managed windows
           (with-current-buffer buffer
             (setq edges
@@ -449,16 +475,18 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
         (if buffer
             (with-current-buffer buffer
               (exwm--log "ConfigureWindow (resize floating X window)")
-              (setq edges
-                    (window-inside-pixel-edges (get-buffer-window buffer t)))
-              (set-frame-size exwm--floating-frame
-                              (+ width
-                                 (- (frame-pixel-width exwm--floating-frame)
-                                    (- (elt edges 2) (elt edges 0))))
-                              (+ height
-                                 (- (frame-pixel-height exwm--floating-frame)
-                                    (- (elt edges 3) (elt edges 1))))
-                              t))
+              (when (and (/= 0 (logand value-mask xcb:ConfigWindow:Width))
+                         (>= (abs width-delta) exwm-manage--width-delta-min))
+                (set-frame-width exwm--floating-frame
+                                 (+ (frame-pixel-width exwm--floating-frame)
+                                    width-delta)
+                                 nil t))
+              (when (and (/= 0 (logand value-mask xcb:ConfigWindow:Height))
+                         (>= (abs height-delta) exwm-manage--height-delta-min))
+                (set-frame-height exwm--floating-frame
+                                  (+ (frame-pixel-height exwm--floating-frame)
+                                     height-delta)
+                                  nil t)))
           (exwm--log "ConfigureWindow (preserve geometry)")
           ;; Configure the unmanaged window.
           (xcb:+request exwm--connection



reply via email to

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