FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

added modifier key tracking in MouseEvents by jerryz123 · Pull Request #6159 · matplotlib/matplotlib · GitHub

Repository navigation

added modifier key tracking in MouseEvents - #6159

Closed
jerryz123 wants to merge 1 commit into
matplotlib:mainfrom
jerryz123:mouse-event-modifiers
Closed

jerryz123 wants to merge 1 commit into
matplotlib:mainfrom
jerryz123:mouse-event-modifiers

Conversation

Copy link
Copy Markdown

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.

mdboom commented Mar 15, 2016

Copy link
Copy Markdown
Member

Do you want to take a crack at making this work for the other backends?

Comment thread lib/matplotlib/backend_bases.py Outdated
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):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Please put new kwargs last.

tacaswell added this to the 2.1 (next point release) milestone Mar 15, 2016

Copy link
Copy Markdown
Author

I'll take a look.

Comment thread lib/matplotlib/backends/backend_qt5.py Outdated
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])

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

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

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Since 2.1 is dropping 2.6 support, you write that in a set comprehension style.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

We have already dropped 2.6 support (but test it on the 1.5.x because we are nice).

njsmith commented Mar 16, 2016

Copy link
Copy Markdown

You'll want to update the docs as well, both to mention the existence of .modifiers (so that people know it exists!), and probably also to modify the docs for for .key to explain its limitations and why .modifiers is better in most cases.

[FYI for context @mdboom @tacaswell: @jerryz123's an undergrad working with @stefanv and me on viscm-stuff, and this came out of that.]

Copy link
Copy Markdown
Author

Could someone take a look at this?

I've added support for tk, gtk, qt, and wx.

stefanv commented Apr 5, 2016

Copy link
Copy Markdown
Contributor

@tacaswell Do you know who is familiar enough with the mac backend to give Jerry a hand?

Copy link
Copy Markdown
Member

@mdboom probably. The mac backend just had some (major!) changes land. It
would be worth rebasing onto current master.

On Mon, Apr 4, 2016 at 10:43 PM Stefan van der Walt <
notifications@github.com> wrote:

@tacaswell https://github.com/tacaswell Do you know who is familiar
enough with the mac backend to give Jerry a hand?

—
You are receiving this because you were mentioned.

Reply to this email directly or view it on GitHub
#6159 (comment)

jerryz123 force-pushed the mouse-event-modifiers branch from 5ee60ba to 1d4569b Compare April 8, 2016 21:47

Copy link
Copy Markdown
Author

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.
src/_macosx.m

Should this be changed?

Copy link
Copy Markdown
Member

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).

tacaswell modified the milestones: 2.2 (next next feature release), 2.1 (next point release) Aug 13, 2017

Copy link
Copy Markdown
Member

@jerryz123 Are you still interested in working on this?

jerryz123 force-pushed the mouse-event-modifiers branch 6 times, most recently from 6d441fa to 00ea2fb Compare August 13, 2017 09:05
jerryz123 force-pushed the mouse-event-modifiers branch from 00ea2fb to 4ea0405 Compare August 13, 2017 10:10

Copy link
Copy Markdown
Author

@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?

Copy link
Copy Markdown
Member

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.

Copy link
Copy Markdown
Member

And the delay is as much on our side!

jklymak commented Aug 17, 2018

Copy link
Copy Markdown
Member

This seems useful if @jerryz123 or someone else had time to rebase and get it working again...

tacaswell modified the milestones: v3.1.0, v3.2.0 Feb 24, 2019
tacaswell modified the milestones: v3.2.0, v3.3.0 Aug 25, 2019
QuLogic modified the milestones: v3.3.0, v3.4.0 May 27, 2020
jklymak marked this pull request as draft September 8, 2020 02:01
QuLogic modified the milestones: v3.4.0, v3.5.0 Jan 21, 2021
tacaswell modified the milestones: v3.5.0, v3.6.0 Aug 5, 2021
timhoffm modified the milestones: v3.6.0, unassigned Apr 30, 2022
story645 modified the milestones: unassigned, needs sorting Oct 6, 2022

anntzer commented Dec 16, 2022

Copy link
Copy Markdown
Contributor

Superseded by #23473. Thanks for initiating the work on this!

anntzer closed this Dec 16, 2022
tacaswell removed this from the future releases milestone Dec 16, 2022
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants


Back | FazBrowse Home | New Git URL