[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/exwm fe653ba 1/2: Only check input focus for globally a
From: |
Chris Feng |
Subject: |
[elpa] externals/exwm fe653ba 1/2: Only check input focus for globally active model |
Date: |
Sun, 14 Aug 2016 04:28:15 +0000 (UTC) |
branch: externals/exwm
commit fe653ba244758362ac83603a28389660834fcb5a
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>
Only check input focus for globally active model
* exwm-input.el (exwm-input--set-focus): Partly revert 810b471.
---
exwm-input.el | 61 ++++++++++++++++++++++++++++-----------------------------
1 file changed, 30 insertions(+), 31 deletions(-)
diff --git a/exwm-input.el b/exwm-input.el
index 668e495..e582812 100644
--- a/exwm-input.el
+++ b/exwm-input.el
@@ -61,38 +61,37 @@
(defun exwm-input--set-focus (id)
"Set input focus to window ID in a proper way."
(when (exwm--id->buffer id)
- (let ((focus (slot-value (xcb:+request-unchecked+reply exwm--connection
+ (with-current-buffer (exwm--id->buffer id)
+ (cond
+ ((and (not exwm--hints-input)
+ (memq xcb:Atom:WM_TAKE_FOCUS exwm--protocols))
+ (when (= (frame-parameter nil 'exwm-id)
+ (slot-value (xcb:+request-unchecked+reply exwm--connection
(make-instance 'xcb:GetInputFocus))
- 'focus)))
- (unless (= focus id)
- (with-current-buffer (exwm--id->buffer id)
- (cond
- ((and (not exwm--hints-input)
- (memq xcb:Atom:WM_TAKE_FOCUS exwm--protocols))
- (when (= focus (frame-parameter nil 'exwm-id))
- (exwm--log "Focus on #x%x with WM_TAKE_FOCUS" id)
- (exwm-input--update-timestamp
- (lambda (timestamp id)
- (let ((event (make-instance 'xcb:icccm:WM_TAKE_FOCUS
- :window id
- :time timestamp)))
- (setq event (xcb:marshal event exwm--connection))
- (xcb:+request exwm--connection
- (make-instance 'xcb:icccm:SendEvent
- :destination id
- :event event))
- (exwm-input--set-active-window id)
- (xcb:flush exwm--connection)))
- id)))
- (t
- (exwm--log "Focus on #x%x with SetInputFocus" id)
- (xcb:+request exwm--connection
- (make-instance 'xcb:SetInputFocus
- :revert-to xcb:InputFocus:Parent
- :focus id
- :time xcb:Time:CurrentTime))
- (exwm-input--set-active-window id)
- (xcb:flush exwm--connection))))))))
+ 'focus))
+ (exwm--log "Focus on #x%x with WM_TAKE_FOCUS" id)
+ (exwm-input--update-timestamp
+ (lambda (timestamp id)
+ (let ((event (make-instance 'xcb:icccm:WM_TAKE_FOCUS
+ :window id
+ :time timestamp)))
+ (setq event (xcb:marshal event exwm--connection))
+ (xcb:+request exwm--connection
+ (make-instance 'xcb:icccm:SendEvent
+ :destination id
+ :event event))
+ (exwm-input--set-active-window id)
+ (xcb:flush exwm--connection)))
+ id)))
+ (t
+ (exwm--log "Focus on #x%x with SetInputFocus" id)
+ (xcb:+request exwm--connection
+ (make-instance 'xcb:SetInputFocus
+ :revert-to xcb:InputFocus:Parent
+ :focus id
+ :time xcb:Time:CurrentTime))
+ (exwm-input--set-active-window id)
+ (xcb:flush exwm--connection))))))
(defun exwm-input--update-timestamp (callback &rest args)
"Fetch the latest timestamp from the server and feed it to CALLBACK.