Skip to content

Commit 3351591

Browse files
authored
Merge pull request #268 from mzur/ego-review
Changes for EGO review
2 parents cdd5235 + dc813d7 commit 3351591

File tree

3 files changed

+75
-40
lines changed

3 files changed

+75
-40
lines changed

[email protected]/prefs.js

Lines changed: 61 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,55 @@ import Adw from 'gi://Adw';
22
import Gio from 'gi://Gio';
33
import Gtk from 'gi://Gtk';
44
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
5+
import {PACKAGE_VERSION} from 'resource:///org/gnome/Shell/Extensions/js/misc/config.js';
6+
7+
// From js/misc/utils.js which can't be imported.
8+
function _GNOMEversionToNumber(version) {
9+
let ret = Number(version);
10+
if (!isNaN(ret))
11+
return ret;
12+
if (version === 'alpha')
13+
return -2;
14+
if (version === 'beta')
15+
return -1;
16+
return ret;
17+
}
18+
19+
function GNOMEversionCompare(version1, version2) {
20+
const v1Array = version1.split('.');
21+
const v2Array = version2.split('.');
22+
23+
for (let i = 0; i < Math.max(v1Array.length, v2Array.length); i++) {
24+
let elemV1 = _GNOMEversionToNumber(v1Array[i] || '0');
25+
let elemV2 = _GNOMEversionToNumber(v2Array[i] || '0');
26+
if (elemV1 < elemV2)
27+
return -1;
28+
if (elemV1 > elemV2)
29+
return 1;
30+
}
31+
32+
return 0;
33+
}
534

635
export default class Prefs extends ExtensionPreferences {
736
fillPreferencesWindow(window) {
8-
this._settings = this.getSettings();
37+
let settings = this.getSettings();
38+
// Avoid garbage collection before window close.
39+
window._settings = settings;
940

1041
const page = new Adw.PreferencesPage();
1142

43+
if (GNOMEversionCompare(PACKAGE_VERSION, '45.1') < 0) {
44+
// window.add_toast(new Adw.Toast({title: 'Test'}));
45+
let group = new Adw.PreferencesGroup();
46+
let banner = new Adw.Banner({
47+
title: _('Some features of the extension are disabled until GNOME Shell 45.1.'),
48+
revealed: true,
49+
});
50+
group.add(banner);
51+
page.add(group);
52+
}
53+
1254
let group = new Adw.PreferencesGroup({
1355
title: _('General Settings'),
1456
});
@@ -19,63 +61,63 @@ export default class Prefs extends ExtensionPreferences {
1961
lower: 1,
2062
upper: 36,
2163
step_increment: 1,
22-
}));
64+
}, settings));
2365

2466
group.add(this._createSpinRow('Number of rows', 'num-rows', {
2567
value: 2,
2668
lower: 1,
2769
upper: 36,
2870
step_increment: 1,
29-
}));
71+
}, settings));
3072

3173
group.add(this._createComboRow('Wraparound mode', 'wraparound-mode', [
3274
'None',
3375
'Next/Previous',
3476
'Rows/Columns',
3577
'Next/Previous Bordered',
36-
]));
78+
], settings));
3779

3880
group = new Adw.PreferencesGroup({
3981
title: _('Popup Settings'),
4082
});
4183
page.add(group);
4284

43-
group.add(this._createSwitcherRow('Show popup', 'show-popup'));
85+
group.add(this._createSwitcherRow('Show popup', 'show-popup', settings));
4486

4587
group.add(this._createSpinRow('Time to show the popup (ms)', 'popup-timeout', {
4688
value: 600,
4789
lower: 0,
4890
upper: 5000,
4991
step_increment: 10,
50-
}));
92+
}, settings));
5193

52-
group.add(this._createSwitcherRow('Show workspace thumbnails in popup', 'show-thumbnails'));
94+
group.add(this._createSwitcherRow('Show workspace thumbnails in popup', 'show-thumbnails', settings));
5395

54-
group.add(this._createSwitcherRow('Show workspace names in popup', 'show-workspace-names'));
96+
group.add(this._createSwitcherRow('Show workspace names in popup', 'show-workspace-names', settings));
5597

56-
group.add(this._createSwitcherRow('Select workspaces with mouse hover in popup', 'enable-popup-workspace-hover'));
98+
group.add(this._createSwitcherRow('Select workspaces with mouse hover in popup', 'enable-popup-workspace-hover', settings));
5799

58100
group.add(this._createSpinRow('Scale of workspace switcher popup', 'scale', {
59101
value: 0.5,
60102
lower: 0.01,
61103
upper: 1.0,
62104
step_increment: 0.01,
63105
digits: 2,
64-
}));
106+
}, settings));
65107

66-
group.add(this._createSwitcherRow('Show popup for all monitors', 'multi-monitor'));
108+
group.add(this._createSwitcherRow('Show popup for all monitors', 'multi-monitor', settings));
67109

