@@ -2,13 +2,55 @@ import Adw from 'gi://Adw';
22import Gio from 'gi://Gio' ;
33import Gtk from 'gi://Gtk' ;
44import { 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
635export 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 }
0 commit comments