about summary refs log tree commit diff
path: root/exwm-manage.el
diff options
context:
space:
mode:
authorAdrián Medraño Calvo <adrian@medranocalvo.com>2018-09-04T12·00+0000
committerAdrián Medraño Calvo <adrian@medranocalvo.com>2018-09-04T12·00+0000
commit6978c1f45c4d72edab2440faf93fb917afe356ec (patch)
treea5c12b7fdcebcda457b2bc00723b457071621599 /exwm-manage.el
parentdd57c5eebb213c29c3b250634e316abf4917a19b (diff)
Restack X-Windows after being mapped to ensure EnterNotify events fire
* exwm-manage.el (exwm-manage--on-MapNotify, exwm-manage--init):
Restack X windows after being mapped in order to ensure they receive
an EnterNotify event (does not happen under XQuartz).
Diffstat (limited to 'exwm-manage.el')
-rw-r--r--exwm-manage.el17
1 files changed, 17 insertions, 0 deletions
diff --git a/exwm-manage.el b/exwm-manage.el
index 81a486c097..7b28d68768 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -665,6 +665,22 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
       (exwm--log "id=#x%x" window)
       (exwm-manage--unmanage-window window t))))
 
+(defun exwm-manage--on-MapNotify (data _synthetic)
+  "Handle MapNotify event."
+  (let ((obj (make-instance 'xcb:MapNotify)))
+    (xcb:unmarshal obj data)
+    (with-slots (window) obj
+      (when (assoc window exwm--id-buffer-alist)
+        (exwm--log "id=#x%x" window)
+        ;; With this we ensure that a "window hierarchy change" happens after
+        ;; mapping the window, as some servers (XQuartz) do not generate it.
+        (xcb:+request exwm--connection
+            (make-instance 'xcb:ConfigureWindow
+                           :window window
+                           :value-mask xcb:ConfigWindow:StackMode
+                           :stack-mode xcb:StackMode:Above))
+        (xcb:flush exwm--connection)))))
+
 (defun exwm-manage--on-DestroyNotify (data synthetic)
   "Handle DestroyNotify event."
   (unless synthetic
@@ -692,6 +708,7 @@ border-width: %d; sibling: #x%x; stack-mode: %d"
               #'exwm-manage--on-ConfigureRequest)
   (xcb:+event exwm--connection 'xcb:MapRequest #'exwm-manage--on-MapRequest)
   (xcb:+event exwm--connection 'xcb:UnmapNotify #'exwm-manage--on-UnmapNotify)
+  (xcb:+event exwm--connection 'xcb:MapNotify #'exwm-manage--on-MapNotify)
   (xcb:+event exwm--connection 'xcb:DestroyNotify
               #'exwm-manage--on-DestroyNotify))