appDisplay: Add :gesture-modes property

Both the main app grid and folders got a swipe tracker, which is
active in both OVERVIEW and POPUP mode. The result is that two
trackers fight over the same events, and everybody loses.

Address this by adding a :gesture-modes property that determines
the allowed modes for the associated swipe tracker.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4256

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1844>
This commit is contained in:
Florian Müllner 2021-05-11 16:44:29 +02:00
parent 6fc93b78bc
commit 803b944ffd

View File

@ -131,6 +131,12 @@ function _findBestFolderName(apps) {
var BaseAppView = GObject.registerClass({
GTypeFlags: GObject.TypeFlags.ABSTRACT,
Properties: {
'gesture-modes': GObject.ParamSpec.flags(
'gesture-modes', 'gesture-modes', 'gesture-modes',
GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT_ONLY,
Shell.ActionMode, Shell.ActionMode.OVERVIEW),
},
Signals: {
'view-loaded': {},
},
@ -281,8 +287,7 @@ var BaseAppView = GObject.registerClass({
// Swipe
this._swipeTracker = new SwipeTracker.SwipeTracker(this._scrollView,
Clutter.Orientation.HORIZONTAL,
Shell.ActionMode.OVERVIEW | Shell.ActionMode.POPUP);
Clutter.Orientation.HORIZONTAL, this.gestureModes);
this._swipeTracker.orientation = Clutter.Orientation.HORIZONTAL;
this._swipeTracker.connect('begin', this._swipeBegin.bind(this));
this._swipeTracker.connect('update', this._swipeUpdate.bind(this));
@ -2196,6 +2201,7 @@ class FolderView extends BaseAppView {
layout_manager: new Clutter.BinLayout(),
x_expand: true,
y_expand: true,
gesture_modes: Shell.ActionMode.POPUP,
});
// If it not expand, the parent doesn't take into account its preferred_width when allocating