Skip to content

Automatically capture mouse on windows on mouse down#695

Merged
xStrom merged 3 commits intolinebender:masterfrom
teddemunnik:windows_mouse_capture
Mar 21, 2020
Merged

Automatically capture mouse on windows on mouse down#695
xStrom merged 3 commits intolinebender:masterfrom
teddemunnik:windows_mouse_capture

Conversation

@teddemunnik
Copy link
Contributor

This pull requests adds functionality on windows to automatically capture mouse when the first mouse button down event is received, and holds the capture until the last mouse button is released, as proposed by @raphlinus in #457. This seemed like the best solution, since the standard behavior on Cocoa is to capture all mouse buttons.

Note that there is one windows specific edge case that still needs to be handled by the app, which is dealing with another app stealing mouse capture. Ideally we should expose this event outside of druid-shell to allow the app to do similar processing to mouse up, for example releasing the scroll bar.

self.captured_mouse_buttons &= !(1 << (button as u32));
if self.captured_mouse_buttons == 0 {
unsafe {
ReleaseCapture();
Copy link
Member

Choose a reason for hiding this comment

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

ReleaseCapture can return FALSE in case of error. Let's add some error logging here.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point, added a warn! there :)

@teddemunnik teddemunnik force-pushed the windows_mouse_capture branch from eb0e1d7 to fe40741 Compare March 21, 2020 11:58
Copy link
Member

@xStrom xStrom left a comment

Choose a reason for hiding this comment

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

Thanks for this improvement!

@xStrom xStrom merged commit 821dc39 into linebender:master Mar 21, 2020
@teddemunnik teddemunnik deleted the windows_mouse_capture branch April 9, 2020 20:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants