Replace `frame-geometry'
* exwm-workspace.el (exwm-workspace--frame-y-offset) exwm-workspace--window-y-offset, exwm-workspace--update-offsets): New variables & function for the calculation of Emacs frame offsets, as `frame-geometry' is not available in Emacs 24. * exwm-floating.el (exwm-floating--set-floating) (exwm-floating--do-moveresize): * exwm-layout.el (exwm-layout--show): * exwm-systemtray.el (exwm-systemtray--on-workspace-switch) (exwm-systemtray--on-randr-refresh, exwm-systemtray--init): Use them. * exwm-systemtray.el (exwm-systemtray--refresh-all): Renamed from `exwm-systemtray--on-randr-refresh'. (exwm-systemtray--init, exwm-systemtray--exit): Use it. * exwm-floating.el (exwm-floating--stop-moveresize): Send a ConfigureNotify event to floating frame to update its position (seems required by Emacs 24).
This commit is contained in:
parent
eb49e57f76
commit
f167bc979c
6 changed files with 122 additions and 66 deletions
|
|
@ -134,6 +134,11 @@ Please manually run the hook `exwm-workspace-list-change-hook' afterwards.")
|
|||
|
||||
(defvar exwm-workspace--workareas nil "Workareas (struts excluded).")
|
||||
|
||||
(defvar exwm-workspace--frame-y-offset 0
|
||||
"Offset between Emacs inner & outer frame in Y.")
|
||||
(defvar exwm-workspace--window-y-offset 0
|
||||
"Offset between Emacs first window & outer frame in Y.")
|
||||
|
||||
(defvar exwm-input--during-command)
|
||||
(defvar exwm-input--event-hook)
|
||||
(defvar exwm-layout-show-all-buffers)
|
||||
|
|
@ -397,6 +402,28 @@ NIL if FRAME is not a workspace"
|
|||
(exwm--log "%s" exwm-workspace--workareas)
|
||||
(run-hooks 'exwm-workspace--update-workareas-hook))
|
||||
|
||||
(defun exwm-workspace--update-offsets ()
|
||||
"Update `exwm-workspace--frame-y-offset'/`exwm-workspace--window-y-offset'."
|
||||
(exwm--log)
|
||||
(if (not (and exwm-workspace--list
|
||||
(or menu-bar-mode tool-bar-mode)))
|
||||
(setq exwm-workspace--frame-y-offset 0
|
||||
exwm-workspace--window-y-offset 0)
|
||||
(redisplay t)
|
||||
(let* ((frame (elt exwm-workspace--list 0))
|
||||
(edges (window-inside-absolute-pixel-edges (frame-first-window
|
||||
frame))))
|
||||
(with-slots (y)
|
||||
(xcb:+request-unchecked+reply exwm--connection
|
||||
(make-instance 'xcb:GetGeometry
|
||||
:drawable (frame-parameter frame 'exwm-outer-id)))
|
||||
(with-slots ((y* y))
|
||||
(xcb:+request-unchecked+reply exwm--connection
|
||||
(make-instance 'xcb:GetGeometry
|
||||
:drawable (frame-parameter frame 'exwm-id)))
|
||||
(setq exwm-workspace--frame-y-offset (- y* y)
|
||||
exwm-workspace--window-y-offset (- (elt edges 1) y)))))))
|
||||
|
||||
(defun exwm-workspace--set-active (frame active)
|
||||
"Make frame FRAME active on its monitor."
|
||||
(exwm--log "active=%s; frame=%s" frame active)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue