From c25508f253327fa64fc3dd165480b021273834f4 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 25 Aug 2009 12:09:22 -0500 Subject: Okay, building in some type handlers now. --- libdbusmenu-gtk/client.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index a236123..b2d19b4 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -44,6 +44,10 @@ static void new_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint po static void delete_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, DbusmenuGtkClient * gtkclient); static void move_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint new, guint old, DbusmenuGtkClient * gtkclient); +static gboolean new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent); +static gboolean new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent); +static gboolean new_item_image (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent); + /* GObject Stuff */ G_DEFINE_TYPE (DbusmenuGtkClient, dbusmenu_gtkclient, DBUSMENU_TYPE_CLIENT); @@ -62,6 +66,11 @@ static void dbusmenu_gtkclient_init (DbusmenuGtkClient *self) { g_signal_connect(G_OBJECT(self), DBUSMENU_CLIENT_SIGNAL_NEW_MENUITEM, G_CALLBACK(new_menuitem), NULL); + + dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_DEFAULT, new_item_normal); + dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_SEPERATOR, new_item_seperator); + dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_IMAGE, new_item_image); + return; } @@ -258,3 +267,24 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * return mi; } +static gboolean +new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) +{ + + + return TRUE; +} + +static gboolean +new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) +{ + + return TRUE; +} + +static gboolean +new_item_image (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) +{ + + return TRUE; +} -- cgit v1.2.3 From be6ccb4737e45a73da882ddf3d3c0fc725739a6d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 25 Aug 2009 14:10:38 -0500 Subject: Code reshuffle. Now a warning on new items and fleshing out the type-based functions. --- libdbusmenu-gtk/client.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index b2d19b4..0f24c39 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -134,17 +134,15 @@ destoryed_dbusmenuitem_cb (gpointer udata, GObject * dbusmenuitem) static void new_menuitem (DbusmenuClient * client, DbusmenuMenuitem * mi, gpointer userdata) { - gpointer ann_mi = g_object_get_data(G_OBJECT(mi), data_menuitem); - GtkMenuItem * gmi = GTK_MENU_ITEM(ann_mi); - - if (gmi != NULL) { - /* It's possible we've already been looked at, that's - okay, but we can just ignore this signal then. */ - return; - } + g_warning("Got new menuitem signal, which means they want something"); + g_warning(" that I simply don't have."); - gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + return; +} +static void +base_new_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi, DbusmenuGtkClient * client) +{ /* Attach these two */ g_object_set_data(G_OBJECT(mi), data_menuitem, gmi); @@ -270,7 +268,19 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * static gboolean new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) { + gpointer ann_mi = g_object_get_data(G_OBJECT(newitem), data_menuitem); + GtkMenuItem * gmi = GTK_MENU_ITEM(ann_mi); + + if (gmi != NULL) { + /* It's possible we've already been looked at, that's + okay, but we can just ignore this signal then. */ + return TRUE; + } + + gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + // Need client + base_new_menuitem(newitem, gmi, NULL); return TRUE; } -- cgit v1.2.3 From 0d23ee0ce837c23750bdeef3e01c4f117d1250fc Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 25 Aug 2009 14:13:34 -0500 Subject: Switching the prototype for type handlers so that it passes the client as well. --- libdbusmenu-gtk/client.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 0f24c39..bc4a72a 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -44,9 +44,9 @@ static void new_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint po static void delete_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, DbusmenuGtkClient * gtkclient); static void move_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint new, guint old, DbusmenuGtkClient * gtkclient); -static gboolean new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent); -static gboolean new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent); -static gboolean new_item_image (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent); +static gboolean new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client); +static gboolean new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client); +static gboolean new_item_image (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client); /* GObject Stuff */ G_DEFINE_TYPE (DbusmenuGtkClient, dbusmenu_gtkclient, DBUSMENU_TYPE_CLIENT); @@ -266,7 +266,7 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * } static gboolean -new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) +new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { gpointer ann_mi = g_object_get_data(G_OBJECT(newitem), data_menuitem); GtkMenuItem * gmi = GTK_MENU_ITEM(ann_mi); @@ -279,21 +279,20 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) gmi = GTK_MENU_ITEM(gtk_menu_item_new()); - // Need client - base_new_menuitem(newitem, gmi, NULL); + base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); return TRUE; } static gboolean -new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) +new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { return TRUE; } static gboolean -new_item_image (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent) +new_item_image (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { return TRUE; -- cgit v1.2.3 From 6de64b37859c511bb6583ea8f98d52a5bc6d9029 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 25 Aug 2009 15:38:18 -0500 Subject: Now we're building the child/parent relationship using the activation type function. --- libdbusmenu-gtk/client.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index bc4a72a..913a902 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -148,7 +148,6 @@ base_new_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi, DbusmenuGtkClient * /* DbusmenuMenuitem signals */ g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_ADDED, G_CALLBACK(new_child), client); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_REMOVED, G_CALLBACK(delete_child), client); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_MOVED, G_CALLBACK(move_child), client); @@ -266,7 +265,7 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * } static gboolean -new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) +new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { gpointer ann_mi = g_object_get_data(G_OBJECT(newitem), data_menuitem); GtkMenuItem * gmi = GTK_MENU_ITEM(ann_mi); @@ -280,6 +279,9 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbus gmi = GTK_MENU_ITEM(gtk_menu_item_new()); base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); + if (parent != NULL) { + new_child(parent, newitem, dbusmenu_menuitem_get_position(newitem, parent), DBUSMENU_GTKCLIENT(client)); + } return TRUE; } -- cgit v1.2.3 From fc7cc87f18d5fc301c06489517f48c720ffd5006 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 26 Aug 2009 14:38:02 -0500 Subject: Adding a warning, showing the widget and moving the new signal to ensure everything is setup first --- libdbusmenu-gtk/client.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 913a902..79db256 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -65,12 +65,12 @@ dbusmenu_gtkclient_class_init (DbusmenuGtkClientClass *klass) static void dbusmenu_gtkclient_init (DbusmenuGtkClient *self) { - g_signal_connect(G_OBJECT(self), DBUSMENU_CLIENT_SIGNAL_NEW_MENUITEM, G_CALLBACK(new_menuitem), NULL); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_DEFAULT, new_item_normal); dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_SEPERATOR, new_item_seperator); dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_IMAGE, new_item_image); + g_signal_connect(G_OBJECT(self), DBUSMENU_CLIENT_SIGNAL_NEW_MENUITEM, G_CALLBACK(new_menuitem), NULL); + return; } @@ -257,7 +257,8 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * GtkMenuItem * mi = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(item), data_menuitem)); if (mi == NULL) { - new_menuitem(DBUSMENU_CLIENT(client), item, NULL); + // new_menuitem(DBUSMENU_CLIENT(client), item, NULL); + g_warning("GTK not updated"); mi = GTK_MENU_ITEM(g_object_get_data(G_OBJECT(item), data_menuitem)); } @@ -277,6 +278,7 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusmenu } gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + gtk_widget_show(GTK_WIDGET(gmi)); base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); if (parent != NULL) { -- cgit v1.2.3 From 10f143ca67ff9b607cb24b2f77ba8bb472c19fff Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 26 Aug 2009 14:41:49 -0500 Subject: Use the label Luke! It helps. --- libdbusmenu-gtk/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 79db256..f1fc13d 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -277,7 +277,7 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusmenu return TRUE; } - gmi = GTK_MENU_ITEM(gtk_menu_item_new()); + gmi = GTK_MENU_ITEM(gtk_menu_item_new_with_label(dbusmenu_menuitem_property_get(newitem, "label"))); gtk_widget_show(GTK_WIDGET(gmi)); base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); -- cgit v1.2.3 From 70405abaa298f0ad4043988c637e4979fc43ffbe Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 26 Aug 2009 15:14:26 -0500 Subject: Making a separator --- libdbusmenu-gtk/client.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index f1fc13d..d3efb08 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -66,7 +66,7 @@ static void dbusmenu_gtkclient_init (DbusmenuGtkClient *self) { dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_DEFAULT, new_item_normal); - dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_SEPERATOR, new_item_seperator); + dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_SEPARATOR, new_item_seperator); dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_IMAGE, new_item_image); g_signal_connect(G_OBJECT(self), DBUSMENU_CLIENT_SIGNAL_NEW_MENUITEM, G_CALLBACK(new_menuitem), NULL); @@ -268,14 +268,7 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * static gboolean new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { - gpointer ann_mi = g_object_get_data(G_OBJECT(newitem), data_menuitem); - GtkMenuItem * gmi = GTK_MENU_ITEM(ann_mi); - - if (gmi != NULL) { - /* It's possible we've already been looked at, that's - okay, but we can just ignore this signal then. */ - return TRUE; - } + GtkMenuItem * gmi; gmi = GTK_MENU_ITEM(gtk_menu_item_new_with_label(dbusmenu_menuitem_property_get(newitem, "label"))); gtk_widget_show(GTK_WIDGET(gmi)); @@ -291,6 +284,15 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusmenu static gboolean new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { + GtkMenuItem * gmi; + + gmi = GTK_MENU_ITEM(gtk_separator_menu_item_new()); + gtk_widget_show(GTK_WIDGET(gmi)); + + base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); + if (parent != NULL) { + new_child(parent, newitem, dbusmenu_menuitem_get_position(newitem, parent), DBUSMENU_GTKCLIENT(client)); + } return TRUE; } -- cgit v1.2.3 From 340e506debd81bb6f2dff5ee56e02ebf3b20b5dc Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 26 Aug 2009 15:25:37 -0500 Subject: Centralize visiblity processing and changes to the prop value. --- libdbusmenu-gtk/client.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index d3efb08..afa8bb3 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -104,14 +104,27 @@ menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) return TRUE; } +/* Process the visible property */ +static void +process_visible (GtkMenuItem * gmi, const gchar * value) +{ + if (value == NULL || !g_strcmp0(value, "true")) { + gtk_widget_show(GTK_WIDGET(gmi)); + } else { + gtk_widget_hide(GTK_WIDGET(gmi)); + } + return; +} + /* Whenever we have a property change on a DbusmenuMenuitem we need to be responsive to that. */ static void menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, gchar * value, GtkMenuItem * gmi) { - if (!g_strcmp0(prop, "label")) { + if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_LABEL)) { gtk_menu_item_set_label(gmi, value); - gtk_widget_show(GTK_WIDGET(gmi)); + } else if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_VISIBLE)) { + process_visible(gmi, value); } return; @@ -157,6 +170,8 @@ base_new_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi, DbusmenuGtkClient * /* Life insurance */ g_object_weak_ref(G_OBJECT(mi), destoryed_dbusmenuitem_cb, gmi); + process_visible(gmi, dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_VISIBLE)); + return; } @@ -271,7 +286,6 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusmenu GtkMenuItem * gmi; gmi = GTK_MENU_ITEM(gtk_menu_item_new_with_label(dbusmenu_menuitem_property_get(newitem, "label"))); - gtk_widget_show(GTK_WIDGET(gmi)); base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); if (parent != NULL) { @@ -287,7 +301,6 @@ new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusm GtkMenuItem * gmi; gmi = GTK_MENU_ITEM(gtk_separator_menu_item_new()); - gtk_widget_show(GTK_WIDGET(gmi)); base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); if (parent != NULL) { -- cgit v1.2.3 From b1e8c02ec17a79d89df08a5c7aedf0f5e46a2dfa Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 26 Aug 2009 16:58:46 -0500 Subject: Promoting the base function up to an API function so that it can be used else where. --- libdbusmenu-gtk/client.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index afa8bb3..54db5db 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -153,24 +153,28 @@ new_menuitem (DbusmenuClient * client, DbusmenuMenuitem * mi, gpointer userdata) return; } -static void -base_new_menuitem (DbusmenuMenuitem * mi, GtkMenuItem * gmi, DbusmenuGtkClient * client) +void +dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * item, GtkMenuItem * gmi, DbusmenuMenuitem * parent) { /* Attach these two */ - g_object_set_data(G_OBJECT(mi), data_menuitem, gmi); + g_object_set_data(G_OBJECT(item), data_menuitem, gmi); /* DbusmenuMenuitem signals */ - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_REMOVED, G_CALLBACK(delete_child), client); - g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_CHILD_MOVED, G_CALLBACK(move_child), client); + g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); + g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_CHILD_REMOVED, G_CALLBACK(delete_child), client); + g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_CHILD_MOVED, G_CALLBACK(move_child), client); /* GtkMenuitem signals */ - g_signal_connect(G_OBJECT(gmi), "activate", G_CALLBACK(menu_pressed_cb), mi); + g_signal_connect(G_OBJECT(gmi), "activate", G_CALLBACK(menu_pressed_cb), item); /* Life insurance */ - g_object_weak_ref(G_OBJECT(mi), destoryed_dbusmenuitem_cb, gmi); + g_object_weak_ref(G_OBJECT(item), destoryed_dbusmenuitem_cb, gmi); + + process_visible(gmi, dbusmenu_menuitem_property_get(item, DBUSMENU_MENUITEM_PROP_VISIBLE)); - process_visible(gmi, dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_VISIBLE)); + if (parent != NULL) { + new_child(parent, item, dbusmenu_menuitem_get_position(item, parent), DBUSMENU_GTKCLIENT(client)); + } return; } @@ -285,12 +289,9 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusmenu { GtkMenuItem * gmi; - gmi = GTK_MENU_ITEM(gtk_menu_item_new_with_label(dbusmenu_menuitem_property_get(newitem, "label"))); + gmi = GTK_MENU_ITEM(gtk_menu_item_new_with_label(dbusmenu_menuitem_property_get(newitem, DBUSMENU_MENUITEM_PROP_LABEL))); - base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); - if (parent != NULL) { - new_child(parent, newitem, dbusmenu_menuitem_get_position(newitem, parent), DBUSMENU_GTKCLIENT(client)); - } + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); return TRUE; } @@ -302,10 +303,7 @@ new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusm gmi = GTK_MENU_ITEM(gtk_separator_menu_item_new()); - base_new_menuitem(newitem, gmi, DBUSMENU_GTKCLIENT(client)); - if (parent != NULL) { - new_child(parent, newitem, dbusmenu_menuitem_get_position(newitem, parent), DBUSMENU_GTKCLIENT(client)); - } + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); return TRUE; } -- cgit v1.2.3 From 86b7b92f7f45eb77ce648a9fae5d48c3d0e02632 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 27 Aug 2009 08:45:49 -0500 Subject: Adding checks to the type handling functions in GTK+ version of the lib. Comments by Neil. --- libdbusmenu-gtk/client.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 54db5db..7271c37 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -287,11 +287,18 @@ dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * static gboolean new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { - GtkMenuItem * gmi; + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); + g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); + /* Note: not checking parent, it's reasonable for it to be NULL */ + GtkMenuItem * gmi; gmi = GTK_MENU_ITEM(gtk_menu_item_new_with_label(dbusmenu_menuitem_property_get(newitem, DBUSMENU_MENUITEM_PROP_LABEL))); - dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); + if (gmi != NULL) { + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); + } else { + return FALSE; + } return TRUE; } @@ -299,11 +306,18 @@ new_item_normal (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbusmenu static gboolean new_item_seperator (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, DbusmenuClient * client) { - GtkMenuItem * gmi; + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE); + g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE); + /* Note: not checking parent, it's reasonable for it to be NULL */ + GtkMenuItem * gmi; gmi = GTK_MENU_ITEM(gtk_separator_menu_item_new()); - dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); + if (gmi != NULL) { + dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, gmi, parent); + } else { + return FALSE; + } return TRUE; } -- cgit v1.2.3