aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/menuitem.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-06-23 10:48:43 -0500
committerTed Gould <ted@gould.cx>2010-06-23 10:48:43 -0500
commit0591156dc8defd6a816634448d3ab9aa68f92882 (patch)
tree69ebed7ee21cba31126b7a48977741f366bf7b53 /libdbusmenu-gtk/menuitem.c
parent4c05e67b833cdd4467eab0a740367536ebfb2c33 (diff)
downloadlibdbusmenu-0591156dc8defd6a816634448d3ab9aa68f92882.tar.gz
libdbusmenu-0591156dc8defd6a816634448d3ab9aa68f92882.tar.bz2
libdbusmenu-0591156dc8defd6a816634448d3ab9aa68f92882.zip
Apparently not a collection internally.
Diffstat (limited to 'libdbusmenu-gtk/menuitem.c')
-rw-r--r--libdbusmenu-gtk/menuitem.c66
1 files changed, 30 insertions, 36 deletions
diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c
index fa94c1e..56dd192 100644
--- a/libdbusmenu-gtk/menuitem.c
+++ b/libdbusmenu-gtk/menuitem.c
@@ -279,60 +279,55 @@ typedef struct _iter_data_t iter_data_t;
struct _iter_data_t {
guint * key;
GdkModifierType * modifier;
- const gchar * last_string;
};
static void
-_string_iterator (const GValue * value, gpointer user_data)
+_wrapper_iterator (const GValue * value, gpointer user_data)
{
iter_data_t * iter_data = (iter_data_t *)user_data;
- if (!G_VALUE_HOLDS_STRING(value)) {
+ if (*iter_data->key != 0) {
+ g_warning("Shortcut is more than one entry. Which we don't currently support. Taking the first.");
return;
}
- const gchar * string = g_value_get_string(value);
- iter_data->last_string = string;
-
- if (g_strcmp0(string, DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) {
- *iter_data->modifier |= GDK_CONTROL_MASK;
- return;
- }
- if (g_strcmp0(string, DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) {
- *iter_data->modifier |= GDK_MOD1_MASK;
- return;
- }
- if (g_strcmp0(string, DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) {
- *iter_data->modifier |= GDK_SHIFT_MASK;
+ if (!G_VALUE_HOLDS(value, G_TYPE_STRV)) {
+ g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(value));
return;
}
- if (g_strcmp0(string, DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) {
- *iter_data->modifier |= GDK_SUPER_MASK;
+
+ gchar ** stringarray = (gchar **)g_value_get_boxed(value);
+ if (stringarray == NULL) {
return;
}
- return;
-}
+ const gchar * last_string = NULL;
+ int i;
-static void
-_wrapper_iterator (const GValue * value, gpointer user_data)
-{
- iter_data_t * iter_data = (iter_data_t *)user_data;
-
- if (*iter_data->key != 0) {
- g_warning("Shortcut is more than one entry. Which we don't currently support. Taking the first.");
- return;
- }
+ for (i = 0; stringarray[i] != NULL; i++) {
+ last_string = stringarray[i];
- if (!dbus_g_type_is_collection(G_VALUE_TYPE(value))) {
- g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(value));
+ if (g_strcmp0(last_string, DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) {
+ *iter_data->modifier |= GDK_CONTROL_MASK;
+ continue;
+ }
+ if (g_strcmp0(last_string, DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) {
+ *iter_data->modifier |= GDK_MOD1_MASK;
+ continue;
+ }
+ if (g_strcmp0(last_string, DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) {
+ *iter_data->modifier |= GDK_SHIFT_MASK;
+ continue;
+ }
+ if (g_strcmp0(last_string, DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) {
+ *iter_data->modifier |= GDK_SUPER_MASK;
+ continue;
+ }
}
- dbus_g_type_collection_value_iterate(value, _string_iterator, iter_data);
-
- if (iter_data->last_string != NULL) {
+ if (last_string != NULL) {
GdkModifierType tempmod;
- gtk_accelerator_parse(iter_data->last_string, iter_data->key, &tempmod);
+ gtk_accelerator_parse(last_string, iter_data->key, &tempmod);
}
return;
@@ -367,7 +362,6 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke
iter_data_t iter_data;
iter_data.key = key;
iter_data.modifier = modifier;
- iter_data.last_string = NULL;
dbus_g_type_collection_value_iterate(wrapper, _wrapper_iterator, &iter_data);