@@ -2,13 +2,55 @@ import Adw from 'gi://Adw';
2
2
import Gio from 'gi://Gio' ;
3
3
import Gtk from 'gi://Gtk' ;
4
4
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
+ }
5
34
6
35
export default class Prefs extends ExtensionPreferences {
7
36
fillPreferencesWindow ( window ) {
8
- this . _settings = this . getSettings ( ) ;
37
+ let settings = this . getSettings ( ) ;
38
+ // Avoid garbage collection before window close.
39
+ window . _settings = settings ;
9
40
10
41
const page = new Adw . PreferencesPage ( ) ;
11
42
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
+
12
54
let group = new Adw . PreferencesGroup ( {
13
55
title : _ ( 'General Settings' ) ,
14
56
} ) ;
@@ -19,63 +61,63 @@ export default class Prefs extends ExtensionPreferences {
19
61
lower : 1 ,
20
62
upper : 36 ,
21
63
step_increment : 1 ,
22
- } ) ) ;
64
+ } , settings ) ) ;
23
65
24
66
group . add ( this . _createSpinRow ( 'Number of rows' , 'num-rows' , {
25
67
value : 2 ,
26
68
lower : 1 ,
27
69
upper : 36 ,
28
70
step_increment : 1 ,
29
- } ) ) ;
71
+ } , settings ) ) ;
30
72
31
73
group . add ( this . _createComboRow ( 'Wraparound mode' , 'wraparound-mode' , [
32
74
'None' ,
33
75
'Next/Previous' ,
34
76
'Rows/Columns' ,
35
77
'Next/Previous Bordered' ,
36
- ] ) ) ;
78
+ ] , settings ) ) ;
37
79
38
80
group = new Adw . PreferencesGroup ( {
39
81
title : _ ( 'Popup Settings' ) ,
40
82
} ) ;
41
83
page . add ( group ) ;
42
84
43
- group . add ( this . _createSwitcherRow ( 'Show popup' , 'show-popup' ) ) ;
85
+ group . add ( this . _createSwitcherRow ( 'Show popup' , 'show-popup' , settings ) ) ;
44
86
45
87
group . add ( this . _createSpinRow ( 'Time to show the popup (ms)' , 'popup-timeout' , {
46
88
value : 600 ,
47
89
lower : 0 ,
48
90
upper : 5000 ,
49
91
step_increment : 10 ,
50
- } ) ) ;
92
+ } , settings ) ) ;
51
93
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 ) ) ;
53
95
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 ) ) ;
55
97
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 ) ) ;
57
99
58
100
group . add ( this . _createSpinRow ( 'Scale of workspace switcher popup' , 'scale' , {
59
101
value : 0.5 ,
60
102
lower : 0.01 ,
61
103
upper : 1.0 ,
62
104
step_increment : 0.01 ,
63
105
digits : 2 ,
64
- } ) ) ;
106
+ } , settings ) ) ;
65
107
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 ) ) ;
67
109
68
110
group = new Adw . PreferencesGroup ( {
69
111
title : _ ( 'Overview Settings' ) ,
70
112
} ) ;
71
113
page . add ( group ) ;
72
114
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 ) ) ;
74
116
75
117
window . add ( page ) ;
76
118
}
77
119
78
- _createSpinRow ( title , settingsKey , options ) {
120
+ _createSpinRow ( title , settingsKey , options , settings ) {
79
121
let digits = options . digits ?? 0 ;
80
122
delete options . digits ;
81
123
const row = new Adw . SpinRow ( {
@@ -84,28 +126,28 @@ export default class Prefs extends ExtensionPreferences {
84
126
adjustment : new Gtk . Adjustment ( options ) ,
85
127
digits : digits ,
86
128
} ) ;
87
- this . _settings . bind ( settingsKey , row , 'value' , Gio . SettingsBindFlags . DEFAULT ) ;
129
+ settings . bind ( settingsKey , row , 'value' , Gio . SettingsBindFlags . DEFAULT ) ;
88
130
89
131
return row ;
90
132
}
91
133
92
- _createComboRow ( title , settingsKey , strings ) {
134
+ _createComboRow ( title , settingsKey , strings , settings ) {
93
135
const row = new Adw . ComboRow ( {
94
136
title : _ ( title ) ,
95
137
} ) ;
96
138
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 ) ;
99
141
} ) ;
100
142
101
143
return row ;
102
144
}
103
145
104
- _createSwitcherRow ( title , settingsKey ) {
146
+ _createSwitcherRow ( title , settingsKey , settings ) {
105
147
const row = new Adw . SwitchRow ( {
106
148
title : _ ( title ) ,
107
149
} ) ;
108
- this . _settings . bind ( settingsKey , row , 'active' , Gio . SettingsBindFlags . DEFAULT ) ;
150
+ settings . bind ( settingsKey , row , 'active' , Gio . SettingsBindFlags . DEFAULT ) ;
109
151
110
152
return row ;
111
153
}
0 commit comments