From 29e7d8dd9ff592c45785ad0791573150a0845278 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 31 Mar 2025 22:09:22 +0100 Subject: [PATCH 1/3] Don't drag draggables on scroll events --- lib/matplotlib/offsetbox.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index 56b10c785ff9..f3506daea932 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1486,7 +1486,15 @@ def finalize_offset(self): def __init__(self, ref_artist, use_blit=False): self.ref_artist = ref_artist if not ref_artist.pickable(): - ref_artist.set_picker(True) + ref_artist.set_picker( + lambda artist, mouseevent: ( + ( + artist.contains(mouseevent) and + mouseevent.name != "scroll_event" + ), + {} + ) + ) self.got_artist = False self._use_blit = use_blit and self.canvas.supports_blit callbacks = self.canvas.callbacks From c77e9d555de041df77650d798ef81e0f619cf15e Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 31 Mar 2025 22:27:55 +0100 Subject: [PATCH 2/3] Move picker to method --- lib/matplotlib/offsetbox.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index f3506daea932..28f91553819e 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1486,15 +1486,7 @@ def finalize_offset(self): def __init__(self, ref_artist, use_blit=False): self.ref_artist = ref_artist if not ref_artist.pickable(): - ref_artist.set_picker( - lambda artist, mouseevent: ( - ( - artist.contains(mouseevent) and - mouseevent.name != "scroll_event" - ), - {} - ) - ) + ref_artist.set_picker(self._picker) self.got_artist = False self._use_blit = use_blit and self.canvas.supports_blit callbacks = self.canvas.callbacks @@ -1508,6 +1500,10 @@ def __init__(self, ref_artist, use_blit=False): ] ] + @staticmethod + def _picker(artist, mouseevent): + return (artist.contains(mouseevent) and mouseevent.name != "scroll_event"), {} + # A property, not an attribute, to maintain picklability. canvas = property(lambda self: self.ref_artist.get_figure(root=True).canvas) cids = property(lambda self: [ From 0622c25348b42decb1de3400efe90b20e755d8b9 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Wed, 2 Apr 2025 15:44:58 +0100 Subject: [PATCH 3/3] Add comment to new method --- lib/matplotlib/offsetbox.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index 28f91553819e..7ac89450c813 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1502,6 +1502,7 @@ def __init__(self, ref_artist, use_blit=False): @staticmethod def _picker(artist, mouseevent): + # A custom picker to prevent dragging on mouse scroll events return (artist.contains(mouseevent) and mouseevent.name != "scroll_event"), {} # A property, not an attribute, to maintain picklability.