Update sensitivity of the whole row

This commit is contained in:
Romain Vigier
2020-06-15 16:44:12 +02:00
parent a9369f8c20
commit 460237687f
5 changed files with 218 additions and 153 deletions
+20 -8
View File
@@ -36,13 +36,31 @@ if ( shell_minor_version <= 30 ) {
var BackgroundsPreferences = class { var BackgroundsPreferences = class {
constructor() { constructor() {
const settings = extensionUtils.getSettings();
const label = _('Backgrounds'); const label = _('Backgrounds');
const description = _('You can set different backgrounds for day and night.'); const description = _('You can set different backgrounds for day and night.');
const content = new SettingsList(); const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch backgrounds'), new BackgroundsEnabledControl())); content.add_row(new SettingsListRow(_('Switch backgrounds'), new BackgroundsEnabledControl()));
content.add_row(new SettingsListRow(_('Day background'), new TimeBackgroundControl('day')));
content.add_row(new SettingsListRow(_('Night background'), new TimeBackgroundControl('night'))); const day_background_row = new SettingsListRow(_('Day background'), new TimeBackgroundControl('day'));
settings.bind(
'backgrounds-enabled',
day_background_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(day_background_row);
const night_background_row = new SettingsListRow(_('Night background'), new TimeBackgroundControl('night'));
settings.bind(
'backgrounds-enabled',
night_background_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(night_background_row);
return new SettingsPage(label, description, content); return new SettingsPage(label, description, content);
} }
@@ -97,12 +115,6 @@ class TimeBackgroundControl {
preview.set_from_pixbuf(pixbuf); preview.set_from_pixbuf(pixbuf);
}); });
button.connect('file-set', () => settings.set_string(`background-${time}`, button.get_uri())); button.connect('file-set', () => settings.set_string(`background-${time}`, button.get_uri()));
settings.bind(
'backgrounds-enabled',
button,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
settings.connect(`changed::background-${time}`, () => button.set_uri(settings.get_string(`background-${time}`))); settings.connect(`changed::background-${time}`, () => button.set_uri(settings.get_string(`background-${time}`)));
return button; return button;
+20 -8
View File
@@ -36,13 +36,31 @@ if ( shell_minor_version <= 30 ) {
var CommandsPreferences = class { var CommandsPreferences = class {
constructor() { constructor() {
const settings = extensionUtils.getSettings();
const label = _('Commands'); const label = _('Commands');
const description = _('You can set custom commands that will be run when the time of the day changes.'); const description = _('You can set custom commands that will be run when the time of the day changes.');
const content = new SettingsList(); const content = new SettingsList();
content.add_row(new SettingsListRow(_('Use custom commands'), new CommandsEnabledControl())); content.add_row(new SettingsListRow(_('Use custom commands'), new CommandsEnabledControl()));
content.add_row(new SettingsListRow(_('Sunrise'), new SuntimeCommandControl('sunrise')));
content.add_row(new SettingsListRow(_('Sunset'), new SuntimeCommandControl('sunset'))); const day_command_row = new SettingsListRow(_('Sunrise'), new SuntimeCommandControl('sunrise'));
settings.bind(
'commands-enabled',
day_command_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(day_command_row);
const night_command_row = new SettingsListRow(_('Sunset'), new SuntimeCommandControl('sunset'));
settings.bind(
'commands-enabled',
night_command_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(night_command_row);
return new SettingsPage(label, description, content); return new SettingsPage(label, description, content);
} }
@@ -87,12 +105,6 @@ class SuntimeCommandControl {
'text', 'text',
Gio.SettingsBindFlags.DEFAULT Gio.SettingsBindFlags.DEFAULT
); );
settings.bind(
'commands-enabled',
entry,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
return entry; return entry;
} }
+20 -8
View File
@@ -37,13 +37,31 @@ if ( shell_minor_version <= 30 ) {
var CursorThemePreferences = class { var CursorThemePreferences = class {
constructor() { constructor() {
const settings = extensionUtils.getSettings();
const label = _('Cursor theme'); const label = _('Cursor theme');
const description = _('You can set different cursor themes for day and night.'); const description = _('You can set different cursor themes for day and night.');
const content = new SettingsList(); const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch cursor variants'), new CursorVariantsEnabledControl())); content.add_row(new SettingsListRow(_('Switch cursor variants'), new CursorVariantsEnabledControl()));
content.add_row(new SettingsListRow(_('Day variant'), new TimeCursorVariantControl('day')));
content.add_row(new SettingsListRow(_('Night variant'), new TimeCursorVariantControl('night'))); const day_variant_row = new SettingsListRow(_('Day variant'), new TimeCursorVariantControl('day'));
settings.bind(
'cursor-variants-enabled',
day_variant_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(day_variant_row);
const night_variant_row = new SettingsListRow(_('Night variant'), new TimeCursorVariantControl('night'));
settings.bind(
'cursor-variants-enabled',
night_variant_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(night_variant_row);
return new SettingsPage(label, description, content); return new SettingsPage(label, description, content);
} }
@@ -83,12 +101,6 @@ class TimeCursorVariantControl {
'active-id', 'active-id',
Gio.SettingsBindFlags.DEFAULT Gio.SettingsBindFlags.DEFAULT
); );
settings.bind(
'cursor-variants-enabled',
combo,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
return combo; return combo;
} }
+20 -8
View File
@@ -37,13 +37,31 @@ if ( shell_minor_version <= 30 ) {
var IconThemePreferences = class { var IconThemePreferences = class {
constructor() { constructor() {
const settings = extensionUtils.getSettings();
const label = _('Icon theme'); const label = _('Icon theme');
const description = _('You can set different icon themes for day and night.'); const description = _('You can set different icon themes for day and night.');
const content = new SettingsList(); const content = new SettingsList();
content.add_row(new SettingsListRow(_('Switch icon variants'), new IconVariantsEnabledControl())); content.add_row(new SettingsListRow(_('Switch icon variants'), new IconVariantsEnabledControl()));
content.add_row(new SettingsListRow(_('Day variant'), new TimeIconVariantControl('day')));
content.add_row(new SettingsListRow(_('Night variant'), new TimeIconVariantControl('night'))); const day_variant_row = new SettingsListRow(_('Day variant'), new TimeIconVariantControl('day'));
settings.bind(
'icon-variants-enabled',
day_variant_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(day_variant_row);
const night_variant_row = new SettingsListRow(_('Night variant'), new TimeIconVariantControl('night'));
settings.bind(
'icon-variants-enabled',
night_variant_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(night_variant_row);
return new SettingsPage(label, description, content); return new SettingsPage(label, description, content);
} }
@@ -83,12 +101,6 @@ class TimeIconVariantControl {
'active-id', 'active-id',
Gio.SettingsBindFlags.DEFAULT Gio.SettingsBindFlags.DEFAULT
); );
settings.bind(
'icon-variants-enabled',
combo,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
return combo; return combo;
} }
+138 -121
View File
@@ -36,21 +36,155 @@ if ( shell_minor_version <= 30 ) {
var SchedulePreferences = class { var SchedulePreferences = class {
constructor() { constructor() {
const settings = extensionUtils.getSettings();
const label = _('Schedule'); const label = _('Schedule');
const description = _('The extension will try to use Night Light or Location Services to automatically set your current sunrise and sunset times if they are enabled.\n\nIf you prefer, you can manually choose a time source.'); const description = _('The extension will try to use Night Light or Location Services to automatically set your current sunrise and sunset times if they are enabled.\n\nIf you prefer, you can manually choose a time source.');
const content = new SettingsList(); const content = new SettingsList();
content.add_row(new SettingsListRow(_('Manual time source'), new ManualTimeSourceControl())); content.add_row(new SettingsListRow(_('Manual time source'), new ManualTimeSourceControl()));
content.add_row(new SettingsListRow(_('Time source'), new TimeSourceControl()));
content.add_row(new SettingsListRow(_('Shortcut'), new KeyBindingControl())); const time_source_row = new SettingsListRow(_('Time source'), new TimeSourceControl());
content.add_row(new SettingsListRow(_('Sunrise'), new SuntimeControl('sunrise'))); settings.bind(
content.add_row(new SettingsListRow(_('Sunset'), new SuntimeControl('sunset'))); 'manual-time-source',
time_source_row,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
content.add_row(time_source_row);
const ondemand_shortcut_row = new SettingsListRow(_('On-demand shortcut'), new KeyBindingControl());
const update_ondemand_shortcut_row_sensitivity = () => ondemand_shortcut_row.set_sensitive(!!(settings.get_boolean('manual-time-source') && settings.get_string('time-source') === 'ondemand'));
settings.connect('changed::manual-time-source', () => update_ondemand_shortcut_row_sensitivity());
settings.connect('changed::time-source', () => update_ondemand_shortcut_row_sensitivity());
update_ondemand_shortcut_row_sensitivity();
content.add_row(ondemand_shortcut_row);
const sunrise_row = new SettingsListRow(_('Sunrise'), new SuntimeControl('sunrise'));
const update_sunrise_row_sensitivity = () => sunrise_row.set_sensitive(!!(settings.get_boolean('manual-time-source') && settings.get_string('time-source') === 'schedule'));
settings.connect('changed::manual-time-source', () => update_sunrise_row_sensitivity());
settings.connect('changed::time-source', () => update_sunrise_row_sensitivity());
update_sunrise_row_sensitivity();
content.add_row(sunrise_row);
const sunset_row = new SettingsListRow(_('Sunset'), new SuntimeControl('sunset'));
const update_sunset_row_sensitivity = () => sunset_row.set_sensitive(!!(settings.get_boolean('manual-time-source') && settings.get_string('time-source') === 'schedule'));
settings.connect('changed::manual-time-source', () => update_sunset_row_sensitivity());
settings.connect('changed::time-source', () => update_sunset_row_sensitivity());
update_sunset_row_sensitivity();
content.add_row(sunset_row);
return new SettingsPage(label, description, content); return new SettingsPage(label, description, content);
} }
} }
class ManualTimeSourceControl {
constructor() {
const settings = extensionUtils.getSettings();
const toggle = new Gtk.Switch({
active: false
});
settings.bind(
'manual-time-source',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class TimeSourceControl {
constructor() {
const settings = extensionUtils.getSettings();
const colorSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.plugins.color' });
const locationSettings = new Gio.Settings({ schema: 'org.gnome.system.location' });
const box = new Gtk.Box({
spacing: 8,
orientation: Gtk.Orientation.HORIZONTAL,
can_focus: false
});
const nightlight_radio = new Gtk.RadioButton({
label: _('Night Light'),
active: (settings.get_string('time-source') === 'nightlight')
});
nightlight_radio.connect('toggled', () => {
if ( nightlight_radio.get_active() ) {
settings.set_string('time-source', 'nightlight')
}
});
colorSettings.bind(
'night-light-enabled',
nightlight_radio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(nightlight_radio, false, false, 0);
const location_radio = new Gtk.RadioButton({
label: _('Location Services'),
group: nightlight_radio,
active: (settings.get_string('time-source') === 'location')
});
location_radio.connect('toggled', () => {
if ( location_radio.get_active() ) {
settings.set_string('time-source', 'location')
}
});
locationSettings.bind(
'enabled',
location_radio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(location_radio, false, false, 0);
const schedule_radio = new Gtk.RadioButton({
label: _('Manual schedule'),
group: nightlight_radio,
active: (settings.get_string('time-source') === 'schedule')
});
schedule_radio.connect('toggled', () => {
if ( schedule_radio.get_active() ) {
settings.set_string('time-source', 'schedule')
}
});
settings.bind(
'manual-time-source',
schedule_radio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(schedule_radio, false, false, 0);
const ondemand_radio = new Gtk.RadioButton({
label: _('On-demand'),
group: nightlight_radio,
active: (settings.get_string('time-source') === 'ondemand')
});
ondemand_radio.connect('toggled', () => {
settings.set_string('time-source', 'ondemand')
});
settings.bind(
'manual-time-source',
ondemand_radio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
box.pack_start(ondemand_radio, false, false, 0);
return box;
}
}
class KeyBindingControl { class KeyBindingControl {
@@ -96,120 +230,11 @@ class KeyBindingControl {
tree_view.append_column(column); tree_view.append_column(column);
update_shortcut_row(settings.get_strv(KEYBINDING_KEY)[0]); update_shortcut_row(settings.get_strv(KEYBINDING_KEY)[0]);
const update_treeview_sensitivity = (tree_view) => {
tree_view.set_sensitive(!!(settings.get_string('time-source') === 'ondemand'));
}
settings.connect('changed::time-source', () => update_treeview_sensitivity(tree_view));
update_treeview_sensitivity(tree_view)
return tree_view; return tree_view;
} }
} }
class ManualTimeSourceControl {
constructor() {
const settings = extensionUtils.getSettings();
const toggle = new Gtk.Switch({
active: false
});
settings.bind(
'manual-time-source',
toggle,
'active',
Gio.SettingsBindFlags.DEFAULT
);
return toggle;
}
}
class TimeSourceControl {
constructor() {
const settings = extensionUtils.getSettings();
const colorSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.plugins.color' });
const locationSettings = new Gio.Settings({ schema: 'org.gnome.system.location' });
const box = new Gtk.Box({
spacing: 8,
orientation: Gtk.Orientation.HORIZONTAL,
can_focus: false
});
const nightlight_radio = new Gtk.RadioButton({
label: _('Night Light'),
active: (settings.get_string('time-source') === 'nightlight')
});
const update_nightlight_radio_sensitivity = () => nightlight_radio.set_sensitive(!!(settings.get_boolean('manual-time-source') && colorSettings.get_boolean('night-light-enabled')));
settings.connect('changed::manual-time-source', update_nightlight_radio_sensitivity);
colorSettings.connect('changed::night-light-enabled', update_nightlight_radio_sensitivity);
update_nightlight_radio_sensitivity();
nightlight_radio.connect('toggled', () => {
if ( nightlight_radio.get_active() ) {
settings.set_string('time-source', 'nightlight')
}
});
box.pack_start(nightlight_radio, false, false, 0);
const location_radio = new Gtk.RadioButton({
label: _('Location Services'),
group: nightlight_radio,
active: (settings.get_string('time-source') === 'location')
});
const update_location_radio_sensitivity = () => location_radio.set_sensitive(!!(settings.get_boolean('manual-time-source') && locationSettings.get_boolean('enabled')));
settings.connect('changed::manual-time-source', update_location_radio_sensitivity);
locationSettings.connect('changed::enabled', update_location_radio_sensitivity);
update_location_radio_sensitivity();
location_radio.connect('toggled', () => {
if ( location_radio.get_active() ) {
settings.set_string('time-source', 'location')
}
});
box.pack_start(location_radio, false, false, 0);
const schedule_radio = new Gtk.RadioButton({
label: _('Manual schedule'),
group: nightlight_radio,
active: (settings.get_string('time-source') === 'schedule')
});
settings.bind(
'manual-time-source',
schedule_radio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
schedule_radio.connect('toggled', () => {
if ( schedule_radio.get_active() ) {
settings.set_string('time-source', 'schedule')
}
});
box.pack_start(schedule_radio, false, false, 0);
const ondemand_radio = new Gtk.RadioButton({
label: _('On-demand'),
group: nightlight_radio,
active: (settings.get_string('time-source') === 'ondemand')
});
settings.bind(
'manual-time-source',
ondemand_radio,
'sensitive',
Gio.SettingsBindFlags.DEFAULT
);
ondemand_radio.connect('toggled', () => {
settings.set_string('time-source', 'ondemand')
});
box.pack_start(ondemand_radio, false, false, 0);
return box;
}
}
class SuntimeControl { class SuntimeControl {
@@ -221,8 +246,6 @@ class SuntimeControl {
can_focus: false can_focus: false
}); });
const update_spin_sensitivity = (spin) => spin.set_sensitive(!!(settings.get_boolean('manual-time-source') && settings.get_string('time-source') === 'schedule'));
const time = settings.get_double(`schedule-${suntime}`); const time = settings.get_double(`schedule-${suntime}`);
const hours = Math.trunc(time); const hours = Math.trunc(time);
const minutes = Math.round((time - hours) * 60); const minutes = Math.round((time - hours) * 60);
@@ -253,9 +276,6 @@ class SuntimeControl {
const new_time = hours_spin.value + minutes; const new_time = hours_spin.value + minutes;
settings.set_double(`schedule-${suntime}`, new_time); settings.set_double(`schedule-${suntime}`, new_time);
}); });
settings.connect('changed::manual-time-source', () => update_spin_sensitivity(hours_spin));
settings.connect('changed::time-source', () => update_spin_sensitivity(hours_spin));
update_spin_sensitivity(hours_spin);
const separator = new Gtk.Label({ label: ':' }); const separator = new Gtk.Label({ label: ':' });
@@ -284,9 +304,6 @@ class SuntimeControl {
const new_time = hour + minutes; const new_time = hour + minutes;
settings.set_double(`schedule-${suntime}`, new_time); settings.set_double(`schedule-${suntime}`, new_time);
}); });
settings.connect('changed::manual-time-source', () => update_spin_sensitivity(minutes_spin));
settings.connect('changed::time-source', () => update_spin_sensitivity(minutes_spin));
update_spin_sensitivity(minutes_spin);
box.pack_start(hours_spin, false, false, 0); box.pack_start(hours_spin, false, false, 0);
box.pack_start(separator, false, false, 0); box.pack_start(separator, false, false, 0);