diff options
Diffstat (limited to 'libdbusmenu-gtk')
-rw-r--r-- | libdbusmenu-gtk/client.c | 20 | ||||
-rw-r--r-- | libdbusmenu-gtk/client.h | 2 |
2 files changed, 16 insertions, 6 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 64cb709..f715e35 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -172,11 +172,11 @@ new_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position, Dbus menu = GTK_MENU(gtk_menu_new()); g_object_set_data(G_OBJECT(mi), data_menu, menu); - GtkMenuItem * parent = dbusmenu_gtkclient_menuitem_get (mi); + GtkMenuItem * parent = dbusmenu_gtkclient_menuitem_get(gtkclient, mi); gtk_menu_item_set_submenu(parent, GTK_WIDGET(menu)); } - GtkMenuItem * childmi = dbusmenu_gtkclient_menuitem_get (child); + GtkMenuItem * childmi = dbusmenu_gtkclient_menuitem_get(gtkclient, child); gtk_menu_shell_insert(GTK_MENU_SHELL(menu), GTK_WIDGET(childmi), position); gtk_widget_show(GTK_WIDGET(menu)); @@ -212,7 +212,7 @@ move_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint new, guint ol return; } - GtkMenuItem * childmi = dbusmenu_gtkclient_menuitem_get (child); + GtkMenuItem * childmi = dbusmenu_gtkclient_menuitem_get(gtkclient, child); gtk_menu_reorder_child(GTK_MENU(ann_menu), GTK_WIDGET(childmi), new); return; @@ -241,6 +241,7 @@ dbusmenu_gtkclient_new (gchar * dbus_name, gchar * dbus_object) /** dbusmenu_gtkclient_menuitem_get: + @client: A #DbusmenuGtkClient with the item in it. @item: #DbusmenuMenuitem to get associated #GtkMenuItem on. This grabs the #GtkMenuItem that is associated with the @@ -249,8 +250,17 @@ dbusmenu_gtkclient_new (gchar * dbus_name, gchar * dbus_object) Return value: The #GtkMenuItem that can be played with. */ GtkMenuItem * -dbusmenu_gtkclient_menuitem_get (DbusmenuMenuitem * item) +dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * item) { - return GTK_MENU_ITEM(g_object_get_data(G_OBJECT(item), data_menuitem)); + g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), NULL); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(item), NULL); + + GtkMenuItem * mi = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(item), data_menuitem)); + if (mi == NULL) { + new_menuitem(DBUSMENU_CLIENT(client), item, NULL); + mi = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(item), data_menuitem)); + } + + return mi; } diff --git a/libdbusmenu-gtk/client.h b/libdbusmenu-gtk/client.h index 3c0117a..a549fe0 100644 --- a/libdbusmenu-gtk/client.h +++ b/libdbusmenu-gtk/client.h @@ -77,7 +77,7 @@ struct _DbusmenuGtkClient { GType dbusmenu_gtkclient_get_type (void); DbusmenuGtkClient * dbusmenu_gtkclient_new (gchar * dbus_name, gchar * dbus_object); -GtkMenuItem * dbusmenu_gtkclient_menuitem_get (DbusmenuMenuitem * item); +GtkMenuItem * dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * item); /** SECTION:gtkmenu |