@@ -694,6 +694,9 @@ def do_nothing(*args, **kwargs):
694694 self .Bind (wx .EVT_MIDDLE_DCLICK , self ._onMiddleButtonDClick )
695695 self .Bind (wx .EVT_MIDDLE_UP , self ._onMiddleButtonUp )
696696
697+ self .Bind (wx .EVT_MOUSE_CAPTURE_CHANGED , self ._onCaptureLost )
698+ self .Bind (wx .EVT_MOUSE_CAPTURE_LOST , self ._onCaptureLost )
699+
697700 if wx .VERSION_STRING < "2.9" :
698701 # only needed in 2.8 to reduce flicker
699702 self .SetBackgroundStyle (wx .BG_STYLE_CUSTOM )
@@ -1031,20 +1034,31 @@ def _onKeyUp(self, evt):
10311034 evt .Skip ()
10321035 FigureCanvasBase .key_release_event (self , key , guiEvent = evt )
10331036
1037+ def _set_capture (self , capture = True ):
1038+ """control wx mouse capture """
1039+ if self .HasCapture ():
1040+ self .ReleaseMouse ()
1041+ if capture :
1042+ self .CaptureMouse ()
1043+
1044+ def _onCaptureLost (self , evt ):
1045+ """Capture changed or lost"""
1046+ self ._set_capture (False )
1047+
10341048 def _onRightButtonDown (self , evt ):
10351049 """Start measuring on an axis."""
10361050 x = evt .GetX ()
10371051 y = self .figure .bbox .height - evt .GetY ()
10381052 evt .Skip ()
1039- self .CaptureMouse ( )
1053+ self ._set_capture ( True )
10401054 FigureCanvasBase .button_press_event (self , x , y , 3 , guiEvent = evt )
10411055
10421056 def _onRightButtonDClick (self , evt ):
10431057 """Start measuring on an axis."""
10441058 x = evt .GetX ()
10451059 y = self .figure .bbox .height - evt .GetY ()
10461060 evt .Skip ()
1047- self .CaptureMouse ( )
1061+ self ._set_capture ( True )
10481062 FigureCanvasBase .button_press_event (self , x , y , 3 ,
10491063 dblclick = True , guiEvent = evt )
10501064
@@ -1053,24 +1067,23 @@ def _onRightButtonUp(self, evt):
10531067 x = evt .GetX ()
10541068 y = self .figure .bbox .height - evt .GetY ()
10551069 evt .Skip ()
1056- if self .HasCapture ():
1057- self .ReleaseMouse ()
1070+ self ._set_capture (False )
10581071 FigureCanvasBase .button_release_event (self , x , y , 3 , guiEvent = evt )
10591072
10601073 def _onLeftButtonDown (self , evt ):
10611074 """Start measuring on an axis."""
10621075 x = evt .GetX ()
10631076 y = self .figure .bbox .height - evt .GetY ()
10641077 evt .Skip ()
1065- self .CaptureMouse ( )
1078+ self ._set_capture ( True )
10661079 FigureCanvasBase .button_press_event (self , x , y , 1 , guiEvent = evt )
10671080
10681081 def _onLeftButtonDClick (self , evt ):
10691082 """Start measuring on an axis."""
10701083 x = evt .GetX ()
10711084 y = self .figure .bbox .height - evt .GetY ()
10721085 evt .Skip ()
1073- self .CaptureMouse ( )
1086+ self ._set_capture ( True )
10741087 FigureCanvasBase .button_press_event (self , x , y , 1 ,
10751088 dblclick = True , guiEvent = evt )
10761089
@@ -1080,8 +1093,7 @@ def _onLeftButtonUp(self, evt):
10801093 y = self .figure .bbox .height - evt .GetY ()
10811094 # print 'release button', 1
10821095 evt .Skip ()
1083- if self .HasCapture ():
1084- self .ReleaseMouse ()
1096+ self ._set_capture (False )
10851097 FigureCanvasBase .button_release_event (self , x , y , 1 , guiEvent = evt )
10861098
10871099 # Add middle button events
@@ -1090,15 +1102,15 @@ def _onMiddleButtonDown(self, evt):
10901102 x = evt .GetX ()
10911103 y = self .figure .bbox .height - evt .GetY ()
10921104 evt .Skip ()
1093- self .CaptureMouse ( )
1105+ self ._set_capture ( True )
10941106 FigureCanvasBase .button_press_event (self , x , y , 2 , guiEvent = evt )
10951107
10961108 def _onMiddleButtonDClick (self , evt ):
10971109 """Start measuring on an axis."""
10981110 x = evt .GetX ()
10991111 y = self .figure .bbox .height - evt .GetY ()
11001112 evt .Skip ()
1101- self .CaptureMouse ( )
1113+ self ._set_capture ( True )
11021114 FigureCanvasBase .button_press_event (self , x , y , 2 ,
11031115 dblclick = True , guiEvent = evt )
11041116
@@ -1108,8 +1120,7 @@ def _onMiddleButtonUp(self, evt):
11081120 y = self .figure .bbox .height - evt .GetY ()
11091121 # print 'release button', 1
11101122 evt .Skip ()
1111- if self .HasCapture ():
1112- self .ReleaseMouse ()
1123+ self ._set_capture (False )
11131124 FigureCanvasBase .button_release_event (self , x , y , 2 , guiEvent = evt )
11141125
11151126 def _onMouseWheel (self , evt ):
0 commit comments