@@ -370,30 +370,34 @@ def enable(self, event):
370
370
'button_release_event' , self ._release )
371
371
372
372
def disable (self , event ):
373
+ self ._cancel_zoom ()
373
374
self .figure .canvas .widgetlock .release (self )
374
375
self .figure .canvas .mpl_disconnect (self ._idPress )
375
376
self .figure .canvas .mpl_disconnect (self ._idRelease )
376
377
378
+ def _cancel_zoom (self ):
379
+ for zoom_id in self ._ids_zoom :
380
+ self .figure .canvas .mpl_disconnect (zoom_id )
381
+ self .navigation .remove_rubberband (None , self )
382
+ self .navigation .draw ()
383
+ self ._xypress = None
384
+ self ._button_pressed = None
385
+ self ._ids_zoom = []
386
+ return
387
+
377
388
def _press (self , event ):
378
389
"""the _press mouse button in zoom to rect mode callback"""
379
390
# If we're already in the middle of a zoom, pressing another
380
391
# button works to "cancel"
381
392
if self ._ids_zoom != []:
382
- for zoom_id in self ._ids_zoom :
383
- self .figure .canvas .mpl_disconnect (zoom_id )
384
- self .navigation .remove_rubberband (event , self )
385
- self .navigation .draw ()
386
- self ._xypress = None
387
- self ._button_pressed = None
388
- self ._ids_zoom = []
389
- return
393
+ self ._cancel_zoom ()
390
394
391
395
if event .button == 1 :
392
396
self ._button_pressed = 1
393
397
elif event .button == 3 :
394
398
self ._button_pressed = 3
395
399
else :
396
- self ._button_pressed = None
400
+ self ._cancel_zoom ()
397
401
return
398
402
399
403
x , y = event .x , event .y
@@ -455,6 +459,7 @@ def _release(self, event):
455
459
self ._ids_zoom = []
456
460
457
461
if not self ._xypress :
462
+ self ._cancel_zoom ()
458
463
return
459
464
460
465
last_a = []
@@ -464,9 +469,7 @@ def _release(self, event):
464
469
lastx , lasty , a , _ind , lim , _trans = cur_xypress
465
470
# ignore singular clicks - 5 pixels is a threshold
466
471
if abs (x - lastx ) < 5 or abs (y - lasty ) < 5 :
467
- self ._xypress = None
468
- self .navigation .remove_rubberband (event , self )
469
- self .navigation .draw ()
472
+ self ._cancel_zoom ()
470
473
return
471
474
472
475
x0 , y0 , x1 , y1 = lim .extents
@@ -566,14 +569,9 @@ def _release(self, event):
566
569
a .set_xlim ((rx1 , rx2 ))
567
570
a .set_ylim ((ry1 , ry2 ))
568
571
569
- self .navigation .draw ()
570
- self ._xypress = None
571
- self ._button_pressed = None
572
-
573
572
self ._zoom_mode = None
574
-
575
573
self .navigation .push_current ()
576
- self .navigation . remove_rubberband ( event , self )
574
+ self ._cancel_zoom ( )
577
575
578
576
579
577
class ToolPan (ToolToggleBase ):
@@ -601,17 +599,25 @@ def enable(self, event):
601
599
'button_release_event' , self ._release )
602
600
603
601
def disable (self , event ):
602
+ self ._cancel_pan ()
604
603
self .figure .canvas .widgetlock .release (self )
605
604
self .figure .canvas .mpl_disconnect (self ._idPress )
606
605
self .figure .canvas .mpl_disconnect (self ._idRelease )
607
606
607
+ def _cancel_pan (self ):
608
+ self ._button_pressed = None
609
+ self ._xypress = []
610
+ self .figure .canvas .mpl_disconnect (self ._idDrag )
611
+ self .navigation .messagelock .release (self )
612
+ self .navigation .draw ()
613
+
608
614
def _press (self , event ):
609
615
if event .button == 1 :
610
616
self ._button_pressed = 1
611
617
elif event .button == 3 :
612
618
self ._button_pressed = 3
613
619
else :
614
- self ._button_pressed = None
620
+ self ._cancel_pan ()
615
621
return
616
622
617
623
x , y = event .x , event .y
@@ -633,6 +639,7 @@ def _press(self, event):
633
639
634
640
def _release (self , event ):
635
641
if self ._button_pressed is None :
642
+ self ._cancel_pan ()
636
643
return
637
644
638
645
self .figure .canvas .mpl_disconnect (self ._idDrag )
@@ -641,11 +648,11 @@ def _release(self, event):
641
648
for a , _ind in self ._xypress :
642
649
a .end_pan ()
643
650
if not self ._xypress :
651
+ self ._cancel_pan ()
644
652
return
645
- self ._xypress = []
646
- self ._button_pressed = None
653
+
647
654
self .navigation .push_current ()
648
- self .navigation . draw ()
655
+ self ._cancel_pan ()
649
656
650
657
def _mouse_move (self , event ):
651
658
for a , _ind in self ._xypress :
0 commit comments