about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--exwm-systemtray.el18
-rw-r--r--exwm-workspace.el5
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.")