emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/xelb 39d4efb 07/10: Set XKB per-client flags


From: Chris Feng
Subject: [elpa] externals/xelb 39d4efb 07/10: Set XKB per-client flags
Date: Fri, 29 Jul 2016 09:15:57 +0000 (UTC)

branch: externals/xelb
commit 39d4efb437dc2f68eb31fc8164648363cc113b8e
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Set XKB per-client flags
    
    * xcb-keysyms.el (xcb:keysyms:-set-per-client-flags): New function for
    setting XKB per-client flags (required for GrabKey and SendEvent).
    (xcb:keysyms:init, xcb:keysyms:-on-NewKeyboardNotify): Use it.
---
 xcb-keysyms.el |   23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/xcb-keysyms.el b/xcb-keysyms.el
index 290ecc2..e965683 100644
--- a/xcb-keysyms.el
+++ b/xcb-keysyms.el
@@ -80,6 +80,8 @@ This method must be called before using any other method in 
this module."
     ;; Save the major opcode of XKB.
     (setq xcb:keysyms:-opcode
           (slot-value (xcb:get-extension-data obj 'xcb:xkb) 'major-opcode))
+    ;; Set per-client flags.
+    (xcb:keysyms:-set-per-client-flags obj xcb:xkb:ID:UseCoreKbd)
     ;; Update data.
     (xcb:keysyms:-update-keytypes obj xcb:xkb:ID:UseCoreKbd)
     (xcb:keysyms:-update-keycodes obj xcb:xkb:ID:UseCoreKbd)
@@ -111,6 +113,25 @@ This method must be called before using any other method 
in this module."
                          :newKeyboardDetails new-keyboard)))
     (xcb:flush obj))))
 
+(cl-defmethod xcb:keysyms:-set-per-client-flags ((obj xcb:connection) device)
+  "Set per-client flags."
+  (let ((per-client-flags (logior
+                           ;; Instead of compatibility state.
+                           xcb:xkb:PerClientFlag:GrabsUseXKBState
+                           ;; Instead of grab state.
+                           xcb:xkb:PerClientFlag:LookupStateWhenGrabbed
+                           ;; Use XKB state in 'SendEvent'.
+                           xcb:xkb:PerClientFlag:SendEventUsesXKBState)))
+    ;; The reply is not used.
+    (xcb:+request-unchecked+reply obj
+        (make-instance 'xcb:xkb:PerClientFlags
+                       :deviceSpec device
+                       :change per-client-flags
+                       :value per-client-flags
+                       :ctrlsToChange 0
+                       :autoCtrls 0
+                       :autoCtrlsValues 0))))
+
 (cl-defmethod xcb:keysyms:-on-NewKeyboardNotify ((obj xcb:connection) data)
   "Handle 'NewKeyboardNotify' event."
   (let ((obj1 (make-instance 'xcb:xkb:NewKeyboardNotify)))
@@ -131,6 +152,8 @@ This method must be called before using any other method in 
this module."
             ;; (xcb:keysyms:-update-keytypes obj deviceID)
             (xcb:keysyms:-update-keycodes obj deviceID)
             (xcb:keysyms:-update-modkeys obj deviceID))
+        ;; Device changed; update the per-client flags and local data.
+        (xcb:keysyms:-set-per-client-flags obj deviceID)
         (xcb:keysyms:-update-keytypes obj deviceID)
         (xcb:keysyms:-update-keycodes obj deviceID)
         (xcb:keysyms:-update-modkeys obj deviceID)))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]