Skip to content
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

Replace all X11 mouse events with XI2 equivalents #11235

Merged
merged 4 commits into from May 6, 2024

Conversation

someone13574
Copy link
Contributor

@someone13574 someone13574 commented May 1, 2024

This PR replaces all pointer events on X11 with their XI2 equivalents, which fixes problems with scroll events not being reported when a mouse button is down. Additionally it closes #11206 by resetting the tracked global scroll valulator position with None on a leave event to prevent a large scroll delta if scrolling is done outside the window. Lastly, it resolves the bad window issue kvark was having.

Release Notes:

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label May 1, 2024
@maxdeviant maxdeviant changed the title Fix Scroll Snapping After Scroll Outside the Window on X11 Fix scroll snapping after scrolling outside the window on X11 May 1, 2024
@DissolveDZ
Copy link
Contributor

nice!
another thing, when selecting and scrolling nothing will happen but as soon as you stop selecting it will snap to the position you scrolled to while selecting

@someone13574 someone13574 changed the title Fix scroll snapping after scrolling outside the window on X11 Replace all X11 mouse events with XI2 equivalents May 1, 2024
@someone13574
Copy link
Contributor Author

nice! another thing, when selecting and scrolling nothing will happen but as soon as you stop selecting it will snap to the position you scrolled to while selecting

Should be fixed now. Thanks for the report.

@kvark
Copy link
Contributor

kvark commented May 3, 2024

Looks to be working for me, thanks!

@mikayla-maki mikayla-maki merged commit 9a60c0a into zed-industries:main May 6, 2024
8 checks passed
@mikayla-maki
Copy link
Contributor

Thank you!

@mrnugget
Copy link
Member

mrnugget commented May 7, 2024

This broke scrolling with the mouse wheel for me on X11. Should we revert or is forward fixing doable?

@someone13574
Copy link
Contributor Author

someone13574 commented May 7, 2024

This broke scrolling with the mouse wheel for me on X11. Should we revert or is forward fixing doable?

Can you send the output of xinput on your system? Also, in what way is it broken? No scrolling at all? One last question: did scrolling work before this PR but after #11110 ?

@mrnugget
Copy link
Member

mrnugget commented May 7, 2024

$ φ xinput
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Razer Razer DeathAdder V2                 id=8    [slave  pointer  (2)]
⎜   ↳ Razer Razer DeathAdder V2 Keyboard        id=9    [slave  pointer  (2)]
⎜   ↳ Keychron Keychron Q3 Mouse                id=12   [slave  pointer  (2)]
⎜   ↳ Keychron Keychron Q3 Consumer Control     id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Razer Razer DeathAdder V2                 id=10   [slave  keyboard (3)]
    ↳ Keychron Keychron Q3                      id=11   [slave  keyboard (3)]
    ↳ Keychron Keychron Q3 System Control       id=13   [slave  keyboard (3)]
    ↳ Keychron Keychron Q3 Keyboard             id=15   [slave  keyboard (3)]
    ↳ Eee PC WMI hotkeys                        id=16   [slave  keyboard (3)]
    ↳ Razer Razer DeathAdder V2 Keyboard        id=17   [slave  keyboard (3)]
    ↳ Keychron Keychron Q3 Consumer Control     id=18   [slave  keyboard (3)]

I try to scroll with my mouse wheel on the Razer DeathAdder V2 but it just does not work.

I reverted this PR only on main and it worked again.

Do you need any other debug info?

@someone13574
Copy link
Contributor Author

@mrnugget

Are all mouse events broken or just scrolling? Ie. do you get hover diagnostics and do buttons change colour when hovered? If they don’t, then I think the last commit of this PR “defer xi_select_events to flush” is the problem. If other mouse events still work, then I’m not sure until I debug a bit more.

@pgaskin
Copy link

pgaskin commented May 9, 2024

I just started testing Zed on Linux, and I'm really happy with it so far (unlike other non-vscode editors I've tried over the last years).

Scrolling with the mouse wheel is broken for me too, both with a M575 trackball, and over VNC. I'm using i3wm on Fedora 39.

Other mouse events still work fine.

@someone13574
Copy link
Contributor Author

@pgaskin Does it work prior to the merge of this PR? It’s just interesting because this PR didn’t actually change too much to do with scrolling.

@pgaskin
Copy link

pgaskin commented May 9, 2024

I tried reverting the commit, and it still doesn't work. I'll try going back to before this PR later (it takes a very long time to build).

