From 8cab6c03fa2cc59d5863f5cc67197d480452c22a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Medra=C3=B1o=20Calvo?= Date: Sun, 10 Sep 2023 00:00:00 +0000 Subject: [PATCH] Fix workspace height unsharing workarea value * exwm-workspace.el (exwm-workspace--update-workareas): Clone the value of the `exwm-geometry' frame parameter before modifying it for calculating workareas. (exwm-workspace--update-workareas): Simplify `pcase' patterns. --- exwm-workspace.el | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/exwm-workspace.el b/exwm-workspace.el index c78089c..61e2f69 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -345,18 +345,20 @@ Show PROMPT to the user if non-nil." (let* ((root-width (x-display-pixel-width)) (root-height (x-display-pixel-height)) ;; Get workareas prior to struts. - (workareas (mapcar (lambda (f) - (or - ;; Use the 'exwm-geometry' frame parameter if - ;; possible. - (frame-parameter f 'exwm-geometry) - ;; Fall back to use the screen size. - (make-instance 'xcb:RECTANGLE - :x 0 - :y 0 - :width root-width - :height root-height))) - exwm-workspace--list))) + (workareas (mapcar + (lambda (frame) + (if-let (rect (frame-parameter frame 'exwm-geometry)) + ;; Use the 'exwm-geometry' frame parameter if it + ;; exists. Make sure to clone it, will be modified + ;; below! + (clone rect) + ;; Fall back to use the screen size. + (make-instance 'xcb:RECTANGLE + :x 0 + :y 0 + :width root-width + :height root-height))) + exwm-workspace--list))) ;; Exclude areas occupied by struts. (dolist (struts exwm-workspace--struts) (let* ((edge (aref struts 0)) @@ -369,7 +371,7 @@ Show PROMPT to the user if non-nil." (with-slots (x y width height) w (pcase edge ;; Left and top are always processed first. - (`left + ('left (setq delta (- size x)) (when (and (< 0 delta) (< delta width) @@ -378,7 +380,7 @@ Show PROMPT to the user if non-nil." (min end (+ y height))))) (cl-decf width delta) (setf x size))) - (`right + ('right (setq delta (- size (- root-width x width))) (when (and (< 0 delta) (< delta width) @@ -386,7 +388,7 @@ Show PROMPT to the user if non-nil." (< (max beg y) (min end (+ y height))))) (cl-decf width delta))) - (`top + ('top (setq delta (- size y)) (when (and (< 0 delta) (< delta height) @@ -395,7 +397,7 @@ Show PROMPT to the user if non-nil." (min end (+ x width))))) (cl-decf height delta) (setf y size))) - (`bottom + ('bottom (setq delta (- size (- root-height y height))) (when (and (< 0 delta) (< delta height)