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

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

[elpa] externals/xelb fe1b643: Fix handling of generic events


From: Chris Feng
Subject: [elpa] externals/xelb fe1b643: Fix handling of generic events
Date: Mon, 11 Jun 2018 12:39:01 -0400 (EDT)

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

    Fix handling of generic events
    
    * xcb.el (xcb:-connection-filter): Correct wrong generic event length.
    (xcb:-error-or-event-class->number): Correct wrong conversion of
    generic event codes.
---
 xcb.el | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/xcb.el b/xcb.el
index 91fc8f1..28a7c4d 100644
--- a/xcb.el
+++ b/xcb.el
@@ -364,7 +364,10 @@ Concurrency is disabled as it breaks the orders of errors, 
replies and events."
                   (setq event-length (funcall (if xcb:lsb
                                                   #'xcb:-unpack-u4-lsb
                                                 #'xcb:-unpack-u4)
-                                              cache 4))
+                                              cache 4)
+                        ;; event-length indicates additional words to the
+                        ;; first 32 bytes.
+                        event-length (+ 32 (* 4 event-length)))
                   (when (< (length cache) event-length)
                     ;; Too short.
                     (throw 'break nil))
@@ -380,14 +383,16 @@ Concurrency is disabled as it breaks the orders of 
errors, replies and events."
                   (setq listener
                         (lax-plist-get (slot-value connection 'event-plist)
                                        (vector (aref cache 1))))))
+               ;; Conventional events are 32 bytes in size.
+               (unless event-length
+                 (setq event-length 32))
                (when listener
                  (with-slots (event-queue) connection
                    (setf event-queue (nconc event-queue
                                             `([,listener
-                                               ,(substring cache 0 32)
+                                               ,(substring cache 0
+                                                           event-length)
                                                ,synthetic])))))
-               (unless event-length
-                 (setq event-length 32))
                (xcb:-log "Event received: %s" (substring cache 0 event-length))
                (setq cache (substring cache event-length)))))))
       (setf (slot-value connection 'lock) nil))
@@ -654,7 +659,7 @@ Otherwise no error will ever be reported."
                     (setq error (make-instance
                                  (xcb:-error-number->class obj (car i))))
                     (xcb:unmarshal error (cdr i))
-                    i)
+                    error)
                   error-data))
     (cl-remf (slot-value obj 'reply-plist) sequence)
     (cl-remf (slot-value obj 'error-plist) sequence)
@@ -777,10 +782,11 @@ Or if it's an XKB event, return (XKB-EVENT-CODE 
[XKB-CODE])."
       ;; Generic event.
       (setq alist (symbol-value
                    (intern-soft (concat prefix "xge-number-class-alist")))
-            result (plist-get (slot-value obj 'extension-opcode-plist) class))
+            result (plist-get (slot-value obj 'extension-opcode-plist)
+                              (intern-soft (substring prefix 0 -1))))
       ;; Ensure the extension has been initialized.
       (when result
-        (setq result `(35 . [,result ,(cdr (rassq class alist))]))))
+        (setq result `(35 . [,result ,(car (rassq class alist))]))))
      ((string= prefix "xcb:xkb:")
       ;; XKB event.
       (eval-and-compile (require 'xcb-xkb))



reply via email to

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