swipeTracker: Add allowLongSwipes property

Since we now have the ability to support swiping through multiple pages,
expose it as a property.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1647>
This commit is contained in:
Alexander Mikhaylenko 2021-02-08 01:02:58 +05:00 committed by Georges Basile Stavracas Neto
parent 10cafc55c1
commit 16f74ebc57

View File

@ -389,6 +389,10 @@ var SwipeTracker = GObject.registerClass({
'distance', 'distance', 'distance', 'distance', 'distance', 'distance',
GObject.ParamFlags.READWRITE, GObject.ParamFlags.READWRITE,
0, Infinity, 0), 0, Infinity, 0),
'allow-long-swipes': GObject.ParamSpec.boolean(
'allow-long-swipes', 'allow-long-swipes', 'allow-long-swipes',
GObject.ParamFlags.READWRITE,
false),
'scroll-modifiers': GObject.ParamSpec.flags( 'scroll-modifiers': GObject.ParamSpec.flags(
'scroll-modifiers', 'scroll-modifiers', 'scroll-modifiers', 'scroll-modifiers', 'scroll-modifiers', 'scroll-modifiers',
GObject.ParamFlags.READWRITE, GObject.ParamFlags.READWRITE,
@ -406,6 +410,7 @@ var SwipeTracker = GObject.registerClass({
this._allowedModes = allowedModes; this._allowedModes = allowedModes;
this._enabled = true; this._enabled = true;
this._allowLongSwipes = false;
this._distance = global.screen_height; this._distance = global.screen_height;
this._history = new EventHistory(); this._history = new EventHistory();
this._reset(); this._reset();
@ -597,8 +602,11 @@ var SwipeTracker = GObject.registerClass({
this._progress += delta / distance; this._progress += delta / distance;
this._history.append(time, delta); this._history.append(time, delta);
this._progress = Math.clamp(this._progress, const [lower, upper] = this.allowLongSwipes
...this._getBounds(this._initialProgress)); ? [this._snapPoints[0], this._snapPoints[this._snapPoints.length - 1]]
: this._getBounds(this._initialProgress);
this._progress = Math.clamp(this._progress, lower, upper);
this.emit('update', this._progress); this.emit('update', this._progress);
} }
@ -628,7 +636,9 @@ var SwipeTracker = GObject.registerClass({
} }
pos = pos * Math.sign(velocity) + this._progress; pos = pos * Math.sign(velocity) + this._progress;
pos = Math.clamp(pos, ...this._getBounds(this._initialProgress));
if (!this.allowLongSwipes)
pos = Math.clamp(pos, ...this._getBounds(this._initialProgress));
const index = this._findPointForProjection(pos, velocity); const index = this._findPointForProjection(pos, velocity);