Skip to content

Commit d5dd23f

Browse files
committed
Draft: new UI to customize gestures
1 parent cce9f80 commit d5dd23f

File tree

12 files changed

+337
-159
lines changed

12 files changed

+337
-159
lines changed

extension/common/settings.ts

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
11
import Gio from '@gi-types/gio2';
22
import GLib from '@gi-types/glib2';
33

4-
// define enum
4+
// define enum for Horizontal motion Gesture
5+
export enum SwipeHorizontalGestureType {
6+
WINDOW_SWITCHING = 0,
7+
APP_NAVIGATION = 1,
8+
WORKSPACE_SWITCHING = 2
9+
}
10+
11+
// define enum for Vertical motion Gestures
12+
export enum SwipeVerticalGestureType {
13+
OVERVIEW_NAVIGATION = 0,
14+
APP_NAVIGATION = 1,
15+
WINDOW_MANIPULATION = 2
16+
}
17+
18+
// define enum for Pinch Gesture
519
export enum PinchGestureType {
620
NONE = 0,
721
SHOW_DESKTOP = 1,
@@ -26,13 +40,13 @@ export enum ForwardBackKeyBinds {
2640
}
2741

2842
export type BooleanSettingsKeys =
29-
'default-session-workspace' |
30-
'default-overview' |
31-
'allow-minimize-window' |
43+
// 'default-session-workspace' |
44+
// 'default-overview' |
45+
// 'allow-minimize-window' |
46+
// 'enable-window-manipulation-gesture' |
3247
'follow-natural-scroll' |
3348
'enable-alttab-gesture' |
3449
'enable-forward-back-gesture' |
35-
'enable-window-manipulation-gesture' |
3650
'default-overview-gesture-direction'
3751
;
3852

@@ -46,9 +60,13 @@ export type DoubleSettingsKeys =
4660
;
4761

4862
export type EnumSettingsKeys =
63+
'swipe-horizontal-3-finger-gesture' |
64+
'swipe-vertical-3-finger-gesture' |
4965
'pinch-3-finger-gesture' |
66+
'swipe-horizontal-4-finger-gesture' |
67+
'swipe-vertical-4-finger-gesture' |
5068
'pinch-4-finger-gesture' |
51-
'overview-navifation-states'
69+
'overview-navigation-states'
5270
;
5371

5472
export type MiscSettingsKeys =
@@ -81,8 +99,10 @@ type Enum_Functions<K extends EnumSettingsKeys, T> = {
8199
}
82100

83101
type SettingsEnumFunctions =
102+
Enum_Functions<'swipe-horizontal-3-finger-gesture' | 'swipe-horizontal-4-finger-gesture', SwipeHorizontalGestureType> &
103+
Enum_Functions<'swipe-vertical-3-finger-gesture' | 'swipe-vertical-4-finger-gesture', SwipeVerticalGestureType> &
84104
Enum_Functions<'pinch-3-finger-gesture' | 'pinch-4-finger-gesture', PinchGestureType> &
85-
Enum_Functions<'overview-navifation-states', OverviewNavigationState>
105+
Enum_Functions<'overview-navigation-states', OverviewNavigationState>
86106
;
87107

88108
type Misc_Functions<K extends MiscSettingsKeys, T extends string> = {

extension/constants.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,21 @@ export const OverviewControlsState = {
2929
HIDDEN_N: 3,
3030
};
3131

32+
// export const ExtSettings = {
33+
// DEFAULT_SESSION_WORKSPACE_GESTURE: false,
34+
// DEFAULT_OVERVIEW_GESTURE: false,
35+
// ALLOW_MINIMIZE_WINDOW: false,
36+
// FOLLOW_NATURAL_SCROLL: true,
37+
// APP_GESTURES: false,
38+
// DEFAULT_OVERVIEW_GESTURE_DIRECTION: true,
39+
// };
40+
3241
export const ExtSettings = {
33-
DEFAULT_SESSION_WORKSPACE_GESTURE: false,
34-
DEFAULT_OVERVIEW_GESTURE: false,
42+
// DEFAULT_SESSION_WORKSPACE_GESTURE: false,
43+
// DEFAULT_OVERVIEW_GESTURE: false, // TODO: remove
3544
ALLOW_MINIMIZE_WINDOW: false,
45+
46+
3647
FOLLOW_NATURAL_SCROLL: true,
3748
APP_GESTURES: false,
3849
DEFAULT_OVERVIEW_GESTURE_DIRECTION: true,

extension/extension.ts

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1+
import Clutter from '@gi-types/clutter';
12
import GLib from '@gi-types/glib2';
23
import { imports } from 'gnome-shell';
3-
import { AllSettingsKeys, GioSettings, PinchGestureType } from './common/settings';
4+
import { AllSettingsKeys, GioSettings, PinchGestureType, SwipeHorizontalGestureType, SwipeVerticalGestureType } from './common/settings';
45
import * as Constants from './constants';
6+
import { SwipeGestureInfo, SwipeGestureToExtensionMapper } from './src/gestures';
57
import { AltTabConstants, ExtSettings, TouchpadConstants } from './constants';
6-
import { AltTabGestureExtension } from './src/altTab';
7-
import { ForwardBackGestureExtension } from './src/forwardBack';
8-
import { GestureExtension } from './src/gestures';
9-
import { OverviewRoundTripGestureExtension } from './src/overviewRoundTrip';
108
import { CloseWindowExtension } from './src/pinchGestures/closeWindow';
119
import { ShowDesktopExtension } from './src/pinchGestures/showDesktop';
12-
import { SnapWindowExtension } from './src/snapWindow';
1310
import * as DBusUtils from './src/utils/dbus';
1411
import * as VKeyboard from './src/utils/keyboard';
1512

@@ -73,23 +70,12 @@ class Extension {
7370
this._initializeSettings();
7471
this._extensions = [];
7572
if (this.settings === undefined)
76-
return;
77-
73+
return;
74+
7875
if (this.settings.get_boolean('enable-alttab-gesture'))
79-
this._extensions.push(new AltTabGestureExtension());
76+
// this._extensions.push(new AltTabGestureExtension());
8077

81-
if (this.settings.get_boolean('enable-forward-back-gesture')) {
82-
const appForwardBackKeyBinds = this.settings.get_value('forward-back-application-keyboard-shortcuts').deepUnpack();
83-
this._extensions.push(new ForwardBackGestureExtension(appForwardBackKeyBinds));
84-
}
85-
86-
this._extensions.push(
87-
new OverviewRoundTripGestureExtension(this.settings.get_enum('overview-navifation-states')),
88-
new GestureExtension(),
89-
);
90-
91-
if (this.settings.get_boolean('enable-window-manipulation-gesture'))
92-
this._extensions.push(new SnapWindowExtension());
78+
this._setSwipeGestures()
9379

9480
// pinch to show desktop
9581
const pinchToFingersMap = this._getPinchGestureTypeAndFingers();
@@ -119,20 +105,60 @@ class Extension {
119105

120106
_initializeSettings() {
121107
if (this.settings) {
122-
ExtSettings.DEFAULT_SESSION_WORKSPACE_GESTURE = this.settings.get_boolean('default-session-workspace');
123-
ExtSettings.DEFAULT_OVERVIEW_GESTURE = this.settings.get_boolean('default-overview');
124-
ExtSettings.ALLOW_MINIMIZE_WINDOW = this.settings.get_boolean('allow-minimize-window');
108+
// TODO: fix this somewhere, somehow
109+
// ExtSettings.ALLOW_MINIMIZE_WINDOW = this.settings.get_boolean('allow-minimize-window');
110+
125111
ExtSettings.FOLLOW_NATURAL_SCROLL = this.settings.get_boolean('follow-natural-scroll');
126112
ExtSettings.DEFAULT_OVERVIEW_GESTURE_DIRECTION = this.settings.get_boolean('default-overview-gesture-direction');
127113
ExtSettings.APP_GESTURES = this.settings.get_boolean('enable-forward-back-gesture');
128114

115+
129116
TouchpadConstants.SWIPE_MULTIPLIER = Constants.TouchpadConstants.DEFAULT_SWIPE_MULTIPLIER * this.settings.get_double('touchpad-speed-scale');
130117
TouchpadConstants.PINCH_MULTIPLIER = Constants.TouchpadConstants.DEFAULT_PINCH_MULTIPLIER * this.settings.get_double('touchpad-pinch-speed');
131118
AltTabConstants.DELAY_DURATION = this.settings.get_int('alttab-delay');
132119
TouchpadConstants.HOLD_SWIPE_DELAY_DURATION = this.settings.get_int('hold-swipe-delay-duration');
133120
}
134121
}
135122

123+
private _setSwipeGestures() {
124+
if (this.settings) {
125+
const swipeHorizontal3FingerGesture = this.settings.get_enum('swipe-horizontal-3-finger-gesture');
126+
const swipeVertical3FingerGesture = this.settings.get_enum('swipe-vertical-3-finger-gesture');
127+
const swipeHorizontal4FingerGesture = this.settings.get_enum('swipe-horizontal-4-finger-gesture');
128+
const swipeVertical4FingerGesture = this.settings.get_enum('swipe-vertical-4-finger-gesture');
129+
130+
const swipeGestureToExtension = new SwipeGestureToExtensionMapper(this.settings)
131+
132+
const swipeHorizontal3FingerGestureInfo = new SwipeGestureInfo(
133+
Clutter.Orientation.HORIZONTAL,
134+
[3], swipeHorizontal3FingerGesture
135+
)
136+
const extension_1 = swipeGestureToExtension.get_extension(swipeHorizontal3FingerGestureInfo)
137+
138+
const swipeVertical3FingerGestureInfo = new SwipeGestureInfo(
139+
Clutter.Orientation.VERTICAL,
140+
[3], swipeVertical3FingerGesture
141+
)
142+
const extension_2 = swipeGestureToExtension.get_extension(swipeVertical3FingerGestureInfo)
143+
144+
const swipeHorizontal4FingerGestureInfo = new SwipeGestureInfo(
145+
Clutter.Orientation.HORIZONTAL,
146+
[4], swipeHorizontal4FingerGesture
147+
)
148+
const extension_3 = swipeGestureToExtension.get_extension(swipeHorizontal4FingerGestureInfo)
149+
150+
const swipeVertical4FingerGestureInfo = new SwipeGestureInfo(
151+
Clutter.Orientation.VERTICAL,
152+
[4], swipeVertical4FingerGesture
153+
)
154+
const extension_4 = swipeGestureToExtension.get_extension(swipeVertical4FingerGestureInfo)
155+
156+
this._extensions.push(
157+
extension_1, extension_2, extension_3, extension_4
158+
);
159+
}
160+
}
161+
136162
private _getPinchGestureTypeAndFingers(): Map<PinchGestureType, number[]> {
137163
if (!this.settings) return new Map();
138164

extension/schemas/org.gnome.shell.extensions.gestureImprovements.gschema.xml

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<schemalist>
3+
<enum id='org.gnome.shell.extensions.gestureImprovements.horizontal-swipe-gestures'>
4+
<value value='0' nick='WINDOW_SWITCHING' />
5+
<value value='1' nick='APP_NAVIGATION' />
6+
<value value='2' nick='WORKSPACE_SWITCHING' />
7+
</enum>
8+
9+
<enum id='org.gnome.shell.extensions.gestureImprovements.vertical-swipe-gestures'>
10+
<value value='0' nick='OVERVIEW_NAVIGATION'>
11+
<value value='1' nick='APP_NAVIGATION' />
12+
<value value='2' nick='WINDOW_MANIPULATION' />
13+
</enum>
14+
315
<enum id='org.gnome.shell.extensions.gestureImprovements.pinch-gestures'>
416
<value value='0' nick='NONE' />
517
<value value='1' nick='SHOW_DESKTOP' />
@@ -12,6 +24,7 @@
1224
<value value='1' nick='GNOME' />
1325
<value value='2' nick='WINDOW_PICKER_ONLY' />
1426
</enum>
27+
1528
<schema id="org.gnome.shell.extensions.gestureImprovements" path="/org/gnome/shell/extensions/gestureImprovements/">
1629
<!-- See also: https://docs.gtk.org/glib/gvariant-format-strings.html -->
1730
<key name="touchpad-speed-scale" type="d">
@@ -26,18 +39,36 @@
2639
<key name="hold-swipe-delay-duration" type="i">
2740
<default>100</default>
2841
</key>
29-
<key name='default-session-workspace' type='b'>
30-
<default>false</default>
31-
<description>If true, use 3-fingers to switch workspace, 4 for windows</description>
42+
43+
<!-- 3 finger gestures -->
44+
<key name="swipe-horizontal-3-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.horizontal-swipe-gestures">
45+
<default>'WINDOW_SWITCHING'</default>
46+
<description>Gesture for 3 finger Left/Right Swipe</description>
47+
</key>
48+
<key name="swipe-vertical-3-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.vertical-swipe-gestures">
49+
<default>'OVERVIEW_NAVIGATION'</default>
50+
<description>Gesture for 3 finger Top/Down Swipe</description>
3251
</key>
33-
<key name='default-overview' type='b'>
34-
<default>false</default>
35-
<description>If true, use 3-fingers for overview gesture, 4 for snapping/tiling</description>
52+
<key name="pinch-3-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.pinch-gestures">
53+
<default>'NONE'</default>
54+
<description>Gesture for 3 finger pinch</description>
3655
</key>
37-
<key name='allow-minimize-window' type='b'>
38-
<default>false</default>
39-
<description>If true, when swipe down on non-maximized window minimizes it</description>
56+
57+
<!-- 4 finger gestures -->
58+
<key name="swipe-horizontal-4-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.horizontal-swipe-gestures">
59+
<default>'WORKSPACE_SWITCHING'</default>
60+
<description>Gesture for 4 finger Left/Right Swipe</description>
61+
</key>
62+
<key name="swipe-vertical-4-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.vertical-swipe-gestures">
63+
<default>'APP_NAVIGATION'</default>
64+
<description>Gesture for 4 finger Top/Down Swipe</description>
65+
</key>
66+
<key name="pinch-4-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.pinch-gestures">
67+
<default>'SHOW_DESKTOP'</default>
68+
<description>Gesture for 4 finger pinch</description>
4069
</key>
70+
71+
4172
<key name='follow-natural-scroll' type='b'>
4273
<default>true</default>
4374
<description>Whether to follow natural scroll for swipe</description>
@@ -51,20 +82,8 @@
5182
<description>Enable alttab gesture</description>
5283
</key>
5384
<key name='enable-forward-back-gesture' type='b'>
54-
<default>false</default>
55-
<description>Enable forward/back keybinding gesture</description>
56-
</key>
57-
<key name='enable-window-manipulation-gesture' type='b'>
5885
<default>true</default>
59-
<description>Enable Window manipulation gesture</description>
60-
</key>
61-
<key name="pinch-3-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.pinch-gestures">
62-
<default>'NONE'</default>
63-
<description>Gesture for 3 finger pinch</description>
64-
</key>
65-
<key name="pinch-4-finger-gesture" enum="org.gnome.shell.extensions.gestureImprovements.pinch-gestures">
66-
<default>'SHOW_DESKTOP'</default>
67-
<description>Gesture for 4 finger pinch</description>
86+
<description>Enable forward/back keybinding gesture</description>
6887
</key>
6988
<key name="overview-navifation-states" enum="org.gnome.shell.extensions.gestureImprovements.overview-navigation-states">
7089
<default>'CYCLIC'</default>

0 commit comments

Comments
 (0)