# HG changeset patch # User Guido Berhoerster # Date 1660659542 -7200 # Node ID 08747f3a718b802db46d4a0118a540945156afd6 # Parent 24cba399757f04a91367c03dcbf755ccb0aebde0 Add new setting to hide indicator menu items The setting hide-menu-items is an array of strings containing the actions associated with menu items that should be hidden from the indicator menu. diff -r 24cba399757f -r 08747f3a718b org.guido-berhoerster.code.package-update-indicator.gschema.xml --- a/org.guido-berhoerster.code.package-update-indicator.gschema.xml Wed Aug 17 16:55:17 2022 +0200 +++ b/org.guido-berhoerster.code.package-update-indicator.gschema.xml Tue Aug 16 16:19:02 2022 +0200 @@ -25,5 +25,10 @@ Whether the indicator is active even when packages are up to date. + + [] + Hide menu items + List of indicator menu items to be hidden. + diff -r 24cba399757f -r 08747f3a718b pui-application.c --- a/pui-application.c Wed Aug 17 16:55:17 2022 +0200 +++ b/pui-application.c Tue Aug 16 16:19:02 2022 +0200 @@ -191,6 +191,39 @@ } static void +update_menu_item(GtkWidget* widget, gpointer user_data) +{ + gchar ** hidden_menu_items = user_data; + const gchar * action_name; + const gchar * name; + + g_return_if_fail(GTK_IS_MENU_ITEM(widget)); + action_name = gtk_actionable_get_action_name(GTK_ACTIONABLE(widget)); + if (!g_str_has_prefix(action_name, "app.")) { + return; + } + name = action_name + strlen("app."); + gtk_widget_set_visible(widget, + !g_strv_contains((const gchar * const *)hidden_menu_items, name)); +} + +static void +update_menu_items(PuiApplication *self) +{ + gchar ** hidden_menu_items; + GtkMenu * menu; + + menu = app_indicator_get_menu(self->indicator); + hidden_menu_items = g_settings_get_strv(self->settings, + "hide-menu-items"); + g_return_if_fail(hidden_menu_items != NULL); + g_return_if_fail((menu != NULL) && GTK_IS_CONTAINER(menu)); + gtk_container_foreach(GTK_CONTAINER(menu), update_menu_item, + hidden_menu_items); + g_strfreev(hidden_menu_items); +} + +static void update_indicator(PuiApplication *self, const gchar *title) { switch (self->state) { @@ -357,6 +390,7 @@ } update_indicator(self, title); + update_menu_items(self); update_notification(self, title, body); g_debug("indicator icon: %s, notification title: \"%s\", " @@ -428,6 +462,13 @@ } static void +on_hide_menu_items_changed(GSettings *settings, gchar *key, gpointer user_data) +{ + g_debug("setting hide-menu-items changed"); + update_menu_items(user_data); +} + +static void on_backend_restart_required(PuiBackend *backend, gpointer user_data) { PuiApplication *self = user_data; @@ -531,6 +572,10 @@ g_settings_bind(self->settings, "always-active", self, "always-active", G_SETTINGS_BIND_GET); + /* watch hide-menu-items setting in order to update the menu */ + g_signal_connect(self->settings, "changed::hide-menu-items", + G_CALLBACK(on_hide_menu_items_changed), self); + /* ensure the ui reflects the current state */ update_ui(self);