diff lisp/x-win-xfree86.el @ 5639:1d1f385c9149

Call XKeysymToString() much less, it leaks. src/ChangeLog addition: 2012-01-08 Aidan Kehoe <kehoea@parhasard.net> * device-x.c: * device-x.c (syms_of_device_x): Move #'x-keysym-on-keyboard{,-sans-modifiers}-p to Lisp, the hash table no longer stores the X keysyms, so we need to manipulate any strings we have been handed. * event-Xt.c (x_has_keysym): Don't call XKeysymToString() here, it leaks; trust x_keysym_to_emacs_keysym() instead. * event-Xt.c (x_keysym_to_emacs_keysym): No longer leak when looking up the strings for keysyms of the form UABCD. lisp/ChangeLog addition: 2012-01-08 Aidan Kehoe <kehoea@parhasard.net> * x-init.el: * x-init.el (pseudo-canonicalize-keysym): New. * x-init.el: Move #'x-keysym-on-keyboard-sans-modifiers-p, #'x-keysym-on-keyboard-p here from device-x.c, some string manipulation it now needs to do is far easier in Lisp. * x-win-xfree86.el: * x-win-xfree86.el (x-win-init-xfree86): No longer call #'x-keysym-on-keyboard{,-sans-modifiers}-p, implement it ourselves cheaply.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 08 Jan 2012 20:41:37 +0000
parents 8861440b1aa4
children
line wrap: on
line diff
--- a/lisp/x-win-xfree86.el	Fri Jan 06 16:35:07 2012 +0000
+++ b/lisp/x-win-xfree86.el	Sun Jan 08 20:41:37 2012 +0000
@@ -39,9 +39,6 @@
 
 ;;; Code:
 
-(globally-declare-fboundp
- '(x-keysym-on-keyboard-p x-keysym-on-keyboard-sans-modifiers-p))
-
 (defun x-win-init-xfree86 (device)
 
   ;; We know this keyboard is an XFree86 keyboard. As such, we can predict
@@ -74,9 +71,6 @@
 	     nil nil nil nil nil ?/ nil nil nil nil nil nil nil nil 
 	     nil nil nil nil nil ?=])
 
-  (when (x-keysym-on-keyboard-p 'iso-left-tab device) 
-    (define-key function-key-map 'iso-left-tab [(shift tab)]))
-
   (loop for (key sane-key) in
     '((f13 f1)
       (f14 f2)
@@ -94,13 +88,17 @@
     with function-key-map = (symbol-value-in-console 'function-key-map
                                                      (device-console device)
                                                      function-key-map)
+    with x-keysym-hash-table = (x-keysym-hash-table device)
+
+    initially
+    (when (gethash 'iso-left-tab x-keysym-hash-table)
+      (define-key function-key-map 'iso-left-tab [(shift tab)]))
 
     do
-    (when (and (x-keysym-on-keyboard-p key device)
-	       (not (x-keysym-on-keyboard-sans-modifiers-p key device)))
+    (when (not (memq (gethash key x-keysym-hash-table) '(nil sans-modifiers)))
       ;; define also the control, meta, and meta-control versions.
       (loop for mods in '(() (control) (meta) (meta control)) do
-	(define-key function-key-map `[(,@mods ,key)] `[(shift ,@mods ,sane-key)])
-	))))
+	(define-key function-key-map `[(,@mods ,key)]
+          `[(shift ,@mods ,sane-key)])))))
 
 ;;; x-win-xfree86.el ends here