diff options
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | ChangeLog | 76 | ||||
-rwxr-xr-x | configure | 22 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | libindicator/Makefile.am | 2 | ||||
-rw-r--r-- | libindicator/gen-indicator-service.xml.c | 1 | ||||
-rw-r--r-- | libindicator/indicator-object.c | 6 | ||||
-rw-r--r-- | libindicator/indicator-service-manager.c | 22 | ||||
-rw-r--r-- | libindicator/indicator-service.c | 59 | ||||
-rw-r--r-- | libindicator/indicator-service.xml | 1 | ||||
-rw-r--r-- | tests/Makefile.am | 6 | ||||
-rw-r--r-- | tests/Makefile.in | 6 | ||||
-rw-r--r-- | tests/session.conf.in | 2 | ||||
-rw-r--r-- | tools/80indicator-debugging | 3 | ||||
-rw-r--r-- | tools/Makefile.am | 2 | ||||
-rw-r--r-- | tools/Makefile.in | 2 | ||||
-rw-r--r-- | tools/indicator-loader.c | 14 |
17 files changed, 182 insertions, 47 deletions
@@ -12,6 +12,7 @@ Michael Terry Mikkel Kamstrup Erlandsen Neil Jagdish Patel + Robert Ancell Robert Carr Sebastien Bacher Ted Gould @@ -1,5 +1,81 @@ # Generated by Makefile. Do not edit. +2011-07-14 Ted Gould <ted@gould.cx> + + 0.3.91 + +2011-07-14 Ted Gould <ted@gould.cx> + + Fixing the libindicator test suite + +2011-07-11 Ted Gould <ted@gould.cx> + + Cleaning up removal of watchers as the string was getting free'd before it could get used to remove the entry from the hashtable. Now using a destroy function as that is possible with GDBus but wasn't with dbus-glib + +2011-07-11 Ted Gould <ted@gould.cx> + + Define the bus well known type in the session.conf file + +2011-07-12 Ted Gould <ted@gould.cx> + + Adding an env variable to put a service in replace mode + +2011-07-12 Ted Gould <ted@gould.cx> + + Watching when we do name switches + +2011-07-12 Ted Gould <ted@gould.cx> + + Adding in the shutdown function + +2011-07-12 Ted Gould <ted@gould.cx> + + In replace mode we need to ask the other guy to shutdown and still wait for the name a bit. + +2011-07-12 Ted Gould <ted@gould.cx> + + Adding in a property for being in replace mode + +2011-07-11 Ted Gould <ted@gould.cx> + + Add the PC file instead of replace it + +2011-07-11 Ted Gould <ted@gould.cx> + + Handle NULL entries without crashing + +2011-07-07 Ted Gould <ted@gould.cx> + + Installing the debugging env entries in shared directory instead of the executable one. + +2011-07-07 Ken VanDine <ken.vandine@canonical.com> + + Make xsessiondir = $(pkgdatadir) + +2011-07-07 Ted Gould <ted@gould.cx> + + Fixing doc string + +2011-07-07 Ken VanDine <ken.vandine@canonical.com> + + Changed to help message for --with-gtk to reflect the new default + +2011-07-07 Ted Gould <ted@gould.cx> + + Anotating the get entires function properly. + +2011-07-08 Robert Ancell <robert.ancell@canonical.com> + + Annotate the return value of indicator_object_get_entries so that the type in the list is known, also fix typo in docstring + +2011-07-07 Ted Gould <ted@gould.cx> + + Making the box function conditional on GTK version + +2011-07-07 Ted Gould <ted@gould.cx> + + Handling the right box for the right version of GTK + 2011-07-06 Ted Gould <ted@gould.cx> 0.3.90 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for libindicator 0.3.90. +# Generated by GNU Autoconf 2.68 for libindicator 0.3.91. # # Report bugs to <http://bugs.launchpad.net/libindicator>. # @@ -709,8 +709,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libindicator' PACKAGE_TARNAME='libindicator' -PACKAGE_VERSION='0.3.90' -PACKAGE_STRING='libindicator 0.3.90' +PACKAGE_VERSION='0.3.91' +PACKAGE_STRING='libindicator 0.3.91' PACKAGE_BUGREPORT='http://bugs.launchpad.net/libindicator' PACKAGE_URL='http://launchpad.net/libindicator' @@ -1451,7 +1451,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 libindicator 0.3.90 to adapt to many kinds of systems. +\`configure' configures libindicator 0.3.91 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1521,7 +1521,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libindicator 0.3.90:";; + short | recursive ) echo "Configuration of libindicator 0.3.91:";; esac cat <<\_ACEOF @@ -1549,7 +1549,7 @@ Optional Packages: --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-gtk Which version of gtk to use [default=2] + --with-gtk Which version of gtk to use [default=3] Some influential environment variables: CC C compiler command @@ -1637,7 +1637,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libindicator configure 0.3.90 +libindicator configure 0.3.91 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. @@ -1915,7 +1915,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 libindicator $as_me 0.3.90, which was +It was created by libindicator $as_me 0.3.91, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2737,7 +2737,7 @@ fi # Define the identity of the package. PACKAGE='libindicator' - VERSION='0.3.90' + VERSION='0.3.91' cat >>confdefs.h <<_ACEOF @@ -11730,7 +11730,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 libindicator $as_me 0.3.90, which was +This file was extended by libindicator $as_me 0.3.91, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -11797,7 +11797,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="\\ -libindicator config.status 0.3.90 +libindicator config.status 0.3.91 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 1188b04..e8a162f 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_INIT([libindicator], - [0.3.90], + [0.3.91], [http://bugs.launchpad.net/libindicator], [libindicator], [http://launchpad.net/libindicator]) @@ -47,7 +47,7 @@ GIO_UNIX_REQUIRED_VERSION=2.22 AC_ARG_WITH([gtk], [AS_HELP_STRING([--with-gtk], - [Which version of gtk to use @<:@default=2@:>@])], + [Which version of gtk to use @<:@default=3@:>@])], [], [with_gtk=3]) AS_IF([test "x$with_gtk" = x3], diff --git a/libindicator/Makefile.am b/libindicator/Makefile.am index 4433655..f9fb011 100644 --- a/libindicator/Makefile.am +++ b/libindicator/Makefile.am @@ -22,7 +22,7 @@ INDICATOR_API_VERSION = 4 -e "s|\@indicator_abi_version\@|$(INDICATOR_ABI_VERSION)|" \ $< > $@ -CLEANFILES = indicator$(VER)-0.$(INDICATOR_API_VERSION).pc +CLEANFILES += indicator$(VER)-0.$(INDICATOR_API_VERSION).pc include $(top_srcdir)/Makefile.am.marshal diff --git a/libindicator/gen-indicator-service.xml.c b/libindicator/gen-indicator-service.xml.c index 2a2b590..5c873df 100644 --- a/libindicator/gen-indicator-service.xml.c +++ b/libindicator/gen-indicator-service.xml.c @@ -14,6 +14,7 @@ const char * _indicator_service = " <method name=\"UnWatch\">\n" " <annotation name=\"org.freedesktop.DBus.GLib.Async\" value=\"true\" />\n" " </method>\n" +" <method name=\"Shutdown\" />\n" "\n" "<!-- Signals -->\n" " <!-- None currently -->\n" diff --git a/libindicator/indicator-object.c b/libindicator/indicator-object.c index 2fe8dd1..a563ebe 100644 --- a/libindicator/indicator-object.c +++ b/libindicator/indicator-object.c @@ -447,15 +447,15 @@ get_entries_default (IndicatorObject * io) } /** - indicator_object_get_entires: + indicator_object_get_entries: @io: #IndicatorObject to query This function looks on the class for the object and calls it's #IndicatorObjectClass::get_entries function. The list should be owned by the caller, but the individual - enteries should not be. + entries should not be. - Return value: A list if #IndicatorObjectEntry structures or + Return value: (element-type IndicatorObjectEntry) (transfer container): A list if #IndicatorObjectEntry structures or NULL if there is an error. */ GList * diff --git a/libindicator/indicator-service-manager.c b/libindicator/indicator-service-manager.c index f3a29d0..f58c148 100644 --- a/libindicator/indicator-service-manager.c +++ b/libindicator/indicator-service-manager.c @@ -536,8 +536,9 @@ service_proxy_name_changed (GDBusConnection * connection, const gchar * sender_n { IndicatorServiceManagerPrivate * priv = INDICATOR_SERVICE_MANAGER_GET_PRIVATE(user_data); - const gchar * new_name; - g_variant_get(parameters, "(&s&s&s)", NULL, NULL, &new_name); + const gchar * new_name = NULL; + const gchar * prev_name = NULL; + g_variant_get(parameters, "(&s&s&s)", NULL, &prev_name, &new_name); if (new_name == NULL || new_name[0] == 0) { if (priv->connected) { @@ -547,10 +548,27 @@ service_proxy_name_changed (GDBusConnection * connection, const gchar * sender_n start_service_again(INDICATOR_SERVICE_MANAGER(user_data)); } else { + /* If we weren't connected before, we are now. Let's tell the + world! */ if (!priv->connected) { priv->connected = TRUE; g_signal_emit(G_OBJECT(user_data), signals[CONNECTION_CHANGE], 0, TRUE, TRUE); } + + /* If the names are both valid, and they're not the same, it means that + we've actually changed. So we need to tell the new guy that we're + watching them */ + if (new_name != NULL && prev_name != NULL && new_name[0] != 0 && prev_name != 0 && g_strcmp0(prev_name, new_name) != 0) { + /* Send watch */ + g_dbus_proxy_call(priv->service_proxy, + "Watch", + NULL, /* params */ + G_DBUS_CALL_FLAGS_NONE, + -1, + priv->watch_cancel, + watch_cb, + user_data); + } } return; diff --git a/libindicator/indicator-service.c b/libindicator/indicator-service.c index e5eaa5b..e9f3133 100644 --- a/libindicator/indicator-service.c +++ b/libindicator/indicator-service.c @@ -32,7 +32,7 @@ License along with this library. If not, see #include "dbus-shared.h" static void unwatch_core (IndicatorService * service, const gchar * name); -static gboolean watchers_remove (gpointer key, gpointer value, gpointer user_data); +static void watchers_remove (gpointer value); static void bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data); static GVariant * bus_watch (IndicatorService * service, const gchar * sender); @@ -57,6 +57,7 @@ struct _IndicatorServicePrivate { GHashTable * watchers; guint this_service_version; guint dbus_registration; + gboolean replace_mode; }; /* Signals Stuff */ @@ -192,6 +193,7 @@ indicator_service_init (IndicatorService *self) priv->this_service_version = 0; priv->timeout_length = 500; priv->dbus_registration = 0; + priv->replace_mode = FALSE; const gchar * timeoutenv = g_getenv("INDICATOR_SERVICE_SHUTDOWN_TIMEOUT"); if (timeoutenv != NULL) { @@ -202,11 +204,16 @@ indicator_service_init (IndicatorService *self) } } + const gchar * replaceenv = g_getenv("INDICATOR_SERVICE_REPLACE_MODE"); + if (replaceenv != NULL) { + priv->replace_mode = TRUE; + g_debug("Putting into replace mode"); + } + /* NOTE: We're using g_free here because that's what needs to - happen, but you really should call watchers_remove first as well - since that disconnects the signals. We can't do that with a callback - here because there is no user data to pass the object as well. */ - priv->watchers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + happen and we're watchers_remove as well to clean up the dbus + watches we've setup. */ + priv->watchers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, watchers_remove); priv->bus_cancel = g_cancellable_new(); g_bus_get(G_BUS_TYPE_SESSION, @@ -225,7 +232,8 @@ indicator_service_dispose (GObject *object) IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(object); if (priv->watchers != NULL) { - g_hash_table_foreach_remove(priv->watchers, watchers_remove, object); + g_hash_table_destroy(priv->watchers); + priv->watchers = NULL; } if (priv->timeout != 0) { @@ -397,6 +405,8 @@ bus_method_call (GDBusConnection * connection, const gchar * sender, const gchar retval = bus_watch(service, sender); } else if (g_strcmp0(method, "UnWatch") == 0) { unwatch_core(service, sender); + } else if (g_strcmp0(method, "Shutdown") == 0) { + g_signal_emit(G_OBJECT(service), signals[SHUTDOWN], 0, TRUE); } else { g_warning("Calling method '%s' on the indicator service and it's unknown", method); } @@ -407,11 +417,11 @@ bus_method_call (GDBusConnection * connection, const gchar * sender, const gchar /* A function to remove the signals on a proxy before we destroy it because in this case we've stopped caring. */ -static gboolean -watchers_remove (gpointer key, gpointer value, gpointer user_data) +static void +watchers_remove (gpointer value) { g_bus_unwatch_name(GPOINTER_TO_UINT(value)); - return TRUE; + return; } /* This is the function that gets executed if we timeout @@ -462,8 +472,33 @@ try_and_get_name_lost_cb (GDBusConnection * connection, const gchar * name, gpoi g_return_if_fail(connection != NULL); g_return_if_fail(INDICATOR_IS_SERVICE(user_data)); - g_warning("Name request failed."); - g_signal_emit(G_OBJECT(user_data), signals[SHUTDOWN], 0, TRUE); + IndicatorServicePrivate * priv = INDICATOR_SERVICE_GET_PRIVATE(user_data); + + if (!priv->replace_mode) { + g_warning("Name request failed."); + g_signal_emit(G_OBJECT(user_data), signals[SHUTDOWN], 0, TRUE); + } else { + /* If we're in replace mode we can be a little more trickey + here. We're going to tell the other guy to shutdown and hope + that we get the name. */ + GDBusMessage * message = NULL; + message = g_dbus_message_new_method_call(name, + INDICATOR_SERVICE_OBJECT, + INDICATOR_SERVICE_INTERFACE, + "Shutdown"); + + g_dbus_connection_send_message(connection, message, G_DBUS_SEND_MESSAGE_FLAGS_NONE, NULL, NULL); + g_object_unref(message); + + /* Check to see if we need to clean up a timeout */ + if (priv->timeout != 0) { + g_source_remove(priv->timeout); + priv->timeout = 0; + } + + /* Set a timeout for no watchers if we can't get the name */ + priv->timeout = g_timeout_add(priv->timeout_length * 4, timeout_no_watchers, user_data); + } return; } @@ -553,8 +588,6 @@ unwatch_core (IndicatorService * service, const gchar * name) /* Remove us from the watcher list here */ gpointer watcher_item = g_hash_table_lookup(priv->watchers, name); if (watcher_item != NULL) { - /* Free the watcher */ - watchers_remove((gpointer)name, watcher_item, service); g_hash_table_remove(priv->watchers, name); } else { /* Odd that we couldn't find the person, but, eh */ diff --git a/libindicator/indicator-service.xml b/libindicator/indicator-service.xml index 6bd7d80..71ef4df 100644 --- a/libindicator/indicator-service.xml +++ b/libindicator/indicator-service.xml @@ -13,6 +13,7 @@ <method name="UnWatch"> <annotation name="org.freedesktop.DBus.GLib.Async" value="true" /> </method> + <method name="Shutdown" /> <!-- Signals --> <!-- None currently --> diff --git a/tests/Makefile.am b/tests/Makefile.am index e78ac6b..f11a9d1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -258,8 +258,6 @@ service-manager-connect-tester: service-manager-connect service-manager-connect- TESTS += service-manager-connect-tester DISTCLEANFILES += service-manager-connect-tester session.conf service-manager-connect.service -# Bug 806690 -XFAIL_TESTS += service-manager-connect-tester ############################# # Service Versions @@ -323,8 +321,6 @@ service-version-tester: service-version-manager service-version-bad-service serv TESTS += service-version-tester DISTCLEANFILES += service-version-tester service-version-bad.service service-version-good.service -# Bug 806691 -XFAIL_TESTS += service-version-tester ############################# # Service Versions @@ -382,8 +378,6 @@ service-version-multiwatch-tester: service-version-multiwatch-manager service-ve TESTS += service-version-multiwatch-tester DISTCLEANFILES += service-version-multiwatch-tester -# Bug 806692 -XFAIL_TESTS += service-version-multiwatch-tester ############################# # Service Manager Shutdown diff --git a/tests/Makefile.in b/tests/Makefile.in index e45b6f7..25e8106 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -34,6 +34,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +XFAIL_TESTS = check_PROGRAMS = test-loader$(EXEEXT) test-desktop-shortcuts$(EXEEXT) \ service-shutdown-timeout$(EXEEXT) \ service-manager-no-connect$(EXEEXT) \ @@ -447,11 +448,6 @@ DISTCLEANFILES = test-desktop-shortcuts-tester \ service-version-multiwatch-tester \ service-manager-connect-nostart-tester loader-tester \ $(XML_REPORT) $(HTML_REPORT) -# Bug 806690 -# Bug 806691 -# Bug 806692 -XFAIL_TESTS = service-manager-connect-tester service-version-tester \ - service-version-multiwatch-tester lib_LTLIBRARIES = \ libdummy-indicator-blank.la \ libdummy-indicator-null.la \ diff --git a/tests/session.conf.in b/tests/session.conf.in index d1e2805..5c0cf36 100644 --- a/tests/session.conf.in +++ b/tests/session.conf.in @@ -1,6 +1,8 @@ <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> + <type>session</type> + <!-- If we fork, keep the user's original umask to avoid affecting the behavior of child processes. --> <keep_umask/> diff --git a/tools/80indicator-debugging b/tools/80indicator-debugging index f21559c..85d0a35 100644 --- a/tools/80indicator-debugging +++ b/tools/80indicator-debugging @@ -4,6 +4,9 @@ # make debugging difficult and are not recommended for # daily use. Development use only! +# To use: either copy or symbolicly link this file to the +# Xsession dictory. Specifically: /etc/X11/Xsession.d + # Timeout after 1 minute export INDICATOR_SERVICE_SHUTDOWN_TIMEOUT=60000 diff --git a/tools/Makefile.am b/tools/Makefile.am index 287d34f..cefd944 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -34,7 +34,7 @@ indicator_loader3_SOURCES = $(indicator_loader_SOURCES) indicator_loader3_CFLAGS = $(indicator_loader_CFLAGS) indicator_loader3_LDADD = $(indicator_loader_LDADD) -xsessiondir = $(sysconfdir)/X11/Xsession.d +xsessiondir = $(pkgdatadir) xsession_DATA = 80indicator-debugging diff --git a/tools/Makefile.in b/tools/Makefile.in index e01a0d4..0d46485 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -281,7 +281,7 @@ indicator_loader_LDADD = \ indicator_loader3_SOURCES = $(indicator_loader_SOURCES) indicator_loader3_CFLAGS = $(indicator_loader_CFLAGS) indicator_loader3_LDADD = $(indicator_loader_LDADD) -xsessiondir = $(sysconfdir)/X11/Xsession.d +xsessiondir = $(pkgdatadir) xsession_DATA = 80indicator-debugging EXTRA_DIST = $(xsession_DATA) all: all-am diff --git a/tools/indicator-loader.c b/tools/indicator-loader.c index 0cdf1ff..06dd4b4 100644 --- a/tools/indicator-loader.c +++ b/tools/indicator-loader.c @@ -32,7 +32,9 @@ activate_entry (GtkWidget * widget, gpointer user_data) { g_return_if_fail(INDICATOR_IS_OBJECT(user_data)); gpointer entry = g_object_get_data(G_OBJECT(widget), ENTRY_DATA_NAME); - g_return_if_fail(entry == NULL); + if (entry == NULL) { + g_debug("Activation on: (null)"); + } indicator_object_entry_activate(INDICATOR_OBJECT(user_data), (IndicatorObjectEntry *)entry, gtk_get_current_event_time()); return; @@ -44,7 +46,11 @@ entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user_d g_debug("Signal: Entry Added"); GtkWidget * menuitem = gtk_menu_item_new(); +#if GTK_CHECK_VERSION(3,0,0) GtkWidget * hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); +#else + GtkWidget * hbox = gtk_hbox_new(FALSE, 3); +#endif if (entry->image != NULL) { gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(entry->image), FALSE, FALSE, 0); @@ -95,7 +101,11 @@ entry_removed (IndicatorObject * io, IndicatorObjectEntry * entry, gpointer user static void menu_show (IndicatorObject * io, IndicatorObjectEntry * entry, guint timestamp, gpointer user_data) { - g_debug("Show Menu: %s", entry->label != NULL ? gtk_label_get_text(entry->label) : "No Label"); + if (entry != NULL) { + g_debug("Show Menu: %s", entry->label != NULL ? gtk_label_get_text(entry->label) : "No Label"); + } else { + g_debug("Show Menu: (null)"); + } return; } |