about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--exwm-input.el37
-rw-r--r--exwm-layout.el4
-rw-r--r--exwm-manage.el4
-rw-r--r--exwm.el26
4 files changed, 34 insertions, 37 deletions
diff --git a/exwm-input.el b/exwm-input.el
index 97dfd53e3640..24aa94abdaee 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -56,7 +56,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
 
 (defun exwm-input--set-focus (id)
   "Set input focus to window ID in a proper way."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (exwm--log "Set focus ID to #x%x" id)
     (setq exwm-input--focus-id id)
     (if (and (not exwm--hints-input)
@@ -105,21 +105,24 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
                                 exwm--floating-frame)
                      (x-focus-frame exwm--floating-frame)))
                  ;; Finally focus the window
-                 (exwm-input--set-focus exwm-input--focus-id))
-        (exwm--with-current-id exwm-input--focus-id
-          (exwm--log "Set focus ID to #x%x" xcb:Window:None)
-          (setq exwm-input--focus-id xcb:Window:None)
-          (let ((frame (selected-frame)))
-            (if exwm--floating-frame
-                (unless (or (eq frame exwm--floating-frame)
-                            (active-minibuffer-window))
-                  ;; Redirect input focus to the workspace frame
-                  (exwm--log "Redirect input focus (%s => %s)"
-                             exwm--floating-frame frame)
-                  (redirect-frame-focus exwm--floating-frame frame))
-              ;; Focus the workspace frame
-              (exwm--log "Focus on workspace %s" frame)
-              (x-focus-frame frame))))))
+                 (when (exwm--id->buffer exwm-input--focus-id)
+                   (exwm-input--set-focus exwm-input--focus-id)))
+        (let ((buffer (exwm--id->buffer exwm-input--focus-id)))
+          (when buffer
+            (with-current-buffer buffer
+              (exwm--log "Set focus ID to #x%x" xcb:Window:None)
+              (setq exwm-input--focus-id xcb:Window:None)
+              (let ((frame (selected-frame)))
+                (if exwm--floating-frame
+                    (unless (or (eq frame exwm--floating-frame)
+                                (active-minibuffer-window))
+                      ;; Redirect input focus to the workspace frame
+                      (exwm--log "Redirect input focus (%s => %s)"
+                                 exwm--floating-frame frame)
+                      (redirect-frame-focus exwm--floating-frame frame))
+                  ;; Focus the workspace frame
+                  (exwm--log "Focus on workspace %s" frame)
+                  (x-focus-frame frame))))))))
     (setq exwm-input--focus-lock nil)))
 
 (defun exwm-input--finish-key-sequence ()
@@ -163,7 +166,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
             (t
              ;; Click to focus
              (unless (and (boundp 'exwm--id) (= event exwm--id))
-               (exwm--with-current-id event
+               (with-current-buffer (exwm--id->buffer event)
                  (select-frame-set-input-focus (or exwm--floating-frame
                                                    exwm--frame))
                  (select-window (get-buffer-window nil 'visible))))
diff --git a/exwm-layout.el b/exwm-layout.el
index 4ae4859a224f..5d056afeb505 100644
--- a/exwm-layout.el
+++ b/exwm-layout.el
@@ -34,7 +34,9 @@
       (make-instance 'xcb:icccm:set-WM_STATE
                      :window id :state xcb:icccm:WM_STATE:NormalState
                      :icon xcb:Window:None))
-  (let* ((edges (or (exwm--with-current-id id exwm--floating-edges)
+  (let* ((buffer (exwm--id->buffer id))
+         (edges (or (and buffer
+                         (with-current-buffer buffer exwm--floating-edges))
                     (window-inside-pixel-edges window)))
          (x (elt edges 0))
          (y (elt edges 1))
diff --git a/exwm-manage.el b/exwm-manage.el
index 6c229481d239..9d9860789874 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -35,7 +35,7 @@ corresponding buffer.")
 
 (defun exwm-manage--update-geometry (id &optional force)
   "Update window geometry."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and exwm--geometry (not force))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:GetGeometry :drawable id))))
@@ -137,7 +137,7 @@ corresponding buffer.")
       (exwm-input-grab-keyboard id)
       (exwm-workspace--update-switch-history)
       (setq exwm-input--focus-lock nil) ;unlocked in advance
-      (exwm--with-current-id id
+      (with-current-buffer (exwm--id->buffer id)
         (run-hooks 'exwm-manage-finish-hook))))
   (setq exwm-input--focus-lock nil))
 
diff --git a/exwm.el b/exwm.el
index 4c4d4aff9cec..95b674243cee 100644
--- a/exwm.el
+++ b/exwm.el
@@ -208,17 +208,9 @@
       (exwm-layout--refresh)
       (exwm-input-grab-keyboard))))
 
-(defmacro exwm--with-current-id (id &rest body)
-  "Evaluate BODY in the context of the buffer corresponding to window ID."
-  (declare (indent 1))
-  `(when ,id
-     (let ((buffer (exwm--id->buffer ,id)))
-       (when buffer
-         (with-current-buffer buffer ,@body)))))
-
 (defun exwm--update-window-type (id &optional force)
   "Update _NET_WM_WINDOW_TYPE."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and exwm-window-type (not force))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:ewmh:get-_NET_WM_WINDOW_TYPE
@@ -231,7 +223,7 @@
 
 (defun exwm--update-class (id &optional force)
   "Update WM_CLASS."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and exwm-instance-name exwm-class-name (not force))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:icccm:get-WM_CLASS :window id))))
@@ -246,7 +238,7 @@
 
 (defun exwm--update-utf8-title (id &optional force)
   "Update _NET_WM_NAME."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (when (or force (not exwm-title))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:ewmh:get-_NET_WM_NAME :window id))))
@@ -258,7 +250,7 @@
 
 (defun exwm--update-ctext-title (id &optional force)
   "Update WM_NAME."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (or exwm--title-is-utf8
                 (and exwm-title (not force)))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
@@ -275,7 +267,7 @@
 
 (defun exwm--update-transient-for (id &optional force)
   "Update WM_TRANSIENT_FOR."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and exwm-transient-for (not force))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:icccm:get-WM_TRANSIENT_FOR
@@ -285,7 +277,7 @@
 
 (defun exwm--update-normal-hints (id &optional force)
   "Update WM_NORMAL_HINTS."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and (not force)
                  (or exwm--normal-hints-x exwm--normal-hints-y
                      exwm--normal-hints-width exwm--normal-hints-height
@@ -332,7 +324,7 @@
 
 (defun exwm--update-hints (id &optional force)
   "Update WM_HINTS."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and (not force) exwm--hints-input exwm--hints-urgency)
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:icccm:get-WM_HINTS :window id))))
@@ -351,7 +343,7 @@
 
 (defun exwm--update-protocols (id &optional force)
   "Update WM_PROTOCOLS."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and exwm--protocols (not force))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:icccm:get-WM_PROTOCOLS
@@ -361,7 +353,7 @@
 
 (defun exwm--update-state (id &optional force)
   "Update WM_STATE."
-  (exwm--with-current-id id
+  (with-current-buffer (exwm--id->buffer id)
     (unless (and exwm-state (not force))
       (let ((reply (xcb:+request-unchecked+reply exwm--connection
                        (make-instance 'xcb:icccm:get-WM_STATE :window id))))