[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/exwm 14628a9 16/64: Fix race conditions when managing a
From: |
Chris Feng |
Subject: |
[elpa] externals/exwm 14628a9 16/64: Fix race conditions when managing a window |
Date: |
Thu, 17 Sep 2015 23:17:55 +0000 |
branch: externals/exwm
commit 14628a940c12051f2538556b97a2ef4531c75201
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>
Fix race conditions when managing a window
Since it takes some time for EXWM to create a buffer for a window (to do
some
checking for example), the window may send several MapRequest events before
it's mapped. This commit should fix such issue.
---
exwm-manage.el | 14 +++++++++++++-
1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/exwm-manage.el b/exwm-manage.el
index 7c82696..8594066 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -42,19 +42,28 @@ corresponding buffer.")
(when reply ;nil when destroyed
(setq exwm--geometry reply))))))
+(defvar exwm-manage--manage-window-queue nil
+ "List of window IDs to prevent race conditions.")
+
(defun exwm-manage--manage-window (id)
"Manage window ID."
+ (exwm--log "Try to manage #x%x" id)
(setq exwm-input--focus-lock t)
(catch 'return
;; Ensure it's not managed
- (when (assoc id exwm--id-buffer-alist)
+ (when (or (assoc id exwm--id-buffer-alist)
+ (memq id exwm-manage--manage-window-queue))
+ (exwm--log "#x%x is already managed" id)
(throw 'return 'managed))
+ (push id exwm-manage--manage-window-queue) ;prevent reentering
;; Ensure it's alive
(when (xcb:+request-checked+request-check exwm--connection
(make-instance 'xcb:ChangeWindowAttributes
:window id :value-mask xcb:CW:EventMask
:event-mask exwm--client-event-mask))
+ (delq id exwm-manage--manage-window-queue) ;cleanup
(throw 'return 'dead))
+ (delq id exwm-manage--manage-window-queue) ;cleanup (late enough)
(with-current-buffer (generate-new-buffer "*EXWM*")
(push `(,id . ,(current-buffer)) exwm--id-buffer-alist)
(exwm-mode)
@@ -73,6 +82,7 @@ corresponding buffer.")
(and exwm-instance-name
(string-prefix-p "sun-awt-X11-" exwm-instance-name)
(not (string-suffix-p "XFramePeer" exwm-instance-name))))
+ (exwm--log "No need to manage #x%x" id)
;; Remove all events
(xcb:+request-checked+request-check exwm--connection
(make-instance 'xcb:ChangeWindowAttributes
@@ -104,6 +114,7 @@ corresponding buffer.")
(kill-buffer (current-buffer))
(throw 'return 'ignored))
;; Manage the window
+ (exwm--log "Manage #x%x" id)
(xcb:+request exwm--connection ;remove border
(make-instance 'xcb:ConfigureWindow
:window id :value-mask xcb:ConfigWindow:BorderWidth
@@ -140,6 +151,7 @@ corresponding buffer.")
(defun exwm-manage--unmanage-window (id &optional withdraw-only)
"Unmanage window ID."
(let ((buffer (exwm--id->buffer id)))
+ (exwm--log "Unmanage #x%x (buffer: %s)" id buffer)
(setq exwm--id-buffer-alist (assq-delete-all id exwm--id-buffer-alist))
(when (buffer-live-p buffer)
(with-current-buffer buffer
- [elpa] externals/exwm 36e8361 05/64: Various fixes, (continued)
- [elpa] externals/exwm 36e8361 05/64: Various fixes, Chris Feng, 2015/09/17
- [elpa] externals/exwm f4416a1 06/64: Fix potential naming conflicts, Chris Feng, 2015/09/17
- [elpa] externals/exwm ea7c6c7 08/64: Fix typos, Chris Feng, 2015/09/17
- [elpa] externals/exwm 7892ed3 02/64: Improve move/resize, Chris Feng, 2015/09/17
- [elpa] externals/exwm ee3ce55 09/64: Merge pull request #2 from KAMiKAZOW/patch-1, Chris Feng, 2015/09/17
- [elpa] externals/exwm caf2fee 11/64: Drop intro to EXIM, Chris Feng, 2015/09/17
- [elpa] externals/exwm 3fc0cb2 10/64: Various fixes, Chris Feng, 2015/09/17
- [elpa] externals/exwm 3fb90b9 12/64: Fix fullscreen issues, Chris Feng, 2015/09/17
- [elpa] externals/exwm 86764d2 07/64: Add basic RandR support, Chris Feng, 2015/09/17
- [elpa] externals/exwm 1e36a22 13/64: Check buffer mode in exwm-reset, Chris Feng, 2015/09/17
- [elpa] externals/exwm 14628a9 16/64: Fix race conditions when managing a window,
Chris Feng <=
- [elpa] externals/exwm 5298489 18/64: Fix some input focus issues, Chris Feng, 2015/09/17
- [elpa] externals/exwm 3b9d0dd 17/64: Fixes for manage/unmanage window, Chris Feng, 2015/09/17
- [elpa] externals/exwm 42f4ec6 20/64: Show moved window by default, Chris Feng, 2015/09/17
- [elpa] externals/exwm 36bb579 21/64: Refresh when minibuffer grows (fix #10), Chris Feng, 2015/09/17
- [elpa] externals/exwm 2ad1a89 14/64: Various input fixes, Chris Feng, 2015/09/17
- [elpa] externals/exwm 84f0f03 15/64: Fix input focus lost after closing window, Chris Feng, 2015/09/17
- [elpa] externals/exwm 63402b0 19/64: Correct layout refresh problems, Chris Feng, 2015/09/17
- [elpa] externals/exwm edc70eb 22/64: Remove redundant code caused by the concurrency of events, Chris Feng, 2015/09/17
- [elpa] externals/exwm 2d4104a 23/64: Fix emacsclient bugs, Chris Feng, 2015/09/17
- [elpa] externals/exwm 24b964b 25/64: Ignore repeated `MappingNotify` events, Chris Feng, 2015/09/17