From 9b34b25ab35897e74d452e82352f6bdf4fbefc02 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Sat, 22 Oct 2022 05:50:11 -0400 Subject: [PATCH] Fix key reporting in pick events Fixes #24199 --- lib/matplotlib/figure.py | 6 ++---- lib/matplotlib/tests/test_backend_bases.py | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index 3be5b0685d69..23d8cd73a194 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -2445,10 +2445,6 @@ def __init__(self, # pickling. self._canvas_callbacks = cbook.CallbackRegistry( signals=FigureCanvasBase.events) - self._button_pick_id = self._canvas_callbacks._connect_picklable( - 'button_press_event', self.pick) - self._scroll_pick_id = self._canvas_callbacks._connect_picklable( - 'scroll_event', self.pick) connect = self._canvas_callbacks._connect_picklable self._mouse_key_ids = [ connect('key_press_event', backend_bases._key_handler), @@ -2459,6 +2455,8 @@ def __init__(self, connect('scroll_event', backend_bases._mouse_handler), connect('motion_notify_event', backend_bases._mouse_handler), ] + self._button_pick_id = connect('button_press_event', self.pick) + self._scroll_pick_id = connect('scroll_event', self.pick) if figsize is None: figsize = mpl.rcParams['figure.figsize'] diff --git a/lib/matplotlib/tests/test_backend_bases.py b/lib/matplotlib/tests/test_backend_bases.py index 96d2f3afcd55..4cbd1bc98b67 100644 --- a/lib/matplotlib/tests/test_backend_bases.py +++ b/lib/matplotlib/tests/test_backend_bases.py @@ -2,7 +2,7 @@ from matplotlib import path, transforms from matplotlib.backend_bases import ( - FigureCanvasBase, LocationEvent, MouseButton, MouseEvent, + FigureCanvasBase, KeyEvent, LocationEvent, MouseButton, MouseEvent, NavigationToolbar2, RendererBase) from matplotlib.backend_tools import RubberbandBase from matplotlib.figure import Figure @@ -124,12 +124,18 @@ def test_pick(): fig = plt.figure() fig.text(.5, .5, "hello", ha="center", va="center", picker=True) fig.canvas.draw() + picks = [] - fig.canvas.mpl_connect("pick_event", lambda event: picks.append(event)) - start_event = MouseEvent( - "button_press_event", fig.canvas, *fig.transFigure.transform((.5, .5)), - MouseButton.LEFT) - fig.canvas.callbacks.process(start_event.name, start_event) + def handle_pick(event): + assert event.mouseevent.key == "a" + picks.append(event) + fig.canvas.mpl_connect("pick_event", handle_pick) + + KeyEvent("key_press_event", fig.canvas, "a")._process() + MouseEvent("button_press_event", fig.canvas, + *fig.transFigure.transform((.5, .5)), + MouseButton.LEFT)._process() + KeyEvent("key_release_event", fig.canvas, "a")._process() assert len(picks) == 1