mirror of
https://github.com/edu4rdshl/gnome-shell.git
synced 2026-07-18 07:34:54 +00:00
workspacesView/workspacesDisplay: Handle smooth events
On X11, the scroll handler can receive smooth events, which should trigger a workspace switch. Handle smooth events by checking their scroll delta, and adjusting the direction depending on these deltas. Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1614 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1603>
This commit is contained in:
parent
cffad8b749
commit
08ac3c7750
1 changed files with 17 additions and 1 deletions
|
|
@ -771,11 +771,27 @@ class WorkspacesDisplay extends St.Widget {
|
|||
if (event.is_pointer_emulated())
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
|
||||
let direction = event.get_scroll_direction();
|
||||
if (direction === Clutter.ScrollDirection.SMOOTH) {
|
||||
const [dx, dy] = event.get_scroll_delta();
|
||||
if (Math.abs(dx) > Math.abs(dy)) {
|
||||
direction = dx < 0
|
||||
? Clutter.ScrollDirection.RIGHT
|
||||
: Clutter.ScrollDirection.LEFT;
|
||||
} else if (Math.abs(dy) > Math.abs(dx)) {
|
||||
direction = dy < 0
|
||||
? Clutter.ScrollDirection.UP
|
||||
: Clutter.ScrollDirection.DOWN;
|
||||
} else {
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
}
|
||||
|
||||
let workspaceManager = global.workspace_manager;
|
||||
const vertical = workspaceManager.layout_rows === -1;
|
||||
let activeWs = workspaceManager.get_active_workspace();
|
||||
let ws;
|
||||
switch (event.get_scroll_direction()) {
|
||||
switch (direction) {
|
||||
case Clutter.ScrollDirection.UP:
|
||||
if (vertical)
|
||||
ws = activeWs.get_neighbor(Meta.MotionDirection.UP);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue