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
@ -771,11 +771,27 @@ class WorkspacesDisplay extends St.Widget {
|
|||||||
if (event.is_pointer_emulated())
|
if (event.is_pointer_emulated())
|
||||||
return Clutter.EVENT_PROPAGATE;
|
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;
|
let workspaceManager = global.workspace_manager;
|
||||||
const vertical = workspaceManager.layout_rows === -1;
|
const vertical = workspaceManager.layout_rows === -1;
|
||||||
let activeWs = workspaceManager.get_active_workspace();
|
let activeWs = workspaceManager.get_active_workspace();
|
||||||
let ws;
|
let ws;
|
||||||
switch (event.get_scroll_direction()) {
|
switch (direction) {
|
||||||
case Clutter.ScrollDirection.UP:
|
case Clutter.ScrollDirection.UP:
|
||||||
if (vertical)
|
if (vertical)
|
||||||
ws = activeWs.get_neighbor(Meta.MotionDirection.UP);
|
ws = activeWs.get_neighbor(Meta.MotionDirection.UP);
|
||||||
|
Loading…
Reference in New Issue
Block a user