swipeTracker: Optionally require modifiers for scrolling

The design now calls for super-scroll for workspace switching
in the session, however it is currently only possible for
SwipeTracker to either handle scroll events or not.

In order to support the new use case, add a new :scroll-modifiers
property that allows specifying modifiers for which scroll events
are handled.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1612>
This commit is contained in:
Florian Müllner 2021-01-29 21:28:52 +01:00 committed by Marge Bot
parent 26a39bdf78
commit ac8246050d

View File

@ -211,6 +211,10 @@ const ScrollGesture = GObject.registerClass({
'orientation', 'orientation', 'orientation', 'orientation', 'orientation', 'orientation',
GObject.ParamFlags.READWRITE, GObject.ParamFlags.READWRITE,
Clutter.Orientation, Clutter.Orientation.VERTICAL), Clutter.Orientation, Clutter.Orientation.VERTICAL),
'scroll-modifiers': GObject.ParamSpec.flags(
'scroll-modifiers', 'scroll-modifiers', 'scroll-modifiers',
GObject.ParamFlags.READWRITE,
Clutter.ModifierType, 0),
}, },
Signals: { Signals: {
'begin': { param_types: [GObject.TYPE_UINT, GObject.TYPE_DOUBLE, GObject.TYPE_DOUBLE] }, 'begin': { param_types: [GObject.TYPE_UINT, GObject.TYPE_DOUBLE, GObject.TYPE_DOUBLE] },
@ -255,6 +259,10 @@ const ScrollGesture = GObject.registerClass({
if ((this._allowedModes & Main.actionMode) === 0) if ((this._allowedModes & Main.actionMode) === 0)
return false; return false;
if (this.scrollModifiers !== 0 &&
(event.get_state() & this.scrollModifiers) === 0)
return false;
return true; return true;
} }
@ -336,6 +344,10 @@ var SwipeTracker = GObject.registerClass({
'distance', 'distance', 'distance', 'distance', 'distance', 'distance',
GObject.ParamFlags.READWRITE, GObject.ParamFlags.READWRITE,
0, Infinity, 0), 0, Infinity, 0),
'scroll-modifiers': GObject.ParamSpec.flags(
'scroll-modifiers', 'scroll-modifiers', 'scroll-modifiers',
GObject.ParamFlags.READWRITE,
Clutter.ModifierType, 0),
}, },
Signals: { Signals: {
'begin': { param_types: [GObject.TYPE_UINT] }, 'begin': { param_types: [GObject.TYPE_UINT] },
@ -394,6 +406,8 @@ var SwipeTracker = GObject.registerClass({
this._scrollGesture.connect('end', this._endGesture.bind(this)); this._scrollGesture.connect('end', this._endGesture.bind(this));
this.bind_property('enabled', this._scrollGesture, 'enabled', 0); this.bind_property('enabled', this._scrollGesture, 'enabled', 0);
this.bind_property('orientation', this._scrollGesture, 'orientation', 0); this.bind_property('orientation', this._scrollGesture, 'orientation', 0);
this.bind_property('scroll-modifiers',
this._scrollGesture, 'scroll-modifiers', 0);
} else { } else {
this._scrollGesture = null; this._scrollGesture = null;
} }