Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/keyboard.py
diff options
context:
space:
mode:
authorWade Brainerd <wadetb@gmail.com>2009-03-20 03:25:48 (GMT)
committer Wade Brainerd <wadetb@gmail.com>2009-03-20 03:25:48 (GMT)
commit906b32711ac89789b8b3f2eb1c53d18db56fe5f7 (patch)
treebccc08fe96a9aabfc210a326dd817797f57decfc /keyboard.py
parent01a1d3f88d701eb89374a13b62a0d5ee9ad26649 (diff)
Fix keyboard issues with new keymap format.
Diffstat (limited to 'keyboard.py')
-rw-r--r--keyboard.py62
1 files changed, 36 insertions, 26 deletions
diff --git a/keyboard.py b/keyboard.py
index a46bffb..34a9da2 100644
--- a/keyboard.py
+++ b/keyboard.py
@@ -20,7 +20,7 @@ import pygtk
pygtk.require('2.0')
import gtk
import rsvg
-import os, glob
+import os, glob, re
import pango
import simplejson
@@ -329,6 +329,35 @@ class KeyboardData:
f.write(text)
f.close()
+ def format_key_sig(self, scan, state, group):
+ sig = 'scan%d' % scan
+ if state & gtk.gdk.SHIFT_MASK:
+ sig += ' shift'
+ if state & gtk.gdk.MOD5_MASK:
+ sig += ' altgr'
+ if group != 0:
+ sig += ' group%d' % group
+ return sig
+
+ KEY_SIG_RE = re.compile(r'scan(?P<scan>\d+) ?(?P<shift>shift)? ?(?P<altgr>altgr)?( group)?(?P<group>\d+)?')
+
+ def parse_key_sig(self, sig):
+ m = KeyboardData.KEY_SIG_RE.match(sig)
+
+ state = 0
+ if m.group('shift'):
+ state |= gtk.gdk.SHIFT_MASK
+ if m.group('altgr'):
+ state |= gtk.gdk.MOD5_MASK
+
+ scan = int(m.group('scan'))
+
+ group = 0
+ if m.group('group'):
+ group = int(m.group('group'))
+
+ return scan, state, group
+
def find_key_by_label(self, label):
for k in self.keys:
if k['key-label'] == label:
@@ -344,7 +373,12 @@ class KeyboardData:
# Look up the key in the letter map.
for sig, l in self.letter_map.items():
if l == letter:
- return self.parse_key_sig(sig)
+ scan, state, group = self.parse_key_sig(sig)
+ for k in self.keys:
+ if k['key-scan'] == scan:
+ return k, state, group
+
+ return None, None, None
class KeyboardWidget(KeyboardData, gtk.DrawingArea):
"""A GTK widget which implements an interactive visual keyboard, with support
@@ -391,30 +425,6 @@ class KeyboardWidget(KeyboardData, gtk.DrawingArea):
self.root_window.disconnect(self.key_press_cb_id)
self.root_window.disconnect(self.key_release_cb_id)
- def format_key_sig(self, scan, state, group):
- sig = 'scan%d' % scan
- if state & gtk.gdk.SHIFT_MASK:
- sig += ' shift'
- if state & gtk.gdk.MOD5_MASK:
- sig += ' altgr'
- if group != 0:
- sig += ' group%d' % group
- return sig
-
- def parse_key_sig(self, sig):
- m = re.match(r'scan(?P<scan>\d+) (?P<shift>shift)? (?P<altgr>altgr)? group(?P<group>\d+)', sig)
-
- state = 0
- if m.group('shift'):
- state |= gtk.gdk.SHIFT_MASK
- if m.group('altgr'):
- state |= gtk.gdk.MOD5_MASK
-
- scan = int(m.group('scan'))
- group = int(m.group('group'))
-
- return scan, state, group
-
def set_layout(self, layout):
"""Sets the keyboard's layout from a layout description."""
KeyboardData.set_layout(self, layout)