1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import gtk.gdk as gdk
24 import pygtk
25 pygtk.require('2.0')
26
28 '''
29 Get key name with given key value.
30
31 @param keyval: Key value.
32 @return: Return key name with given key value.
33 '''
34 key_unicode = gdk.keyval_to_unicode(keyval)
35 if key_unicode == 0:
36 return gdk.keyval_name(keyval)
37 else:
38 return str(unichr(key_unicode))
39
41 '''
42 Get key modifiers with given key event.
43
44 @param key_event: Key event.
45 @return: Return key modifier list with given key event.
46 '''
47 modifiers = []
48
49
50 if key_event.state & gdk.CONTROL_MASK:
51 modifiers.append("Ctrl")
52
53
54 if key_event.state & gdk.SUPER_MASK:
55 modifiers.append("Super")
56
57
58 if key_event.state & gdk.HYPER_MASK:
59 modifiers.append("Hyper")
60
61
62 if key_event.state & gdk.MOD1_MASK:
63 modifiers.append("Alt")
64
65
66 if key_event.state & gdk.SHIFT_MASK and (len(get_key_name(key_event.keyval)) != 1 or not gdk.keyval_is_upper(key_event.keyval)):
67 modifiers.append("Shift")
68
69 return modifiers
70
72 '''
73 Get key event name.
74
75 @param key_event: Key event.
76 @return: Return key event string.
77 '''
78 if key_event.is_modifier:
79 return ""
80 else:
81 key_modifiers = get_key_event_modifiers(key_event)
82 key_name = get_key_name(key_event.keyval)
83 if key_name == " ":
84 key_name = "Space"
85
86 if key_modifiers == []:
87 return key_name
88 else:
89 return " + ".join(key_modifiers) + " + " + key_name
90
92 '''
93 Parse keyevent name.
94
95 @param keyevent_name: Key event name that return by function L{ I{get_keyevent_name} <get_keyevent_name>}.
96 @return: Return tuple that contain key value and modifier mask, (keyval, modifier_mask).
97 '''
98 keys = keyevent_name.split(" + ")
99 if len(keys) == 1:
100 keyval = int(gdk.keyval_from_name(keys[0]))
101 modifier_mask = 0
102 else:
103 keyval = int(gdk.keyval_from_name(keys[-1]))
104 modifier_mask = 0
105
106 for modifier in keys[0:-1]:
107 if modifier == "Ctrl":
108 modifier_mask = modifier_mask | gdk.CONTROL_MASK
109 elif modifier == "Super":
110 modifier_mask = modifier_mask | gdk.SUPER_MASK
111 elif modifier == "Hyper":
112 modifier_mask = modifier_mask | gdk.HYPER_MASK
113 elif modifier == "Alt":
114 modifier_mask = modifier_mask | gdk.MOD1_MASK
115 elif modifier == "Shift":
116 modifier_mask = modifier_mask | gdk.SHIFT_MASK
117
118 if gdk.keyval_is_upper(keyval) and len(get_key_name(keyval)) == 1:
119 keyval = gdk.keyval_to_lower(keyval)
120 modifier_mask = modifier_mask | gdk.SHIFT_MASK
121
122 return (keyval, modifier_mask)
123
125 '''
126 Whether has ctrl mask in key event.
127
128 @param key_event: Key event.
129 @return: Return true if key event has ctrl mask.
130 '''
131 return get_key_name(key_event.keyval) in ["Control_L", "Control_R"]
132
134 '''
135 Whether has shift mask in key event.
136
137 @param key_event: Key event.
138 @return: Return true if key event has shift mask.
139 '''
140 return get_key_name(key_event.keyval) in ["Shift_L", "Shift_R"]
141