From 2fe7b1fc1457c0ed1b93e6fdbe52fa615cd519c4 Mon Sep 17 00:00:00 2001 From: Stefan Hansson Date: Fri, 5 Sep 2025 14:41:12 +0200 Subject: [PATCH] conf-tweaks: Add button for toggling visibility Closes https://gitlab.gnome.org/World/Phosh/phosh-mobile-settings/-/issues/83 Signed-off-by: Stefan Hansson Part-of: --- src/mobile-settings-window.c | 29 +++++++++++++++++++++++------ src/ms-panel-switcher.c | 21 ++++++++++++++++++++- src/ms-panel-switcher.h | 1 + src/ui/mobile-settings-window.ui | 6 ++++++ 4 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/mobile-settings-window.c b/src/mobile-settings-window.c index 0987948f..7ff89229 100644 --- a/src/mobile-settings-window.c +++ b/src/mobile-settings-window.c @@ -112,12 +112,27 @@ add_ms_tweaks_page (gpointer value, gpointer user_data) } +static void +do_toggle_conf_tweaks (GSettings *settings, char *key, gpointer user_data) +{ + MobileSettingsWindow *self = MOBILE_SETTINGS_WINDOW (user_data); + gboolean conf_tweaks_enabled = g_settings_get_boolean (settings, key); + + /* Flip! */ + conf_tweaks_enabled = !conf_tweaks_enabled; + + ms_panel_switcher_refilter (self->panel_switcher, + conf_tweaks_enabled ? GTK_FILTER_CHANGE_LESS_STRICT : GTK_FILTER_CHANGE_MORE_STRICT); +} + + static void ms_settings_window_constructed (GObject *object) { MobileSettingsWindow *self = MOBILE_SETTINGS_WINDOW (object); MobileSettingsApplication *app = MOBILE_SETTINGS_APPLICATION (g_application_get_default ()); GtkWidget *device_panel; + GAction *toggle_conf_tweaks; GList *pages_sorted_by_weight = NULL; GHashTable *parser_page_table = NULL; @@ -137,13 +152,15 @@ ms_settings_window_constructed (GObject *object) } } - if (g_settings_get_boolean (self->settings, "enable-conf-tweaks")) { - ms_tweaks_parser_parse_definition_files (self->ms_tweaks_parser, TWEAKS_DATA_DIR); - parser_page_table = ms_tweaks_parser_get_page_table (self->ms_tweaks_parser); - pages_sorted_by_weight = ms_tweaks_parser_sort_by_weight (parser_page_table); + ms_tweaks_parser_parse_definition_files (self->ms_tweaks_parser, TWEAKS_DATA_DIR); + parser_page_table = ms_tweaks_parser_get_page_table (self->ms_tweaks_parser); + pages_sorted_by_weight = ms_tweaks_parser_sort_by_weight (parser_page_table); - g_list_foreach (pages_sorted_by_weight, add_ms_tweaks_page, self); - } + g_list_foreach (pages_sorted_by_weight, add_ms_tweaks_page, self); + + toggle_conf_tweaks = g_settings_create_action (self->settings, "enable-conf-tweaks"); + g_signal_connect (self->settings, "changed::enable-conf-tweaks", G_CALLBACK (do_toggle_conf_tweaks), self); + g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (toggle_conf_tweaks)); } diff --git a/src/ms-panel-switcher.c b/src/ms-panel-switcher.c index 062c1a5c..1521c020 100644 --- a/src/ms-panel-switcher.c +++ b/src/ms-panel-switcher.c @@ -12,6 +12,7 @@ #include "ms-panel-switcher.h" #include "ms-panel.h" +#include "ms-tweaks-preferences-page.h" #include "ms-util.h" enum { @@ -35,6 +36,7 @@ struct _MsPanelSwitcher { GtkFilter *filter; GtkFilterListModel *filtered_panels; GtkStack *stack; + GSettings *settings; char *query; char *current_panelname; @@ -66,16 +68,23 @@ panels_filter_func (GObject *item, gpointer user_data) const char *panelname = gtk_stack_page_get_name (page); g_autofree char *query_normalized = NULL; g_auto (GStrv) query_words = NULL; + GtkWidget *stack_child; MsPanel *panel; GtkStringList *keywords; + stack_child = gtk_stack_page_get_child (page); + if (MS_IS_TWEAKS_PREFERENCES_PAGE (stack_child) + && !g_settings_get_boolean (self->settings, "enable-conf-tweaks")) { + return FALSE; + } + if (STR_IS_NULL_OR_EMPTY (self->query)) return TRUE; if (g_strcmp0 (panelname, "welcome") == 0) return FALSE; - panel = MS_PANEL (gtk_stack_page_get_child (page)); + panel = MS_PANEL (stack_child); keywords = ms_panel_get_keywords (panel); query_normalized = ms_normalize_casefold_and_unaccent (self->query); query_words = g_strsplit (g_strstrip (query_normalized), " ", 0); @@ -200,6 +209,7 @@ ms_panel_switcher_dispose (GObject *object) g_clear_object (&self->stack); g_clear_object (&self->filtered_panels); + g_clear_object (&self->settings); g_clear_pointer (&self->query, g_free); g_clear_pointer (&self->current_panelname, g_free); @@ -245,6 +255,8 @@ ms_panel_switcher_init (MsPanelSwitcher *self) self->filter = GTK_FILTER (gtk_custom_filter_new ((GtkCustomFilterFunc)panels_filter_func, self, NULL)); + + self->settings = g_settings_new ("mobi.phosh.MobileSettings"); } @@ -334,3 +346,10 @@ ms_panel_switcher_set_search_query (MsPanelSwitcher *self, const char *cur_query } } } + + +void +ms_panel_switcher_refilter (MsPanelSwitcher *self, GtkFilterChange filter_change_hint) +{ + gtk_filter_changed (self->filter, GTK_FILTER_CHANGE_DIFFERENT); +} diff --git a/src/ms-panel-switcher.h b/src/ms-panel-switcher.h index 59bd2fc1..1d92ea98 100644 --- a/src/ms-panel-switcher.h +++ b/src/ms-panel-switcher.h @@ -19,5 +19,6 @@ void ms_panel_switcher_set_stack (MsPanelSwitcher *self, GtkStack *s gboolean ms_panel_switcher_set_active_panel_name (MsPanelSwitcher *self, const char *panel); gboolean ms_panel_switcher_set_active_panel_index (MsPanelSwitcher *self, uint idx); void ms_panel_switcher_set_search_query (MsPanelSwitcher *self, const char *query); +void ms_panel_switcher_refilter (MsPanelSwitcher *self, GtkFilterChange filter_change_hint); G_END_DECLS diff --git a/src/ui/mobile-settings-window.ui b/src/ui/mobile-settings-window.ui index 34f65ffe..ef267565 100644 --- a/src/ui/mobile-settings-window.ui +++ b/src/ui/mobile-settings-window.ui @@ -328,6 +328,12 @@ +
+ + _Show Configurable Tweaks + app.enable-conf-tweaks + +
_Keyboard Shortcuts -- GitLab