8000 Merge pull request #7752 from newville/master · matplotlib/matplotlib@03c1eb5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 03c1eb5

Browse files
authored
Merge pull request #7752 from newville/master
bugfix for wx backend: release mouse on loss of focus and before trying to recapture
2 parents 0223e27 + 7cedabc commit 03c1eb5

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
@@ -685,6 +685,9 @@ def do_nothing(*args, **kwargs):
685685
self.Bind(wx.EVT_MIDDLE_DCLICK, self._onMiddleButtonDClick)
686686
self.Bind(wx.EVT_MIDDLE_UP, self._onMiddleButtonUp)
687687

688+
self.Bind(wx.EVT_MOUSE_CAPTURE_CHANGED, self._onCaptureLost)
689+
self.Bind(wx.EVT_MOUSE_CAPTURE_LOST, self._onCaptureLost)
690+
688691
if wx.VERSION_STRING < "2.9":
689692
# only needed in 2.8 to reduce flicker
690693
self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
@@ -1023,20 +1026,31 @@ def _onKeyUp(self, evt):
10231026
evt.Skip()
10241027
FigureCanvasBase.key_release_event(self, key, guiEvent=evt)
10251028

1029+
def _set_capture(self, capture=True):
1030+
"""control wx mouse capture """
1031+
if self.HasCapture():
1032+
self.ReleaseMouse()
1033+
if capture:
1034+
self.CaptureMouse()
1035+
1036+
def _onCaptureLost(self, evt):
1037+
"""Capture changed or lost"""
1038+
self._set_capture(False)
1039+
10261040
def _onRightButtonDown(self, evt):
10271041
"""Start measuring on an axis."""
10281042
x = evt.GetX()
10291043
y = self.figure.bbox.height - evt.GetY()
10301044
evt.Skip()
1031-
self.CaptureMouse()
1045+
self._set_capture(True)
10321046
FigureCanvasBase.button_press_event(self, x, y, 3, guiEvent=evt)
10331047

10341048
def _onRightButtonDClick(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,
10411055
dblclick=True, guiEvent=evt)
10421056

@@ -1045,24 +1059,23 @@ def _onRightButtonUp(self, evt):
10451059
x = evt.GetX()
10461060
y = self.figure.bbox.height - evt.GetY()
10471061
evt.Skip()
1048-
if self.HasCapture():
1049-
self.ReleaseMouse()
1062+
self._set_capture(False)
10501063
FigureCanvasBase.button_release_event(self, x, y, 3, guiEvent=evt)
10511064

10521065
def _onLeftButtonDown(self, evt):
10531066
"""Start measuring on an axis."""
10541067
x = evt.GetX()
10551068
y = self.figure.bbox.height - evt.GetY()
10561069
evt.Skip()
1057-
self.CaptureMouse()
1070+
self._set_capture(True)
10581071
FigureCanvasBase.button_press_event(self, x, y, 1, guiEvent=evt)
10591072

10601073
def _onLeftButtonDClick(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,
10671080
dblclick=True, guiEvent=evt)
10681081

@@ -1072,8 +1085,7 @@ def _onLeftButtonUp(self, evt):
10721085
y = self.figure.bbox.height - evt.GetY()
10731086
# print 'release button', 1
10741087
evt.Skip()
1075-
if self.HasCapture():
1076-
self.ReleaseMouse()
1088+
self._set_capture(False)
10771089
FigureCanvasBase.button_release_event(self, x, y, 1, guiEvent=evt)
10781090

10791091
# Add middle button events
@@ -1082,15 +1094,15 @@ def _onMiddleButtonDown(self, evt):
10821094
x = evt.GetX()
10831095
y = self.figure.bbox.height - evt.GetY()
10841096
evt.Skip()
1085-
self.CaptureMouse()
1097+
self._set_capture(True)
10861098
FigureCanvasBase.button_press_event(self, x, y, 2, guiEvent=evt)
10871099

10881100
def _onMiddleButtonDClick(self, evt):
10891101
"""Start measuring on an axis."""
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,
10951107
dblclick=True, guiEvent=evt)
10961108

@@ -1100,8 +1112,7 @@ def _onMiddleButtonUp(self, evt):
11001112
y = self.figure.bbox.height - evt.GetY()
11011113
# print 'release button', 1
11021114
evt.Skip()
1103-
if self.HasCapture():
1104-
self.ReleaseMouse()
1115+
self._set_capture(False)
11051116
FigureCanvasBase.button_release_event(self, x, y, 2, guiEvent=evt)
11061117

11071118
def _onMouseWheel(self, evt):

0 commit comments

Comments
 (0)
0