Skip to content

Commit 68519be

Browse files
authored
Prepare settings listeners (#187)
1 parent e9ca4a9 commit 68519be

File tree

12 files changed

+142
-11
lines changed

12 files changed

+142
-11
lines changed

lib/services/settings_service.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:ui';
2+
13
import 'package:gsettings/gsettings.dart';
24

35
class SettingsService {
@@ -21,6 +23,15 @@ class Settings {
2123
: _settings = GSettings(schemaId: schemaId, path: path);
2224

2325
final GSettings _settings;
26+
final _listeners = <VoidCallback>{};
27+
28+
void addListener(VoidCallback listener) => _listeners.add(listener);
29+
void removeListener(VoidCallback listener) => _listeners.remove(listener);
30+
void notifyListeners() {
31+
for (final listener in _listeners) {
32+
listener();
33+
}
34+
}
2435

2536
void dispose() => _settings.dispose();
2637

lib/view/pages/accessibility/accessibility_model.dart

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,31 @@ class AccessibilityModel extends ChangeNotifier {
6868
_interfaceSettings = service.lookup(schemaInterface),
6969
_peripheralsMouseSettings = service.lookup(schemaPeripheralsMouse),
7070
_peripheralsKeyboardSettings =
71-
service.lookup(schemaPeripheralsKeyboard);
71+
service.lookup(schemaPeripheralsKeyboard) {
72+
_desktopA11Settings?.addListener(notifyListeners);
73+
_a11yAppsSettings?.addListener(notifyListeners);
74+
_a11yKeyboardSettings?.addListener(notifyListeners);
75+
_a11yMagnifierSettings?.addListener(notifyListeners);
76+
_a11yMouseSettings?.addListener(notifyListeners);
77+
_wmPreferencesSettings?.addListener(notifyListeners);
78+
_interfaceSettings?.addListener(notifyListeners);
79+
_peripheralsMouseSettings?.addListener(notifyListeners);
80+
_peripheralsKeyboardSettings?.addListener(notifyListeners);
81+
}
82+
83+
@override
84+
void dispose() {
85+
_desktopA11Settings?.removeListener(notifyListeners);
86+
_a11yAppsSettings?.removeListener(notifyListeners);
87+
_a11yKeyboardSettings?.removeListener(notifyListeners);
88+
_a11yMagnifierSettings?.removeListener(notifyListeners);
89+
_a11yMouseSettings?.removeListener(notifyListeners);
90+
_wmPreferencesSettings?.removeListener(notifyListeners);
91+
_interfaceSettings?.removeListener(notifyListeners);
92+
_peripheralsMouseSettings?.removeListener(notifyListeners);
93+
_peripheralsKeyboardSettings?.removeListener(notifyListeners);
94+
super.dispose();
95+
}
7296

7397
final Settings? _desktopA11Settings;
7498
final Settings? _a11yAppsSettings;

lib/view/pages/appearance/appearance_model.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,15 @@ class AppearanceModel extends ChangeNotifier {
1212
static const _clickActionKey = 'click-action';
1313

1414
AppearanceModel(SettingsService service)
15-
: _dashToDockSettings = service.lookup(schemaDashToDock);
15+
: _dashToDockSettings = service.lookup(schemaDashToDock) {
16+
_dashToDockSettings?.addListener(notifyListeners);
17+
}
18+
19+
@override
20+
void dispose() {
21+
_dashToDockSettings?.removeListener(notifyListeners);
22+
super.dispose();
23+
}
1624

1725
final Settings? _dashToDockSettings;
1826

lib/view/pages/keyboard_shortcuts/keyboard_shortcuts_model.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,15 @@ class KeyboardShortcutsModel extends ChangeNotifier {
55
final String schemaId;
66

77
KeyboardShortcutsModel(SettingsService service, {required this.schemaId})
8-
: _shortcutSettings = service.lookup(schemaId);
8+
: _shortcutSettings = service.lookup(schemaId) {
9+
_shortcutSettings?.addListener(notifyListeners);
10+
}
11+
12+
@override
13+
void dispose() {
14+
_shortcutSettings?.removeListener(notifyListeners);
15+
super.dispose();
16+
}
917

1018
final Settings? _shortcutSettings;
1119

lib/view/pages/mouse_and_touchpad/mouse_and_touchpad_model.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,18 @@ class MouseAndTouchpadModel extends ChangeNotifier {
1313
MouseAndTouchpadModel(SettingsService service)
1414
: _peripheralsMouseSettings =
1515
service.lookup(schemaDesktopPeripheralsMouse),
16-
_peripheralsTouchpadSettings = service.lookup(schemaPeripheralTouchpad);
16+
_peripheralsTouchpadSettings =
17+
service.lookup(schemaPeripheralTouchpad) {
18+
_peripheralsMouseSettings?.addListener(notifyListeners);
19+
_peripheralsTouchpadSettings?.addListener(notifyListeners);
20+
}
21+
22+
@override
23+
void dispose() {
24+
_peripheralsMouseSettings?.removeListener(notifyListeners);
25+
_peripheralsTouchpadSettings?.removeListener(notifyListeners);
26+
super.dispose();
27+
}
1728

1829
final Settings? _peripheralsMouseSettings;
1930
final Settings? _peripheralsTouchpadSettings;

lib/view/pages/notifications/notifications_model.dart

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@ class NotificationsModel extends ChangeNotifier {
77
static const _showInLockScreenKey = 'show-in-lock-screen';
88

99
NotificationsModel(SettingsService service)
10-
: _notificationSettings = service.lookup(schemaNotifications);
10+
: _notificationSettings = service.lookup(schemaNotifications) {
11+
_notificationSettings?.addListener(notifyListeners);
12+
}
13+
14+
@override
15+
void dispose() {
16+
_notificationSettings?.removeListener(notifyListeners);
17+
super.dispose();
18+
}
1119

1220
final Settings? _notificationSettings;
1321

@@ -44,7 +52,15 @@ class AppNotificationsModel extends ChangeNotifier {
4452

4553
AppNotificationsModel(this.appId, SettingsService service)
4654
: _appNotificationSettings =
47-
service.lookup(_appSchemaId, path: _getPath(appId));
55+
service.lookup(_appSchemaId, path: _getPath(appId)) {
56+
_appNotificationSettings?.addListener(notifyListeners);
57+
}
58+
59+
@override
60+
void dispose() {
61+
_appNotificationSettings?.removeListener(notifyListeners);
62+
super.dispose();
63+
}
4864

4965
final String appId;
5066
final Settings? _appNotificationSettings;

lib/view/pages/power/power_settings_model.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ class SuspendModel extends SafeChangeNotifier {
2020
_sessionSettings = settings.lookup(_kSessionSchema),
2121
_powerService = power,
2222
_bluetoothService = bluetooth,
23-
_networkManager = network;
23+
_networkManager = network {
24+
_daemonSettings?.addListener(notifyListeners);
25+
_sessionSettings?.addListener(notifyListeners);
26+
}
2427

2528
final Settings? _daemonSettings;
2629
final Settings? _sessionSettings;
@@ -53,6 +56,8 @@ class SuspendModel extends SafeChangeNotifier {
5356

5457
@override
5558
Future<void> dispose() async {
59+
_daemonSettings?.removeListener(notifyListeners);
60+
_sessionSettings?.removeListener(notifyListeners);
5661
await _airplaneMode?.cancel();
5762
await _screenBrightness?.cancel();
5863
await _keyboardBrightness?.cancel();

lib/view/pages/power/suspend_model.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,17 @@ const _kInterfaceSchema = 'org.gnome.desktop.interface';
88
class SuspendModel extends SafeChangeNotifier {
99
SuspendModel(SettingsService settings)
1010
: _daemonSettings = settings.lookup(_kDaemonSchema),
11-
_interfaceSettings = settings.lookup(_kInterfaceSchema);
11+
_interfaceSettings = settings.lookup(_kInterfaceSchema) {
12+
_daemonSettings?.addListener(notifyListeners);
13+
_interfaceSettings?.addListener(notifyListeners);
14+
}
15+
16+
@override
17+
void dispose() {
18+
_daemonSettings?.removeListener(notifyListeners);
19+
_interfaceSettings?.removeListener(notifyListeners);
20+
super.dispose();
21+
}
1222

1323
final Settings? _daemonSettings;
1424
final Settings? _interfaceSettings;

lib/view/pages/removable_media/removable_media_model.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,15 @@ class RemovableMediaModel extends SafeChangeNotifier {
3535
final Settings? _removableMediaSettings;
3636

3737
RemovableMediaModel(SettingsService service)
38-
: _removableMediaSettings = service.lookup(schemaMediaHandling);
38+
: _removableMediaSettings = service.lookup(schemaMediaHandling) {
39+
_removableMediaSettings?.addListener(notifyListeners);
40+
}
41+
42+
@override
43+
void dispose() {
44+
_removableMediaSettings?.removeListener(notifyListeners);
45+
super.dispose();
46+
}
3947

4048
// autorun-never
4149
final _autoRunNeverKey = 'autorun-never';

lib/view/pages/sound/sound_model.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,15 @@ class SoundModel extends ChangeNotifier {
88
static const _inputFeedbackSounds = 'input-feedback-sounds';
99

1010
SoundModel(SettingsService service)
11-
: _soundSettings = service.lookup(schemaSound);
11+
: _soundSettings = service.lookup(schemaSound) {
12+
_soundSettings?.addListener(notifyListeners);
13+
}
14+
15+
@override
16+
void dispose() {
17+
_soundSettings?.removeListener(notifyListeners);
18+
super.dispose();
19+
}
1220

1321
final Settings? _soundSettings;
1422

0 commit comments

Comments
 (0)