@@ -1119,7 +1119,7 @@ def __init__(self, ax, onselect, useblit=False, button=None):
1119
1119
# will save the data (pos. at mouserelease)
1120
1120
self .eventrelease = None
1121
1121
self ._prev_event = None
1122
- self .state = []
1122
+ self .state = set ()
1123
1123
1124
1124
def set_active (self , active ):
1125
1125
AxesWidget .set_active (self , active )
@@ -1140,6 +1140,7 @@ def connect_default_events(self):
1140
1140
self .connect_event ('button_release_event' , self ._release )
1141
1141
self .connect_event ('draw_event' , self .update_background )
1142
1142
self .connect_event ('key_press_event' , self ._on_key_press )
1143
+ self .connect_event ('key_release_event' , self ._on_key_release )
1143
1144
self .connect_event ('scroll_event' , self ._on_scroll )
1144
1145
1145
1146
def ignore (self , event ):
@@ -1220,15 +1221,9 @@ def _press(self, event):
1220
1221
event = self ._clean_event (event )
1221
1222
self .eventpress = event
1222
1223
self ._prev_event = event
1223
-
1224
- self .state = []
1225
1224
key = event .key or ''
1226
1225
if 'alt' in key or key == ' ' :
1227
- self .state .append ('move' )
1228
- if 'shift' in key :
1229
- self .state .append ('square' )
1230
- if 'ctrl' in key or 'control' in key :
1231
- self .state .append ('center' )
1226
+ self .state .add ('move' )
1232
1227
self .press (event )
1233
1228
1234
1229
def press (self , event ):
@@ -1250,16 +1245,6 @@ def _onmove(self, event):
1250
1245
"""Cursor move event handler and validator"""
1251
1246
if not self .ignore (event ) and self .eventpress :
1252
1247
event = self ._clean_event (event )
1253
- # update the state
1254
- if 'move' in self .state :
1255
- self .state = ['move' ]
1256
- else :
1257
- self .state = []
1258
- key = event .key or ''
1259
- if 'shift' in key :
1260
- self .state .append ('square' )
1261
- if 'ctrl' in key or 'control' in key :
1262
- self .state .append ('center' )
1263
1248
self .onmove (event )
1264
1249
1265
1250
def onmove (self , event ):
@@ -1277,13 +1262,32 @@ def on_scroll(self, event):
1277
1262
1278
1263
def _on_key_press (self , event ):
1279
1264
"""Key press event handler and validator"""
1280
- if not self .ignore (event ):
1265
+ if self .active :
1266
+ key = event .key or ''
1267
+ if 'shift' in key :
1268
+ self .state .add ('square' )
1269
+ if 'ctrl' in key or 'control' in key :
1270
+ self .state .add ('center' )
1281
1271
self .on_key_press (event )
1282
1272
1283
1273
def on_key_press (self , event ):
1284
1274
"""Key press event handler"""
1285
1275
pass
1286
1276
1277
+ def _on_key_release (self , event ):
1278
+ """Key release event handler and validator"""
1279
+ if self .active :
1280
+ key = event .key or ''
1281
+ if 'shift' in key :
1282
+ self .state .discard ('square' )
1283
+ if 'ctrl' in key or 'control' in key :
1284
+ self .state .discard ('center' )
1285
+ self .on_key_release (event )
1286
+
1287
+ def on_key_release (self , event ):
1288
+ """Key release event handler"""
1289
+ pass
1290
+
1287
1291
def set_visible (self , visible ):
1288
1292
""" Set the visibility of our artists """
1289
1293
self .visible = visible
0 commit comments