diff options
author | Ted Gould <ted@gould.cx> | 2011-03-31 13:50:13 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2011-03-31 13:50:13 -0500 |
commit | c523e34ffd932ebd11248c918780999899aaf3a1 (patch) | |
tree | cf51025b8903000b52f1fcb0f196ae5a47ff0492 | |
parent | 0fef27199a04528e6f041ec69827e68614a070a7 (diff) | |
parent | 269670511328aada39a23bd982a1ca3a44de9cfe (diff) | |
download | libdbusmenu-c523e34ffd932ebd11248c918780999899aaf3a1.tar.gz libdbusmenu-c523e34ffd932ebd11248c918780999899aaf3a1.tar.bz2 libdbusmenu-c523e34ffd932ebd11248c918780999899aaf3a1.zip |
* New upstream release.
* Managed variant iterators better to stop crash when dealing
with apps that have multiple shortcuts (LP: #741726)
* Handled GtkMenuItems with no labels as separators (LP: #729187)
-rw-r--r-- | ChangeLog | 78 | ||||
-rwxr-xr-x | configure | 22 | ||||
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | debian/changelog | 9 | ||||
-rw-r--r-- | docs/libdbusmenu-glib/reference/html/ch01.html | 2 | ||||
-rw-r--r-- | docs/libdbusmenu-glib/reference/version.xml | 2 | ||||
-rw-r--r-- | docs/libdbusmenu-gtk/reference/html/ch01.html | 2 | ||||
-rw-r--r-- | docs/libdbusmenu-gtk/reference/version.xml | 2 | ||||
-rw-r--r-- | libdbusmenu-glib/defaults.c | 2 | ||||
-rw-r--r-- | libdbusmenu-gtk/parser.c | 98 | ||||
-rwxr-xr-x | ltmain.sh | 4 |
11 files changed, 190 insertions, 37 deletions
@@ -1,5 +1,83 @@ # Generated by Makefile. Do not edit. +2011-03-31 Ted Gould <ted@gould.cx> + + 0.4.1 + +2011-03-31 Ted Gould <ted@gould.cx> + + Ensuring that our iterators have variants to reference and ref'ing them correctly. + +2011-03-29 Ted Gould <ted@gould.cx> + + Be more specific about the shortcut type + +2011-03-29 Ted Gould <ted@gould.cx> + + Split out into another variable + +2011-03-28 Ted Gould <ted@gould.cx> + + Use loop instead of next + +2011-03-28 Ted Gould <ted@gould.cx> + + Putting in some protections from NULL parameters. + +2011-03-28 Ted Gould <ted@gould.cx> + + Don't unref a variant we didn't have a ref to on error + +2011-03-31 Ted Gould <ted@gould.cx> + + Turning GTK Menuitems without labels into separators. + +2011-03-30 Chris Coulson <chrisccoulson@ubuntu.com> + + Remove some code duplication introduced in this branch + +2011-03-30 Chris Coulson <chrisccoulson@ubuntu.com> + + - Don't change the type of existing menu items in the server. This + isn't handled in the client too well + - Handle a GtkMenuItem's GtkLabel being removed too + +2011-03-30 Chris Coulson <chrisccoulson@ubuntu.com> + + Remove the now unneeded null pointer check on label in construct_dbusmenu_for_widget. + Also, don't use a strcmp in widget_notify_cb for checking if the menuitem is a separator. Just do a null pointer + check on pdata->label instead + +2011-03-30 Chris Coulson <chrisccoulson@ubuntu.com> + + Revert the last commit and handle the same problem in the parser instead + +2011-03-29 Chris Coulson <chrisccoulson@ubuntu.com> + + Don't set a default label for menuitems. Some applications (eg, xchat and pidgin) do silly things like + creating GtkMenuItems's without a label for separators (rather than using the GtkSeparatorMenuItem class). + GTK correctly renders these as separators, so we need to handle it too by not setting a default label on these + +2011-03-28 Ted Gould <ted@gould.cx> + + Ensure the parent stays ref'd + +2011-03-25 Michael Terry <mike@mterry.name> + + fix some potential memory issues in hopes of fixing a reported crash + +2011-03-28 Ted Gould <ted@gould.cx> + + Protect our properties parsing a bit more. + +2011-03-24 Ted Gould <ted@gould.cx> + + Attaching bug + +2011-03-24 Ted Gould <ted@gould.cx> + + Put in some more protections on the types for property variants and generate some errors + 2011-03-23 Ted Gould <ted@gould.cx> 0.4.0 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for libdbusmenu 0.4.0. +# Generated by GNU Autoconf 2.67 for libdbusmenu 0.4.1. # # Report bugs to <ted@canonical.com>. # @@ -703,8 +703,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libdbusmenu' PACKAGE_TARNAME='libdbusmenu' -PACKAGE_VERSION='0.4.0' -PACKAGE_STRING='libdbusmenu 0.4.0' +PACKAGE_VERSION='0.4.1' +PACKAGE_STRING='libdbusmenu 0.4.1' PACKAGE_BUGREPORT='ted@canonical.com' PACKAGE_URL='' @@ -1541,7 +1541,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libdbusmenu 0.4.0 to adapt to many kinds of systems. +\`configure' configures libdbusmenu 0.4.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1611,7 +1611,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libdbusmenu 0.4.0:";; + short | recursive ) echo "Configuration of libdbusmenu 0.4.1:";; esac cat <<\_ACEOF @@ -1751,7 +1751,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libdbusmenu configure 0.4.0 +libdbusmenu configure 0.4.1 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2122,7 +2122,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libdbusmenu $as_me 0.4.0, which was +It was created by libdbusmenu $as_me 0.4.1, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -2943,7 +2943,7 @@ fi # Define the identity of the package. PACKAGE=libdbusmenu - VERSION=0.4.0 + VERSION=0.4.1 # Some tools Automake needs. @@ -13294,7 +13294,7 @@ fi ########################### LIBDBUSMENU_CURRENT=3 -LIBDBUSMENU_REVISION=11 +LIBDBUSMENU_REVISION=12 LIBDBUSMENU_AGE=0 @@ -14616,7 +14616,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libdbusmenu $as_me 0.4.0, which was +This file was extended by libdbusmenu $as_me 0.4.1, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14682,7 +14682,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -libdbusmenu config.status 0.4.0 +libdbusmenu config.status 0.4.1 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index a400680..e94e795 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ -AC_INIT(libdbusmenu, 0.4.0, ted@canonical.com) +AC_INIT(libdbusmenu, 0.4.1, ted@canonical.com) AC_COPYRIGHT([Copyright 2009,2010 Canonical]) AC_PREREQ(2.62) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(libdbusmenu, 0.4.0, [-Wno-portability]) +AM_INIT_AUTOMAKE(libdbusmenu, 0.4.1, [-Wno-portability]) AM_MAINTAINER_MODE @@ -134,7 +134,7 @@ AC_PATH_PROG([XSLT_PROC], [xsltproc]) ########################### LIBDBUSMENU_CURRENT=3 -LIBDBUSMENU_REVISION=11 +LIBDBUSMENU_REVISION=12 LIBDBUSMENU_AGE=0 AC_SUBST(LIBDBUSMENU_CURRENT) diff --git a/debian/changelog b/debian/changelog index cd7567c..d0004a2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +libdbusmenu (0.4.1-0ubuntu1~ppa1) UNRELEASED; urgency=low + + * New upstream release. + * Managed variant iterators better to stop crash when dealing + with apps that have multiple shortcuts (LP: #741726) + * Handled GtkMenuItems with no labels as separators (LP: #729187) + + -- Ted Gould <ted@ubuntu.com> Thu, 31 Mar 2011 13:48:40 -0500 + libdbusmenu (0.4.0-0ubuntu2) natty; urgency=low * Cherry picked fix for potential memory issues to fix unity-panel-service diff --git a/docs/libdbusmenu-glib/reference/html/ch01.html b/docs/libdbusmenu-glib/reference/html/ch01.html index d054c64..8aa2186 100644 --- a/docs/libdbusmenu-glib/reference/html/ch01.html +++ b/docs/libdbusmenu-glib/reference/html/ch01.html @@ -21,7 +21,7 @@ </tr></table> <div class="chapter"> <div class="titlepage"><div><div><h2 class="title"> -<a name="id440860"></a>API</h2></div></div></div> +<a name="id471000"></a>API</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="libdbusmenu-glib-DbusmenuServer.html">DbusmenuServer</a></span><span class="refpurpose"> — The server signals changed and diff --git a/docs/libdbusmenu-glib/reference/version.xml b/docs/libdbusmenu-glib/reference/version.xml index 1d0ba9e..267577d 100644 --- a/docs/libdbusmenu-glib/reference/version.xml +++ b/docs/libdbusmenu-glib/reference/version.xml @@ -1 +1 @@ -0.4.0 +0.4.1 diff --git a/docs/libdbusmenu-gtk/reference/html/ch01.html b/docs/libdbusmenu-gtk/reference/html/ch01.html index f8af1ad..67f02ef 100644 --- a/docs/libdbusmenu-gtk/reference/html/ch01.html +++ b/docs/libdbusmenu-gtk/reference/html/ch01.html @@ -21,7 +21,7 @@ </tr></table> <div class="chapter"> <div class="titlepage"><div><div><h2 class="title"> -<a name="id331770"></a>API</h2></div></div></div> +<a name="id520868"></a>API</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="libdbusmenu-gtk-DbusmenuGtkMenu.html">DbusmenuGtkMenu</a></span><span class="refpurpose"> — A GTK Menu Object that syncronizes over DBus</span> diff --git a/docs/libdbusmenu-gtk/reference/version.xml b/docs/libdbusmenu-gtk/reference/version.xml index 1d0ba9e..267577d 100644 --- a/docs/libdbusmenu-gtk/reference/version.xml +++ b/docs/libdbusmenu-gtk/reference/version.xml @@ -1 +1 @@ -0.4.0 +0.4.1 diff --git a/libdbusmenu-glib/defaults.c b/libdbusmenu-glib/defaults.c index ec70da6..aa479b1 100644 --- a/libdbusmenu-glib/defaults.c +++ b/libdbusmenu-glib/defaults.c @@ -81,7 +81,7 @@ dbusmenu_defaults_init (DbusmenuDefaults *self) /* Standard defaults */ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_VISIBLE, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE)); dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_ENABLED, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE)); - dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_LABEL, G_VARIANT_TYPE_STRING, g_variant_new_string(_("Label Empty"))); + dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_LABEL, G_VARIANT_TYPE_STRING, g_variant_new_string(_("Label Empty"))); dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_ICON_NAME, G_VARIANT_TYPE_STRING, NULL); dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE, G_VARIANT_TYPE_STRING, NULL); dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_TOGGLE_STATE, G_VARIANT_TYPE_INT32, NULL); diff --git a/libdbusmenu-gtk/parser.c b/libdbusmenu-gtk/parser.c index a7f90a2..e68c286 100644 --- a/libdbusmenu-gtk/parser.c +++ b/libdbusmenu-gtk/parser.c @@ -454,7 +454,7 @@ construct_dbusmenu_for_widget (GtkWidget * widget) gboolean visible = FALSE; gboolean sensitive = FALSE; - if (GTK_IS_SEPARATOR_MENU_ITEM (widget)) + if (GTK_IS_SEPARATOR_MENU_ITEM (widget) || !find_menu_label (widget)) { dbusmenu_menuitem_property_set (mi, "type", @@ -512,21 +512,18 @@ construct_dbusmenu_for_widget (GtkWidget * widget) GtkWidget *label = find_menu_label (widget); - if (label) - { - // Sometimes, an app will directly find and modify the label - // (like empathy), so watch the label especially for that. - gchar * text = sanitize_label (GTK_LABEL (label)); - dbusmenu_menuitem_property_set (mi, "label", text); - g_free (text); - - pdata->label = label; - g_signal_connect (G_OBJECT (label), - "notify", - G_CALLBACK (label_notify_cb), - mi); - g_object_add_weak_pointer(G_OBJECT (label), (gpointer*)&pdata->label); - } + // Sometimes, an app will directly find and modify the label + // (like empathy), so watch the label especially for that. + gchar * text = sanitize_label (GTK_LABEL (label)); + dbusmenu_menuitem_property_set (mi, "label", text); + g_free (text); + + pdata->label = label; + g_signal_connect (G_OBJECT (label), + "notify", + G_CALLBACK (label_notify_cb), + mi); + g_object_add_weak_pointer(G_OBJECT (label), (gpointer*)&pdata->label); if (GTK_IS_ACTIVATABLE (widget)) { @@ -760,11 +757,48 @@ find_menu_label (GtkWidget *widget) } static void +recreate_menu_item (DbusmenuMenuitem * parent, DbusmenuMenuitem * child) +{ + if (parent == NULL) + { + /* We need a parent */ + return; + } + ParserData * pdata = g_object_get_data (G_OBJECT (child), PARSER_DATA); + /* Keep a pointer to the GtkMenuItem, as pdata->widget might be + * invalidated when we delete the DbusmenuMenuitem + */ + GtkWidget * menuitem = pdata->widget; + + dbusmenu_menuitem_child_delete (parent, child); + + RecurseContext recurse = {0}; + recurse.toplevel = gtk_widget_get_toplevel(menuitem); + recurse.parent = parent; + + parse_menu_structure_helper(menuitem, &recurse); +} + +static gboolean +recreate_menu_item_in_idle_cb (gpointer data) +{ + DbusmenuMenuitem * child = (DbusmenuMenuitem *)data; + DbusmenuMenuitem * parent = dbusmenu_menuitem_get_parent (child); + g_object_unref (child); + recreate_menu_item (parent, child); + return FALSE; +} + +static void label_notify_cb (GtkWidget *widget, GParamSpec *pspec, gpointer data) { DbusmenuMenuitem *child = (DbusmenuMenuitem *)data; + GValue prop_value = {0}; + + g_value_init (&prop_value, pspec->value_type); + g_object_get_property (G_OBJECT (widget), pspec->name, &prop_value); if (pspec->name == g_intern_static_string ("label")) { @@ -774,6 +808,24 @@ label_notify_cb (GtkWidget *widget, text); g_free (text); } + else if (pspec->name == g_intern_static_string ("parent")) + { + if (GTK_WIDGET (g_value_get_object (&prop_value)) == NULL) + { + /* This label is being removed from its GtkMenuItem. The + * menuitem becomes a separator now. As the client doesn't handle + * changing types so well, we remove the current DbusmenuMenuitem + * and add a new one. + * + * Note, we have to defer this to idle, as we are called before + * bin->child member of our old parent is invalidated. If we go ahead + * and call parse_menu_structure_helper now, the GtkMenuItem will + * still appear to have a label and we never convert it to a separator + */ + g_object_ref (child); + g_idle_add ((GSourceFunc)recreate_menu_item_in_idle_cb, child); + } + } } static void @@ -891,6 +943,20 @@ widget_notify_cb (GtkWidget *widget, } else if (pspec->name == g_intern_static_string ("label")) { + ParserData *pdata = g_object_get_data (G_OBJECT (child), PARSER_DATA); + if (!pdata->label) + { + /* GtkMenuItem's can start life as a separator if they have no child + * GtkLabel. In this case, we need to convert the DbusmenuMenuitem from + * a separator to a normal menuitem if the application adds a label. + * As changing types isn't handled too well by the client, we delete + * this menuitem for now and then recreate it + */ + DbusmenuMenuitem * parent = dbusmenu_menuitem_get_parent (child); + recreate_menu_item (parent, child); + return; + } + dbusmenu_menuitem_property_set (child, DBUSMENU_MENUITEM_PROP_LABEL, g_value_get_string (&prop_value)); @@ -65,7 +65,7 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu2 +# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu3 # automake: $automake_version # autoconf: $autoconf_version # @@ -73,7 +73,7 @@ PROGRAM=ltmain.sh PACKAGE=libtool -VERSION="2.2.6b Debian-2.2.6b-2ubuntu2" +VERSION="2.2.6b Debian-2.2.6b-2ubuntu3" TIMESTAMP="" package_revision=1.3017 |