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.
This commit is contained in:
Adrián Medraño Calvo 2023-09-10 00:00:00 +00:00
parent 381637aa1c
commit 8cab6c03fa

View file

@ -345,11 +345,13 @@ Show PROMPT to the user if non-nil."
(let* ((root-width (x-display-pixel-width)) (let* ((root-width (x-display-pixel-width))
(root-height (x-display-pixel-height)) (root-height (x-display-pixel-height))
;; Get workareas prior to struts. ;; Get workareas prior to struts.
(workareas (mapcar (lambda (f) (workareas (mapcar
(or (lambda (frame)
;; Use the 'exwm-geometry' frame parameter if (if-let (rect (frame-parameter frame 'exwm-geometry))
;; possible. ;; Use the 'exwm-geometry' frame parameter if it
(frame-parameter f 'exwm-geometry) ;; exists. Make sure to clone it, will be modified
;; below!
(clone rect)
;; Fall back to use the screen size. ;; Fall back to use the screen size.
(make-instance 'xcb:RECTANGLE (make-instance 'xcb:RECTANGLE
:x 0 :x 0
@ -369,7 +371,7 @@ Show PROMPT to the user if non-nil."
(with-slots (x y width height) w (with-slots (x y width height) w
(pcase edge (pcase edge
;; Left and top are always processed first. ;; Left and top are always processed first.
(`left ('left
(setq delta (- size x)) (setq delta (- size x))
(when (and (< 0 delta) (when (and (< 0 delta)
(< delta width) (< delta width)
@ -378,7 +380,7 @@ Show PROMPT to the user if non-nil."
(min end (+ y height))))) (min end (+ y height)))))
(cl-decf width delta) (cl-decf width delta)
(setf x size))) (setf x size)))
(`right ('right
(setq delta (- size (- root-width x width))) (setq delta (- size (- root-width x width)))
(when (and (< 0 delta) (when (and (< 0 delta)
(< delta width) (< delta width)
@ -386,7 +388,7 @@ Show PROMPT to the user if non-nil."
(< (max beg y) (< (max beg y)
(min end (+ y height))))) (min end (+ y height)))))
(cl-decf width delta))) (cl-decf width delta)))
(`top ('top
(setq delta (- size y)) (setq delta (- size y))
(when (and (< 0 delta) (when (and (< 0 delta)
(< delta height) (< delta height)
@ -395,7 +397,7 @@ Show PROMPT to the user if non-nil."
(min end (+ x width))))) (min end (+ x width)))))
(cl-decf height delta) (cl-decf height delta)
(setf y size))) (setf y size)))
(`bottom ('bottom
(setq delta (- size (- root-height y height))) (setq delta (- size (- root-height y height)))
(when (and (< 0 delta) (when (and (< 0 delta)
(< delta height) (< delta height)