@mrnugget
Copy link
Member

Are all mouse events broken or just scrolling?

It's just the scrolling. I can click and hover and all of that, but scrolling with the wheel doesn't work.

@someone13574
Copy link
Contributor Author

Are all mouse events broken or just scrolling?

It's just the scrolling. I can click and hover and all of that, but scrolling with the wheel doesn't work.

Ok, I’ll throw together a branch in a bit that prints some debug information which hopefully will give the information I need to fix it.

@someone13574
Copy link
Contributor Author

someone13574 commented May 10, 2024

@pgaskin @mrnugget Can you both clone #11679, go to crates/gpui, and run cargo run --example hello_world > scroll_log.txt under x11 and post the log file it generates after scrolling for a few seconds in the window? That should hopefully give enough information to make an attempt at a fix. Thanks a ton.

@someone13574 someone13574 deleted the fix-x11-scroll-snap branch May 10, 2024 20:24
@pgaskin
Copy link

pgaskin commented May 10, 2024

@someone13574
Copy link
Contributor Author

someone13574 commented May 11, 2024

scroll_log_m575.txt scroll_log_vnc.txt

Ok, this is quite interesting. VNC is totally broken, because it doesn't seem to have the master pointer, but the more interesting thing is the m575. It seems to have the scroll valuators and is generating scroll deltas, but no scroll is occuring. I've updated #11679 to print a bit more information about what events are actually being generated and passed to zed. Can you pull the changes and run the above again, but with cargo run > scroll_log.txt using the main project instead of the gpui hello world example? You only need to do this with the m575 (VNC will most likely need to fallback to standard x11 input handling, but that is a separate issue from the one affecting your m575).

@mrnugget
Copy link
Member

Here's mine:

scroll_log.txt from hello_world

Hope I did it right, because there's nothing to scroll in that window and I just used the mouse wheel.

Here's the output when doing cargo run in your branch:

