Only check input focus for globally active model
* exwm-input.el (exwm-input--set-focus): Partly revert 810b471.
			
			
This commit is contained in:
		
							parent
							
								
									108b3949c2
								
							
						
					
					
						commit
						fe653ba244
					
				
					 1 changed files with 30 additions and 31 deletions
				
			
		|  | @ -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. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue