mirror of
https://github.com/emacs-exwm/exwm.git
synced 2024-11-30 16:07:59 +01:00
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.
This commit is contained in:
parent
0833e8dc4a
commit
2597f74c7f
2 changed files with 24 additions and 9 deletions
|
@ -550,22 +550,35 @@ context of the corresponding buffer.")
|
||||||
;; Unmanaged.
|
;; Unmanaged.
|
||||||
(eq major-mode 'exwm-mode))
|
(eq major-mode 'exwm-mode))
|
||||||
(let ((edges (window-inside-absolute-pixel-edges (frame-selected-window)))
|
(let ((edges (window-inside-absolute-pixel-edges (frame-selected-window)))
|
||||||
(id (buffer-local-value 'exwm--id
|
x y width height id)
|
||||||
(window-buffer (frame-selected-window)))))
|
(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
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:SendEvent
|
(make-instance 'xcb:SendEvent
|
||||||
:propagate 0 :destination id
|
:propagate 0
|
||||||
|
:destination id
|
||||||
:event-mask xcb:EventMask:StructureNotify
|
:event-mask xcb:EventMask:StructureNotify
|
||||||
:event (xcb:marshal
|
:event (xcb:marshal
|
||||||
(make-instance 'xcb:ConfigureNotify
|
(make-instance 'xcb:ConfigureNotify
|
||||||
:event id :window id
|
:event id :window id
|
||||||
:above-sibling xcb:Window:None
|
:above-sibling xcb:Window:None
|
||||||
:x (elt edges 0)
|
:x x
|
||||||
:y (elt edges 1)
|
:y y
|
||||||
:width (- (elt edges 2)
|
:width width
|
||||||
(elt edges 0))
|
:height height
|
||||||
:height (- (elt edges 3)
|
|
||||||
(elt edges 1))
|
|
||||||
:border-width 0
|
:border-width 0
|
||||||
:override-redirect 0)
|
:override-redirect 0)
|
||||||
exwm--connection)))))
|
exwm--connection)))))
|
||||||
|
|
|
@ -460,6 +460,7 @@ windows."
|
||||||
(setq width (max (+ exwm--normal-hints-min-width margin)
|
(setq width (max (+ exwm--normal-hints-min-width margin)
|
||||||
(+ width delta))))))
|
(+ width delta))))))
|
||||||
(when width
|
(when width
|
||||||
|
(setf (slot-value exwm--geometry 'width) width)
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ConfigureWindow
|
(make-instance 'xcb:ConfigureWindow
|
||||||
:window (frame-parameter exwm--floating-frame
|
:window (frame-parameter exwm--floating-frame
|
||||||
|
@ -492,6 +493,7 @@ windows."
|
||||||
(setq height (max (+ exwm--normal-hints-min-height margin)
|
(setq height (max (+ exwm--normal-hints-min-height margin)
|
||||||
(+ height delta))))))
|
(+ height delta))))))
|
||||||
(when height
|
(when height
|
||||||
|
(setf (slot-value exwm--geometry 'height) height)
|
||||||
(xcb:+request exwm--connection
|
(xcb:+request exwm--connection
|
||||||
(make-instance 'xcb:ConfigureWindow
|
(make-instance 'xcb:ConfigureWindow
|
||||||
:window (frame-parameter exwm--floating-frame
|
:window (frame-parameter exwm--floating-frame
|
||||||
|
|
Loading…
Reference in a new issue