From a5c79e6483cda97ac21ca1a609b19bf37bfe17f3 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 10:43:53 -0800 Subject: Checking for NULL value in setting the toggle setting to make sure they are set before erroring. And erroring if we don't get ints --- libdbusmenu-gtk/client.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 555e8d2..0109a83 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -150,6 +150,7 @@ static void process_toggle_type (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) { if (!IS_GENERICMENUITEM(gmi)) return; + if (value == NULL) return; GenericmenuitemCheckType type = GENERICMENUITEM_CHECK_TYPE_NONE; @@ -173,6 +174,7 @@ static void process_toggle_state (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) { if (!IS_GENERICMENUITEM(gmi)) return; + if (value == NULL) return; GenericmenuitemState state = GENERICMENUITEM_STATE_UNCHECKED; @@ -184,6 +186,8 @@ process_toggle_state (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * v } else if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN) { state = GENERICMENUITEM_STATE_INDETERMINATE; } + } else { + g_warning("Toggle state changed without having an int"); } genericmenuitem_set_state(GENERICMENUITEM(gmi), state); -- cgit v1.2.3 From 82d0a5a336c8d3f5de5b8831ae31571fdeeb8160 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 10:56:49 -0800 Subject: Switching to transforming values --- libdbusmenu-gtk/client.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 0109a83..781326e 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -154,14 +154,19 @@ process_toggle_type (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * va GenericmenuitemCheckType type = GENERICMENUITEM_CHECK_TYPE_NONE; - if (value != NULL && G_VALUE_TYPE(value) == G_TYPE_STRING) { - const gchar * strval = g_value_get_string(value); + GValue strvalue = {0}; + g_value_init(&strvalue, G_TYPE_STRING); + + if (value != NULL && g_value_transform(value, &strvalue)) { + const gchar * strval = g_value_get_string(&strvalue); if (!g_strcmp0(strval, DBUSMENU_MENUITEM_TOGGLE_CHECK)) { type = GENERICMENUITEM_CHECK_TYPE_CHECKBOX; } else if (!g_strcmp0(strval, DBUSMENU_MENUITEM_TOGGLE_RADIO)) { type = GENERICMENUITEM_CHECK_TYPE_RADIO; } + + g_value_unset(&strvalue); } genericmenuitem_set_check_type(GENERICMENUITEM(gmi), type); @@ -174,20 +179,20 @@ static void process_toggle_state (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) { if (!IS_GENERICMENUITEM(gmi)) return; - if (value == NULL) return; GenericmenuitemState state = GENERICMENUITEM_STATE_UNCHECKED; - if (value != NULL && G_VALUE_TYPE(value) == G_TYPE_INT) { - int val = g_value_get_int(value); + GValue intvalue = {0}; + g_value_init(&intvalue, G_TYPE_INT); + + if (value != NULL && g_value_transform(value, &intvalue)) { + int val = g_value_get_int(&intvalue); if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_CHECKED) { state = GENERICMENUITEM_STATE_CHECKED; } else if (val == DBUSMENU_MENUITEM_TOGGLE_STATE_UNKNOWN) { state = GENERICMENUITEM_STATE_INDETERMINATE; } - } else { - g_warning("Toggle state changed without having an int"); } genericmenuitem_set_state(GENERICMENUITEM(gmi), state); -- cgit v1.2.3 From cf094c53aba8af282fb758e19741468cff9e88f9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 4 Feb 2010 11:04:28 -0800 Subject: Switching to getting JSON values --- tests/test-gtk-label-server.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test-gtk-label-server.c b/tests/test-gtk-label-server.c index ae772f1..32d7a43 100644 --- a/tests/test-gtk-label-server.c +++ b/tests/test-gtk-label-server.c @@ -53,7 +53,10 @@ set_props (DbusmenuMenuitem * mi, JsonObject * node) JsonNode * lnode = json_object_get_member(node, member); if (JSON_NODE_TYPE(lnode) != JSON_NODE_VALUE) { continue; } - dbusmenu_menuitem_property_set(mi, member, json_node_get_string(lnode)); + GValue value = {0}; + json_node_get_value(lnode, &value); + dbusmenu_menuitem_property_set_value(mi, member, &value); + g_value_unset(&value); } return; -- cgit v1.2.3