aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--ChangeLog76
-rwxr-xr-xconfigure22
-rw-r--r--configure.ac4
-rw-r--r--libindicator/Makefile.am2
-rw-r--r--libindicator/gen-indicator-service.xml.c1
-rw-r--r--libindicator/indicator-object.c6
-rw-r--r--libindicator/indicator-service-manager.c22
-rw-r--r--libindicator/indicator-service.c59
-rw-r--r--libindicator/indicator-service.xml1
-rw-r--r--tests/Makefile.am6
-rw-r--r--tests/Makefile.in6
-rw-r--r--tests/session.conf.in2
-rw-r--r--tools/80indicator-debugging3
-rw-r--r--tools/Makefile.am2
-rw-r--r--tools/Makefile.in2
-rw-r--r--tools/indicator-loader.c14
17 files changed, 182 insertions, 47 deletions
diff --git a/AUTHORS b/AUTHORS
index a533d8c..7b1c028 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -12,6 +12,7 @@
Michael Terry
Mikkel Kamstrup Erlandsen
Neil Jagdish Patel
+ Robert Ancell
Robert Carr
Sebastien Bacher
Ted Gould
diff --git a/ChangeLog b/ChangeLog
index 971ffc6..10ffc95 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/configure b/configure
index 0e5b526..b4e35f4 100755
--- a/configure
+++ b/configure
@@ -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;
}