[Eclipse-cvs] CVS eclipse/lib/clx-ext

ihatchondo ihatchondo at common-lisp.net
Tue Nov 28 20:30:35 UTC 2006


Update of /project/eclipse/cvsroot/eclipse/lib/clx-ext
In directory clnet:/tmp/cvs-serv27687/lib/clx-ext

Modified Files:
	keysyms.lisp 
Log Message:
Fixed: bug reported by Ralf Mattes, about keyboard modifiers not available.

--- /project/eclipse/cvsroot/eclipse/lib/clx-ext/keysyms.lisp	2005/02/10 23:45:53	1.8
+++ /project/eclipse/cvsroot/eclipse/lib/clx-ext/keysyms.lisp	2006/11/28 20:30:35	1.9
@@ -1,5 +1,5 @@
 ;;; -*- Mode: Lisp; Package: Keyboard -*-
-;;; $Id: keysyms.lisp,v 1.8 2005/02/10 23:45:53 ihatchondo Exp $
+;;; $Id: keysyms.lisp,v 1.9 2006/11/28 20:30:35 ihatchondo Exp $
 ;;;
 ;;; This is a CLX extension for managing keyboard.
 ;;;
@@ -44,12 +44,13 @@
 
 (defun make-modifier-mask-table (disp)
   (loop with map = '(:any #x8000)
+        with ks-per-keycode = (array-dimension (xlib:keyboard-mapping disp) 1)
 	for mods in (multiple-value-list (xlib:modifier-mapping disp))
 	for i = 1 then (* 2 i) do
 	(loop for mod in mods
-	      for key-name = (keycode->keyname disp mod)
+	      for key-name = (modcode->keyname disp mod ks-per-keycode)
 	      for prec = (getf map key-name) do
-	      (setf (getf map key-name) (+ (if (numberp prec) prec 0) i)))
+	      (setf (getf map key-name) (logior (if (numberp prec) prec 0) i)))
 	finally (return map)))
 
 (defun define-keysym (keyname value)
@@ -69,6 +70,16 @@
   "Returns the keyword that named the specified keycode."
   (keysym->keyname (xlib:keycode->keysym disp keycode 0)))
 
+(defun modcode->keyname (disp keycode keysyms-per-keycode)
+   "Returns the keyword that named the specified modifier keycode."
+   ;; This has been created to deal with X keyboard wierd mapping.
+   ;; For some reasons, for few keys the first keysym in the list,
+   ;; modifiers keysym in particular, does not exists. So lets try
+   ;; to resolve it anyway looking further in the array.
+   (loop for i from 0 below keysyms-per-keycode
+            for keysym = (xlib:keycode->keysym disp keycode i)
+            when (> keysym 0) do (return (keysym->keyname keysym))))
+
 (defun keyname->keycodes (disp keyname)
   "Returns the list of keycode associated with the specified keyname."
   (multiple-value-list (xlib:keysym->keycodes disp (keyname->keysym keyname))))




More information about the Eclipse-cvs mailing list