-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
added modifier key tracking in MouseEvents #6159
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Do you want to take a crack at making this work for the other backends? |
lib/matplotlib/backend_bases.py
Outdated
@@ -1886,7 +1891,7 @@ def scroll_event(self, x, y, step, guiEvent=None): | |||
step=step, guiEvent=guiEvent) | |||
self.callbacks.process(s, mouseevent) | |||
|
|||
def button_press_event(self, x, y, button, dblclick=False, guiEvent=None): | |||
def button_press_event(self, x, y, button, dblclick=False, modifiers=None, guiEvent=None): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please put new kwargs last.
I'll take a look. |
@@ -254,8 +254,11 @@ def mousePressEvent(self, event): | |||
# flipy so y=0 is bottom of canvas | |||
y = self.figure.bbox.height - event.pos().y() | |||
button = self.buttond.get(event.button()) | |||
modifiers = "+".join([name for name, mod_key, qt_key in MODIFIER_KEYS | |||
if (int(event.modifiers()) & mod_key) == mod_key]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe make modifiers a set
instead of a string like "ctrl+alt"
? Also, I think this could be simplified to
name for name, mod_key, _ in MODIFIER_KEYS if event.modifiers() & mod_key
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since 2.1 is dropping 2.6 support, you write that in a set comprehension style.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have already dropped 2.6 support (but test it on the 1.5.x because we are nice).
You'll want to update the docs as well, both to mention the existence of [FYI for context @mdboom @tacaswell: @jerryz123's an undergrad working with @stefanv and me on viscm-stuff, and this came out of that.] |
9c93c36
to
5ee60ba
Compare
Could someone take a look at this? I've added support for tk, gtk, qt, and wx. |
@tacaswell Do you know who is familiar enough with the mac backend to give Jerry a hand? |
@mdboom probably. The mac backend just had some (major!) changes land. It On Mon, Apr 4, 2016 at 10:43 PM Stefan van der Walt <
|
5ee60ba
to
1d4569b
Compare
The mac backend appears to use modifiers to alter the button clicked. A Ctrl+Click registers as a right button click, while an Alt+Click registers as a middle button click. Should this be changed? |
I am leaning towards yes on changing the behavior of the mac backend. The single-button external mice seem to have died and I think on all of the fancy trackpads are now multi touch (so 2 and 3 finger taps/clicks are the right/middle mouse events). |
@jerryz123 Are you still interested in working on this? |
6d441fa
to
00ea2fb
Compare
00ea2fb
to
4ea0405
Compare
@tacaswell Sorry for the delay. I have adjusted the mac behavior so that modifier keys are preserved on mouse clicks. What would be the correct way to get test coverage over modifier key behavior? |
We have some test of the qt5 backend which feed synthetic events through. We don't have good tests for the other backends other than manually testing by devs. |
And the delay is as much on our side! |
This seems useful if @jerryz123 or someone else had time to rebase and get it working again... |
Superseded by #23473. Thanks for initiating the work on this! |
Problem:
Currently, modifier keys in MouseEvents are only recognized if the FigureCanvas received a KeyEvent with the MouseEvent. However, in situations where the FigureCanvas does not receive keyboard focus, no KeyEvent is received, and thus the modifier-key is lost.
Solution
Modifier-key info should be carried in the MouseEvent created by a button_press_event. Add a modifiers field to mouse_events to track modifier-key status. I have updated the qt5 backend to account for this, but this can easily be extended to other backends.