[gnome-builder] libide/gtk: add API to get menu ids in manager
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] libide/gtk: add API to get menu ids in manager
- Date: Sat, 16 Jul 2022 05:02:46 +0000 (UTC)
commit 9652ba505f90c8b35fae96f7033ea90662b883ea
Author: Christian Hergert <chergert redhat com>
Date: Fri Jul 15 21:58:39 2022 -0700
libide/gtk: add API to get menu ids in manager
src/libide/gtk/ide-menu-manager.c | 31 ++++++++++++++++++++++++++-----
src/libide/gtk/ide-menu-manager.h | 30 ++++++++++++++++--------------
2 files changed, 42 insertions(+), 19 deletions(-)
---
diff --git a/src/libide/gtk/ide-menu-manager.c b/src/libide/gtk/ide-menu-manager.c
index 1800722d7..6acf659e5 100644
--- a/src/libide/gtk/ide-menu-manager.c
+++ b/src/libide/gtk/ide-menu-manager.c
@@ -27,10 +27,10 @@
struct _IdeMenuManager
{
- GObject parent_instance;
-
- guint last_merge_id;
- GHashTable *models;
+ GObject parent_instance;
+ guint last_merge_id;
+ GHashTable *models;
+ char **cached_keys;
};
G_DEFINE_TYPE (IdeMenuManager, ide_menu_manager, G_TYPE_OBJECT)
@@ -488,7 +488,10 @@ ide_menu_manager_merge_builder (IdeMenuManager *self,
}
if (!(menu = g_hash_table_lookup (self->models, id)))
- g_hash_table_insert (self->models, g_strdup (id), g_menu_new ());
+ {
+ g_hash_table_insert (self->models, g_strdup (id), g_menu_new ());
+ g_clear_pointer (&self->cached_keys, g_strfreev);
+ }
}
/*
@@ -569,6 +572,7 @@ ide_menu_manager_merge (IdeMenuManager *self,
{
GMenu *new_model = g_menu_new ();
g_hash_table_insert (self->models, g_strdup (menu_id), new_model);
+ g_clear_pointer (&self->cached_keys, g_strfreev);
menu = new_model;
}
@@ -622,6 +626,8 @@ ide_menu_manager_remove (IdeMenuManager *self,
}
}
}
+
+ g_clear_pointer (&self->cached_keys, g_strfreev);
}
/**
@@ -644,6 +650,7 @@ ide_menu_manager_get_menu_by_id (IdeMenuManager *self,
{
menu = g_menu_new ();
g_hash_table_insert (self->models, g_strdup (menu_id), menu);
+ g_clear_pointer (&self->cached_keys, g_strfreev);
}
return menu;
@@ -677,3 +684,17 @@ ide_menu_manager_add_resource (IdeMenuManager *self,
return merge_id;
}
+
+const char * const *
+ide_menu_manager_get_menu_ids (IdeMenuManager *self)
+{
+ g_return_val_if_fail (IDE_IS_MENU_MANAGER (self), NULL);
+
+ if (self->cached_keys == NULL)
+ {
+ g_autofree gpointer *keys = g_hash_table_get_keys_as_array (self->models, NULL);
+ self->cached_keys = g_strdupv ((char **)keys);
+ }
+
+ return (const char * const *)self->cached_keys;
+}
diff --git a/src/libide/gtk/ide-menu-manager.h b/src/libide/gtk/ide-menu-manager.h
index c2ba702c3..e7ae6ee4d 100644
--- a/src/libide/gtk/ide-menu-manager.h
+++ b/src/libide/gtk/ide-menu-manager.h
@@ -34,24 +34,26 @@ IDE_AVAILABLE_IN_ALL
G_DECLARE_FINAL_TYPE (IdeMenuManager, ide_menu_manager, IDE, MENU_MANAGER, GObject)
IDE_AVAILABLE_IN_ALL
-IdeMenuManager *ide_menu_manager_new (void);
+IdeMenuManager *ide_menu_manager_new (void);
IDE_AVAILABLE_IN_ALL
-guint ide_menu_manager_add_filename (IdeMenuManager *self,
- const gchar *filename,
- GError **error);
+guint ide_menu_manager_add_filename (IdeMenuManager *self,
+ const char *filename,
+ GError **error);
IDE_AVAILABLE_IN_ALL
-guint ide_menu_manager_add_resource (IdeMenuManager *self,
- const gchar *resource,
- GError **error);
+guint ide_menu_manager_add_resource (IdeMenuManager *self,
+ const char *resource,
+ GError **error);
IDE_AVAILABLE_IN_ALL
-guint ide_menu_manager_merge (IdeMenuManager *self,
- const gchar *menu_id,
- GMenuModel *model);
+guint ide_menu_manager_merge (IdeMenuManager *self,
+ const char *menu_id,
+ GMenuModel *model);
IDE_AVAILABLE_IN_ALL
-void ide_menu_manager_remove (IdeMenuManager *self,
- guint merge_id);
+void ide_menu_manager_remove (IdeMenuManager *self,
+ guint merge_id);
IDE_AVAILABLE_IN_ALL
-GMenu *ide_menu_manager_get_menu_by_id (IdeMenuManager *self,
- const gchar *menu_id);
+GMenu *ide_menu_manager_get_menu_by_id (IdeMenuManager *self,
+ const char *menu_id);
+IDE_AVAILABLE_IN_ALL
+const char * const *ide_menu_manager_get_menu_ids (IdeMenuManager *self);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]