@@ -88,58 +88,6 @@ def _on_timer(self):
8888class FigureCanvasGTK3 (Gtk .DrawingArea , FigureCanvasBase ):
8989 required_interactive_framework = "gtk3"
9090 _timer_cls = TimerGTK3
91-
92- keyvald = {65507 : 'control' ,
93- 65505 : 'shift' ,
94- 65513 : 'alt' ,
95- 65508 : 'control' ,
96- 65506 : 'shift' ,
97- 65514 : 'alt' ,
98- 65361 : 'left' ,
99- 65362 : 'up' ,
100- 65363 : 'right' ,
101- 65364 : 'down' ,
102- 65307 : 'escape' ,
103- 65470 : 'f1' ,
104- 65471 : 'f2' ,
105- 65472 : 'f3' ,
106- 65473 : 'f4' ,
107- 65474 : 'f5' ,
108- 65475 : 'f6' ,
109- 65476 : 'f7' ,
110- 65477 : 'f8' ,
111- 65478 : 'f9' ,
112- 65479 : 'f10' ,
113- 65480 : 'f11' ,
114- 65481 : 'f12' ,
115- 65300 : 'scroll_lock' ,
116- 65299 : 'break' ,
117- 65288 : 'backspace' ,
118- 65293 : 'enter' ,
119- 65379 : 'insert' ,
120- 65535 : 'delete' ,
121- 65360 : 'home' ,
122- 65367 : 'end' ,
123- 65365 : 'pageup' ,
124- 65366 : 'pagedown' ,
125- 65438 : '0' ,
126- 65436 : '1' ,
127- 65433 : '2' ,
128- 65435 : '3' ,
129- 65430 : '4' ,
130- 65437 : '5' ,
131- 65432 : '6' ,
132- 65429 : '7' ,
133- 65431 : '8' ,
134- 65434 : '9' ,
135- 65451 : '+' ,
136- 65453 : '-' ,
137- 65450 : '*' ,
138- 65455 : '/' ,
139- 65439 : 'dec' ,
140- 65421 : 'enter' ,
141- }
142-
14391 # Setting this as a static constant prevents
14492 # this resulting expression from leaking
14593 event_mask = (Gdk .EventMask .BUTTON_PRESS_MASK
@@ -259,13 +207,17 @@ def size_allocate(self, widget, allocation):
259207 self .draw_idle ()
260208
261209 def _get_key (self , event ):
262- if event .keyval in self .keyvald :
263- key = self .keyvald [event .keyval ]
264- elif event .keyval < 256 :
265- key = chr (event .keyval )
266- else :
267- key = None
268-
210+ key = chr (Gdk .keyval_to_unicode (event .keyval ))
211+ if not key .isprintable ():
212+ key = Gdk .keyval_name (event .keyval ).lower ()
213+ if key .startswith ("kp_" ): # keypad_x (including kp_enter).
214+ key = key [3 :]
215+ if key .startswith ("page_" ): # page_{up,down}
216+ key = key .replace ("page_" , "page" )
217+ if key .endswith (("_l" , "_r" )): # alt_l, ctrl_l, shift_l.
218+ key = key [:- 2 ]
219+ if key == "enter" :
220+ key = "return"
269221 modifiers = [
270222 (Gdk .ModifierType .MOD4_MASK , 'super' ),
271223 (Gdk .ModifierType .MOD1_MASK , 'alt' ),
@@ -274,7 +226,6 @@ def _get_key(self, event):
274226 for key_mask , prefix in modifiers :
275227 if event .state & key_mask :
276228 key = '{0}+{1}' .format (prefix , key )
277-
278229 return key
279230
280231 def configure_event (self , widget , event ):
0 commit comments