diff options
author | Chris Feng <chris.w.feng@gmail.com> | 2017-02-24T15·05+0800 |
---|---|---|
committer | Chris Feng <chris.w.feng@gmail.com> | 2017-02-24T15·13+0800 |
commit | f299ca5ed7056842aa59e9978061bca650316a71 (patch) | |
tree | 3aadb06fdc9fddd89c8697ae0525622df3720377 | |
parent | 0ae1e7327ea900ad1b35ce145db63cb0837251de (diff) |
Fix systemtray position
* exwm-workspace.el (exwm-workspace--update-workareas-hook): New hook run when workareas get updated. (exwm-workspace--update-workareas): Run the hook. * exwm-systemtray.el (exwm-systemtray--on-workspace-switch) (exwm-systemtray--on-randr-refresh): Take struts into account when calculating the position for systemtray. (exwm-systemtray--on-struts-update): Alias of `exwm-systemtray--on-randr-refresh'. (exwm-systemtray--init, exwm-systemtray--exit): Manipulate `exwm-workspace--update-workareas-hook'.
-rw-r--r-- | exwm-systemtray.el | 18 | ||||
-rw-r--r-- | exwm-workspace.el | 5 |
2 files changed, 20 insertions, 3 deletions
diff --git a/exwm-systemtray.el b/exwm-systemtray.el index 60a2e3b3de15..82a2ccdbf24d 100644 --- a/exwm-systemtray.el +++ b/exwm-systemtray.el @@ -304,6 +304,9 @@ You shall use the default value if using auto-hide minibuffer.") :event (xcb:marshal obj exwm-systemtray--connection)))) (xcb:flush exwm-systemtray--connection)) +(defvar exwm-workspace--workareas) +(defvar exwm-workspace-current-index) + (defun exwm-systemtray--on-workspace-switch () "Reparent/Refresh the system tray in `exwm-workspace-switch-hook'." (unless (exwm-workspace--minibuffer-own-frame-p) @@ -314,7 +317,9 @@ You shall use the default value if using auto-hide minibuffer.") (frame-parameter exwm-workspace--current 'window-id)) :x 0 - :y (- (exwm-workspace--current-height) + :y (- (elt (elt exwm-workspace--workareas + exwm-workspace-current-index) + 3) exwm-systemtray-height)))) (exwm-systemtray--refresh)) @@ -325,10 +330,15 @@ You shall use the default value if using auto-hide minibuffer.") (make-instance 'xcb:ConfigureWindow :window exwm-systemtray--embedder :value-mask xcb:ConfigWindow:Y - :y (- (exwm-workspace--current-height) + :y (- (elt (elt exwm-workspace--workareas + exwm-workspace-current-index) + 3) exwm-systemtray-height)))) (exwm-systemtray--refresh)) +(defalias 'exwm-systemtray--on-struts-update + #'exwm-systemtray--on-randr-refresh) + (defvar xcb:Atom:_NET_SYSTEM_TRAY_S0) (defvar exwm-workspace--minibuffer) @@ -459,6 +469,8 @@ You shall use the default value if using auto-hide minibuffer.") #'exwm-systemtray--on-KeyPress)) ;; Add hook to move/reparent the embedder. (add-hook 'exwm-workspace-switch-hook #'exwm-systemtray--on-workspace-switch) + (add-hook 'exwm-workspace--update-workareas-hook + #'exwm-systemtray--on-struts-update) (when (boundp 'exwm-randr-refresh-hook) (add-hook 'exwm-randr-refresh-hook #'exwm-systemtray--on-randr-refresh))) @@ -472,6 +484,8 @@ You shall use the default value if using auto-hide minibuffer.") exwm-systemtray--embedder nil) (remove-hook 'exwm-workspace-switch-hook #'exwm-systemtray--on-workspace-switch) + (remove-hook 'exwm-workspace--update-workareas-hook + #'exwm-systemtray--on-struts-update) (when (boundp 'exwm-randr-refresh-hook) (remove-hook 'exwm-randr-refresh-hook #'exwm-systemtray--on-randr-refresh)))) diff --git a/exwm-workspace.el b/exwm-workspace.el index 17aa2c08cb16..66865989dd22 100644 --- a/exwm-workspace.el +++ b/exwm-workspace.el @@ -247,6 +247,8 @@ Value nil means to use the default position which is fixed at bottom, while (append exwm-workspace--struts (list struts*)))))))))) (defvar exwm-workspace--workareas nil "Workareas (struts excluded).") +(defvar exwm-workspace--update-workareas-hook nil + "Normal hook run when workareas get updated.") (defun exwm-workspace--update-workareas () "Update `exwm-workspace--workareas'." @@ -309,7 +311,8 @@ Value nil means to use the default position which is fixed at bottom, while (cl-incf (aref w 3) delta)))))) ;; Save the result. (setq exwm-workspace--workareas workareas) - (xcb:flush exwm--connection))) + (xcb:flush exwm--connection)) + (run-hooks 'exwm-workspace--update-workareas-hook)) (defvar exwm-workspace--fullscreen-frame-count 0 "Count the fullscreen workspace frames.") |