Mercurial > projects > package-update-indicator
changeset 58:9cbb0f8a66c4
Add setting to disable preferences widgets
This just makes the widgets in the preferences application insensitive,
settings can still be changed by directly editing the configuration file.
author | Guido Berhoerster <guido+pui@berhoerster.name> |
---|---|
date | Tue, 06 Sep 2022 19:11:21 +0200 |
parents | 76989c84bd20 |
children | e3fc9db49d36 |
files | org.guido-berhoerster.code.package-update-indicator.gschema.xml pui-prefs-application.c |
diffstat | 2 files changed, 61 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/org.guido-berhoerster.code.package-update-indicator.gschema.xml Tue Sep 06 09:02:57 2022 +0200 +++ b/org.guido-berhoerster.code.package-update-indicator.gschema.xml Tue Sep 06 19:11:21 2022 +0200 @@ -30,5 +30,10 @@ <summary>Hide menu items</summary> <description>List of indicator menu items to be hidden.</description> </key> + <key name="disable-preferences" type="as"> + <default>[]</default> + <summary>Disable preferences</summary> + <description>List of preference widgets to be disabled.</description> + </key> </schema> </schemalist>
--- a/pui-prefs-application.c Tue Sep 06 09:02:57 2022 +0200 +++ b/pui-prefs-application.c Tue Sep 06 19:11:21 2022 +0200 @@ -32,6 +32,9 @@ struct _PuiPrefsApplication { GtkApplication parent_instance; GSettings *settings; + GtkWidget *update_command_entry; + GtkWidget *refresh_interval_combo_box; + GtkWidget *use_mobile_check_button; }; G_DEFINE_TYPE(PuiPrefsApplication, pui_prefs_application, GTK_TYPE_APPLICATION) @@ -117,6 +120,38 @@ } static void +update_widgets(PuiPrefsApplication *self) +{ + gchar ** disabled_preferences; + + g_return_if_fail(self->update_command_entry != NULL); + g_return_if_fail(self->refresh_interval_combo_box != NULL); + g_return_if_fail(self->use_mobile_check_button != NULL); + + disabled_preferences = g_settings_get_strv(self->settings, + "disable-preferences"); + g_return_if_fail(disabled_preferences != NULL); + gtk_widget_set_sensitive(self->update_command_entry, + !g_strv_contains((const gchar * const *)disabled_preferences, + "update-command")); + gtk_widget_set_sensitive(self->refresh_interval_combo_box, + !g_strv_contains((const gchar * const *)disabled_preferences, + "refresh-interval")); + gtk_widget_set_sensitive(self->use_mobile_check_button, + !g_strv_contains((const gchar * const *)disabled_preferences, + "use-mobile-connection")); + g_strfreev(disabled_preferences); +} + +static void +on_disable_preferences_changed(GSettings *settings, gchar *key, + gpointer user_data) +{ + g_debug("setting disable-preferences changed"); + update_widgets(user_data); +} + +static void pui_prefs_application_startup(GApplication *application) { PuiPrefsApplication *self = PUI_PREFS_APPLICATION(application); @@ -125,9 +160,6 @@ GtkBuilder *builder; GtkWidget *window; GtkTreeModel *tree_model; - GtkWidget *update_command_entry; - GtkWidget *refresh_interval_combo_box; - GtkWidget *use_mobile_check_button; application_class->startup(application); @@ -141,25 +173,31 @@ "package-update-indicator/preferences/pui-prefs-window.ui"); window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); gtk_application_add_window(GTK_APPLICATION(self), GTK_WINDOW(window)); - update_command_entry = GTK_WIDGET(gtk_builder_get_object(builder, + self->update_command_entry = GTK_WIDGET(gtk_builder_get_object(builder, "update-command")); - refresh_interval_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, - "refresh-interval")); - tree_model = - gtk_combo_box_get_model(GTK_COMBO_BOX(refresh_interval_combo_box)); - use_mobile_check_button = GTK_WIDGET(gtk_builder_get_object(builder, + self->refresh_interval_combo_box = + GTK_WIDGET(gtk_builder_get_object(builder, "refresh-interval")); + tree_model = gtk_combo_box_get_model( + GTK_COMBO_BOX(self->refresh_interval_combo_box)); + self->use_mobile_check_button = + GTK_WIDGET(gtk_builder_get_object(builder, "use-mobile-connection")); /* bind settings to widgets */ self->settings = pui_settings_new(); g_settings_bind(self->settings, "update-command", - update_command_entry, "text", G_SETTINGS_BIND_DEFAULT); + self->update_command_entry, "text", G_SETTINGS_BIND_DEFAULT); g_settings_bind_with_mapping(self->settings, "refresh-interval", - refresh_interval_combo_box, "active", G_SETTINGS_BIND_DEFAULT, - map_refresh_interval_to_index, map_index_to_refresh_interval, - tree_model, NULL); + self->refresh_interval_combo_box, "active", + G_SETTINGS_BIND_DEFAULT, map_refresh_interval_to_index, + map_index_to_refresh_interval, tree_model, NULL); g_settings_bind(self->settings, "use-mobile-connection", - use_mobile_check_button, "active", G_SETTINGS_BIND_DEFAULT); + self->use_mobile_check_button, "active", G_SETTINGS_BIND_DEFAULT); + + /* watch disable-preferences setting in order to update the window */ + g_signal_connect(self->settings, "changed::disable-preferences", + G_CALLBACK(on_disable_preferences_changed), self); + update_widgets(self); /* show window */ gtk_widget_show(window); @@ -189,6 +227,10 @@ g_clear_object(&self->settings); } + self->update_command_entry = NULL; + self->refresh_interval_combo_box = NULL; + self->use_mobile_check_button = NULL; + G_OBJECT_CLASS(pui_prefs_application_parent_class)->dispose(object); }