From a252fa4375ce61f691d317ee644573d983a42df9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 8 Jun 2010 16:23:31 -0500 Subject: The shortcut strings defined. --- libdbusmenu-glib/menuitem.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index b04bba8..77997ba 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -58,6 +58,7 @@ G_BEGIN_DECLS #define DBUSMENU_MENUITEM_PROP_ICON_DATA "icon-data" #define DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE "toggle-type" #define DBUSMENU_MENUITEM_PROP_TOGGLE_STATE "toggle-state" +#define DBUSMENU_MENUITEM_PROP_SHORTCUT "shortcut" #define DBUSMENU_MENUITEM_TOGGLE_CHECK "checkmark" #define DBUSMENU_MENUITEM_TOGGLE_RADIO "radio" @@ -68,6 +69,12 @@ G_BEGIN_DECLS #define DBUSMENU_MENUITEM_ICON_NAME_BLANK "blank-icon" +#define DBUSMENU_MENUITEM_SHORTCUT_CONTROL "Control" +#define DBUSMENU_MENUITEM_SHORTCUT_ALT "Alt" +#define DBUSMENU_MENUITEM_SHORTCUT_SHIFT "Shift" +#define DBUSMENU_MENUITEM_SHORTCUT_SUPER "Super" + + /** * DbusmenuMenuitem: * -- cgit v1.2.3 From 8ec651ef62779668b4919e94a32cd6c7868b7609 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 8 Jun 2010 17:36:57 -0500 Subject: Dummy functions to get and set the shortcut --- libdbusmenu-gtk/menuitem.c | 34 ++++++++++++++++++++++++++++++++++ libdbusmenu-gtk/menuitem.h | 3 +++ 2 files changed, 37 insertions(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 23ff311..8b026e6 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -128,3 +128,37 @@ dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * return icon; } +/** + dbusmenu_menuitem_property_set_shortcut: + @menuitem: The #DbusmenuMenuitem to set the shortcut on + @shortcut: String describing the shortcut + + This function takes a GTK shortcut string as defined in + #gtk_accellerator_parse and turns that into the information + required to send it over DBusmenu. + + Return value: Whether it was successful at setting the property. +*/ +gboolean +dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gchar * shortcut) +{ + + return FALSE; +} + +/** + dbusmenu_menuitem_property_get_shortcut: + @menuitem: The #DbusmenuMenuitem to get the shortcut off + + This function gets a GTK shortcut string as defined in + #gtk_accellerator_parse from the data that is transferred + over DBusmenu. + + Return value: Either the string or #NULL if there is none. +*/ +gchar * +dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem) +{ + + return NULL; +} diff --git a/libdbusmenu-gtk/menuitem.h b/libdbusmenu-gtk/menuitem.h index ff458de..aacab42 100644 --- a/libdbusmenu-gtk/menuitem.h +++ b/libdbusmenu-gtk/menuitem.h @@ -36,4 +36,7 @@ License version 3 and version 2.1 along with this program. If not, see gboolean dbusmenu_menuitem_property_set_image (DbusmenuMenuitem * menuitem, const gchar * property, const GdkPixbuf * data); GdkPixbuf * dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * property); +gboolean dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gchar * shortcut); +gchar * dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem); + #endif -- cgit v1.2.3 From 9c4988079766e6c5398852b8b7f78188b6aee369 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 9 Jun 2010 16:52:24 -0500 Subject: Fleshing out building the shortcut array. --- libdbusmenu-gtk/menuitem.c | 48 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 8b026e6..1ae4817 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -27,6 +27,8 @@ License version 3 and version 2.1 along with this program. If not, see */ #include "menuitem.h" +#include +#include /** dbusmenu_menuitem_property_set_image: @@ -134,7 +136,7 @@ dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * @shortcut: String describing the shortcut This function takes a GTK shortcut string as defined in - #gtk_accellerator_parse and turns that into the information + #gtk_accelerator_parse and turns that into the information required to send it over DBusmenu. Return value: Whether it was successful at setting the property. @@ -142,8 +144,47 @@ dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * gboolean dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gchar * shortcut) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); + g_return_val_if_fail(shortcut != NULL, FALSE); + + guint key = 0; + GdkModifierType modifier = 0; + + gtk_accelerator_parse(shortcut, &key, &modifier); - return FALSE; + if (key == 0) { + g_warning("Unable to parse shortcut string '%s'", shortcut); + return FALSE; + } + + GPtrArray * array = g_ptr_array_new(); + + if (modifier & GDK_CONTROL_MASK) { + g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_CONTROL)); + } + if (modifier & GDK_MOD1_MASK) { + g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_ALT)); + } + if (modifier & GDK_SHIFT_MASK) { + g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_SHIFT)); + } + if (modifier & GDK_SUPER_MASK) { + g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_SUPER)); + } + + gint len = g_utf8_strlen(shortcut, -1); + g_ptr_array_add(array, g_strdup(shortcut + len - 1)); + + GPtrArray * wrapper = g_ptr_array_new(); + g_ptr_array_add(wrapper, array); + + GValue value = {0}; + g_value_init(&value, G_TYPE_BOXED); + g_value_set_boxed(&value, wrapper); + + dbusmenu_menuitem_property_set_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT, &value); + + return TRUE; } /** @@ -151,7 +192,7 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gcha @menuitem: The #DbusmenuMenuitem to get the shortcut off This function gets a GTK shortcut string as defined in - #gtk_accellerator_parse from the data that is transferred + #gtk_accelerator_parse from the data that is transferred over DBusmenu. Return value: Either the string or #NULL if there is none. @@ -159,6 +200,7 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gcha gchar * dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); return NULL; } -- cgit v1.2.3 From 2c464b6b4c16d4dc32090706ecfc7c198d68c84e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 9 Jun 2010 20:39:21 -0500 Subject: Switching things around to expose the key and modifier more as it's more useful. --- libdbusmenu-gtk/menuitem.c | 30 ++++++++++++++++++------------ libdbusmenu-gtk/menuitem.h | 6 ++++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 1ae4817..0f09483 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -142,7 +142,7 @@ dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * Return value: Whether it was successful at setting the property. */ gboolean -dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gchar * shortcut) +dbusmenu_menuitem_property_set_shortcut_string (DbusmenuMenuitem * menuitem, const gchar * shortcut) { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); g_return_val_if_fail(shortcut != NULL, FALSE); @@ -157,6 +157,14 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gcha return FALSE; } + return dbusmenu_menuitem_property_set_shortcut(menuitem, key, modifier); +} + +gboolean +dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, GdkModifierType modifier) +{ + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); + GPtrArray * array = g_ptr_array_new(); if (modifier & GDK_CONTROL_MASK) { @@ -172,8 +180,7 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gcha g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_SUPER)); } - gint len = g_utf8_strlen(shortcut, -1); - g_ptr_array_add(array, g_strdup(shortcut + len - 1)); + g_ptr_array_add(array, g_strdup(gdk_keyval_name(key))); GPtrArray * wrapper = g_ptr_array_new(); g_ptr_array_add(wrapper, array); @@ -190,17 +197,16 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gcha /** dbusmenu_menuitem_property_get_shortcut: @menuitem: The #DbusmenuMenuitem to get the shortcut off + @key: Location to put the key value + @modifier: Location to put the modifier mask - This function gets a GTK shortcut string as defined in - #gtk_accelerator_parse from the data that is transferred - over DBusmenu. - - Return value: Either the string or #NULL if there is none. + This function gets a GTK shortcut as a key and a mask + for use to set the accelerators. */ -gchar * -dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem) +void +dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * key, GdkModifierType * modifier) { - g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); + g_return_if_fail(DBUSMENU_IS_MENUITEM(menuitem)); - return NULL; + return; } diff --git a/libdbusmenu-gtk/menuitem.h b/libdbusmenu-gtk/menuitem.h index aacab42..ba01549 100644 --- a/libdbusmenu-gtk/menuitem.h +++ b/libdbusmenu-gtk/menuitem.h @@ -32,11 +32,13 @@ License version 3 and version 2.1 along with this program. If not, see #include #include #include +#include gboolean dbusmenu_menuitem_property_set_image (DbusmenuMenuitem * menuitem, const gchar * property, const GdkPixbuf * data); GdkPixbuf * dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * property); -gboolean dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gchar * shortcut); -gchar * dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem); +gboolean dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, GdkModifierType modifier); +gboolean dbusmenu_menuitem_property_set_shortcut_string (DbusmenuMenuitem * menuitem, const gchar * shortcut); +void dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * key, GdkModifierType * modifiers); #endif -- cgit v1.2.3 From 47d48f8c3eb464e27f9632f51ce574fc9358143b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 10 Jun 2010 15:17:26 -0500 Subject: Trying a dummy sgml file --- docs/libdbusmenu-glib/reference/Makefile.am | 2 +- docs/libdbusmenu-glib/reference/tmpl/dummy.sgml | 0 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/libdbusmenu-glib/reference/tmpl/dummy.sgml diff --git a/docs/libdbusmenu-glib/reference/Makefile.am b/docs/libdbusmenu-glib/reference/Makefile.am index e8a3610..8119537 100644 --- a/docs/libdbusmenu-glib/reference/Makefile.am +++ b/docs/libdbusmenu-glib/reference/Makefile.am @@ -80,7 +80,7 @@ include $(top_srcdir)/gtk-doc.local.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in -EXTRA_DIST += version.xml.in +EXTRA_DIST += version.xml.in tmpl/dummy.sgml # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types diff --git a/docs/libdbusmenu-glib/reference/tmpl/dummy.sgml b/docs/libdbusmenu-glib/reference/tmpl/dummy.sgml new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3 From d6970de44f5ce5e6572761bc68d4252061794c9d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 10 Jun 2010 15:20:24 -0500 Subject: Apparently you can't use EXTRA_DIST like this with gtk-doc. Why be normal? --- docs/libdbusmenu-glib/reference/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/libdbusmenu-glib/reference/Makefile.am b/docs/libdbusmenu-glib/reference/Makefile.am index 8119537..e8a3610 100644 --- a/docs/libdbusmenu-glib/reference/Makefile.am +++ b/docs/libdbusmenu-glib/reference/Makefile.am @@ -80,7 +80,7 @@ include $(top_srcdir)/gtk-doc.local.make # Other files to distribute # e.g. EXTRA_DIST += version.xml.in -EXTRA_DIST += version.xml.in tmpl/dummy.sgml +EXTRA_DIST += version.xml.in # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types -- cgit v1.2.3 From 327143819733e9104a6f9b6ee043289d09a5fae5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 10 Jun 2010 20:19:34 -0500 Subject: Adding a dummy sgml file. --- docs/libdbusmenu-gtk/reference/tmpl/dummy.sgml | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/libdbusmenu-gtk/reference/tmpl/dummy.sgml diff --git a/docs/libdbusmenu-gtk/reference/tmpl/dummy.sgml b/docs/libdbusmenu-gtk/reference/tmpl/dummy.sgml new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3 From 4fbdf12b5671ebcc68ce2d41018cd2a567298be8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 10 Jun 2010 21:11:45 -0500 Subject: Adding an extra callback to catch a race condition --- libdbusmenu-glib/client.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index c0d3b7a..fa233a4 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -30,6 +30,8 @@ License version 3 and version 2.1 along with this program. If not, see #include "config.h" #endif +#include + #include #include @@ -397,6 +399,25 @@ dbus_owner_change (DBusGProxy * proxy, const gchar * name, const gchar * prev, c return build_proxies(client); } +/* This is the response to see if the name has an owner. If + it does, then we should build the proxies here. Race condition + check. */ +static void +name_owner_check (DBusGProxy *proxy, gboolean has_owner, GError *error, gpointer userdata) +{ + if (error != NULL) { + return; + } + + if (!has_owner) { + return; + } + + DbusmenuClient * client = DBUSMENU_CLIENT(userdata); + build_proxies(client); + return; +} + /* This function builds the DBus proxy which will look out for the service coming up. */ static void @@ -426,6 +447,13 @@ build_dbus_proxy (DbusmenuClient * client) dbus_g_proxy_connect_signal(priv->dbusproxy, "NameOwnerChanged", G_CALLBACK(dbus_owner_change), client, NULL); + /* Now let's check to make sure we're not in some race + condition case. */ + org_freedesktop_DBus_name_has_owner_async(priv->dbusproxy, + priv->dbus_name, + name_owner_check, + client); + return; } -- cgit v1.2.3 From 77958c0a4c45138e5f731e6f11cdee5a8bc3f8a8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 10:58:21 -0500 Subject: Adding in a prototype for stealing the shortcut off of a menuitem. --- libdbusmenu-gtk/menuitem.c | 7 +++++++ libdbusmenu-gtk/menuitem.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 0f09483..74cb635 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -194,6 +194,13 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, return TRUE; } +gboolean +dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, const GtkMenuItem * gmi) +{ + + return FALSE; +} + /** dbusmenu_menuitem_property_get_shortcut: @menuitem: The #DbusmenuMenuitem to get the shortcut off diff --git a/libdbusmenu-gtk/menuitem.h b/libdbusmenu-gtk/menuitem.h index ba01549..6960f76 100644 --- a/libdbusmenu-gtk/menuitem.h +++ b/libdbusmenu-gtk/menuitem.h @@ -33,12 +33,14 @@ License version 3 and version 2.1 along with this program. If not, see #include #include #include +#include gboolean dbusmenu_menuitem_property_set_image (DbusmenuMenuitem * menuitem, const gchar * property, const GdkPixbuf * data); GdkPixbuf * dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * property); gboolean dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, GdkModifierType modifier); gboolean dbusmenu_menuitem_property_set_shortcut_string (DbusmenuMenuitem * menuitem, const gchar * shortcut); +gboolean dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, const GtkMenuItem * gmi); void dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * key, GdkModifierType * modifiers); #endif -- cgit v1.2.3 From 50dcdae3889fef7da43c6618b35b70847ba59d72 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 11:05:34 -0500 Subject: Comment fixes --- libdbusmenu-gtk/menuitem.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 74cb635..6f5c6b3 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -131,7 +131,7 @@ dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar * } /** - dbusmenu_menuitem_property_set_shortcut: + dbusmenu_menuitem_property_set_shortcut_string: @menuitem: The #DbusmenuMenuitem to set the shortcut on @shortcut: String describing the shortcut @@ -160,6 +160,17 @@ dbusmenu_menuitem_property_set_shortcut_string (DbusmenuMenuitem * menuitem, con return dbusmenu_menuitem_property_set_shortcut(menuitem, key, modifier); } +/** + dbusmenu_menuitem_property_set_shortcut: + @menuitem: The #DbusmenuMenuitem to set the shortcut on + @key: The keycode of the key to send + @modifier: A bitmask of modifiers used to activate the item + + Takes the modifer described by @key and @modifier and places that into + the format sending across Dbus for shortcuts. + + Return value: Whether it was successful at setting the property. +*/ gboolean dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, GdkModifierType modifier) { @@ -194,6 +205,17 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, return TRUE; } +/** + dbusmenu_menuitem_property_set_shortcut_menuitem: + @menuitem: The #DbusmenuMenuitem to set the shortcut on + @gmi: A menu item to steal the shortcut off of + + Takes the shortcut that is installed on a menu item and calls + #dbusmenu_menuitem_property_set_shortcut with it. It also sets + up listeners to watch it change. + + Return value: Whether it was successful at setting the property. +*/ gboolean dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, const GtkMenuItem * gmi) { -- cgit v1.2.3 From 7fc24062ed7fea97fec2a3cd873dcc68edc9c488 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 12:12:35 -0500 Subject: Fleshing out getting the accelerator from the menuitem. --- libdbusmenu-gtk/menuitem.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 6f5c6b3..dfd83b0 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -205,6 +205,14 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, return TRUE; } +/* Look at the closures in an accel group and find + the one that matches the one we've been passed */ +static gboolean +find_closure (GtkAccelKey * key, GClosure * closure, gpointer user_data) +{ + return closure == user_data; +} + /** dbusmenu_menuitem_property_set_shortcut_menuitem: @menuitem: The #DbusmenuMenuitem to set the shortcut on @@ -219,8 +227,32 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, gboolean dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, const GtkMenuItem * gmi) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); + g_return_val_if_fail(GTK_IS_MENU_ITEM(gmi), FALSE); + + GClosure * closure = NULL; + GList * clist; + + clist = gtk_widget_list_accel_closures(GTK_WIDGET(gmi)); + if (clist == NULL) { + g_warning("Menuitem does not have any closures."); + return FALSE; + } + + closure = (GClosure *)clist->data; + g_list_free(clist); + + GtkAccelGroup * group = gtk_accel_group_from_accel_closure(closure); + + /* Seriously, if this returns NULL something is seriously + wrong in GTK. */ + g_return_val_if_fail(group != NULL, FALSE); + + GtkAccelKey * key = gtk_accel_group_find(group, find_closure, closure); + /* Again, not much we can do except complain loudly. */ + g_return_val_if_fail(key != NULL, FALSE); - return FALSE; + return dbusmenu_menuitem_property_set_shortcut(menuitem, key->accel_key, key->accel_mods); } /** -- cgit v1.2.3 From b0099f8f5ce53544a225033274ffd692e9edf4e6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 12:44:03 -0500 Subject: Checking the validity of the key combo. --- libdbusmenu-gtk/menuitem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index dfd83b0..ea1b77f 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -175,6 +175,7 @@ gboolean dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, GdkModifierType modifier) { g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); + g_return_val_if_fail(gtk_accelerator_valid(key, modifier), FALSE); GPtrArray * array = g_ptr_array_new(); -- cgit v1.2.3 From b29f86be192fda821b7245b6159fa1aefc623a40 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 13:10:18 -0500 Subject: Adding in a new gtester test suite. --- .bzrignore | 3 +++ tests/Makefile.am | 32 ++++++++++++++++++++++- tests/test-gtk-objects.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 tests/test-gtk-objects.c diff --git a/.bzrignore b/.bzrignore index 37f2bb8..02b481f 100644 --- a/.bzrignore +++ b/.bzrignore @@ -71,3 +71,6 @@ libdbusmenu-gtk/DbusmenuGtk-0.2.gir libdbusmenu-gtk/DbusmenuGtk-0.2.tmp.gir libdbusmenu-gtk/DbusmenuGtk-0.2.typelib libdbusmenu-gtk/DbusmenuGtk-0.2.vapi +tests/test-gtk-objects +tests/test-gtk-objects-test +tests/test-gtk-objects.xml diff --git a/tests/Makefile.am b/tests/Makefile.am index cfa1399..6482d09 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -7,6 +7,7 @@ TESTS = \ test-glib-properties \ test-glib-proxy \ test-glib-simple-items \ + test-gtk-objects-test \ test-gtk-label \ test-gtk-reorder @@ -20,6 +21,7 @@ check_PROGRAMS = \ test-glib-proxy-client \ test-glib-proxy-server \ test-glib-proxy-proxy \ + test-gtk-objects \ test-gtk-label-client \ test-gtk-label-server \ test-glib-simple-items \ @@ -196,6 +198,33 @@ test_glib_simple_items_LDADD = \ ../libdbusmenu-glib/libdbusmenu-glib.la \ $(DBUSMENUGLIB_LIBS) +###################### +# Test GTK Object +###################### + +GTK_OBJECT_XML_REPORT = test-gtk-objects.xml + +test-gtk-objects-test: test-gtk-objects Makefile.am + @echo "#!/bin/bash" > $@ + @echo $(XVFB_RUN) >> $@ + @echo $(DBUS_RUNNER) --task gtester --parameter --verbose --parameter -k --parameter -o --parameter $(GTK_OBJECT_XML_REPORT) --parameter ./test-gtk-objects >> $@ + @chmod +x $@ + +test_gtk_objects_SOURCES = \ + test-gtk-objects.c + +test_gtk_objects_CFLAGS = \ + -I $(srcdir)/.. \ + $(DBUSMENUGLIB_CFLAGS) \ + $(DBUSMENUGTK_CFLAGS) \ + -Wall -Werror + +test_gtk_objects_LDADD = \ + ../libdbusmenu-glib/libdbusmenu-glib.la \ + ../libdbusmenu-gtk/libdbusmenu-gtk.la \ + $(DBUSMENUGLIB_LIBS) \ + $(DBUSMENUGTK_LIBS) + ######################### # Test GTK Label ######################### @@ -322,5 +351,6 @@ distclean-local: DISTCLEANFILES = \ $(TESTS) \ - $(OBJECT_XML_REPORT) + $(OBJECT_XML_REPORT) \ + $(GTK_OBJECT_XML_REPORT) diff --git a/tests/test-gtk-objects.c b/tests/test-gtk-objects.c new file mode 100644 index 0000000..561f91e --- /dev/null +++ b/tests/test-gtk-objects.c @@ -0,0 +1,67 @@ +/* +Testing for the various objects just by themselves. + +Copyright 2010 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + +#include +#include + +/* Building the basic menu item, make sure we didn't break + any core GObject stuff */ +static void +test_object_menuitem (void) +{ + /* Build a menu item */ + DbusmenuMenuitem * item = dbusmenu_menuitem_new(); + + /* Test to make sure it's a happy object */ + g_assert(item != NULL); + g_assert(G_IS_OBJECT(item)); + g_assert(DBUSMENU_IS_MENUITEM(item)); + + /* Set up a check to make sure it gets destroyed on unref */ + g_object_add_weak_pointer(G_OBJECT(item), (gpointer *)&item); + g_object_unref(item); + + /* Did it go away? */ + g_assert(item == NULL); + + return; +} + +/* Build the test suite */ +static void +test_gtk_objects_suite (void) +{ + g_test_add_func ("/dbusmenu/gtk/objects/menuitem/base", test_object_menuitem); + return; +} + +gint +main (gint argc, gchar * argv[]) +{ + gtk_init(&argc, &argv); + + g_test_init(&argc, &argv, NULL); + + /* Test suites */ + test_gtk_objects_suite(); + + return g_test_run (); +} -- cgit v1.2.3 From c78d1b4b827e13ee4e498516e14a56571e8a8b5f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 13:29:49 -0500 Subject: Adding a test image --- tests/test-gtk-objects.jpg | Bin 0 -> 14376 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/test-gtk-objects.jpg diff --git a/tests/test-gtk-objects.jpg b/tests/test-gtk-objects.jpg new file mode 100644 index 0000000..478704e Binary files /dev/null and b/tests/test-gtk-objects.jpg differ -- cgit v1.2.3 From ecf64a2f000ee9666a263afe23075d36bf2efe9a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 13:54:12 -0500 Subject: Adding in a test for the pixbuf property --- tests/Makefile.am | 1 + tests/test-gtk-objects.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/tests/Makefile.am b/tests/Makefile.am index 6482d09..b21c346 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -217,6 +217,7 @@ test_gtk_objects_CFLAGS = \ -I $(srcdir)/.. \ $(DBUSMENUGLIB_CFLAGS) \ $(DBUSMENUGTK_CFLAGS) \ + -DSRCDIR="\"$(srcdir)\"" \ -Wall -Werror test_gtk_objects_LDADD = \ diff --git a/tests/test-gtk-objects.c b/tests/test-gtk-objects.c index 561f91e..c9f9c4c 100644 --- a/tests/test-gtk-objects.c +++ b/tests/test-gtk-objects.c @@ -22,6 +22,8 @@ with this program. If not, see . #include #include +#define TEST_IMAGE SRCDIR "/" "test-gtk-objects.jpg" + /* Building the basic menu item, make sure we didn't break any core GObject stuff */ static void @@ -45,11 +47,49 @@ test_object_menuitem (void) return; } +/* Setting and getting a pixbuf */ +static void +test_object_prop_pixbuf (void) +{ + const gchar * prop_name = "image-test"; + + /* Build a menu item */ + DbusmenuMenuitem * item = dbusmenu_menuitem_new(); + + /* Test to make sure it's a happy object */ + g_assert(item != NULL); + g_assert(G_IS_OBJECT(item)); + g_assert(DBUSMENU_IS_MENUITEM(item)); + + /* Load our image */ + GdkPixbuf * pixbuf = gdk_pixbuf_new_from_file(TEST_IMAGE, NULL); + g_assert(pixbuf != NULL); + + /* Set the property */ + gboolean success = dbusmenu_menuitem_property_set_image(item, prop_name, pixbuf); + g_assert(success); + g_object_unref(pixbuf); + + /* Check to see if it's set */ + const GValue * val = dbusmenu_menuitem_property_get_value(item, prop_name); + g_assert(val != NULL); + + /* Get the pixbuf back! */ + GdkPixbuf * newpixbuf = dbusmenu_menuitem_property_get_image(item, prop_name); + g_assert(newpixbuf != NULL); + g_object_unref(newpixbuf); + + g_object_unref(item); + + return; +} + /* Build the test suite */ static void test_gtk_objects_suite (void) { g_test_add_func ("/dbusmenu/gtk/objects/menuitem/base", test_object_menuitem); + g_test_add_func ("/dbusmenu/gtk/objects/menuitem/prop_pixbuf", test_object_prop_pixbuf); return; } -- cgit v1.2.3 From 13fd7c6e7182b3142c6951098dcd2172c9ddf4ca Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 14:09:09 -0500 Subject: Add a test to set the shortcut on a menuitem --- tests/test-gtk-objects.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/test-gtk-objects.c b/tests/test-gtk-objects.c index c9f9c4c..92f2469 100644 --- a/tests/test-gtk-objects.c +++ b/tests/test-gtk-objects.c @@ -21,6 +21,7 @@ with this program. If not, see . #include #include +#include #define TEST_IMAGE SRCDIR "/" "test-gtk-objects.jpg" @@ -84,12 +85,41 @@ test_object_prop_pixbuf (void) return; } +/* Setting and getting a shortcut */ +static void +test_object_prop_shortcut (void) +{ + /* Build a menu item */ + DbusmenuMenuitem * item = dbusmenu_menuitem_new(); + + /* Test to make sure it's a happy object */ + g_assert(item != NULL); + g_assert(G_IS_OBJECT(item)); + g_assert(DBUSMENU_IS_MENUITEM(item)); + + guint key = GDK_c; + GdkModifierType modifier = GDK_CONTROL_MASK; + + /* Set a shortcut */ + gboolean success = dbusmenu_menuitem_property_set_shortcut(item, key, modifier); + g_assert(success); + + /* Check for value */ + const GValue * val = dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_SHORTCUT); + g_assert(val != NULL); + + g_object_unref(item); + + return; +} + /* Build the test suite */ static void test_gtk_objects_suite (void) { g_test_add_func ("/dbusmenu/gtk/objects/menuitem/base", test_object_menuitem); g_test_add_func ("/dbusmenu/gtk/objects/menuitem/prop_pixbuf", test_object_prop_pixbuf); + g_test_add_func ("/dbusmenu/gtk/objects/menuitem/prop_shortcut", test_object_prop_shortcut); return; } -- cgit v1.2.3 From 01b4ed50a28d5e340462b5371802006260519a11 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 14:20:34 -0500 Subject: Putting more sensible names in the gtester output --- tests/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index b21c346..d608860 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -86,7 +86,7 @@ OBJECT_XML_REPORT = test-glib-objects.xml test-glib-objects-test: test-glib-objects Makefile.am @echo "#!/bin/bash" > $@ - @echo $(DBUS_RUNNER) --task gtester --parameter --verbose --parameter -k --parameter -o --parameter $(OBJECT_XML_REPORT) --parameter ./test-glib-objects >> $@ + @echo $(DBUS_RUNNER) --task gtester --task-name test --parameter --verbose --parameter -k --parameter -o --parameter $(OBJECT_XML_REPORT) --parameter ./test-glib-objects >> $@ @chmod +x $@ test_glib_objects_SOURCES = \ @@ -207,7 +207,7 @@ GTK_OBJECT_XML_REPORT = test-gtk-objects.xml test-gtk-objects-test: test-gtk-objects Makefile.am @echo "#!/bin/bash" > $@ @echo $(XVFB_RUN) >> $@ - @echo $(DBUS_RUNNER) --task gtester --parameter --verbose --parameter -k --parameter -o --parameter $(GTK_OBJECT_XML_REPORT) --parameter ./test-gtk-objects >> $@ + @echo $(DBUS_RUNNER) --task gtester --task-name test --parameter --verbose --parameter -k --parameter -o --parameter $(GTK_OBJECT_XML_REPORT) --parameter ./test-gtk-objects >> $@ @chmod +x $@ test_gtk_objects_SOURCES = \ -- cgit v1.2.3 From 4ead60b99de627e29d0aae213c622ba10ef72069 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 14:20:52 -0500 Subject: initing the value array properly --- libdbusmenu-gtk/menuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index ea1b77f..a4818ca 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -198,7 +198,7 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, g_ptr_array_add(wrapper, array); GValue value = {0}; - g_value_init(&value, G_TYPE_BOXED); + g_value_init(&value, G_TYPE_PTR_ARRAY); g_value_set_boxed(&value, wrapper); dbusmenu_menuitem_property_set_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT, &value); -- cgit v1.2.3 From 16b5a01c2cb8c4d8ce6216f984c4a06f6aa14c3a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 14:50:16 -0500 Subject: Fleshing out getting the shortcut --- libdbusmenu-gtk/menuitem.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index a4818ca..f56e9e5 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -268,7 +268,58 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c void dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * key, GdkModifierType * modifier) { + *key = 0; + *modifier = 0; + g_return_if_fail(DBUSMENU_IS_MENUITEM(menuitem)); + const GValue * wrapper = dbusmenu_menuitem_property_get_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT); + if (wrapper == NULL) { + return; + } + + g_return_if_fail(G_VALUE_HOLDS_BOXED(wrapper)); + + GPtrArray * wrapperarray = (GPtrArray *)g_value_get_boxed(wrapper); + if (wrapperarray->len == 0) { + return; + } + + if (wrapperarray->len != 1) { + g_warning("Shortcut is more than one entry. Which we don't currently support. Taking the first."); + } + + GPtrArray * entryarray = g_ptr_array_index(wrapperarray, 0); + if (entryarray->len == 0) { + /* Seems a little odd, but really, we're saying that it isn't a + shortcut, so I'm comfortable with exiting silently. */ + return; + } + + /* Parse through modifiers */ + int i; + for (i = 0; i < entryarray->len - 1; i++) { + if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { + *modifier |= GDK_CONTROL_MASK; + continue; + } + if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { + *modifier |= GDK_MOD1_MASK; + continue; + } + if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { + *modifier |= GDK_SHIFT_MASK; + continue; + } + if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { + *modifier |= GDK_SUPER_MASK; + continue; + } + } + + GdkModifierType tempmod; + + gtk_accelerator_parse(g_ptr_array_index(entryarray, entryarray->len - 1), key, &tempmod); + return; } -- cgit v1.2.3 From ac0a5299c1fe73acb30f34939dfcd6af57c12231 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 14:52:26 -0500 Subject: Testing we can get the modifier back out. --- tests/test-gtk-objects.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test-gtk-objects.c b/tests/test-gtk-objects.c index 92f2469..726f404 100644 --- a/tests/test-gtk-objects.c +++ b/tests/test-gtk-objects.c @@ -108,6 +108,14 @@ test_object_prop_shortcut (void) const GValue * val = dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_SHORTCUT); g_assert(val != NULL); + /* Check to see if we love it */ + guint newkey = 0; + GdkModifierType newmodifier = 0; + dbusmenu_menuitem_property_get_shortcut(item, &newkey, &newmodifier); + + g_assert(key == newkey); + g_assert(newmodifier == modifier); + g_object_unref(item); return; -- cgit v1.2.3 From 53e80ec1652a9519a7e546d7055527eb7b5ad2aa Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 15:00:57 -0500 Subject: Sending the test image along with the other data. --- tests/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Makefile.am b/tests/Makefile.am index d608860..00297bd 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -324,6 +324,7 @@ EXTRA_DIST = \ $(examples_DATA) \ run-xvfb.sh \ $(json_DATA) \ + test-gtk-objects.jpg \ dbusmenu-gtk/dbusMenuTest \ dbusmenu-gtk/mago_tests/dbusmenu.xml \ dbusmenu-gtk/mago_tests/dbusmenu.py \ -- cgit v1.2.3 From 2525166d72f421e045b21910aa7df2523135d1c9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 15:23:05 -0500 Subject: Switching to an accel label --- libdbusmenu-gtk/genericmenuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 8f40d93..1000c68 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -191,7 +191,7 @@ set_label (GtkMenuItem * menu_item, const gchar * label) update the one that we already have. */ if (labelw == NULL) { /* Build it */ - labelw = GTK_LABEL(gtk_label_new(label)); + labelw = GTK_LABEL(gtk_accel_label_new(label)); gtk_label_set_use_underline(GTK_LABEL(labelw), TRUE); gtk_misc_set_alignment(GTK_MISC(labelw), 0.0, 0.5); gtk_widget_show(GTK_WIDGET(labelw)); -- cgit v1.2.3 From b2be41cd5085e821f5557303592c11a064eef104 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 16:10:54 -0500 Subject: Add two functions for setting and getting the accelerator group. --- libdbusmenu-gtk/client.c | 34 ++++++++++++++++++++++++++++++++++ libdbusmenu-gtk/client.h | 3 +++ 2 files changed, 37 insertions(+) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 3bd0af6..64f6a6d 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -99,6 +99,40 @@ dbusmenu_gtkclient_finalize (GObject *object) return; } +/** + dbusmenu_gtkclient_set_accel_group: + @client: To set the group on + @agroup: The new acceleration group + + Sets the acceleration group for the menu items with accelerators + on this client. +*/ +void +dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * agroup) +{ + g_return_if_fail(DBUSMENU_IS_GTKCLIENT(client)); + g_return_if_fail(GTK_IS_ACCEL_GROUP(agroup)); + + return; +} + +/** + dbusmenu_gtkclient_get_accel_group: + @client: Client to query for an accelerator group + + Gets the accel group for this client. + + Return value: Either a valid group or #NULL on error or + none set. +*/ +GtkAccelGroup * +dbusmenu_gtkclient_get_accel_group (DbusmenuGtkClient * client) +{ + g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), NULL); + + return NULL; +} + /* Internal Functions */ static const gchar * data_menuitem = "dbusmenugtk-data-gtkmenuitem"; diff --git a/libdbusmenu-gtk/client.h b/libdbusmenu-gtk/client.h index 7672bf7..a7c96ee 100644 --- a/libdbusmenu-gtk/client.h +++ b/libdbusmenu-gtk/client.h @@ -79,6 +79,9 @@ DbusmenuGtkClient * dbusmenu_gtkclient_new (gchar * dbus_name, gchar * dbus_obje GtkMenuItem * dbusmenu_gtkclient_menuitem_get (DbusmenuGtkClient * client, DbusmenuMenuitem * item); GtkMenu * dbusmenu_gtkclient_menuitem_get_submenu (DbusmenuGtkClient * client, DbusmenuMenuitem * item); +void dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * agroup); +GtkAccelGroup * dbusmenu_gtkclient_get_accel_group (DbusmenuGtkClient * client); + void dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * item, GtkMenuItem * gmi, DbusmenuMenuitem * parent); /** -- cgit v1.2.3 From b426c6e47fbfa4c701a264c765a47b7fba820e8c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 16:15:30 -0500 Subject: Adding a private area on to the client. --- libdbusmenu-gtk/client.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 64f6a6d..09e7b4e 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -36,6 +36,15 @@ License version 3 and version 2.1 along with this program. If not, see #include "menuitem.h" #include "genericmenuitem.h" +/* Private */ +typedef struct _DbusmenuGtkClientPrivate DbusmenuGtkClientPrivate; +struct _DbusmenuGtkClientPrivate { + GtkAccelGroup * agroup; +}; + +#define DBUSMENU_GTKCLIENT_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_GTKCLIENT_TYPE, DbusmenuGtkClientPrivate)) + /* Prototypes */ static void dbusmenu_gtkclient_class_init (DbusmenuGtkClientClass *klass); static void dbusmenu_gtkclient_init (DbusmenuGtkClient *self); @@ -62,6 +71,8 @@ dbusmenu_gtkclient_class_init (DbusmenuGtkClientClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + g_type_class_add_private (klass, sizeof (DbusmenuGtkClientPrivate)); + object_class->dispose = dbusmenu_gtkclient_dispose; object_class->finalize = dbusmenu_gtkclient_finalize; @@ -73,6 +84,10 @@ dbusmenu_gtkclient_class_init (DbusmenuGtkClientClass *klass) static void dbusmenu_gtkclient_init (DbusmenuGtkClient *self) { + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(self); + + priv->agroup = 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_SEPARATOR, new_item_seperator); @@ -85,6 +100,12 @@ dbusmenu_gtkclient_init (DbusmenuGtkClient *self) static void dbusmenu_gtkclient_dispose (GObject *object) { + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(object); + + if (priv->agroup != NULL) { + g_object_unref(priv->agroup); + priv->agroup = NULL; + } G_OBJECT_CLASS (dbusmenu_gtkclient_parent_class)->dispose (object); return; -- cgit v1.2.3 From a27e07f2173dea07625df51466563b1caeddb385 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 17:04:37 -0500 Subject: Fleshing out setting and getting the accel group --- libdbusmenu-gtk/client.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 09e7b4e..ca0b668 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -120,6 +120,48 @@ dbusmenu_gtkclient_finalize (GObject *object) return; } +static void +swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { + gpointer * array = (gpointer *)userdata; + DbusmenuGtkClient * client = (DbusmenuGtkClient *)array[0]; + GtkAccelGroup * old_agroup = (GtkAccelGroup *)array[1]; + GtkAccelGroup * new_agroup = (GtkAccelGroup *)array[2]; + + /* If we don't have a shortcut we don't care */ + if (!dbusmenu_menuitem_property_exist(mi, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { + return; + } + + guint key = 0; + GdkModifierType modifiers = 0; + + dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); + + if (key == 0) { + return; + } + + GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(client, mi); + if (gmi == NULL) { + return; + } + + if (old_agroup != NULL) { + gtk_widget_remove_accelerator(GTK_WIDGET(gmi), old_agroup, key, modifiers); + } + + if (new_agroup != NULL) { + gtk_widget_add_accelerator(GTK_WIDGET(gmi), + "activate", + new_agroup, + key, + modifiers, + GTK_ACCEL_VISIBLE); + } + + return; +} + /** dbusmenu_gtkclient_set_accel_group: @client: To set the group on @@ -134,6 +176,23 @@ dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * g_return_if_fail(DBUSMENU_IS_GTKCLIENT(client)); g_return_if_fail(GTK_IS_ACCEL_GROUP(agroup)); + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(client); + + DbusmenuMenuitem * root = dbusmenu_client_get_root(DBUSMENU_CLIENT(client)); + if (root != NULL) { + gpointer data[3]; + data[0] = client; + data[1] = priv->agroup; + data[2] = agroup; + + dbusmenu_menuitem_foreach(root, swap_agroup, data); + } + + if (priv->agroup != NULL) { + g_object_unref(priv->agroup); + priv->agroup = NULL; + } + return; } @@ -151,7 +210,9 @@ dbusmenu_gtkclient_get_accel_group (DbusmenuGtkClient * client) { g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), NULL); - return NULL; + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(client); + + return priv->agroup; } /* Internal Functions */ -- cgit v1.2.3 From be82ae8c060f84b28d4e4c6fb0c4b11062112984 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 17:09:02 -0500 Subject: Restructuring to use a structure to get cleaner type checking. --- libdbusmenu-gtk/client.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index ca0b668..f5d683c 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -120,12 +120,19 @@ dbusmenu_gtkclient_finalize (GObject *object) return; } +/* Structure for passing data to swap_agroup */ +typedef struct _swap_agroup_t swap_agroup_t; +struct _swap_agroup_t { + DbusmenuGtkClient * client; + GtkAccelGroup * old_agroup; + GtkAccelGroup * new_agroup; +}; + +/* Looks at the old version of the accelerator group and + the new one and makes the state proper. */ static void swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { - gpointer * array = (gpointer *)userdata; - DbusmenuGtkClient * client = (DbusmenuGtkClient *)array[0]; - GtkAccelGroup * old_agroup = (GtkAccelGroup *)array[1]; - GtkAccelGroup * new_agroup = (GtkAccelGroup *)array[2]; + swap_agroup_t * data = (swap_agroup_t *)userdata; /* If we don't have a shortcut we don't care */ if (!dbusmenu_menuitem_property_exist(mi, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { @@ -141,19 +148,19 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { return; } - GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(client, mi); + GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(data->client, mi); if (gmi == NULL) { return; } - if (old_agroup != NULL) { - gtk_widget_remove_accelerator(GTK_WIDGET(gmi), old_agroup, key, modifiers); + if (data->old_agroup != NULL) { + gtk_widget_remove_accelerator(GTK_WIDGET(gmi), data->old_agroup, key, modifiers); } - if (new_agroup != NULL) { + if (data->new_agroup != NULL) { gtk_widget_add_accelerator(GTK_WIDGET(gmi), "activate", - new_agroup, + data->new_agroup, key, modifiers, GTK_ACCEL_VISIBLE); @@ -180,12 +187,12 @@ dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * DbusmenuMenuitem * root = dbusmenu_client_get_root(DBUSMENU_CLIENT(client)); if (root != NULL) { - gpointer data[3]; - data[0] = client; - data[1] = priv->agroup; - data[2] = agroup; + swap_agroup_t data; + data.client = client; + data.old_agroup = priv->agroup; + data.new_agroup = agroup; - dbusmenu_menuitem_foreach(root, swap_agroup, data); + dbusmenu_menuitem_foreach(root, swap_agroup, &data); } if (priv->agroup != NULL) { @@ -193,6 +200,8 @@ dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * priv->agroup = NULL; } + priv->agroup = agroup; + return; } -- cgit v1.2.3 From 1338ccff53e35cafae1500eb5414514c57af15bf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 19:59:13 -0500 Subject: Adding a function to refresh the shortcut of a menuitem. --- libdbusmenu-gtk/client.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index f5d683c..625c4ba 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -169,6 +169,24 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { return; } +/* Refresh the shortcut for an entry */ +static void +refresh_shortcut (DbusmenuGtkClient * client, DbusmenuMenuitem * mi) +{ + g_return_if_fail(DBUSMENU_IS_GTKCLIENT(client)); + g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); + + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(client); + + swap_agroup_t data; + data.client = client; + data.old_agroup = priv->agroup; + data.new_agroup = priv->agroup; + + return swap_agroup(mi, &data); +} + + /** dbusmenu_gtkclient_set_accel_group: @client: To set the group on -- cgit v1.2.3 From 85d700350d533fc1989aa7cb6cfe9e973b4db552 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 20:05:19 -0500 Subject: Connecting up the refresh cycles to property changes and creation. --- libdbusmenu-gtk/client.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 625c4ba..ab7f16c 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -368,6 +368,17 @@ menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GValue * value, GtkMen return; } +/* Special handler for the shortcut changing as we need to have the + client for that one to get the accel group. */ +static void +menu_shortcut_change_cb (DbusmenuMenuitem * mi, gchar * prop, GValue * value, DbusmenuGtkClient * client) +{ + if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { + refresh_shortcut(client, mi); + } + return; +} + /* Call back that happens when the DbusmenuMenuitem is destroyed. We're making sure to clean up everything else down the pipe. */ @@ -434,6 +445,7 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * /* DbusmenuMenuitem signals */ 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_PROPERTY_CHANGED, G_CALLBACK(menu_shortcut_change_cb), client); 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); @@ -448,6 +460,7 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * process_sensitive(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_ENABLED)); process_toggle_type(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE)); process_toggle_state(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_TOGGLE_STATE)); + refresh_shortcut(client, item); /* Oh, we're a child, let's deal with that */ if (parent != NULL) { -- cgit v1.2.3 From d1cf581703855139e5759ed2fd7b3c49157061ad Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 21:04:19 -0500 Subject: Building a shortcut test --- .bzrignore | 3 ++ tests/Makefile.am | 43 +++++++++++++++++ tests/test-gtk-shortcut-client.c | 75 ++++++++++++++++++++++++++++++ tests/test-gtk-shortcut-server.c | 99 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 220 insertions(+) create mode 100644 tests/test-gtk-shortcut-client.c create mode 100644 tests/test-gtk-shortcut-server.c diff --git a/.bzrignore b/.bzrignore index 02b481f..0f5b495 100644 --- a/.bzrignore +++ b/.bzrignore @@ -74,3 +74,6 @@ libdbusmenu-gtk/DbusmenuGtk-0.2.vapi tests/test-gtk-objects tests/test-gtk-objects-test tests/test-gtk-objects.xml +tests/test-gtk-shortcut +tests/test-gtk-shortcut-client +tests/test-gtk-shortcut-server diff --git a/tests/Makefile.am b/tests/Makefile.am index 00297bd..356146f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -9,6 +9,7 @@ TESTS = \ test-glib-simple-items \ test-gtk-objects-test \ test-gtk-label \ + test-gtk-shortcut \ test-gtk-reorder check_PROGRAMS = \ @@ -24,6 +25,8 @@ check_PROGRAMS = \ test-gtk-objects \ test-gtk-label-client \ test-gtk-label-server \ + test-gtk-shortcut-client \ + test-gtk-shortcut-server \ test-glib-simple-items \ test-gtk-reorder-server @@ -266,6 +269,46 @@ test_gtk_label_client_LDADD = \ $(DBUSMENUGTK_LIBS) \ $(DBUSMENUTESTS_LIBS) +######################### +# Test GTK Shortcut +######################### + +test-gtk-shortcut: test-gtk-shortcut-client test-gtk-shortcut-server Makefile.am + @echo "#!/bin/bash" > $@ + @echo $(XVFB_RUN) >> $@ + @echo $(DBUS_RUNNER) --task ./test-gtk-shortcut-client --task-name Client --task ./test-gtk-shortcut-server --task-name Server --ignore-return >> $@ + @chmod +x $@ + +test_gtk_shortcut_server_SOURCES = \ + test-gtk-shortcut-server.c + +test_gtk_shortcut_server_CFLAGS = \ + -I $(srcdir)/.. \ + $(DBUSMENUGTK_CFLAGS) \ + $(DBUSMENUTESTS_CFLAGS) \ + $(DBUSMENUGLIB_CFLAGS) -Wall -Werror + +test_gtk_shortcut_server_LDADD = \ + ../libdbusmenu-glib/libdbusmenu-glib.la \ + ../libdbusmenu-gtk/libdbusmenu-gtk.la \ + $(DBUSMENUGTK_LIBS) \ + $(DBUSMENUTESTS_LIBS) + +test_gtk_shortcut_client_SOURCES = \ + test-gtk-shortcut-client.c + +test_gtk_shortcut_client_CFLAGS = \ + -I $(srcdir)/.. \ + $(DBUSMENUGTK_CFLAGS) \ + $(DBUSMENUTESTS_CFLAGS) \ + $(DBUSMENUGLIB_CFLAGS) -Wall -Werror + +test_gtk_shortcut_client_LDADD = \ + ../libdbusmenu-glib/libdbusmenu-glib.la \ + ../libdbusmenu-gtk/libdbusmenu-gtk.la \ + $(DBUSMENUGTK_LIBS) \ + $(DBUSMENUTESTS_LIBS) + ######################### # Test GTK Reorder ######################### diff --git a/tests/test-gtk-shortcut-client.c b/tests/test-gtk-shortcut-client.c new file mode 100644 index 0000000..26e1531 --- /dev/null +++ b/tests/test-gtk-shortcut-client.c @@ -0,0 +1,75 @@ +/* +A test for libdbusmenu to ensure its quality. + +Copyright 2009 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + +#include +#include +#include + +static GMainLoop * mainloop = NULL; +static gboolean passed = TRUE; +static guint death_timer = 0; + +static gboolean +timer_func (gpointer data) +{ + passed = TRUE; + g_main_loop_quit(mainloop); + return FALSE; +} + +int +main (int argc, char ** argv) +{ + gtk_init(&argc, &argv); + + g_debug("Building Window"); + GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + GtkWidget * menubar = gtk_menu_bar_new(); + GtkWidget * menuitem = gtk_menu_item_new_with_label("Test"); + + DbusmenuGtkMenu * dmenu = dbusmenu_gtkmenu_new ("glib.label.test", "/org/test"); + DbusmenuGtkClient * dclient = dbusmenu_gtkmenu_get_client(dmenu); + + GtkAccelGroup * agroup = gtk_accel_group_new(); + dbusmenu_gtkclient_set_accel_group(dclient, agroup); + + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), GTK_WIDGET(dmenu)); + gtk_widget_show(menuitem); + gtk_menu_bar_append(menubar, menuitem); + gtk_widget_show(menubar); + gtk_container_add(GTK_CONTAINER(window), menubar); + gtk_window_set_title(GTK_WINDOW(window), "libdbusmenu-gtk test"); + gtk_widget_show(window); + + death_timer = g_timeout_add_seconds(10, timer_func, window); + + g_debug("Entering Mainloop"); + mainloop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(mainloop); + + if (passed) { + g_debug("Quiting"); + return 0; + } else { + g_debug("Quiting as we're a failure"); + return 1; + } +} diff --git a/tests/test-gtk-shortcut-server.c b/tests/test-gtk-shortcut-server.c new file mode 100644 index 0000000..428f558 --- /dev/null +++ b/tests/test-gtk-shortcut-server.c @@ -0,0 +1,99 @@ +/* +A test for libdbusmenu to ensure its quality. + +Copyright 2009 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License version 3, as published +by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see . +*/ + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +GMainLoop * mainloop = NULL; +DbusmenuServer * server = NULL; + +gboolean +timer_func (gpointer userdata) +{ + g_main_loop_quit(mainloop); + return FALSE; +} + +void +build_menu (void) +{ + DbusmenuMenuitem * item; + + DbusmenuMenuitem * root = dbusmenu_menuitem_new(); + + item = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Control-C"); + dbusmenu_menuitem_property_set_shortcut(item, GDK_c, GDK_CONTROL_MASK); + dbusmenu_menuitem_child_append(root, item); + g_object_unref(item); + + + dbusmenu_server_set_root(server, root); + g_object_unref(root); + + return; +} + +int +main (int argc, char ** argv) +{ + GError * error = NULL; + + g_type_init(); + + DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); + g_debug("DBus ID: %s", dbus_connection_get_server_id(dbus_g_connection_get_connection(dbus_g_bus_get(DBUS_BUS_SESSION, NULL)))); + + DBusGProxy * bus_proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + guint nameret = 0; + + if (!org_freedesktop_DBus_request_name(bus_proxy, "glib.label.test", 0, &nameret, &error)) { + g_error("Unable to call to request name"); + return 1; + } + + if (nameret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + g_error("Unable to get name"); + return 1; + } + + server = dbusmenu_server_new("/org/test"); + build_menu(); + + g_timeout_add_seconds(10, timer_func, NULL); + + mainloop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(mainloop); + + g_debug("Quiting"); + + return 0; +} + -- cgit v1.2.3 From a7940079b8a074529ea504efe3e9a033197ea057 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 21:24:29 -0500 Subject: Switching to a value array from a ptrarray --- libdbusmenu-gtk/menuitem.c | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index f56e9e5..9a374b0 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -160,6 +160,17 @@ dbusmenu_menuitem_property_set_shortcut_string (DbusmenuMenuitem * menuitem, con return dbusmenu_menuitem_property_set_shortcut(menuitem, key, modifier); } +/* Append strings to an g_value_array */ +static void +_g_value_array_append_string (GValueArray * array, const gchar * string) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, string); + g_value_array_append(array, &value); + return; +} + /** dbusmenu_menuitem_property_set_shortcut: @menuitem: The #DbusmenuMenuitem to set the shortcut on @@ -177,28 +188,31 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); g_return_val_if_fail(gtk_accelerator_valid(key, modifier), FALSE); - GPtrArray * array = g_ptr_array_new(); + GValueArray * array = g_value_array_new(4); /* Four seems like the max we'd need, plus it's still small */ if (modifier & GDK_CONTROL_MASK) { - g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_CONTROL)); + _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_CONTROL); } if (modifier & GDK_MOD1_MASK) { - g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_ALT)); + _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_ALT); } if (modifier & GDK_SHIFT_MASK) { - g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_SHIFT)); + _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_SHIFT); } if (modifier & GDK_SUPER_MASK) { - g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_SUPER)); + _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_SUPER); } - g_ptr_array_add(array, g_strdup(gdk_keyval_name(key))); + _g_value_array_append_string(array, gdk_keyval_name(key)); - GPtrArray * wrapper = g_ptr_array_new(); - g_ptr_array_add(wrapper, array); + GValueArray * wrapper = g_value_array_new(1); + GValue wrap_val = {0}; + g_value_init(&wrap_val, G_TYPE_VALUE_ARRAY); + g_value_set_boxed(&wrap_val, array); + g_value_array_append(wrapper, &wrap_val); GValue value = {0}; - g_value_init(&value, G_TYPE_PTR_ARRAY); + g_value_init(&value, G_TYPE_VALUE_ARRAY); g_value_set_boxed(&value, wrapper); dbusmenu_menuitem_property_set_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT, &value); -- cgit v1.2.3 From b31f6418f37bc35dc59162d5878eacb5002e3402 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 22:01:56 -0500 Subject: Block the case where the label is being init'd to NULL --- libdbusmenu-gtk/genericmenuitem.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 1000c68..7239864 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -158,6 +158,8 @@ get_hpadding (GtkWidget * widget) static void set_label (GtkMenuItem * menu_item, const gchar * label) { + if (label == NULL) return; + GtkWidget * child = gtk_bin_get_child(GTK_BIN(menu_item)); GtkLabel * labelw = NULL; gboolean suppress_update = FALSE; -- cgit v1.2.3 From 2a1ad77c4b91f35b69e42a79b48b2f0cc0f01bfb Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 23:48:51 -0500 Subject: Switching get over to a GValueArray too! --- libdbusmenu-gtk/menuitem.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 9a374b0..a448f88 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -292,19 +292,18 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke return; } - g_return_if_fail(G_VALUE_HOLDS_BOXED(wrapper)); - - GPtrArray * wrapperarray = (GPtrArray *)g_value_get_boxed(wrapper); - if (wrapperarray->len == 0) { + GValueArray * wrapperarray = (GValueArray *)g_value_get_boxed(wrapper); + if (wrapperarray->n_values == 0) { return; } - if (wrapperarray->len != 1) { + if (wrapperarray->n_values != 1) { g_warning("Shortcut is more than one entry. Which we don't currently support. Taking the first."); } - GPtrArray * entryarray = g_ptr_array_index(wrapperarray, 0); - if (entryarray->len == 0) { + GValue * ventryarray = g_value_array_get_nth(wrapperarray, 0); + GValueArray * entryarray = (GValueArray *)g_value_get_boxed(ventryarray); + if (entryarray->n_values == 0) { /* Seems a little odd, but really, we're saying that it isn't a shortcut, so I'm comfortable with exiting silently. */ return; @@ -312,20 +311,20 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke /* Parse through modifiers */ int i; - for (i = 0; i < entryarray->len - 1; i++) { - if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { + for (i = 0; i < entryarray->n_values - 1; i++) { + if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { *modifier |= GDK_CONTROL_MASK; continue; } - if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { + if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { *modifier |= GDK_MOD1_MASK; continue; } - if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { + if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { *modifier |= GDK_SHIFT_MASK; continue; } - if (g_strcmp0(g_ptr_array_index(entryarray, i), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { + if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { *modifier |= GDK_SUPER_MASK; continue; } @@ -333,7 +332,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke GdkModifierType tempmod; - gtk_accelerator_parse(g_ptr_array_index(entryarray, entryarray->len - 1), key, &tempmod); + gtk_accelerator_parse(g_value_get_string(g_value_array_get_nth(entryarray, entryarray->n_values - 1)), key, &tempmod); return; } -- cgit v1.2.3 From 02a8c4e2b1eff14575d1cb78fb35b483f1e35ad7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 23:57:38 -0500 Subject: More robust comparison --- tests/run-xvfb.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run-xvfb.sh b/tests/run-xvfb.sh index 3622dbf..3aa05c1 100644 --- a/tests/run-xvfb.sh +++ b/tests/run-xvfb.sh @@ -1,4 +1,4 @@ -if [ "$DISPLAY" == "" ]; then +if [ "x$DISPLAY" == "x" ]; then Xvfb -ac -noreset -screen 0 800x600x16 -help 2>/dev/null 1>&2 XID=`for id in 101 102 103 104 105 106 107 197 199 211 223 227 293 307 308 309 310 311 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 4703 4721 4723 4729 4733 4751 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 ; do test -e /tmp/.X$id-lock || { echo $id; exit 0; }; done; exit 1` { Xvfb -ac -noreset -screen 0 800x600x16 :$XID -screen 0 800x600x16 -nolisten tcp -auth /dev/null >/dev/null 2>&1 & trap "kill -15 $! " 0 HUP INT QUIT TRAP USR1 PIPE TERM ; } || { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; } -- cgit v1.2.3 From aaf2c098253373978f5a42fedc37ead470d0bea9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 15 Jun 2010 19:27:15 +0200 Subject: Merge from Ubuntu. * debian/control: - Set Maintainer to pkg-ayatana. - Add myself as Uploader. --- debian/changelog | 9 +++++++++ debian/control | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 773863f..5979a5f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +libdbusmenu (0.3.2-1) unstable; urgency=low + + * Merge from Ubuntu. + * debian/control: + - Set Maintainer to pkg-ayatana. + - Add myself as Uploader. + + -- Evgeni Golov Tue, 15 Jun 2010 19:25:56 +0200 + libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low * debian/control diff --git a/debian/control b/debian/control index 9ddb90b..44fcfb9 100644 --- a/debian/control +++ b/debian/control @@ -1,7 +1,8 @@ Source: libdbusmenu Section: gnome Priority: optional -Maintainer: Ubuntu Core Developers +Maintainer: The Ayatana Packagers +Uploaders: Evgeni Golov Build-Depends: debhelper (>= 5.0), cdbs (>= 0.4.41), libgtk2.0-dev (>= 2.12.0), -- cgit v1.2.3 From 4d513a2d48b3a9e2bb0108050166b83e3e41b69d Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 15 Jun 2010 19:28:37 +0200 Subject: debian/copyright: Convert to DEP5 format. --- debian/changelog | 4 +++- debian/copyright | 70 ++++++++++++++------------------------------------------ 2 files changed, 20 insertions(+), 54 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5979a5f..a1e2f75 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,8 +4,10 @@ libdbusmenu (0.3.2-1) unstable; urgency=low * debian/control: - Set Maintainer to pkg-ayatana. - Add myself as Uploader. + * debian/copyright: + - Convert to DEP5 format. - -- Evgeni Golov Tue, 15 Jun 2010 19:25:56 +0200 + -- Evgeni Golov Tue, 15 Jun 2010 19:28:18 +0200 libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low diff --git a/debian/copyright b/debian/copyright index 074097c..f4035f6 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,53 +1,17 @@ -This package was debianized by Ted Gould on -Wed, 11 Feb 2009 15:41:06 -0600. - -It was downloaded from - -Upstream Author: - - Ted Gould - -Copyright: - - Copyright (C) 2009 Canonical Ltd. - -License: - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 3 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -On Debian systems, the complete text of the GNU General -Public License can be found in `/usr/share/common-licenses/GPL-3'. - -License for libindicate/* (libindicate0 and libindicate-dev packages): - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 or 3 of the License. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -On Debian systems, the complete text of the GNU Lesser General Public License -can be found in `/usr/share/common-licenses/LGPL-2.1' and -`/usr/share/common-licenses/LGPL-3'. - -The Debian packaging is (C) 2009, Canonical Ltd. and -is licensed under the GPLv3, see `/usr/share/common-licenses/GPL-3'. +Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135 +Name: libdbusmenu +Maintainer: Ted Gould +Source: https://launchpad.net/dbusmenu + +Files: * +Copyright: 2009-2010 Ted Gould , Canonical Ltd. +License: GPL-3 + +Files: debian/* +Copyright: 2009-2010 Evgeni Golov +Copyright: 2009-2010 Ted Gould , Canonical Ltd. +License: GPL-3 + +License: GPL-3 + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'. -- cgit v1.2.3 From 05c812550569d64b3573a5fcf2fe8b66bb5906a9 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 15 Jun 2010 19:30:24 +0200 Subject: Update package descriptions. --- debian/changelog | 3 ++- debian/control | 66 ++++++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 49 insertions(+), 20 deletions(-) diff --git a/debian/changelog b/debian/changelog index a1e2f75..b45ea54 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,10 +4,11 @@ libdbusmenu (0.3.2-1) unstable; urgency=low * debian/control: - Set Maintainer to pkg-ayatana. - Add myself as Uploader. + - Update package descriptions. * debian/copyright: - Convert to DEP5 format. - -- Evgeni Golov Tue, 15 Jun 2010 19:28:18 +0200 + -- Evgeni Golov Tue, 15 Jun 2010 19:30:08 +0200 libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low diff --git a/debian/control b/debian/control index 44fcfb9..8041076 100644 --- a/debian/control +++ b/debian/control @@ -32,7 +32,11 @@ Depends: ${shlibs:Depends}, Breaks: indicator-messages (<< 0.3.0), indicator-session (<< 0.2.0), libdbusmenu-glib0 -Description: Menus over DBus shared library for glib +Description: library for passing menus over DBus + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. + . This package contains shared libraries to be used by applications. Package: libdbusmenu-glib-dev @@ -43,18 +47,24 @@ Depends: ${shlibs:Depends}, libdbusmenu-glib1 (= ${binary:Version}), libdbus-glib-1-dev (>= 0.76), libgtk2.0-dev (>= 2.12.0) -Description: Menus over DBus shared library - This package contains files that are needed to build applications. +Description: library for passing menus over DBus - development files + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. . - This package provides the development files. + This package contains files that are needed to build applications. Package: libdbusmenu-gtk1 Section: libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} -Description: Menus over DBus shared library for GTK - This package contains shared libraries to be used by applications. +Description: library for passing menus over DBus - GTK version + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. + . + This package contains shared libraries to be used by GTK applications. Package: libdbusmenu-gtk-dev Section: libdevel @@ -65,10 +75,12 @@ Depends: ${shlibs:Depends}, libdbus-glib-1-dev (>= 0.76), libgtk2.0-dev (>= 2.12.0), libdbusmenu-glib-dev -Description: Menus over DBus shared library for GTK - This package contains files that are needed to build applications. +Description: library for passing menus over DBus - GTK version developement files + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. . - This package provides the development files. + This package contains files that are needed to build GTK applications. Package: libdbusmenu-tools Section: devel @@ -77,9 +89,13 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, python, libdbusmenu-glib1 (= ${binary:Version}) -Description: Tools useful during development with libdbusmenu +Description: tools useful during development with libdbusmenu + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. . - This package contains tools that are useful when building applications. + This package contains tools that are useful when developing and building + applications with libdbusmenu. Package: gir1.0-dbusmenu-glib-0.2 Section: libs @@ -87,10 +103,13 @@ Architecture: any Depends: ${misc:Depends}, libdbusmenu-glib1 (= ${binary:Version}), gir1.0-glib-2.0 -Description: Typelib file for libdbusmenu-glib1 +Description: typelib file for libdbusmenu-glib1 + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. . This package can be used by other packages using the GIRepository format to - generate dynamic bindings + generate dynamic bindings for libdbusmenu-glib1. Package: gir1.0-dbusmenu-gtk-0.2 Section: libs @@ -99,24 +118,33 @@ Depends: ${misc:Depends}, libdbusmenu-gtk1 (= ${binary:Version}), gir1.0-dbusmenu-glib-0.2 (= ${binary:Version}), gir1.0-gtk-2.0 -Description: Typelib file for libdbusmenu-gtk1 +Description: typelib file for libdbusmenu-gtk1 + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. . This package can be used by other packages using the GIRepository format to - generate dynamic bindings + generate dynamic bindings for libdbusmenu-gtk1. Package: libdbusmenu-glib-doc Section: doc Architecture: any Depends: ${misc:Depends} -Description: Docs for libdbusmenu-glib +Description: library for passing menus over DBus - documentation + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. . - This package contains developer documentation. + This package contains developer documentation for libdbusmenu-glib. Package: libdbusmenu-gtk-doc Section: doc Architecture: any Depends: ${misc:Depends} -Description: Docs for libdbusmenu-gtk +Description: library for passing menus over DBus - GTK version documentation + libdbusmenu passes a menu structure across DBus so that a program can + create a menu simply without worrying about how it is displayed on the + other side of the bus. . - This package contains developer documentation. + This package contains developer documentation for libdbusmenu-gtk. -- cgit v1.2.3 From 5272ac12e39c3a45d9f5016df7c48b3b6508c400 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 15 Jun 2010 19:31:27 +0200 Subject: - Standards-Version: 3.8.4 - Fix Homepage URL. --- debian/changelog | 4 +++- debian/control | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index b45ea54..a31f749 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,10 +5,12 @@ libdbusmenu (0.3.2-1) unstable; urgency=low - Set Maintainer to pkg-ayatana. - Add myself as Uploader. - Update package descriptions. + - Standards-Version: 3.8.4 + - Fix Homepage URL. * debian/copyright: - Convert to DEP5 format. - -- Evgeni Golov Tue, 15 Jun 2010 19:30:08 +0200 + -- Evgeni Golov Tue, 15 Jun 2010 19:31:00 +0200 libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low diff --git a/debian/control b/debian/control index 8041076..47b64b1 100644 --- a/debian/control +++ b/debian/control @@ -19,8 +19,8 @@ Build-Depends: debhelper (>= 5.0), gir1.0-glib-2.0, gir1.0-gtk-2.0, valac -Standards-Version: 3.8.0 -Homepage: https://launchpad.net/libdbusmenu +Standards-Version: 3.8.4 +Homepage: https://launchpad.net/dbusmenu Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/dbusmenu/ubuntu Vcs-Browser: http://bazaar.launchpad.net/~ubuntu-desktop/dbusmenu/ubuntu -- cgit v1.2.3 From c7155ebdb13500400902b0600c77115375c193f2 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 15 Jun 2010 19:39:34 +0200 Subject: Update Vcs-* fields. --- debian/changelog | 3 ++- debian/control | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index a31f749..47693e5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,10 +7,11 @@ libdbusmenu (0.3.2-1) unstable; urgency=low - Update package descriptions. - Standards-Version: 3.8.4 - Fix Homepage URL. + - Update Vcs-* fields. * debian/copyright: - Convert to DEP5 format. - -- Evgeni Golov Tue, 15 Jun 2010 19:31:00 +0200 + -- Evgeni Golov Tue, 15 Jun 2010 19:39:15 +0200 libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low diff --git a/debian/control b/debian/control index 47b64b1..ed86b8a 100644 --- a/debian/control +++ b/debian/control @@ -21,8 +21,8 @@ Build-Depends: debhelper (>= 5.0), valac Standards-Version: 3.8.4 Homepage: https://launchpad.net/dbusmenu -Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/dbusmenu/ubuntu -Vcs-Browser: http://bazaar.launchpad.net/~ubuntu-desktop/dbusmenu/ubuntu +Vcs-Bzr: http://bzr.debian.org/bzr/pkg-ayatana/libdbusmenu/debian +Vcs-Browser: http://bzr.debian.org/loggerhead/pkg-ayatana/libdbusmenu/debian Package: libdbusmenu-glib1 Section: libs -- cgit v1.2.3 From 97513daeb03ba302613de3ebbfcf356bc75fa611 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 13:49:05 -0500 Subject: Switch to using the accel map with paths --- libdbusmenu-gtk/client.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index ab7f16c..a9c6657 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -153,17 +153,20 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { return; } - if (data->old_agroup != NULL) { - gtk_widget_remove_accelerator(GTK_WIDGET(gmi), data->old_agroup, key, modifiers); + const gchar * accel_path = gtk_menu_item_get_accel_path(gmi); + + if (accel_path != NULL) { + gtk_accel_map_change_entry(accel_path, key, modifiers, TRUE /* replace */); + } else { + gchar * accel_path = g_strdup_printf("/Generated/%d", dbusmenu_menuitem_get_id(mi)); + gtk_accel_map_add_entry(accel_path, key, modifiers); + gtk_menu_item_set_accel_path(gmi, accel_path); + g_free(accel_path); } - if (data->new_agroup != NULL) { - gtk_widget_add_accelerator(GTK_WIDGET(gmi), - "activate", - data->new_agroup, - key, - modifiers, - GTK_ACCEL_VISIBLE); + GtkMenu * submenu = dbusmenu_gtkclient_menuitem_get_submenu(data->client, mi); + if (submenu != NULL) { + gtk_menu_set_accel_group(submenu, data->new_agroup); } return; -- cgit v1.2.3 From d0bbb5a0985adccf54cf857d4b0f17a8ba803cd2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 13:50:52 -0500 Subject: Setting the accel widget for the accel label. --- libdbusmenu-gtk/genericmenuitem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 7239864..30b072f 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -196,6 +196,7 @@ set_label (GtkMenuItem * menu_item, const gchar * label) labelw = GTK_LABEL(gtk_accel_label_new(label)); gtk_label_set_use_underline(GTK_LABEL(labelw), TRUE); gtk_misc_set_alignment(GTK_MISC(labelw), 0.0, 0.5); + gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(labelw), GTK_WIDGET(menu_item)); gtk_widget_show(GTK_WIDGET(labelw)); /* Check to see if it needs to be in the bin for this -- cgit v1.2.3 From 81f4b7c5e21a23e97bdd267567b40cdbe0d528b7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 14:10:22 -0500 Subject: Making the path more unique and using the lower level path set function. --- libdbusmenu-gtk/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index a9c6657..c7d1140 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -158,9 +158,9 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { if (accel_path != NULL) { gtk_accel_map_change_entry(accel_path, key, modifiers, TRUE /* replace */); } else { - gchar * accel_path = g_strdup_printf("/Generated/%d", dbusmenu_menuitem_get_id(mi)); + gchar * accel_path = g_strdup_printf("/Generated/%X/%d", GPOINTER_TO_UINT(data->client), dbusmenu_menuitem_get_id(mi)); gtk_accel_map_add_entry(accel_path, key, modifiers); - gtk_menu_item_set_accel_path(gmi, accel_path); + gtk_widget_set_accel_path(GTK_WIDGET(gmi), accel_path, data->new_agroup); g_free(accel_path); } -- cgit v1.2.3 From fca6f989e2c563ac071322a0f664bdebdcfdf79e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 14:21:44 -0500 Subject: Making sure the accel group gets added to the window --- tests/test-gtk-shortcut-client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test-gtk-shortcut-client.c b/tests/test-gtk-shortcut-client.c index 26e1531..003885c 100644 --- a/tests/test-gtk-shortcut-client.c +++ b/tests/test-gtk-shortcut-client.c @@ -57,6 +57,7 @@ main (int argc, char ** argv) gtk_widget_show(menubar); gtk_container_add(GTK_CONTAINER(window), menubar); gtk_window_set_title(GTK_WINDOW(window), "libdbusmenu-gtk test"); + gtk_window_add_accel_group(GTK_WINDOW(window), agroup); gtk_widget_show(window); death_timer = g_timeout_add_seconds(10, timer_func, window); -- cgit v1.2.3 From 607356d413f548b067020bcabed0aa78337066ef Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 14:42:35 -0500 Subject: Switching to control L just in case --- tests/test-gtk-shortcut-server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test-gtk-shortcut-server.c b/tests/test-gtk-shortcut-server.c index 428f558..3b703a1 100644 --- a/tests/test-gtk-shortcut-server.c +++ b/tests/test-gtk-shortcut-server.c @@ -49,8 +49,8 @@ build_menu (void) DbusmenuMenuitem * root = dbusmenu_menuitem_new(); item = dbusmenu_menuitem_new(); - dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Control-C"); - dbusmenu_menuitem_property_set_shortcut(item, GDK_c, GDK_CONTROL_MASK); + dbusmenu_menuitem_property_set(item, DBUSMENU_MENUITEM_PROP_LABEL, "Control-L"); + dbusmenu_menuitem_property_set_shortcut(item, GDK_l, GDK_CONTROL_MASK); dbusmenu_menuitem_child_append(root, item); g_object_unref(item); -- cgit v1.2.3 From 71817a1eed1c49d358d7cb1c093321ddc91fb258 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 14:47:29 -0500 Subject: Adding a debug message --- libdbusmenu-gtk/client.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index c7d1140..d45360a 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -143,6 +143,8 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { GdkModifierType modifiers = 0; dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); + + g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); if (key == 0) { return; -- cgit v1.2.3 From 55657e2b8c812cb5a829e59cbaf2125c94dcf138 Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Wed, 16 Jun 2010 08:42:27 +0200 Subject: Add Ken and Sebastien, according to changelog. --- debian/changelog | 3 ++- debian/copyright | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 47693e5..198da55 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,8 +10,9 @@ libdbusmenu (0.3.2-1) unstable; urgency=low - Update Vcs-* fields. * debian/copyright: - Convert to DEP5 format. + - Add Ken and Sebastien, according to changelog. - -- Evgeni Golov Tue, 15 Jun 2010 19:39:15 +0200 + -- Evgeni Golov Wed, 16 Jun 2010 08:42:03 +0200 libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low diff --git a/debian/copyright b/debian/copyright index f4035f6..530ad85 100644 --- a/debian/copyright +++ b/debian/copyright @@ -10,6 +10,8 @@ License: GPL-3 Files: debian/* Copyright: 2009-2010 Evgeni Golov Copyright: 2009-2010 Ted Gould , Canonical Ltd. +Copyright: 2009-2010 Sebastien Bacher +Copyright: 2009-2010 Ken VanDine License: GPL-3 License: GPL-3 -- cgit v1.2.3 From acd48e74157f74bb50c451a7f47e7d8c2f45efbb Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Wed, 16 Jun 2010 09:43:19 +0200 Subject: Add a Closes: #586069 --- debian/changelog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 198da55..04dc307 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ libdbusmenu (0.3.2-1) unstable; urgency=low * Merge from Ubuntu. + Closes: #586069 * debian/control: - Set Maintainer to pkg-ayatana. - Add myself as Uploader. @@ -12,7 +13,7 @@ libdbusmenu (0.3.2-1) unstable; urgency=low - Convert to DEP5 format. - Add Ken and Sebastien, according to changelog. - -- Evgeni Golov Wed, 16 Jun 2010 08:42:03 +0200 + -- Evgeni Golov Wed, 16 Jun 2010 09:43:06 +0200 libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low -- cgit v1.2.3 From 614d3fc2311780a4011d24b5e59e18b857b36b9c Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Wed, 16 Jun 2010 11:37:27 +0200 Subject: =?UTF-8?q?Add=20Aur=C3=A9lien=20G=C3=A2teau,=20according=20to=20h?= =?UTF-8?q?eaders.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- debian/changelog | 3 ++- debian/copyright | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 04dc307..9551d8f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,8 +12,9 @@ libdbusmenu (0.3.2-1) unstable; urgency=low * debian/copyright: - Convert to DEP5 format. - Add Ken and Sebastien, according to changelog. + - Add Aurélien Gâteau, according to headers. - -- Evgeni Golov Wed, 16 Jun 2010 09:43:06 +0200 + -- Evgeni Golov Wed, 16 Jun 2010 11:37:08 +0200 libdbusmenu (0.3.2-0ubuntu1) maverick; urgency=low diff --git a/debian/copyright b/debian/copyright index 530ad85..161670c 100644 --- a/debian/copyright +++ b/debian/copyright @@ -7,6 +7,13 @@ Files: * Copyright: 2009-2010 Ted Gould , Canonical Ltd. License: GPL-3 +Files: libdbusmenu-glib/dbus-menu.xml, tools/{dbusmenu-bench,testapp/main.c} + +Copyright: 2009-2010 Ted Gould , Canonical Ltd. +Copyright: 2009-2010 Aurélien Gâteau + +License: GPL-3 + Files: debian/* Copyright: 2009-2010 Evgeni Golov Copyright: 2009-2010 Ted Gould , Canonical Ltd. -- cgit v1.2.3 From f589927de79fe437cdd2014d62e2f2e7b37ad266 Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Wed, 16 Jun 2010 11:58:53 +0200 Subject: More parts are LGPL... --- debian/copyright | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/debian/copyright b/debian/copyright index 161670c..6d7c11b 100644 --- a/debian/copyright +++ b/debian/copyright @@ -7,12 +7,18 @@ Files: * Copyright: 2009-2010 Ted Gould , Canonical Ltd. License: GPL-3 -Files: libdbusmenu-glib/dbus-menu.xml, tools/{dbusmenu-bench,testapp/main.c} +Files: libdbusmenu-{glib,gtk}/* +Copyright: 2009-2010 Ted Gould , Canonical Ltd. +License: LGPL-2.1 | LGPL-3 +Files: libdbusmenu-glib/dbus-menu.xml Copyright: 2009-2010 Ted Gould , Canonical Ltd. Copyright: 2009-2010 Aurélien Gâteau +License: LGPL-2.1 | LGPL-3 -License: GPL-3 +Files: tools/{dbusmenu-bench,testapp/main.c} +Copyright: 2009-2010 Aurélien Gâteau +License: LGPL-2.1 | LGPL-3 Files: debian/* Copyright: 2009-2010 Evgeni Golov @@ -24,3 +30,11 @@ License: GPL-3 License: GPL-3 On Debian systems, the complete text of the GNU General Public License version 3 can be found in `/usr/share/common-licenses/GPL-3'. + +License: LGPL-2.1 + On Debian systems, the complete text of the GNU Lesser General + Public License version 2.1 can be found in `/usr/share/common-licenses/LGPL-2.1'. + +License: LGPL-3 + On Debian systems, the complete text of the GNU Lesser General + Public License version 3 can be found in `/usr/share/common-licenses/LGPL-3'. -- cgit v1.2.3 From da753d7953b6abe0ed14009eddc7e50a0617ca8f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 16 Jun 2010 10:45:30 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa1 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9f8cbdd..6a58506 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,10 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa1) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa1) lucid; urgency=low * Merging in Debian branch * debian/control: Switching branch on this branch to be the dbusmenu-team. - -- Ted Gould Wed, 16 Jun 2010 10:38:24 -0500 + -- Ted Gould Wed, 16 Jun 2010 10:45:24 -0500 libdbusmenu (0.3.2-1) unstable; urgency=low -- cgit v1.2.3 From 16851654b11b15fe43ffb97ce8b4f26a7e2601c6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 17 Jun 2010 14:58:28 -0500 Subject: Wrong name for the property --- libdbusmenu-glib/menuitem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libdbusmenu-glib/menuitem.h b/libdbusmenu-glib/menuitem.h index 39d257e..0d79ebb 100644 --- a/libdbusmenu-glib/menuitem.h +++ b/libdbusmenu-glib/menuitem.h @@ -58,7 +58,7 @@ G_BEGIN_DECLS #define DBUSMENU_MENUITEM_PROP_ICON_DATA "icon-data" #define DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE "toggle-type" #define DBUSMENU_MENUITEM_PROP_TOGGLE_STATE "toggle-state" -#define DBUSMENU_MENUITEM_PROP_CHILD_DISPLAY "child-display" +#define DBUSMENU_MENUITEM_PROP_CHILD_DISPLAY "children-display" #define DBUSMENU_MENUITEM_TOGGLE_CHECK "checkmark" #define DBUSMENU_MENUITEM_TOGGLE_RADIO "radio" -- cgit v1.2.3 From cfdd33a19758224cb835efa705a410d3d4d0db91 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Mon, 21 Jun 2010 14:37:18 -0500 Subject: Add the accelerators. --- libdbusmenu-gtk/client.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index d45360a..91bc816 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -130,13 +130,13 @@ struct _swap_agroup_t { /* Looks at the old version of the accelerator group and the new one and makes the state proper. */ -static void -swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { - swap_agroup_t * data = (swap_agroup_t *)userdata; +static gboolean +do_swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { + swap_agroup_t * data = (swap_agroup_t *)userdata; /* If we don't have a shortcut we don't care */ if (!dbusmenu_menuitem_property_exist(mi, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { - return; + return FALSE; } guint key = 0; @@ -145,14 +145,14 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); - + if (key == 0) { - return; + return FALSE; } GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(data->client, mi); if (gmi == NULL) { - return; + return FALSE; } const gchar * accel_path = gtk_menu_item_get_accel_path(gmi); @@ -161,6 +161,7 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { gtk_accel_map_change_entry(accel_path, key, modifiers, TRUE /* replace */); } else { gchar * accel_path = g_strdup_printf("/Generated/%X/%d", GPOINTER_TO_UINT(data->client), dbusmenu_menuitem_get_id(mi)); + gtk_accel_map_add_entry(accel_path, key, modifiers); gtk_widget_set_accel_path(GTK_WIDGET(gmi), accel_path, data->new_agroup); g_free(accel_path); @@ -171,7 +172,14 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { gtk_menu_set_accel_group(submenu, data->new_agroup); } - return; + return TRUE; +} + +static void +swap_agroup (DbusmenuMenuitem *mi, gpointer userdata) { + do_swap_agroup (mi, userdata); + + return; /* See what I did here, Ted? :) */ } /* Refresh the shortcut for an entry */ @@ -188,7 +196,17 @@ refresh_shortcut (DbusmenuGtkClient * client, DbusmenuMenuitem * mi) data.old_agroup = priv->agroup; data.new_agroup = priv->agroup; - return swap_agroup(mi, &data); + if (do_swap_agroup(mi, &data)) { + guint key; + GdkModifierType mod; + GtkMenuItem *gmi = dbusmenu_gtkclient_menuitem_get (client, mi); + + dbusmenu_menuitem_property_get_shortcut (mi, &key, &mod); + + gtk_widget_add_accelerator (GTK_WIDGET (gmi), "activate", priv->agroup, key, mod, GTK_ACCEL_VISIBLE); + } + + return; } -- cgit v1.2.3 From 55338f48370c4e0007aff36c8b18add4ace435f6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 21 Jun 2010 15:19:20 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa2 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6021bd6..a1a828a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,10 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa2) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa2) lucid; urgency=low * Upstream Merge * Adding support for menu shortcuts * Fixing distcheck of documentation builds - -- Ted Gould Mon, 21 Jun 2010 15:07:09 -0500 + -- Ted Gould Mon, 21 Jun 2010 15:19:18 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa1) lucid; urgency=low -- cgit v1.2.3 From 778a2283832108d035a7779bef1af3170abd5135 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Tue, 22 Jun 2010 10:37:15 -0500 Subject: Pass args gnome-autogen.sh --- autogen.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/autogen.sh b/autogen.sh index 93174f5..61260e2 100755 --- a/autogen.sh +++ b/autogen.sh @@ -9,5 +9,4 @@ which gnome-autogen.sh || { USE_GNOME2_MACROS=1 \ USE_COMMON_DOC_BUILD=yes \ -gnome-autogen.sh --enable-gtk-doc - +gnome-autogen.sh --enable-gtk-doc $@ -- cgit v1.2.3 From 2872698e6eb9bfab4d56f5d98fd8f9494738a398 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Tue, 22 Jun 2010 11:03:42 -0500 Subject: Fix setting shortcuts from GtkMenuItem --- libdbusmenu-gtk/menuitem.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index a448f88..57cd258 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -246,19 +246,20 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c g_return_val_if_fail(GTK_IS_MENU_ITEM(gmi), FALSE); GClosure * closure = NULL; - GList * clist; + GtkWidget *label = GTK_BIN (gmi)->child; - clist = gtk_widget_list_accel_closures(GTK_WIDGET(gmi)); - if (clist == NULL) { - g_warning("Menuitem does not have any closures."); - return FALSE; - } + if (GTK_IS_ACCEL_LABEL (label)) + { + g_object_get (label, + "accel-closure", &closure, + NULL); + } - closure = (GClosure *)clist->data; - g_list_free(clist); + if (closure == NULL) + return FALSE; GtkAccelGroup * group = gtk_accel_group_from_accel_closure(closure); - + /* Seriously, if this returns NULL something is seriously wrong in GTK. */ g_return_val_if_fail(group != NULL, FALSE); @@ -267,6 +268,9 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c /* Again, not much we can do except complain loudly. */ g_return_val_if_fail(key != NULL, FALSE); + if (!gtk_accelerator_valid (key->accel_key, key->accel_mods)) + return FALSE; + return dbusmenu_menuitem_property_set_shortcut(menuitem, key->accel_key, key->accel_mods); } -- cgit v1.2.3 From ba00c24b625805e7c3069165c6eea5bca5166e22 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 11:28:22 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa3 --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index cd73096..d5dfe16 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,7 +3,7 @@ libdbusmenu (0.3.2-1ubuntu1~ppa3) lucid; urgency=low * Upstream Merge * Fixing getting accelerators from menuitems - -- Ted Gould Tue, 22 Jun 2010 11:10:59 -0500 + -- Ted Gould Tue, 22 Jun 2010 11:28:20 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa2) lucid; urgency=low -- cgit v1.2.3 From 49ce6868ccba0928a401e15fe11689ebab711471 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:07:28 -0500 Subject: Putting in several GValue checks to ensure we're getting what we thing we're getting. --- libdbusmenu-gtk/menuitem.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 57cd258..a250431 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -295,6 +295,9 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke if (wrapper == NULL) { return; } + if (!G_VALUE_HOLDS_BOXED(wrapper)) { + return; + } GValueArray * wrapperarray = (GValueArray *)g_value_get_boxed(wrapper); if (wrapperarray->n_values == 0) { @@ -306,6 +309,10 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke } GValue * ventryarray = g_value_array_get_nth(wrapperarray, 0); + if (!G_VALUE_HOLDS_BOXED(ventryarray)) { + return; + } + GValueArray * entryarray = (GValueArray *)g_value_get_boxed(ventryarray); if (entryarray->n_values == 0) { /* Seems a little odd, but really, we're saying that it isn't a @@ -316,6 +323,10 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke /* Parse through modifiers */ int i; for (i = 0; i < entryarray->n_values - 1; i++) { + if (!G_VALUE_HOLDS_STRING(g_value_array_get_nth(entryarray, i))) { + continue; + } + if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { *modifier |= GDK_CONTROL_MASK; continue; -- cgit v1.2.3 From d9922623de540c7d670c67a96a83722dd6674f31 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:15:14 -0500 Subject: Refactoring to make things more clear --- libdbusmenu-gtk/menuitem.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index a250431..a201558 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -323,23 +323,25 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke /* Parse through modifiers */ int i; for (i = 0; i < entryarray->n_values - 1; i++) { - if (!G_VALUE_HOLDS_STRING(g_value_array_get_nth(entryarray, i))) { + GValue * value = g_value_array_get_nth(entryarray, i); + + if (!G_VALUE_HOLDS_STRING(value)) { continue; } - if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { + if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { *modifier |= GDK_CONTROL_MASK; continue; } - if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { + if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { *modifier |= GDK_MOD1_MASK; continue; } - if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { + if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { *modifier |= GDK_SHIFT_MASK; continue; } - if (g_strcmp0(g_value_get_string(g_value_array_get_nth(entryarray, i)), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { + if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { *modifier |= GDK_SUPER_MASK; continue; } -- cgit v1.2.3 From a3e3bf18795873dcb8cafbaac758dc93448f49bf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:19:40 -0500 Subject: Checking the final value as well. --- libdbusmenu-gtk/menuitem.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index a201558..e1e1e30 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -349,7 +349,13 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke GdkModifierType tempmod; - gtk_accelerator_parse(g_value_get_string(g_value_array_get_nth(entryarray, entryarray->n_values - 1)), key, &tempmod); + GValue * accelval = g_value_array_get_nth(entryarray, entryarray->n_values - 1); + if (!G_VALUE_HOLDS_STRING(accelval)) { + *modifier = 0; + return; + } + + gtk_accelerator_parse(g_value_get_string(accelval), key, &tempmod); return; } -- cgit v1.2.3 From d80fb4eb8fc807b1b29b58aa179eb3e1798f37a3 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:24:29 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa4~value1 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index fb7d982..f0819eb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa4~value1) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa4~value1) lucid; urgency=low * Upstream Merge * Checking to ensure our values are what we expect - -- Ted Gould Tue, 22 Jun 2010 14:21:45 -0500 + -- Ted Gould Tue, 22 Jun 2010 14:24:27 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa3) lucid; urgency=low -- cgit v1.2.3 From 2412ce9b02272a0928157b91a15d67b8f1b805a5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:37:24 -0500 Subject: Not checking just for boxed, looking inside a bit. --- libdbusmenu-gtk/menuitem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index e1e1e30..0eb0758 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -295,7 +295,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke if (wrapper == NULL) { return; } - if (!G_VALUE_HOLDS_BOXED(wrapper)) { + if (!G_VALUE_HOLDS(wrapper, G_TYPE_VALUE_ARRAY)) { return; } @@ -309,7 +309,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke } GValue * ventryarray = g_value_array_get_nth(wrapperarray, 0); - if (!G_VALUE_HOLDS_BOXED(ventryarray)) { + if (!G_VALUE_HOLDS(ventryarray, G_TYPE_VALUE_ARRAY)) { return; } -- cgit v1.2.3 From 8d57fff00109f049fc4f5341bc5c9ae09390d163 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:40:06 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa4~value2 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index f806527..45f2aaf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa4~value2) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa4~value2) lucid; urgency=low * Upstream Merge * Looking further inside the boxes - -- Ted Gould Tue, 22 Jun 2010 14:37:39 -0500 + -- Ted Gould Tue, 22 Jun 2010 14:40:04 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa4~value1) lucid; urgency=low -- cgit v1.2.3 From 5c0f9d84925fc1221f20b8356810c015dbad962c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:45:03 -0500 Subject: A couple of warning messages. --- libdbusmenu-gtk/menuitem.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 0eb0758..a7aa9d2 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -296,6 +296,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke return; } if (!G_VALUE_HOLDS(wrapper, G_TYPE_VALUE_ARRAY)) { + g_warning("Unexpected shortcut structure. Wrapper is: %s", G_VALUE_TYPE_NAME(wrapper)); return; } @@ -310,6 +311,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke GValue * ventryarray = g_value_array_get_nth(wrapperarray, 0); if (!G_VALUE_HOLDS(ventryarray, G_TYPE_VALUE_ARRAY)) { + g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(ventryarray)); return; } -- cgit v1.2.3 From 686186c381b90215ddc737e71abb40b7ecaf31db Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:50:57 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa4~value3 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 443006e..040b156 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa4~value3) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa4~value3) lucid; urgency=low * Upstream Merge * Useful warning messages - -- Ted Gould Tue, 22 Jun 2010 14:48:56 -0500 + -- Ted Gould Tue, 22 Jun 2010 14:50:52 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa4~value2) lucid; urgency=low -- cgit v1.2.3 From d5550be789ee837d4fa591540fc323f6b39844d1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 14:55:54 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa4 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 8abbfdb..de20360 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa4) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa4) lucid; urgency=low * Upstream Merge * Checking to ensure our values are what we expect - -- Ted Gould Tue, 22 Jun 2010 14:53:43 -0500 + -- Ted Gould Tue, 22 Jun 2010 14:55:51 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa3) lucid; urgency=low -- cgit v1.2.3 From 2a90535dae3ef2d97ff02c2c6325615de0f6ca09 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 16:29:08 -0500 Subject: Cleaning up usage of get_shortcut to only print/set if it sets a key --- libdbusmenu-gtk/client.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 91bc816..c73c90f 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -144,12 +144,12 @@ do_swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); - g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); - if (key == 0) { return FALSE; } + g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); + GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(data->client, mi); if (gmi == NULL) { return FALSE; @@ -197,16 +197,18 @@ refresh_shortcut (DbusmenuGtkClient * client, DbusmenuMenuitem * mi) data.new_agroup = priv->agroup; if (do_swap_agroup(mi, &data)) { - guint key; - GdkModifierType mod; - GtkMenuItem *gmi = dbusmenu_gtkclient_menuitem_get (client, mi); + guint key = 0; + GdkModifierType mod = 0; + GtkMenuItem *gmi = dbusmenu_gtkclient_menuitem_get (client, mi); - dbusmenu_menuitem_property_get_shortcut (mi, &key, &mod); + dbusmenu_menuitem_property_get_shortcut (mi, &key, &mod); - gtk_widget_add_accelerator (GTK_WIDGET (gmi), "activate", priv->agroup, key, mod, GTK_ACCEL_VISIBLE); - } + if (key != 0) { + gtk_widget_add_accelerator (GTK_WIDGET (gmi), "activate", priv->agroup, key, mod, GTK_ACCEL_VISIBLE); + } + } - return; + return; } -- cgit v1.2.3 From 0ace7ce970cdffdca66ab7d19c152269f358b730 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 16:37:10 -0500 Subject: Switching around the get function to be GPtrArray-GStrV --- libdbusmenu-gtk/menuitem.c | 43 +++++++++++++++++-------------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index a7aa9d2..5d41934 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -295,28 +295,28 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke if (wrapper == NULL) { return; } - if (!G_VALUE_HOLDS(wrapper, G_TYPE_VALUE_ARRAY)) { + if (!G_VALUE_HOLDS(wrapper, G_TYPE_PTR_ARRAY)) { g_warning("Unexpected shortcut structure. Wrapper is: %s", G_VALUE_TYPE_NAME(wrapper)); return; } - GValueArray * wrapperarray = (GValueArray *)g_value_get_boxed(wrapper); - if (wrapperarray->n_values == 0) { + GPtrArray * wrapperarray = (GPtrArray *)g_value_get_boxed(wrapper); + if (wrapperarray->len == 0) { return; } - if (wrapperarray->n_values != 1) { + if (wrapperarray->len != 1) { g_warning("Shortcut is more than one entry. Which we don't currently support. Taking the first."); } - GValue * ventryarray = g_value_array_get_nth(wrapperarray, 0); - if (!G_VALUE_HOLDS(ventryarray, G_TYPE_VALUE_ARRAY)) { + GValue * ventryarray = g_ptr_array_index(wrapperarray, 0); + if (!G_VALUE_HOLDS(ventryarray, G_TYPE_STRV)) { g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(ventryarray)); return; } - GValueArray * entryarray = (GValueArray *)g_value_get_boxed(ventryarray); - if (entryarray->n_values == 0) { + gchar ** entryarray = (gchar **)g_value_get_boxed(ventryarray); + if (entryarray == NULL || entryarray[0] == NULL) { /* Seems a little odd, but really, we're saying that it isn't a shortcut, so I'm comfortable with exiting silently. */ return; @@ -324,40 +324,31 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke /* Parse through modifiers */ int i; - for (i = 0; i < entryarray->n_values - 1; i++) { - GValue * value = g_value_array_get_nth(entryarray, i); + for (i = 0; entryarray[i + 1] != NULL; i++) { + gchar * value = entryarray[i]; - if (!G_VALUE_HOLDS_STRING(value)) { - continue; - } - - if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { + if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { *modifier |= GDK_CONTROL_MASK; continue; } - if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { + if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { *modifier |= GDK_MOD1_MASK; continue; } - if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { + if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { *modifier |= GDK_SHIFT_MASK; continue; } - if (g_strcmp0(g_value_get_string(value), DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { + if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { *modifier |= GDK_SUPER_MASK; continue; } } GdkModifierType tempmod; - - GValue * accelval = g_value_array_get_nth(entryarray, entryarray->n_values - 1); - if (!G_VALUE_HOLDS_STRING(accelval)) { - *modifier = 0; - return; - } - - gtk_accelerator_parse(g_value_get_string(accelval), key, &tempmod); + gchar * accelval = entryarray[i]; + gtk_accelerator_parse(accelval, key, &tempmod); return; } + -- cgit v1.2.3 From b95497795ac8031074789ee3b6eee2be899ac909 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 16:40:13 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa5~qtish1 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 4ef6dd1..b22ff71 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish1) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish1) lucid; urgency=low * Upstream Merge * Changing the format on the get side of things - -- Ted Gould Tue, 22 Jun 2010 16:37:31 -0500 + -- Ted Gould Tue, 22 Jun 2010 16:40:11 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa4) lucid; urgency=low -- cgit v1.2.3 From c94eb1cfe25551c528409fdcb9d56446a915ed0f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 16:50:42 -0500 Subject: Lowering our protection a little, but hopefully this'll make it happy. --- libdbusmenu-gtk/menuitem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 5d41934..44e78e1 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -295,7 +295,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke if (wrapper == NULL) { return; } - if (!G_VALUE_HOLDS(wrapper, G_TYPE_PTR_ARRAY)) { + if (!G_VALUE_HOLDS(wrapper, G_TYPE_BOXED)) { g_warning("Unexpected shortcut structure. Wrapper is: %s", G_VALUE_TYPE_NAME(wrapper)); return; } @@ -310,7 +310,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke } GValue * ventryarray = g_ptr_array_index(wrapperarray, 0); - if (!G_VALUE_HOLDS(ventryarray, G_TYPE_STRV)) { + if (!G_VALUE_HOLDS(ventryarray, G_TYPE_BOXED)) { g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(ventryarray)); return; } -- cgit v1.2.3 From 4a45de3ee535be012fe60ec1595ba64fb24b5f47 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 16:52:52 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa5~qtish2 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 0e1682f..968394b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish2) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish2) lucid; urgency=low * Upstream merge * Lowering protection on type checking - -- Ted Gould Tue, 22 Jun 2010 16:51:01 -0500 + -- Ted Gould Tue, 22 Jun 2010 16:52:50 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish1) lucid; urgency=low -- cgit v1.2.3 From f071a21b449e8ac1d34b593dc788929e175d987f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 09:07:27 -0500 Subject: Building us some custom types. --- libdbusmenu-gtk/menuitem.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 44e78e1..532f478 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -29,6 +29,7 @@ License version 3 and version 2.1 along with this program. If not, see #include "menuitem.h" #include #include +#include /** dbusmenu_menuitem_property_set_image: @@ -274,6 +275,27 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c return dbusmenu_menuitem_property_set_shortcut(menuitem, key->accel_key, key->accel_mods); } +static const gchar * wrapper_type_name = "wrapper-type"; +static const gchar * string_array_type_name = "string-array-type"; + +static GType wrapper_type = 0; +static GType string_array_type = 0; + +/* Works with dbus to get types for the collections that we're using. + Should be pretty quick if we've done this once already. */ +static void +setup_collections (void) { + if (string_array_type == 0) { + dbus_g_type_get_collection(string_array_type_name, G_TYPE_STRING); + } + + if (wrapper_type == 0) { + dbus_g_type_get_collection(wrapper_type_name, string_array_type); + } + + return; +} + /** dbusmenu_menuitem_property_get_shortcut: @menuitem: The #DbusmenuMenuitem to get the shortcut off @@ -290,6 +312,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke *modifier = 0; g_return_if_fail(DBUSMENU_IS_MENUITEM(menuitem)); + setup_collections(); const GValue * wrapper = dbusmenu_menuitem_property_get_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT); if (wrapper == NULL) { -- cgit v1.2.3 From 63fc1985fdf9ef74830ec27d7ad8c1bb03c54f0c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 09:10:10 -0500 Subject: Using our complex types to start looking at things. --- libdbusmenu-gtk/menuitem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 532f478..9154592 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -318,7 +318,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke if (wrapper == NULL) { return; } - if (!G_VALUE_HOLDS(wrapper, G_TYPE_BOXED)) { + if (!G_VALUE_HOLDS(wrapper, wrapper_type)) { g_warning("Unexpected shortcut structure. Wrapper is: %s", G_VALUE_TYPE_NAME(wrapper)); return; } @@ -333,7 +333,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke } GValue * ventryarray = g_ptr_array_index(wrapperarray, 0); - if (!G_VALUE_HOLDS(ventryarray, G_TYPE_BOXED)) { + if (!G_VALUE_HOLDS(ventryarray, string_array_type)) { g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(ventryarray)); return; } -- cgit v1.2.3 From 5796a8b58028ecfea05170cff28e01b4a8b447da Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 09:23:34 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa5~qtish3 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index f184645..1230117 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish3) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish3) lucid; urgency=low * Upstream merge * Checking for collections - -- Ted Gould Wed, 23 Jun 2010 09:19:02 -0500 + -- Ted Gould Wed, 23 Jun 2010 09:23:31 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish2) lucid; urgency=low -- cgit v1.2.3 From 51815a2cd05dd18d649113f2fc76247d7fdf00d1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 09:36:57 -0500 Subject: Eh, that's not a rat hole that I want to go down. Realized I'd have to build the types with their vtables to go that way. We'll try using the others. --- libdbusmenu-gtk/menuitem.c | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 9154592..8874ebe 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -275,27 +275,6 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c return dbusmenu_menuitem_property_set_shortcut(menuitem, key->accel_key, key->accel_mods); } -static const gchar * wrapper_type_name = "wrapper-type"; -static const gchar * string_array_type_name = "string-array-type"; - -static GType wrapper_type = 0; -static GType string_array_type = 0; - -/* Works with dbus to get types for the collections that we're using. - Should be pretty quick if we've done this once already. */ -static void -setup_collections (void) { - if (string_array_type == 0) { - dbus_g_type_get_collection(string_array_type_name, G_TYPE_STRING); - } - - if (wrapper_type == 0) { - dbus_g_type_get_collection(wrapper_type_name, string_array_type); - } - - return; -} - /** dbusmenu_menuitem_property_get_shortcut: @menuitem: The #DbusmenuMenuitem to get the shortcut off @@ -312,13 +291,12 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke *modifier = 0; g_return_if_fail(DBUSMENU_IS_MENUITEM(menuitem)); - setup_collections(); const GValue * wrapper = dbusmenu_menuitem_property_get_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT); if (wrapper == NULL) { return; } - if (!G_VALUE_HOLDS(wrapper, wrapper_type)) { + if (!G_VALUE_HOLDS(wrapper, G_TYPE_BOXED)) { g_warning("Unexpected shortcut structure. Wrapper is: %s", G_VALUE_TYPE_NAME(wrapper)); return; } @@ -333,7 +311,7 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke } GValue * ventryarray = g_ptr_array_index(wrapperarray, 0); - if (!G_VALUE_HOLDS(ventryarray, string_array_type)) { + if (!G_VALUE_HOLDS(ventryarray, G_TYPE_BOXED)) { g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(ventryarray)); return; } -- cgit v1.2.3 From 4c05e67b833cdd4467eab0a740367536ebfb2c33 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 10:17:44 -0500 Subject: Reworking to use collection iterators. --- libdbusmenu-gtk/menuitem.c | 117 ++++++++++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 48 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 8874ebe..fa94c1e 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -275,6 +275,69 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c return dbusmenu_menuitem_property_set_shortcut(menuitem, key->accel_key, key->accel_mods); } +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) +{ + iter_data_t * iter_data = (iter_data_t *)user_data; + + if (!G_VALUE_HOLDS_STRING(value)) { + 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; + return; + } + if (g_strcmp0(string, DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { + *iter_data->modifier |= GDK_SUPER_MASK; + return; + } + + return; +} + +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; + } + + if (!dbus_g_type_is_collection(G_VALUE_TYPE(value))) { + g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(value)); + } + + dbus_g_type_collection_value_iterate(value, _string_iterator, iter_data); + + if (iter_data->last_string != NULL) { + GdkModifierType tempmod; + gtk_accelerator_parse(iter_data->last_string, iter_data->key, &tempmod); + } + + return; +} + /** dbusmenu_menuitem_property_get_shortcut: @menuitem: The #DbusmenuMenuitem to get the shortcut off @@ -296,59 +359,17 @@ dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem, guint * ke if (wrapper == NULL) { return; } - if (!G_VALUE_HOLDS(wrapper, G_TYPE_BOXED)) { + if (!dbus_g_type_is_collection(G_VALUE_TYPE(wrapper))) { g_warning("Unexpected shortcut structure. Wrapper is: %s", G_VALUE_TYPE_NAME(wrapper)); return; } - GPtrArray * wrapperarray = (GPtrArray *)g_value_get_boxed(wrapper); - if (wrapperarray->len == 0) { - return; - } - - if (wrapperarray->len != 1) { - g_warning("Shortcut is more than one entry. Which we don't currently support. Taking the first."); - } - - GValue * ventryarray = g_ptr_array_index(wrapperarray, 0); - if (!G_VALUE_HOLDS(ventryarray, G_TYPE_BOXED)) { - g_warning("Unexpected shortcut structure. Value array is: %s", G_VALUE_TYPE_NAME(ventryarray)); - return; - } - - gchar ** entryarray = (gchar **)g_value_get_boxed(ventryarray); - if (entryarray == NULL || entryarray[0] == NULL) { - /* Seems a little odd, but really, we're saying that it isn't a - shortcut, so I'm comfortable with exiting silently. */ - return; - } - - /* Parse through modifiers */ - int i; - for (i = 0; entryarray[i + 1] != NULL; i++) { - gchar * value = entryarray[i]; - - if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_CONTROL) == 0) { - *modifier |= GDK_CONTROL_MASK; - continue; - } - if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_ALT) == 0) { - *modifier |= GDK_MOD1_MASK; - continue; - } - if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_SHIFT) == 0) { - *modifier |= GDK_SHIFT_MASK; - continue; - } - if (g_strcmp0(value, DBUSMENU_MENUITEM_SHORTCUT_SUPER) == 0) { - *modifier |= GDK_SUPER_MASK; - continue; - } - } + iter_data_t iter_data; + iter_data.key = key; + iter_data.modifier = modifier; + iter_data.last_string = NULL; - GdkModifierType tempmod; - gchar * accelval = entryarray[i]; - gtk_accelerator_parse(accelval, key, &tempmod); + dbus_g_type_collection_value_iterate(wrapper, _wrapper_iterator, &iter_data); return; } -- cgit v1.2.3 From 63981f35032b58893c6ab436cfdb517b6c3d8b23 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 10:26:59 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa5~qtish4 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 3d4c85a..614f377 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish4) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish4) lucid; urgency=low * Upstream merge * Switching to using collection iterators - -- Ted Gould Wed, 23 Jun 2010 10:18:49 -0500 + -- Ted Gould Wed, 23 Jun 2010 10:26:57 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish3) lucid; urgency=low -- cgit v1.2.3 From 0591156dc8defd6a816634448d3ab9aa68f92882 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 10:48:43 -0500 Subject: Apparently not a collection internally. --- libdbusmenu-gtk/menuitem.c | 66 +++++++++++++++++++++------------------------- 1 file 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); -- cgit v1.2.3 From 79564f92477a33f79c3f157d16899a8eca770b8f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 11:03:33 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa5~qtish5 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index b373824..b5a3ba1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,9 +1,9 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish5) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish5) lucid; urgency=low * Upstream merge * No internal collections. Eh, whatever. - -- Ted Gould Wed, 23 Jun 2010 10:50:36 -0500 + -- Ted Gould Wed, 23 Jun 2010 11:03:30 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish4) lucid; urgency=low -- cgit v1.2.3 From 5bed312e9e03a4fd0f3ef189205bd3eb3f1a43bf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 11:15:12 -0500 Subject: Adding comments --- libdbusmenu-gtk/menuitem.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 56dd192..adc01f3 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -275,12 +275,16 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c return dbusmenu_menuitem_property_set_shortcut(menuitem, key->accel_key, key->accel_mods); } +/* A set of typed data for the interator */ typedef struct _iter_data_t iter_data_t; struct _iter_data_t { guint * key; GdkModifierType * modifier; }; +/* Goes through the wrapper items. In reality we only support one + so it checks to see if a key is set first. But, we could possibly, + support more in the future. */ static void _wrapper_iterator (const GValue * value, gpointer user_data) { -- cgit v1.2.3 From 9c28ec10b2481d4374dd83310d9a894dca01d5c1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 14:32:47 -0500 Subject: Start building structures more like the KDE ones. --- libdbusmenu-gtk/menuitem.c | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index adc01f3..811ff1f 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -161,17 +161,6 @@ dbusmenu_menuitem_property_set_shortcut_string (DbusmenuMenuitem * menuitem, con return dbusmenu_menuitem_property_set_shortcut(menuitem, key, modifier); } -/* Append strings to an g_value_array */ -static void -_g_value_array_append_string (GValueArray * array, const gchar * string) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_STRING); - g_value_set_string(&value, string); - g_value_array_append(array, &value); - return; -} - /** dbusmenu_menuitem_property_set_shortcut: @menuitem: The #DbusmenuMenuitem to set the shortcut on @@ -189,31 +178,37 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); g_return_val_if_fail(gtk_accelerator_valid(key, modifier), FALSE); - GValueArray * array = g_value_array_new(4); /* Four seems like the max we'd need, plus it's still small */ + GArray * array = g_array_sized_new(TRUE, TRUE, sizeof(gchar *), 4); /* Four seems like the max we'd need, plus it's still small */ + + const gchar * control_val = DBUSMENU_MENUITEM_SHORTCUT_CONTROL; + const gchar * alt_val = DBUSMENU_MENUITEM_SHORTCUT_ALT; + const gchar * shift_val = DBUSMENU_MENUITEM_SHORTCUT_SHIFT; + const gchar * super_val = DBUSMENU_MENUITEM_SHORTCUT_SUPER; if (modifier & GDK_CONTROL_MASK) { - _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_CONTROL); + g_array_append_val(array, control_val); } if (modifier & GDK_MOD1_MASK) { - _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_ALT); + g_array_append_val(array, alt_val); } if (modifier & GDK_SHIFT_MASK) { - _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_SHIFT); + g_array_append_val(array, shift_val); } if (modifier & GDK_SUPER_MASK) { - _g_value_array_append_string(array, DBUSMENU_MENUITEM_SHORTCUT_SUPER); + g_array_append_val(array, super_val); } - _g_value_array_append_string(array, gdk_keyval_name(key)); + const gchar * keyname = gdk_keyval_name(key); + g_array_append_val(array, keyname); - GValueArray * wrapper = g_value_array_new(1); + GPtrArray * wrapper = g_ptr_array_new(); GValue wrap_val = {0}; - g_value_init(&wrap_val, G_TYPE_VALUE_ARRAY); - g_value_set_boxed(&wrap_val, array); - g_value_array_append(wrapper, &wrap_val); + g_value_init(&wrap_val, G_TYPE_STRV); + g_value_set_boxed(&wrap_val, array->data); + g_ptr_array_add(wrapper, &wrap_val); GValue value = {0}; - g_value_init(&value, G_TYPE_VALUE_ARRAY); + g_value_init(&value, G_TYPE_PTR_ARRAY); g_value_set_boxed(&value, wrapper); dbusmenu_menuitem_property_set_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT, &value); -- cgit v1.2.3 From df4949bb3ea62b531bf2a38cc2f37a1f9ead4991 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 14:41:30 -0500 Subject: The joy of specialized collections. --- libdbusmenu-gtk/menuitem.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 811ff1f..3a0f117 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -201,15 +201,22 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, const gchar * keyname = gdk_keyval_name(key); g_array_append_val(array, keyname); - GPtrArray * wrapper = g_ptr_array_new(); - GValue wrap_val = {0}; - g_value_init(&wrap_val, G_TYPE_STRV); - g_value_set_boxed(&wrap_val, array->data); - g_ptr_array_add(wrapper, &wrap_val); - - GValue value = {0}; - g_value_init(&value, G_TYPE_PTR_ARRAY); - g_value_set_boxed(&value, wrapper); + GType type = dbus_g_type_get_collection("GPtrArray", G_TYPE_STRV); + GPtrArray * wrapper = (GPtrArray *)dbus_g_type_specialized_construct(type); + + GValue value = {0,}; + g_value_init(&value, type); + g_value_take_boxed(&value, wrapper); + + DBusGTypeSpecializedAppendContext ctx; + dbus_g_type_specialized_init_append(&value, &ctx); + + GValue strval = {0,}; + g_value_init(&strval, G_TYPE_STRV); + g_value_take_boxed(&strval, array->data); + + dbus_g_type_specialized_collection_append(&ctx, &strval); + dbus_g_type_specialized_collection_end_append(&ctx); dbusmenu_menuitem_property_set_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT, &value); -- cgit v1.2.3 From 85a801e7f19b862fd21c0286899d3b87bebcac83 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 14:50:26 -0500 Subject: Freeing the array wrapper --- libdbusmenu-gtk/menuitem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index 3a0f117..9924546 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -214,6 +214,7 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, guint key, GValue strval = {0,}; g_value_init(&strval, G_TYPE_STRV); g_value_take_boxed(&strval, array->data); + g_array_free(array, FALSE); dbus_g_type_specialized_collection_append(&ctx, &strval); dbus_g_type_specialized_collection_end_append(&ctx); -- cgit v1.2.3 From 4cfd3c91edbc71fa9a5dea2e147eb07ca7b295cf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Jun 2010 14:53:10 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa5~qtish6 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 35a2ad9..0ea7bca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,10 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish6) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish6) lucid; urgency=low * Upstream Merge * Fixing our setting of the shortcut to match the same collection style structure. - -- Ted Gould Wed, 23 Jun 2010 14:51:10 -0500 + -- Ted Gould Wed, 23 Jun 2010 14:53:08 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa5~qtish5) lucid; urgency=low -- cgit v1.2.3 From e9980c6707db96611eecb0189e712422499c1e82 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 24 Jun 2010 09:01:04 -0500 Subject: releasing version 0.3.2-1ubuntu1~ppa5 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 84d92ca..4950b42 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,10 @@ -libdbusmenu (0.3.2-1ubuntu1~ppa5) UNRELEASED; urgency=low +libdbusmenu (0.3.2-1ubuntu1~ppa5) lucid; urgency=low * Upstream merge * Changing the shortcut implementation to match the Qt implementation of dbusmenu. - -- Ted Gould Thu, 24 Jun 2010 08:57:34 -0500 + -- Ted Gould Thu, 24 Jun 2010 09:01:02 -0500 libdbusmenu (0.3.2-1ubuntu1~ppa4) lucid; urgency=low -- cgit v1.2.3 From da2663f744d60ab4ffcc0a798448a48266532d3d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 24 Jun 2010 09:20:25 -0500 Subject: 0.3.3 --- configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 938fe84..80c4b8b 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ -AC_INIT(libdbusmenu, 0.3.2, ted@canonical.com) +AC_INIT(libdbusmenu, 0.3.3, ted@canonical.com) AC_COPYRIGHT([Copyright 2009,2010 Canonical]) AC_PREREQ(2.62) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(libdbusmenu, 0.3.2, [-Wno-portability]) +AM_INIT_AUTOMAKE(libdbusmenu, 0.3.3, [-Wno-portability]) AM_MAINTAINER_MODE @@ -85,7 +85,7 @@ AC_PATH_PROG([VALA_API_GEN], [vapigen]) ########################### LIBDBUSMENU_CURRENT=1 -LIBDBUSMENU_REVISION=7 +LIBDBUSMENU_REVISION=8 LIBDBUSMENU_AGE=0 AC_SUBST(LIBDBUSMENU_CURRENT) -- cgit v1.2.3 From cffbc900aed2cdf265dbde3fc94cd329890836ee Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 24 Jun 2010 09:30:46 -0500 Subject: debian/rules: Updating shlibs to 0.3.3 for shortcut API additions --- debian/changelog | 3 ++- debian/rules | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index e92735f..406ca2f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,8 +8,9 @@ libdbusmenu (0.3.3-0ubuntu1~ppa1) UNRELEASED; urgency=low * Merging in Debian branch * debian/control: Switching branch on this branch to be the dbusmenu-team. + * debian/rules: Updating shlibs to 0.3.3 for shortcut API additions - -- Ted Gould Thu, 24 Jun 2010 09:21:02 -0500 + -- Ted Gould Thu, 24 Jun 2010 09:30:21 -0500 libdbusmenu (0.3.2-1) unstable; urgency=low diff --git a/debian/rules b/debian/rules index 4f08dbf..e274757 100755 --- a/debian/rules +++ b/debian/rules @@ -6,6 +6,6 @@ include /usr/share/cdbs/1/class/gnome.mk DEB_CONFIGURE_EXTRA_FLAGS += --disable-scrollkeeper --enable-gtk-doc LDFLAGS += -Wl,-z,defs -Wl,--as-needed -DEB_DH_MAKESHLIBS_ARGS_libdbusmenu-gtk1 += -V 'libdbusmenu-gtk1 (>= 0.3.1)' -DEB_DH_MAKESHLIBS_ARGS_libdbusmenu-glib1 += -V 'libdbusmenu-glib1 (>= 0.2.8)' +DEB_DH_MAKESHLIBS_ARGS_libdbusmenu-gtk1 += -V 'libdbusmenu-gtk1 (>= 0.3.3)' +DEB_DH_MAKESHLIBS_ARGS_libdbusmenu-glib1 += -V 'libdbusmenu-glib1 (>= 0.3.3)' -- cgit v1.2.3 From 32f588f06d63bc4742a4718f6212027aface0137 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 24 Jun 2010 09:32:51 -0500 Subject: releasing version 0.3.3-0ubuntu1~ppa1 --- debian/changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 406ca2f..0d72f63 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -libdbusmenu (0.3.3-0ubuntu1~ppa1) UNRELEASED; urgency=low +libdbusmenu (0.3.3-0ubuntu1~ppa1) lucid; urgency=low * New upstream release. * Adding support for menu shortcuts (LP: #591293) @@ -10,7 +10,7 @@ libdbusmenu (0.3.3-0ubuntu1~ppa1) UNRELEASED; urgency=low dbusmenu-team. * debian/rules: Updating shlibs to 0.3.3 for shortcut API additions - -- Ted Gould Thu, 24 Jun 2010 09:30:21 -0500 + -- Ted Gould Thu, 24 Jun 2010 09:32:42 -0500 libdbusmenu (0.3.2-1) unstable; urgency=low -- cgit v1.2.3 From 01780416e8c1267838892fb6d114a84fe33dc590 Mon Sep 17 00:00:00 2001 From: Sebastien Bacher Date: Thu, 24 Jun 2010 18:18:44 +0200 Subject: releasing version 0.3.3-0ubuntu1 --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 5f1ecf8..d6a12b5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -libdbusmenu (0.3.3-0ubuntu1) UNRELEASED; urgency=low +libdbusmenu (0.3.3-0ubuntu1) maverick; urgency=low * New upstream release. * Adding support for menu shortcuts (LP: #591293) -- cgit v1.2.3