Skip to content

Commit c05bb71

Browse files
committed
Draft: new UI to customize gestures
1 parent f0edc2c commit c05bb71

File tree

13 files changed

+350
-175
lines changed

13 files changed

+350
-175
lines changed

extension/common/prefs.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,22 @@ function display_in_log_scale(key: DoubleSettingsKeys, label_key: AllUIObjectKey
7070
* @param settings setting object of extension
7171
*/
7272
function bindPrefsSettings(builder: GtkBuilder, settings: Gio.Settings) {
73+
bind_combo_box('swipe-horizontal-3-finger-gesture', settings, builder);
74+
bind_combo_box('swipe-vertical-3-finger-gesture', settings, builder);
75+
bind_combo_box('pinch-3-finger-gesture', settings, builder);
76+
bind_combo_box('pinch-4-finger-gesture', settings, builder);
7377

7478
display_in_log_scale('touchpad-speed-scale', 'touchpad-speed-scale_display-value', settings, builder);
7579
display_in_log_scale('touchpad-pinch-speed', 'touchpad-pinch-speed_display-value', settings, builder);
7680

7781
bind_int_value('alttab-delay', settings, builder);
7882
bind_int_value('hold-swipe-delay-duration', settings, builder);
7983

80-
bind_boolean_value('default-session-workspace', settings, builder, Gio.SettingsBindFlags.INVERT_BOOLEAN);
81-
bind_boolean_value('default-overview', settings, builder, Gio.SettingsBindFlags.INVERT_BOOLEAN);
84+
8285
bind_boolean_value('follow-natural-scroll', settings, builder);
8386
bind_boolean_value('default-overview-gesture-direction', settings, builder, Gio.SettingsBindFlags.INVERT_BOOLEAN);
84-
8587
bind_boolean_value('enable-alttab-gesture', settings, builder);
86-
bind_boolean_value('enable-window-manipulation-gesture', settings, builder);
87-
bind_boolean_value('allow-minimize-window', settings, builder);
88-
89-
bind_combo_box('pinch-3-finger-gesture', settings, builder);
90-
bind_combo_box('pinch-4-finger-gesture', settings, builder);
91-
bind_combo_box('overview-navifation-states', settings, builder);
88+
bind_combo_box('overview-navigation-states', settings, builder);
9289
}
9390

9491
function loadCssProvider(styleManager: Adw.StyleManager,uiDir: string) {
@@ -104,6 +101,11 @@ function loadCssProvider(styleManager: Adw.StyleManager,uiDir: string) {
104101
}
105102
}
106103

104+
// TODO: Bind it with gestures.ts `else` part
105+
export function showNotification(prefsWindow: Adw.PreferencesWindow, notification: string) {
106+
prefsWindow.add_toast(Adw.Toast.new(notification));
107+
}
108+
107109
export function buildPrefsWidget(
108110
prefsWindow: Adw.PreferencesWindow,
109111
settings: Gio.Settings,

extension/common/settings.ts

Lines changed: 24 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,9 @@ export enum ForwardBackKeyBinds {
2640
}
2741

2842
export type BooleanSettingsKeys =
29-
'default-session-workspace' |
30-
'default-overview' |
31-
'allow-minimize-window' |
3243
'follow-natural-scroll' |
3344
'enable-alttab-gesture' |
3445
'enable-forward-back-gesture' |
35-
'enable-window-manipulation-gesture' |
3646
'default-overview-gesture-direction'
3747
;
3848

@@ -46,9 +56,13 @@ export type DoubleSettingsKeys =
4656
;
4757

4858
export type EnumSettingsKeys =
59+
'swipe-horizontal-3-finger-gesture' |
60+
'swipe-vertical-3-finger-gesture' |
4961
'pinch-3-finger-gesture' |
62+
'swipe-horizontal-4-finger-gesture' |
63+
'swipe-vertical-4-finger-gesture' |
5064
'pinch-4-finger-gesture' |
51-
'overview-navifation-states'
65+
'overview-navigation-states'
5266
;
5367

5468
export type MiscSettingsKeys =
@@ -71,6 +85,7 @@ export type UIPageObjectIds =
7185
export type AllUIObjectKeys =
7286
UIPageObjectIds |
7387
AllSettingsKeys |
88+
"toast_overlay" |
7489
'touchpad-speed-scale_display-value' |
7590
'touchpad-pinch-speed_display-value'
7691
;
@@ -81,8 +96,10 @@ type Enum_Functions<K extends EnumSettingsKeys, T> = {
8196
}
8297

8398
type SettingsEnumFunctions =
99+
Enum_Functions<'swipe-horizontal-3-finger-gesture' | 'swipe-horizontal-4-finger-gesture', SwipeHorizontalGestureType> &
100+
Enum_Functions<'swipe-vertical-3-finger-gesture' | 'swipe-vertical-4-finger-gesture', SwipeVerticalGestureType> &
84101
Enum_Functions<'pinch-3-finger-gesture' | 'pinch-4-finger-gesture', PinchGestureType> &
85-
Enum_Functions<'overview-navifation-states', OverviewNavigationState>
102+
Enum_Functions<'overview-navigation-states', OverviewNavigationState>
86103
;
87104

88105
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: 53 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';
34
import { AllSettingsKeys, GioSettings, PinchGestureType } 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,13 @@ class Extension {
7370
this._initializeSettings();
7471
this._extensions = [];
7572
if (this.settings === undefined)
76-
return;
77-
78-
if (this.settings.get_boolean('enable-alttab-gesture'))
79-
this._extensions.push(new AltTabGestureExtension());
73+
return;
8074

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());
75+
// TODO: remove it
76+
// if (this.settings.get_boolean('enable-alttab-gesture'))
77+
// this._extensions.push(new AltTabGestureExtension());
78+
79+
this._setSwipeGestures()
9380

9481
// pinch to show desktop
9582
const pinchToFingersMap = this._getPinchGestureTypeAndFingers();
@@ -119,20 +106,62 @@ class Extension {
119106

120107
_initializeSettings() {
121108
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');
109+
// TODO: fix this somewhere, somehow
110+
// ExtSettings.ALLOW_MINIMIZE_WINDOW = this.settings.get_boolean('allow-minimize-window');
111+
125112
ExtSettings.FOLLOW_NATURAL_SCROLL = this.settings.get_boolean('follow-natural-scroll');
126113
ExtSettings.DEFAULT_OVERVIEW_GESTURE_DIRECTION = this.settings.get_boolean('default-overview-gesture-direction');
127114
ExtSettings.APP_GESTURES = this.settings.get_boolean('enable-forward-back-gesture');
128115

116+
129117
TouchpadConstants.SWIPE_MULTIPLIER = Constants.TouchpadConstants.DEFAULT_SWIPE_MULTIPLIER * this.settings.get_double('touchpad-speed-scale');
130118
TouchpadConstants.PINCH_MULTIPLIER = Constants.TouchpadConstants.DEFAULT_PINCH_MULTIPLIER * this.settings.get_double('touchpad-pinch-speed');
131119
AltTabConstants.DELAY_DURATION = this.settings.get_int('alttab-delay');
132120
TouchpadConstants.HOLD_SWIPE_DELAY_DURATION = this.settings.get_int('hold-swipe-delay-duration');
133121
}
134122
}
135123

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

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

Lines changed: 42 additions & 23 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,22 +82,10 @@
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>
69-
<key name="overview-navifation-states" enum="org.gnome.shell.extensions.gestureImprovements.overview-navigation-states">
88+
<key name="overview-navigation-states" enum="org.gnome.shell.extensions.gestureImprovements.overview-navigation-states">
7089
<default>'CYCLIC'</default>
7190
<description>Gesture for 4 finger pinch</description>
7291
</key>

0 commit comments

Comments
 (0)