motion event: ButtonPressEvent { response_type: 35, extension: 131, sequence: 2820, length: 24, event_type: 6, deviceid: 2, time: 7786197, detail: 0, root: 483, event: 67108865, child: 0, root_x: 125241488, root_y: 93227416, event_x: 62326928, event_y: 62949784, sourceid: 8, flags: 0, mods: ModifierInfo { base: 0, latched: 0, locked: 0, effective: 0 }, group: GroupInfo { base: 0, latched: 0, locked: 0, effective: 0 }, button_mask: [0, 0, 0, 0, 0, 0, 0, 0], valuator_mask: [8, 0], axisvalues: [Fp3232 { integral: 28800, frac: 0 }] }
vertical valulator (idx=0): 28800
got event: MouseExited(MouseExitEvent { position: Point { x: 760.81165 px, y: 768.0117 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })

motion event: ButtonPressEvent { response_type: 35, extension: 131, sequence: 2821, length: 24, event_type: 6, deviceid: 2, time: 7786215, detail: 0, root: 483, event: 67108865, child: 0, root_x: 125241488, root_y: 93227416, event_x: 62326928, event_y: 62949784, sourceid: 8, flags: 0, mods: ModifierInfo { base: 0, latched: 0, locked: 0, effective: 0 }, group: GroupInfo { base: 0, latched: 0, locked: 0, effective: 0 }, button_mask: [0, 0, 0, 0, 0, 0, 0, 0], valuator_mask: [8, 0], axisvalues: [Fp3232 { integral: 28920, frac: 0 }] }
vertical valulator (idx=0): 28920
got event: MouseExited(MouseExitEvent { position: Point { x: 760.81165 px, y: 768.0117 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })

motion event: ButtonPressEvent { response_type: 35, extension: 131, sequence: 2824, length: 24, event_type: 6, deviceid: 2, time: 7786265, detail: 0, root: 483, event: 67108865, child: 0, root_x: 125241488, root_y: 93227416, event_x: 62326928, event_y: 62949784, sourceid: 8, flags: 0, mods: ModifierInfo { base: 0, latched: 0, locked: 0, effective: 0 }, group: GroupInfo { base: 0, latched: 0, locked: 0, effective: 0 }, button_mask: [0, 0, 0, 0, 0, 0, 0, 0], valuator_mask: [8, 0], axisvalues: [Fp3232 { integral: 29040, frac: 0 }] }
vertical valulator (idx=0): 29040
got event: MouseExited(MouseExitEvent { position: Point { x: 760.81165 px, y: 768.0117 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })

motion event: ButtonPressEvent { response_type: 35, extension: 131, sequence: 2831, length: 24, event_type: 6, deviceid: 2, time: 7786377, detail: 0, root: 483, event: 67108865, child: 0, root_x: 125241488, root_y: 93227416, event_x: 62326928, event_y: 62949784, sourceid: 8, flags: 0, mods: ModifierInfo { base: 0, latched: 0, locked: 0, effective: 0 }, group: GroupInfo { base: 0, latched: 0, locked: 0, effective: 0 }, button_mask: [0, 0, 0, 0, 0, 0, 0, 0], valuator_mask: [8, 0], axisvalues: [Fp3232 { integral: 28920, frac: 0 }] }
vertical valulator (idx=0): 28920
got event: MouseExited(MouseExitEvent { position: Point { x: 760.81165 px, y: 768.0117 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })

motion event: ButtonPressEvent { response_type: 35, extension: 131, sequence: 2833, length: 24, event_type: 6, deviceid: 2, time: 7786423, detail: 0, root: 483, event: 67108865, child: 0, root_x: 125241488, root_y: 93227416, event_x: 62326928, event_y: 62949784, sourceid: 8, flags: 0, mods: ModifierInfo { base: 0, latched: 0, locked: 0, effective: 0 }, group: GroupInfo { base: 0, latched: 0, locked: 0, effective: 0 }, button_mask: [0, 0, 0, 0, 0, 0, 0, 0], valuator_mask: [8, 0], axisvalues: [Fp3232 { integral: 28800, frac: 0 }] }
vertical valulator (idx=0): 28800
got event: MouseExited(MouseExitEvent { position: Point { x: 760.81165 px, y: 768.0117 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })

motion event: ButtonPressEvent { response_type: 35, extension: 131, sequence: 2835, length: 24, event_type: 6, deviceid: 2, time: 7786457, detail: 0, root: 483, event: 67108865, child: 0, root_x: 125241488, root_y: 93227416, event_x: 62326928, event_y: 62949784, sourceid: 8, flags: 0, mods: ModifierInfo { base: 0, latched: 0, locked: 0, effective: 0 }, group: GroupInfo { base: 0, latched: 0, locked: 0, effective: 0 }, button_mask: [0, 0, 0, 0, 0, 0, 0, 0], valuator_mask: [8, 0], axisvalues: [Fp3232 { integral: 28680, frac: 0 }] }
vertical valulator (idx=0): 28680
got event: MouseExited(MouseExitEvent { position: Point { x: 760.81165 px, y: 768.0117 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
got event: ModifiersChanged(ModifiersChangedEvent { modifiers: Modifiers { control: false, alt: false, shift: false, platform: true, function: false } })
got event: MouseMove(MouseMoveEvent { position: Point { x: 761.0864 px, y: 768.4417 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: true, function: false } })

motion event: ButtonPressEvent { response_type: 35, extension: 131, sequence: 2841, length: 24, event_type: 6, deviceid: 2, time: 7786559, detail: 0, root: 483, event: 67108865, child: 0, root_x: 125261808, root_y: 93227416, event_x: 62347248, event_y: 62949784, sourceid: 8, flags: 0, mods: ModifierInfo { base: 64, latched: 0, locked: 0, effective: 64 }, group: GroupInfo { base: 0, latched: 0, locked: 0, effective: 0 }, button_mask: [0, 0, 0, 0, 0, 0, 0, 0], valuator_mask: [1, 0], axisvalues: [Fp3232 { integral: 1911, frac: 1475528983 }] }
got event: MouseExited(MouseExitEvent { position: Point { x: 760.81165 px, y: 768.0117 px }, pressed_button: None, modifiers: Modifiers { control: false, alt: false, shift: false, platform: false, function: false } })
^C

@someone13574
Copy link
Contributor Author

someone13574 commented May 11, 2024

Here's mine:
...

This is very, very helpful. It seems like mouse leave events are being generated right after you scroll, which messes with the logic this PR added to get the stored scroll position to zero if the mouse leaves so a large delta isn’t generated on return. I’ll see if I can find out why these events are being emitted.

@someone13574
Copy link
Contributor Author

someone13574 commented May 11, 2024

@mrnugget I've pushed a potential fix for this problem. Let me know if it works, and if it doesn't, please send the log. I've made it print some more info about the leave events being generated as well. If this doesn't fix it I'll just switch back to normal x11 leave events.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cla-signed The user has signed the Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Scrolling on X11 snapping when window was out of focus
6 participants