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

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

[elpa] externals/xelb 5380883 1/2: Make connection-specific variables pr


From: Chris Feng
Subject: [elpa] externals/xelb 5380883 1/2: Make connection-specific variables private
Date: Sun, 26 Nov 2017 07:29:13 -0500 (EST)

branch: externals/xelb
commit 53808832c11fd94e3b358d1b8ef01b87aa8b2f8b
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Make connection-specific variables private
    
    * xcb-keysyms.el (xcb:keysyms:-opcode, xcb:keysyms:-device)
    (xcb:keysyms:-keytypes, xcb:keysyms:-keycodes)
    (xcb:keysyms:-min-keycode, xcb:keysyms:-max-keycode): Deleted.
    (xcb:keysyms:init, xcb:keysyms:-on-NewKeyboardNotify)
    (xcb:keysyms:-on-MapNotify, xcb:keysyms:-on-MapNotify)
    (xcb:keysyms:-update-keytypes, xcb:keysyms:-update-keycodes)
    (xcb:keysyms:keycode->keysym, xcb:keysyms:keysym->keycode): Use the
    connection object's 'extra-plist' slot for storing and retrieving
    connection-specific variables.
---
 xcb-keysyms.el | 126 ++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 71 insertions(+), 55 deletions(-)

diff --git a/xcb-keysyms.el b/xcb-keysyms.el
index f14f886..829d777 100644
--- a/xcb-keysyms.el
+++ b/xcb-keysyms.el
@@ -34,6 +34,7 @@
 
 ;; References:
 ;; + X protocol (http://www.x.org/releases/X11R7.7/doc/xproto/x11protocol.txt)
+;; + XKB protocol (https://www.x.org/releases/X11R7.7/doc/kbproto/xkbproto.txt)
 ;; + xcb/util-keysyms (git://anongit.freedesktop.org/xcb/util-keysyms)
 
 ;;; Code:
@@ -53,13 +54,6 @@
 (defvar xcb:keysyms:lock-mask xcb:ModMask:Lock "LOCK key mask.")
 (defvar xcb:keysyms:shift-lock-mask 0 "SHIFT-LOCK key mask.")
 (defvar xcb:keysyms:num-lock-mask 0 "NUM-LOCK key mask.")
-;; Internal state / local data.
-(defvar xcb:keysyms:-opcode nil)
-(defvar xcb:keysyms:-device nil)
-(defvar xcb:keysyms:-keytypes nil)
-(defvar xcb:keysyms:-keycodes nil)
-(defvar xcb:keysyms:-min-keycode nil)
-(defvar xcb:keysyms:-max-keycode nil)
 
 (cl-defmethod xcb:keysyms:init ((obj xcb:connection))
   "Initialize keysyms module.
@@ -67,7 +61,7 @@
 This method must be called before using any other method in this module."
   (cond
    ;; Avoid duplicated initializations.
-   (xcb:keysyms:-opcode)
+   ((plist-get (plist-get (slot-value obj 'extra-plist) 'keysyms) 'opcode))
    ((= 0 (slot-value (xcb:get-extension-data obj 'xcb:xkb)
                      'present))
     (error "[XCB] XKB extension is not supported by the server"))
@@ -79,8 +73,12 @@ This method must be called before using any other method in 
this module."
     (error "[XCB] XKB extension version 1.0 is not supported by the server"))
    (t
     ;; Save the major opcode of XKB.
-    (setq xcb:keysyms:-opcode
-          (slot-value (xcb:get-extension-data obj 'xcb:xkb) 'major-opcode))
+    (let ((plist (plist-get (slot-value obj 'extra-plist) 'keysyms)))
+      (setq plist (plist-put plist 'opcode
+                             (slot-value (xcb:get-extension-data obj 'xcb:xkb)
+                                         'major-opcode)))
+      (setf (slot-value obj 'extra-plist)
+            (plist-put (slot-value obj 'extra-plist) 'keysyms plist)))
     ;; Set per-client flags.
     (xcb:keysyms:-set-per-client-flags obj xcb:xkb:ID:UseCoreKbd)
     ;; Update data.
@@ -135,19 +133,22 @@ This method must be called before using any other method 
in this module."
 
 (cl-defmethod xcb:keysyms:-on-NewKeyboardNotify ((obj xcb:connection) data)
   "Handle 'NewKeyboardNotify' event."
-  (let ((obj1 (make-instance 'xcb:xkb:NewKeyboardNotify)))
+  (let* ((plist (plist-get (slot-value obj 'extra-plist) 'keysyms))
+         (device (plist-get plist 'device))
+         (opcode (plist-get plist 'opcode))
+         (obj1 (make-instance 'xcb:xkb:NewKeyboardNotify)))
     (xcb:unmarshal obj1 data)
     (with-slots (deviceID requestMajor requestMinor changed) obj1
       (if (= 0 (logand changed xcb:xkb:NKNDetail:DeviceID))
           ;; Device is not changed; ensure it's a keycode change from
           ;; this device.
           (when (and (/= 0 (logand changed xcb:xkb:NKNDetail:Keycodes))
-                     (= deviceID xcb:keysyms:-device)
+                     (= deviceID device)
                      ;; Also, according to the specification this can
                      ;; only happen when a GetKbdByName request issued.
                      ;; The two checks below avoid false positive caused
                      ;; by requests such as SetMap (e.g. XCape).
-                     (= requestMajor xcb:keysyms:-opcode)
+                     (= requestMajor opcode)
                      (= requestMinor
                         (eieio-oref-default 'xcb:xkb:GetKbdByName '~opcode)))
             ;; (xcb:keysyms:-update-keytypes obj deviceID)
@@ -161,11 +162,13 @@ This method must be called before using any other method 
in this module."
 
 (cl-defmethod xcb:keysyms:-on-MapNotify ((obj xcb:connection) data)
   "Handle 'MapNotify' event."
-  (let ((obj1 (make-instance 'xcb:xkb:MapNotify)))
+  (let* ((plist (plist-get (slot-value obj 'extra-plist) 'keysyms))
+         (device (plist-get plist 'device))
+         (obj1 (make-instance 'xcb:xkb:MapNotify)))
     (xcb:unmarshal obj1 data)
     (with-slots (deviceID changed firstType nTypes firstKeySym nKeySyms) obj1
       ;; Ensure this event is for the current device.
-      (when (= deviceID xcb:keysyms:-device)
+      (when (= deviceID device)
         (when (/= 0 (logand changed xcb:xkb:MapPart:KeyTypes))
           (xcb:keysyms:-update-keytypes obj deviceID firstType nTypes))
         (when (/= 0 (logand changed xcb:xkb:MapPart:KeySyms))
@@ -178,7 +181,8 @@ This method must be called before using any other method in 
this module."
   "Update key types.
 
 FIRST-KEYTYPE and count specify the range of key types to update."
-  (let (full partial)
+  (let ((plist (plist-get (slot-value obj 'extra-plist) 'keysyms))
+        full partial keytypes)
     (if (and first-keytype count)
         (setq full 0
               partial xcb:xkb:MapPart:KeyTypes)
@@ -209,20 +213,26 @@ FIRST-KEYTYPE and count specify the range of key types to 
update."
                            :nVModMapKeys 0))
       (cl-assert (/= 0 (logand present xcb:xkb:MapPart:KeyTypes)))
       (when (/= 0 full)
-        (setq xcb:keysyms:-device deviceID
-              xcb:keysyms:-keytypes (make-vector totalTypes nil)))
-      (setq xcb:keysyms:-keytypes
-            (vconcat (substring xcb:keysyms:-keytypes 0 firstType)
-                     types-rtrn
-                     (substring xcb:keysyms:-keytypes (min (+ firstType nTypes)
-                                                           totalTypes)))))))
+        (setq plist (plist-put plist 'device deviceID)
+              keytypes (make-vector totalTypes nil)))
+      (setq keytypes (vconcat (substring keytypes 0 firstType)
+                              types-rtrn
+                              (substring keytypes (min (+ firstType nTypes)
+                                                       totalTypes)))
+            plist (plist-put plist 'keytypes keytypes))
+      (setf (slot-value obj 'extra-plist)
+            (plist-put (slot-value obj 'extra-plist) 'keysyms plist)))))
 
 (cl-defmethod xcb:keysyms:-update-keycodes ((obj xcb:connection) device
                                             &optional first-keycode count)
   "Update keycode-keysym mapping.
 
 FIRST-KEYCODE and COUNT specify the keycode range to update."
-  (let (full partial)
+  (let* ((plist (plist-get (slot-value obj 'extra-plist) 'keysyms))
+         (keycodes (plist-get plist 'keycodes))
+         (min-keycode (plist-get plist 'min-keycode))
+         (max-keycode (plist-get plist 'max-keycode))
+         full partial)
     (if (and first-keycode count)
         (setq full 0
               partial xcb:xkb:MapPart:KeySyms)
@@ -255,23 +265,22 @@ FIRST-KEYCODE and COUNT specify the keycode range to 
update."
       (cl-assert (/= 0 (logand present xcb:xkb:MapPart:KeySyms)))
       (when (or (/= 0 full)
                 ;; Unlikely?
-                (/= xcb:keysyms:-min-keycode minKeyCode)
-                (/= xcb:keysyms:-max-keycode maxKeyCode))
-        (setq xcb:keysyms:-min-keycode minKeyCode
-              xcb:keysyms:-max-keycode maxKeyCode
-              xcb:keysyms:-keycodes (make-vector (- xcb:keysyms:-max-keycode
-                                                    xcb:keysyms:-min-keycode
-                                                    -1)
-                                                 nil)))
-      (setq xcb:keysyms:-keycodes
-            (vconcat
-             (substring xcb:keysyms:-keycodes 0 (- firstKeySym
-                                                   xcb:keysyms:-min-keycode))
-             syms-rtrn
-             (substring xcb:keysyms:-keycodes
-                        (- (min (+ firstKeySym nKeySyms)
-                                xcb:keysyms:-max-keycode)
-                           xcb:keysyms:-min-keycode)))))))
+                (/= min-keycode minKeyCode)
+                (/= max-keycode maxKeyCode))
+        (setq keycodes (make-vector (- maxKeyCode minKeyCode -1) nil)
+              min-keycode minKeyCode
+              max-keycode maxKeyCode
+              plist (plist-put plist 'min-keycode min-keycode)
+              plist (plist-put plist 'max-keycode max-keycode)))
+      (setq keycodes (vconcat
+                      (substring keycodes 0 (- firstKeySym min-keycode))
+                      syms-rtrn
+                      (substring keycodes
+                                 (- (min (+ firstKeySym nKeySyms) max-keycode)
+                                    min-keycode)))
+            plist (plist-put plist 'keycodes keycodes))
+      (setf (slot-value obj 'extra-plist)
+            (plist-put (slot-value obj 'extra-plist) 'keysyms plist)))))
 
 (cl-defmethod xcb:keysyms:-update-modkeys ((obj xcb:connection) _device)
   "Update modifier keys."
@@ -333,21 +342,25 @@ FIRST-KEYCODE and COUNT specify the keycode range to 
update."
     (setq xcb:keysyms:alt-mask (logand xcb:keysyms:alt-mask
                                        (lognot xcb:keysyms:meta-mask)))))
 
-(cl-defmethod xcb:keysyms:keycode->keysym ((_obj xcb:connection) keycode
+(cl-defmethod xcb:keysyms:keycode->keysym ((obj xcb:connection) keycode
                                            modifiers)
   "Convert keycode to (keysym . mod-mask).
 
 Return (0 . 0) when conversion fails."
-  (let ((preserve 0)
-        group group-info group-number index keytype)
+  (let* ((plist (plist-get (slot-value obj 'extra-plist) 'keysyms))
+         (keytypes (plist-get plist 'keytypes))
+         (keycodes (plist-get plist 'keycodes))
+         (min-keycode (plist-get plist 'min-keycode))
+         (max-keycode (plist-get plist 'max-keycode))
+         (preserve 0)
+         group group-info group-number index keytype)
     ;; Reference: `XkbTranslateKeyCode' in 'XKBBind.c'.
     (catch 'return
       ;; Check keycode range.
-      (unless (<= xcb:keysyms:-min-keycode keycode xcb:keysyms:-max-keycode)
+      (unless (<= min-keycode keycode max-keycode)
         (throw 'return '(0 . 0)))
       ;; Retrieve KeySymMap and group info.
-      (setq keycode (aref xcb:keysyms:-keycodes
-                          (- keycode xcb:keysyms:-min-keycode))
+      (setq keycode (aref keycodes (- keycode min-keycode))
             group-info (slot-value keycode 'groupInfo)
             group-number (logand group-info #xF)) ; See <XKBstr.h>.
       ;; Check group number.
@@ -369,8 +382,7 @@ Return (0 . 0) when conversion fails."
       ;; Calculate the index of keysym.
       (setq index (* group (slot-value keycode 'width)))
       ;; Get key type.
-      (setq keytype (aref xcb:keysyms:-keytypes
-                          (elt (slot-value keycode 'kt-index) group)))
+      (setq keytype (aref keytypes (elt (slot-value keycode 'kt-index) group)))
       ;; Find the shift level and preserved modifiers.
       (with-slots (mods-mask hasPreserve map (preserve* preserve)) keytype
         (catch 'break
@@ -389,12 +401,16 @@ Return (0 . 0) when conversion fails."
         (cons (elt (slot-value keycode 'syms) index)
               (logand mods-mask (lognot preserve)))))))
 
-(cl-defmethod xcb:keysyms:keysym->keycode ((_obj xcb:connection) keysym)
+(cl-defmethod xcb:keysyms:keysym->keycode ((obj xcb:connection) keysym)
   "Convert keysym to (the first matching) keycode.
 
 Return 0 if conversion fails."
-  (let ((index 0)
-        (continue t))
+  (let* ((plist (plist-get (slot-value obj 'extra-plist) 'keysyms))
+         (keycodes (plist-get plist 'keycodes))
+         (min-keycode (plist-get plist 'min-keycode))
+         (max-keycode (plist-get plist 'max-keycode))
+         (index 0)
+         (continue t))
     ;; Traverse all keycodes, column by column.
     ;; Reference: `XKeysymToKeycode' in 'XKBBind.c'.
     (catch 'break
@@ -402,12 +418,12 @@ Return 0 if conversion fails."
         (throw 'break 0))
       (while continue
         (setq continue nil)
-        (dotimes (i (- xcb:keysyms:-max-keycode xcb:keysyms:-min-keycode -1))
-          (with-slots (nSyms syms) (aref xcb:keysyms:-keycodes i)
+        (dotimes (i (- max-keycode min-keycode -1))
+          (with-slots (nSyms syms) (aref keycodes i)
             (when (< index nSyms)
               (setq continue t)
               (when (= keysym (elt syms index))
-                (throw 'break (+ i xcb:keysyms:-min-keycode))))))
+                (throw 'break (+ i min-keycode))))))
         (cl-incf index))
       0)))
 



reply via email to

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