68110
group = new Adw.PreferencesGroup({
69111
title: _('Overview Settings'),
70112
});
71113
page.add(group);
72114

73-
group.add(this._createSwitcherRow('Show workspace grid in overview', 'show-overview-grid'));
115+
group.add(this._createSwitcherRow('Show workspace grid in overview', 'show-overview-grid', settings));
74116

75117
window.add(page);
76118
}
77119

78-
_createSpinRow(title, settingsKey, options) {
120+
_createSpinRow(title, settingsKey, options, settings) {
79121
let digits = options.digits ?? 0;
80122
delete options.digits;
81123
const row = new Adw.SpinRow({
@@ -84,28 +126,28 @@ export default class Prefs extends ExtensionPreferences {
84126
adjustment: new Gtk.Adjustment(options),
85127
digits: digits,
86128
});
87-
this._settings.bind(settingsKey, row, 'value', Gio.SettingsBindFlags.DEFAULT);
129+
settings.bind(settingsKey, row, 'value', Gio.SettingsBindFlags.DEFAULT);
88130

89131
return row;
90132
}
91133

92-
_createComboRow(title, settingsKey, strings) {
134+
_createComboRow(title, settingsKey, strings, settings) {
93135
const row = new Adw.ComboRow({
94136
title: _(title),
95137
});
96138
row.set_model(new Gtk.StringList({strings}));
97-
row.connect('notify', (row) => {
98-
this._settings.set_enum(settingsKey, row.selected);
139+
row.connect('notify::selected', (row) => {
140+
settings.set_enum(settingsKey, row.selected);
99141
});
100142

101143
return row;
102144
}
103145

104-
_createSwitcherRow(title, settingsKey) {
146+
_createSwitcherRow(title, settingsKey, settings) {
105147
const row = new Adw.SwitchRow({
106148
title: _(title),
107149
});
108-
this._settings.bind(settingsKey, row, 'active', Gio.SettingsBindFlags.DEFAULT);
150+
settings.bind(settingsKey, row, 'active', Gio.SettingsBindFlags.DEFAULT);
109151

110152
return row;
111153
}

[email protected]/workspacePopup/workspaceManagerOverride.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ export default class WorkspaceManagerOverride {
9595
}
9696

9797
_restoreOriginalProperties() {
98+
if (this.wm._wsmatrixTimeoutId) {
99+
GLib.source_remove(this.wm._wsmatrixTimeoutId);
100+
}
101+
98102
this.overrideProperties.forEach(function (prop) {
99103
this.wm[prop] = this.wm._overrideProperties[prop];
100104
}, this);
@@ -368,11 +372,14 @@ export default class WorkspaceManagerOverride {
368372
this.actionMoveWorkspace(ws);
369373

370374
this._canScroll = false;
371-
GLib.timeout_add(GLib.PRIORITY_DEFAULT,
372-
SCROLL_TIMEOUT_TIME, () => {
373-
this._canScroll = true;
374-
return GLib.SOURCE_REMOVE;
375-
});
375+
// Store the timeout ID to remove it on destroy as per a review requested on
376+
// e.g.o.
377+
this._wsmatrixTimeoutId =
378+
GLib.timeout_add(GLib.PRIORITY_DEFAULT,
379+
SCROLL_TIMEOUT_TIME, () => {
380+
this._canScroll = true;
381+
return GLib.SOURCE_REMOVE;
382+
});
376383

377384
return Clutter.EVENT_STOP;
378385
}

[email protected]/workspacePopup/workspaceSwitcherPopup.js

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -93,28 +93,14 @@ class WorkspaceSwitcherPopup extends SwitcherPopup {
9393
}
9494

9595
showToggle(backward, binding, mask, toggle) {
96-
if (this._noModsTimeoutId !== 0) {
97-
GLib.source_remove(this._noModsTimeoutId);
98-
this._noModsTimeoutId = 0;
99-
}
100-
101-
if (this._popupTimeout > 0 && !this._toggle) {
102-
this._noModsTimeoutId = GLib.timeout_add(
103-
GLib.PRIORITY_DEFAULT,
104-
this._popupTimeout,
105-
() => {
106-
this._finish(global.display.get_current_time_roundtrip());
107-
this._noModsTimeoutId = 0;
108-
return GLib.SOURCE_REMOVE;
109-
});
110-
}
96+
this.resetTimeout();
11197

11298
this._toggle = toggle;
11399
if (this._popupTimeout > 0 || this._toggle) {
114100
mask = 0
115101
}
116102

117-
if (this.show(backward, binding, mask)){
103+
if (this.show(backward, binding, mask)) {
118104
this._showImmediately();
119105
this.opacity = 255;
120106
modals.push(this);

0 commit comments

Comments
 (0)