Bug 457280 - When WindowHeap-based effects are activated with a screen corner, they immediately deactivate if you keep pushing your cursor into the corner
Summary: When WindowHeap-based effects are activated with a screen corner, they immedi...
Alias: None
Product: kwin
Classification: Plasma
Component: effects-various (show other bugs)
Version: 5.25.5
Platform: openSUSE Linux
: VHI major
Target Milestone: ---
Assignee: KWin default assignee
Keywords: accessibility, regression, usability
Depends on:
Reported: 2022-07-29 18:57 UTC by Just Anig
Modified: 2022-09-13 17:26 UTC (History)
5 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.26


Note You need to log in before you can comment on or make changes to this bug.
Description Just Anig 2022-07-29 18:57:09 UTC
Hello, I suffer from Essential tremor. My hand is trembling slightly (involuntarily). 
In 5.25, something subtly changed about how the screen edge is triggered - since then, I cannot use the desktop grid effect anymore. 
Instead of triggering the overview, it triggers it, and then when my mouse cursor moves slightly, seemingly immediately registers the screen edge trigger again, reverting the overview effect. Sometimes multiple times, leading to a flickering between desktop grid and regular desktop.
This was not the case previously; It would be great if you could restore the behaviour from 5.24, where this problem was not present for me.

KDE Plasma Version: 5.25.3
KDE Frameworks Version: 5.96.0
Qt Version: 5.15.0
Comment 1 Nate Graham 2022-08-01 19:10:31 UTC
Can reproduce. The issue seems to be that when you move your cursor into the corner, Desktop Grid opens, but if you keep moving it in that same direction, it closes again. All WindowHeap-based effects appear to be affected, but other effcts are not.
Comment 2 ratijas 2022-09-04 23:26:11 UTC
Peek at Desktop is not a "fullscreen effect" like WindowHeap-based ones, but it is also affected. Though if you move a mouse careful and precise enough, you still can trigger any effect without immediately deactivating it. This is a general issue with how corners are currently implemented: KWin should require that a mouse pointer travels some distance from a corner before allowing to trigger it again.
Comment 3 ratijas 2022-09-04 23:32:12 UTC
And it's not just about the corners: screen edges are bugged too. Interestingly, they still work alongside an auto-hidden panel.
Comment 4 Vlad Zahorodnii 2022-09-12 09:26:28 UTC
Screen edges always worked like this. You can increase "reactivation delay". Not sure what better options are. We could allow triggering the edge only once when it glows, but that can regress UX for others. Or we could measure the distance how much the cursor moved and allow triggering the edge only if the cursor moved half of the approach geometry, it has its own cons though.
Comment 5 ratijas 2022-09-12 09:37:31 UTC
Let's call it "basketball strategy": if you made it into a corner, you need to get it out of that corner's (invisible) zone before you can attempt "trowing" again.

And I don't see any problems with that, tbh.

> You can increase "reactivation delay". 

Are you saying that I (and others in this bug report) somehow cranked this delay down to zero?
Comment 6 Vlad Zahorodnii 2022-09-12 12:37:50 UTC
At the moment, the best option is to crank the reactivation delay, yes. 

> you need to get it out of that corner's (invisible) zone before you can attempt "trowing" again

that's what I suggested with "triggering the edge only once when it glows", but one could argue that if user moves the cursor enough away from the edge while it still glows and moves back to the screen edge, the screen edge should trigger
Comment 7 Bug Janitor Service 2022-09-13 14:49:34 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/kwin/-/merge_requests/2939
Comment 8 Nate Graham 2022-09-13 17:26:14 UTC
Git commit 9965ca7fc08da069589d015a78296941745e0f7d by Nate Graham, on behalf of Marco Martin.
Committed on 13/09/2022 at 17:26.
Pushed by ngraham into branch 'master'.

Reset the count while the user keeps moving the mouse

re-trigger the edge *only* if the user keeps the mouse still for at
least edges()->reActivationThreshold() - edges()->timeThreshold()

so that the user has to actually keep moving.
if the user keeps moving the cursor in the direction of the edge, it
wion't continuously retrigger it

M  +2    -0    src/screenedge.cpp