Skip to content

Commit 5a895da

Browse files
committed
Merge pull request #7752 from newville/master
bugfix for wx backend: release mouse on loss of focus and before trying to recapture
1 parent 5813452 commit 5a895da

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

lib/matplotlib/backends/backend_wx.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)