commit 8b959ea64c1c43093594f30402616edce0ac4374
parent c197f36640f0ef2f8c6c813823897d34bcd30a6a
Author: Janne Veteläinen <janne.vetelainen@elisanet.fi>
Date: Wed, 17 Apr 2024 18:02:44 +0300
Hide menuitems with property visible=false
Diffstat:
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/dbusmenu.c b/dbusmenu.c
@@ -64,7 +64,7 @@ create_action(uint32_t id, StatusNotifierItem *snitem)
static gboolean
-check_has_sections(GVariant *data, StatusNotifierItem *snitem)
+check_has_sections(GVariant *data)
{
gboolean ret = FALSE;
char *val;
@@ -84,7 +84,19 @@ check_has_sections(GVariant *data, StatusNotifierItem *snitem)
}
-//TODO: Ignore visible=false items
+static gboolean
+check_menuitem_visible(GVariant *data)
+{
+ gboolean isvisible = TRUE;
+ GVariant *menu_data = g_variant_get_child_value(data, 1);
+ g_variant_lookup(menu_data, "visible", "b", &isvisible);
+
+ g_variant_unref(menu_data);
+
+ return isvisible;
+}
+
+
static GMenuItem*
create_menuitem(GVariant *data, StatusNotifierItem *snitem)
{
@@ -181,12 +193,15 @@ create_menumodel(GVariant *data, StatusNotifierItem *snitem)
GMenu *ret = g_menu_new();
GVariantIter iter;
GVariant *menuitem_data;
- gboolean has_sections = check_has_sections(data, snitem);
+ gboolean has_sections = check_has_sections(data);
if (has_sections) {
GMenu *section = g_menu_new();
g_variant_iter_init(&iter, data);
while ((g_variant_iter_next(&iter, "v", &menuitem_data))) {
+ if (!check_menuitem_visible(menuitem_data))
+ continue;
+
GMenuItem *menuitem = create_menuitem(menuitem_data, snitem);
if (menuitem) {
g_menu_append_item(section, menuitem);