From 2597f74c7fb9ad290a45c89d0025bebcf739a976 Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Fri, 23 Sep 2016 18:36:09 +0800 Subject: [PATCH] Remember the geometries of floating X windows * exwm-floating.el (exwm-floating--stop-moveresize): * exwm-layout.el (exwm-layout-enlarge-window): Update the geometry after resizing. --- exwm-floating.el | 31 ++++++++++++++++++++++--------- exwm-layout.el | 2 ++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/exwm-floating.el b/exwm-floating.el index f2cc09b..5b8cc89 100644 --- a/exwm-floating.el +++ b/exwm-floating.el @@ -550,22 +550,35 @@ context of the corresponding buffer.") ;; Unmanaged. (eq major-mode 'exwm-mode)) (let ((edges (window-inside-absolute-pixel-edges (frame-selected-window))) - (id (buffer-local-value 'exwm--id - (window-buffer (frame-selected-window))))) + x y width height id) + (setq x (pop edges) + y (pop edges) + width (- (pop edges) x) + height (- (pop edges) y)) + (with-current-buffer (window-buffer (frame-selected-window)) + (setq id exwm--id) + (with-slots ((x* x) + (y* y) + (width* width) + (height* height)) + exwm--geometry + (setf x* x + y* y + width* width + height* height))) (xcb:+request exwm--connection (make-instance 'xcb:SendEvent - :propagate 0 :destination id + :propagate 0 + :destination id :event-mask xcb:EventMask:StructureNotify :event (xcb:marshal (make-instance 'xcb:ConfigureNotify :event id :window id :above-sibling xcb:Window:None - :x (elt edges 0) - :y (elt edges 1) - :width (- (elt edges 2) - (elt edges 0)) - :height (- (elt edges 3) - (elt edges 1)) + :x x + :y y + :width width + :height height :border-width 0 :override-redirect 0) exwm--connection))))) diff --git a/exwm-layout.el b/exwm-layout.el index 355b834..5a31c94 100644 --- a/exwm-layout.el +++ b/exwm-layout.el @@ -460,6 +460,7 @@ windows." (setq width (max (+ exwm--normal-hints-min-width margin) (+ width delta)))))) (when width + (setf (slot-value exwm--geometry 'width) width) (xcb:+request exwm--connection (make-instance 'xcb:ConfigureWindow :window (frame-parameter exwm--floating-frame @@ -492,6 +493,7 @@ windows." (setq height (max (+ exwm--normal-hints-min-height margin) (+ height delta)))))) (when height + (setf (slot-value exwm--geometry 'height) height) (xcb:+request exwm--connection (make-instance 'xcb:ConfigureWindow :window (frame-parameter exwm--floating-frame