--- indicator-datetime-0.1.90.is.0.0.6.orig/configure.ac +++ indicator-datetime-0.1.90.is.0.0.6/configure.ac @@ -33,15 +33,15 @@ ########################### INDICATOR_REQUIRED_VERSION=0.3.0 -DBUSMENUGLIB_REQUIRED_VERSION=0.1.1 -DBUSMENUGTK_REQUIRED_VERSION=0.1.1 +DBUSMENUGLIB_REQUIRED_VERSION=0.3.91 +DBUSMENUGTK_REQUIRED_VERSION=0.3.91 GIO_REQUIRED_VERSION=2.25.11 # Note: the GIO check below also ensures the proper glib with gsettings support is present INDICATOR_DISPLAY_OBJECTS=0.1.10 PKG_CHECK_MODULES(INDICATOR, indicator >= $INDICATOR_REQUIRED_VERSION - dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION - dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION + dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION + dbusmenu-gtk-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION libido-0.1 >= $INDICATOR_DISPLAY_OBJECTS gio-2.0 >= $GIO_REQUIRED_VERSION) --- indicator-datetime-0.1.90.is.0.0.6.orig/debian/indicator-datetime.debhelper.log +++ indicator-datetime-0.1.90.is.0.0.6/debian/indicator-datetime.debhelper.log @@ -0,0 +1 @@ +dh_autoreconf_clean --- indicator-datetime-0.1.90.is.0.0.6.orig/debian/copyright +++ indicator-datetime-0.1.90.is.0.0.6/debian/copyright @@ -0,0 +1,27 @@ +This package was debianized by Didier Roche on +Wed, 10 Feb 2010 11:11:01 +0100. + +It was downloaded from https://launchpad.net/indicator-datetime + +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; either version 3 + of the License, or (at your option) any later version. + + 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. + +The Debian packaging is (C) 2010, Canonical Ltd. and is licensed under the +GPLv3, see /usr/share/common-licenses/GPL-3. --- indicator-datetime-0.1.90.is.0.0.6.orig/debian/compat +++ indicator-datetime-0.1.90.is.0.0.6/debian/compat @@ -0,0 +1 @@ +5 --- indicator-datetime-0.1.90.is.0.0.6.orig/debian/control +++ indicator-datetime-0.1.90.is.0.0.6/debian/control @@ -0,0 +1,24 @@ +Source: indicator-datetime +Section: misc +Priority: optional +Maintainer: Ubuntu Desktop Team +Build-Depends: cdbs, + debhelper (>= 5), + intltool (>= 0.35.0), + libindicator-dev (>= 0.3.14), + libdbusmenu-glib-dev (>= 0.3.91), + libdbusmenu-gtk-dev (>= 0.3.91), + libglib2.0-dev (>= 2.25.0), + libido-0.1-dev (>= 0.1.10), + dh-autoreconf +Standards-Version: 3.8.4 +Homepage: https://launchpad.net/indicator-datetime + +Package: indicator-datetime +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends} +Recommends: indicator-applet | indicator-renderer +Description: A very, very simple clock + A simple clock appearing in the indicator bar + --- indicator-datetime-0.1.90.is.0.0.6.orig/debian/watch +++ indicator-datetime-0.1.90.is.0.0.6/debian/watch @@ -0,0 +1,2 @@ +version=3 +https://launchpad.net/indicator-datetime/+download .*/indicator-datetime-([0-9.]+)\.tar\.gz --- indicator-datetime-0.1.90.is.0.0.6.orig/debian/rules +++ indicator-datetime-0.1.90.is.0.0.6/debian/rules @@ -0,0 +1,14 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/simple-patchsys.mk +include /usr/share/cdbs/1/class/autotools.mk +include /usr/share/cdbs/1/class/gnome.mk +include /usr/share/cdbs/1/rules/utils.mk +include /usr/share/cdbs/1/rules/autoreconf.mk + +install/indicator-datetime:: + find debian/indicator-datetime/usr/lib -name \*.la -exec rm {} \; + find debian/indicator-datetime/usr/lib -name \*.a -exec rm {} \; + +common-binary-post-install-arch:: list-missing --- indicator-datetime-0.1.90.is.0.0.6.orig/debian/changelog +++ indicator-datetime-0.1.90.is.0.0.6/debian/changelog @@ -0,0 +1,129 @@ +indicator-datetime (0.1.90.is.0.0.6-0ubuntu2) natty; urgency=low + + * Merged gdbus and dbusmenu-glib-0.4 port + * debian/control + - Added build depends for dh-autoreconf + - bumped dbusmenu build depends to >= 0.3.91 + * debian/rules + - Added autoreconf.mk + + -- Ken VanDine Thu, 13 Jan 2011 20:48:31 -0600 + +indicator-datetime (0.1.90.is.0.0.6-0ubuntu1) natty; urgency=low + + * Uploading 0.0.6 again to superceed 0.1.90 which is still blocked on + MIR + + -- Ken VanDine Mon, 13 Dec 2010 11:30:25 -0500 + +indicator-datetime (0.0.6-0ubuntu3) maverick; urgency=low + + * Cherry-picked from upstream: + - Fix date string format (12/24h) not taken from translation (LP: #579134) + + -- Didier Roche Thu, 30 Sep 2010 16:09:41 +0200 + +indicator-datetime (0.0.6-0ubuntu2) maverick; urgency=low + + * Rebuild for libindicator ABI change (LP: #637692) + * debian/control: depends on latest libindicator-dev + + -- Didier Roche Wed, 22 Sep 2010 18:21:26 +0200 + +indicator-datetime (0.0.6-0ubuntu1) maverick; urgency=low + + * New upstream release. + * Refresh times on timezone change + * Update the date daily (lp: #614529) + * Fixing distcheck + + -- Ted Gould Thu, 09 Sep 2010 13:10:10 -0500 + +indicator-datetime (0.0.5-0ubuntu2) maverick; urgency=low + + * debian/rules: use gnome.mk so a translation template is built (lp: #612540) + + -- Sebastien Bacher Tue, 03 Aug 2010 12:41:08 +0200 + +indicator-datetime (0.0.5-0ubuntu1) maverick; urgency=low + + * New version update + + [ Ted Gould ] + * Upstream Merge + * Making time format configurable via translations and + gsettings. + * debian/control: Adding in a glib dependency to get gsettings + * Autogen update + + -- Sebastien Bacher Thu, 22 Jul 2010 21:41:12 +0200 + +indicator-datetime (0.0.4-0ubuntu1) maverick; urgency=low + + * New upstream release. + * Change menus to come from the service + + -- Ted Gould Thu, 15 Jul 2010 10:33:14 -0500 + +indicator-datetime (0.0.3-0ubuntu1) maverick; urgency=low + + [ Ted Gould ] + * New upstream release. + * Copyright fixes + * Adding translations + * Fix translation domain + + [ Didier Roche ] + * debian/control: + - bump Standards-Version to latest + - fix homepage url + - remove uneeded pkg-config build-dep + - Recommends: indicator-applet | indicator-renderer + + -- Didier Roche Mon, 07 Jun 2010 10:24:51 +0200 + +indicator-datetime (0.0.2-0ubuntu1) maverick; urgency=low + + * New upstream release. + + -- Didier Roche Thu, 03 Jun 2010 17:44:45 +0200 + +indicator-datetime (0.0.2-0ubuntu1~ppa1) lucid; urgency=low + + * New upstream release. + * Making label guess and reasonable width starting out. + + -- Ted Gould Thu, 04 Mar 2010 12:04:55 -0600 + +indicator-datetime (0.0.1-0ubuntu1) lucid; urgency=low + + * New upstream release. + * debian/control: + - add libdbusmenu-gtk-dev build-dep (/!\ not in configure.ac) + + -- Didier Roche Fri, 26 Feb 2010 10:41:22 +0100 + +indicator-datetime (0.0.1~r2-0ubuntu3) lucid; urgency=low + + * debian/control: Adding libdbusmenu-gtk as a build dep + + -- Ted Gould Thu, 18 Feb 2010 10:47:29 -0600 + +indicator-datetime (0.0.1~r2-0ubuntu2) lucid; urgency=low + + * debian/control: + - fix build-dep + + -- Didier Roche Thu, 11 Feb 2010 20:27:22 +0100 + +indicator-datetime (0.0.1~r2-0ubuntu1) lucid; urgency=low + + * new upstream version + + -- Didier Roche Wed, 10 Feb 2010 12:10:48 +0100 + +indicator-datetime (0.0.1~r1-0ubuntu1) lucid; urgency=low + + * Initial packaging + + -- Didier Roche Wed, 27 Jan 2010 12:13:00 +0100 --- indicator-datetime-0.1.90.is.0.0.6.orig/data/indicator-datetime.service.in +++ indicator-datetime-0.1.90.is.0.0.6/data/indicator-datetime.service.in @@ -1,3 +1,3 @@ [D-BUS Service] -Name=org.ayatana.indicator.datetime +Name=com.canonical.indicator.datetime Exec=@libexecdir@/indicator-datetime-service --- indicator-datetime-0.1.90.is.0.0.6.orig/src/datetime-service.xml +++ indicator-datetime-0.1.90.is.0.0.6/src/datetime-service.xml @@ -1,6 +1,6 @@ - + --- indicator-datetime-0.1.90.is.0.0.6.orig/src/datetime-interface.h +++ indicator-datetime-0.1.90.is.0.0.6/src/datetime-interface.h @@ -34,8 +34,9 @@ #define IS_DATETIME_INTERFACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DATETIME_INTERFACE_TYPE)) #define DATETIME_INTERFACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DATETIME_INTERFACE_TYPE, DatetimeInterfaceClass)) -typedef struct _DatetimeInterface DatetimeInterface; -typedef struct _DatetimeInterfaceClass DatetimeInterfaceClass; +typedef struct _DatetimeInterface DatetimeInterface; +typedef struct _DatetimeInterfacePrivate DatetimeInterfacePrivate; +typedef struct _DatetimeInterfaceClass DatetimeInterfaceClass; struct _DatetimeInterfaceClass { GObjectClass parent_class; @@ -45,6 +46,7 @@ struct _DatetimeInterface { GObject parent; + DatetimeInterfacePrivate * priv; }; GType datetime_interface_get_type (void); --- indicator-datetime-0.1.90.is.0.0.6.orig/src/Makefile.am +++ indicator-datetime-0.1.90.is.0.0.6/src/Makefile.am @@ -4,7 +4,7 @@ indicator_datetime_service_SOURCES = \ datetime-interface.c \ datetime-interface.h \ - datetime-service-server.h \ + gen-datetime-service.xml.c \ calendar-menu-item.c \ calendar-menu-item.h \ datetime-service.c \ @@ -20,7 +20,7 @@ datetimelibdir = $(INDICATORDIR) datetimelib_LTLIBRARIES = libdatetime.la libdatetime_la_SOURCES = \ - datetime-service-client.h \ + gen-datetime-service.xml.h \ dbus-shared.h \ indicator-datetime.c libdatetime_la_CFLAGS = \ @@ -32,23 +32,20 @@ -module \ -avoid-version -datetime-service-client.h: $(srcdir)/datetime-service.xml - dbus-binding-tool \ - --prefix=_datetime_service_client \ - --mode=glib-client \ - --output=datetime-service-client.h \ - $(srcdir)/datetime-service.xml - -datetime-service-server.h: $(srcdir)/datetime-service.xml - dbus-binding-tool \ - --prefix=_datetime_service_server \ - --mode=glib-server \ - --output=datetime-service-server.h \ - $(srcdir)/datetime-service.xml +gen-%.xml.c: %.xml + @echo "Building $@ from $<" + @echo "const char * _$(subst -,_,$(subst .,_,$(basename $<))) = " > $@ + @sed -e "s:\":\\\\\":g" -e s:^:\": -e s:\$$:\\\\n\": $< >> $@ + @echo ";" >> $@ + +gen-%.xml.h: %.xml + @echo "Building $@ from $<" + @echo "extern const char * _$(subst -,_,$(subst .,_,$(basename $<)));" > $@ BUILT_SOURCES = \ - datetime-service-client.h \ - datetime-service-server.h + gen-datetime-service.xml.c \ + gen-datetime-service.xml.h + CLEANFILES = \ $(BUILT_SOURCES) --- indicator-datetime-0.1.90.is.0.0.6.orig/src/datetime-interface.c +++ indicator-datetime-0.1.90.is.0.0.6/src/datetime-interface.c @@ -23,21 +23,37 @@ #include "config.h" #endif +#include + #include "datetime-interface.h" -#include "datetime-service-server.h" +#include "gen-datetime-service.xml.h" #include "dbus-shared.h" -enum { - UPDATE_TIME, - LAST_SIGNAL +/** + DatetimeInterfacePrivate: + @dbus_registration: The handle for this object being registered + on dbus. + + Structure to define the memory for the private area + of the datetime interface instance. +*/ +struct _DatetimeInterfacePrivate { + GDBusConnection * bus; + GCancellable * bus_cancel; + guint dbus_registration; }; -static guint signals[LAST_SIGNAL] = { 0 }; +#define DATETIME_INTERFACE_GET_PRIVATE(o) (DATETIME_INTERFACE(o)->priv) + +/* GDBus Stuff */ +static GDBusNodeInfo * node_info = NULL; +static GDBusInterfaceInfo * interface_info = NULL; static void datetime_interface_class_init (DatetimeInterfaceClass *klass); static void datetime_interface_init (DatetimeInterface *self); static void datetime_interface_dispose (GObject *object); static void datetime_interface_finalize (GObject *object); +static void bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data); G_DEFINE_TYPE (DatetimeInterface, datetime_interface, G_TYPE_OBJECT); @@ -46,18 +62,29 @@ { GObjectClass *object_class = G_OBJECT_CLASS (klass); + g_type_class_add_private (klass, sizeof (DatetimeInterfacePrivate)); + object_class->dispose = datetime_interface_dispose; object_class->finalize = datetime_interface_finalize; - signals[UPDATE_TIME] = g_signal_new("update-time", - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (DatetimeInterfaceClass, update_time), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0, G_TYPE_NONE); - - dbus_g_object_type_install_info(DATETIME_INTERFACE_TYPE, &dbus_glib__datetime_service_server_object_info); + /* Setting up the DBus interfaces */ + if (node_info == NULL) { + GError * error = NULL; + + node_info = g_dbus_node_info_new_for_xml(_datetime_service, &error); + if (error != NULL) { + g_error("Unable to parse Datetime Service Interface description: %s", error->message); + g_error_free(error); + } + } + + if (interface_info == NULL) { + interface_info = g_dbus_node_info_lookup_interface(node_info, SERVICE_IFACE); + + if (interface_info == NULL) { + g_error("Unable to find interface '" SERVICE_IFACE "'"); + } + } return; } @@ -65,17 +92,82 @@ static void datetime_interface_init (DatetimeInterface *self) { - DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); - dbus_g_connection_register_g_object(connection, - SERVICE_OBJ, - G_OBJECT(self)); + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, DATETIME_INTERFACE_TYPE, DatetimeInterfacePrivate); + + self->priv->bus = NULL; + self->priv->bus_cancel = NULL; + self->priv->dbus_registration = 0; + + self->priv->bus_cancel = g_cancellable_new(); + g_bus_get(G_BUS_TYPE_SESSION, + self->priv->bus_cancel, + bus_get_cb, + self); return; } static void +bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data) +{ + GError * error = NULL; + GDBusConnection * connection = g_bus_get_finish(res, &error); + + if (error != NULL) { + g_error("OMG! Unable to get a connection to DBus: %s", error->message); + g_error_free(error); + return; + } + + DatetimeInterfacePrivate * priv = DATETIME_INTERFACE_GET_PRIVATE(user_data); + + g_warn_if_fail(priv->bus == NULL); + priv->bus = connection; + + if (priv->bus_cancel != NULL) { + g_object_unref(priv->bus_cancel); + priv->bus_cancel = NULL; + } + + /* Now register our object on our new connection */ + priv->dbus_registration = g_dbus_connection_register_object(priv->bus, + SERVICE_OBJ, + interface_info, + NULL, + user_data, + NULL, + &error); + + if (error != NULL) { + g_error("Unable to register the object to DBus: %s", error->message); + g_error_free(error); + return; + } + + return; +} + +static void datetime_interface_dispose (GObject *object) { + DatetimeInterfacePrivate * priv = DATETIME_INTERFACE_GET_PRIVATE(object); + + if (priv->dbus_registration != 0) { + g_dbus_connection_unregister_object(priv->bus, priv->dbus_registration); + /* Don't care if it fails, there's nothing we can do */ + priv->dbus_registration = 0; + } + + if (priv->bus != NULL) { + g_object_unref(priv->bus); + priv->bus = NULL; + } + + if (priv->bus_cancel != NULL) { + g_cancellable_cancel(priv->bus_cancel); + g_object_unref(priv->bus_cancel); + priv->bus_cancel = NULL; + } G_OBJECT_CLASS (datetime_interface_parent_class)->dispose (object); return; @@ -93,6 +185,23 @@ datetime_interface_update (DatetimeInterface *self) { g_return_if_fail(IS_DATETIME_INTERFACE(self)); - g_signal_emit(G_OBJECT(self), signals[UPDATE_TIME], 0, TRUE); + + DatetimeInterfacePrivate * priv = DATETIME_INTERFACE_GET_PRIVATE(self); + GError * error = NULL; + + g_dbus_connection_emit_signal (priv->bus, + NULL, + SERVICE_OBJ, + SERVICE_IFACE, + "UpdateTime", + NULL, + &error); + + if (error != NULL) { + g_error("Unable to send UpdateTime signal: %s", error->message); + g_error_free(error); + return; + } + return; } --- indicator-datetime-0.1.90.is.0.0.6.orig/src/indicator-datetime.c +++ indicator-datetime-0.1.90.is.0.0.6/src/indicator-datetime.c @@ -29,9 +29,6 @@ #include #include -/* DBus Stuff */ -#include - /* Indicator Stuff */ #include #include @@ -82,7 +79,8 @@ IndicatorServiceManager * sm; DbusmenuGtkMenu * menu; - DBusGProxy * service_proxy; + GCancellable * service_proxy_cancel; + GDBusProxy * service_proxy; IdoCalendarMenuItem *ido_calendar; GSettings * settings; @@ -142,7 +140,9 @@ static struct tm * update_label (IndicatorDatetime * io); static void guess_label_size (IndicatorDatetime * self); static void setup_timer (IndicatorDatetime * self, struct tm * ltime); -static void update_time (DBusGProxy * proxy, gpointer user_data); +static void update_time (IndicatorDatetime * self); +static void receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data); +static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data); /* Indicator Module Config */ INDICATOR_SET_VERSION @@ -220,14 +220,14 @@ self->priv->idle_measure = 0; self->priv->max_width = 0; - self->priv->time_string = g_strdup(DEFAULT_TIME_FORMAT); - self->priv->time_mode = SETTINGS_TIME_LOCALE; self->priv->show_seconds = FALSE; self->priv->show_date = FALSE; self->priv->show_day = FALSE; self->priv->custom_string = g_strdup(DEFAULT_TIME_FORMAT); + self->priv->time_string = generate_format_string(self); + self->priv->service_proxy = NULL; self->priv->sm = NULL; @@ -269,21 +269,53 @@ self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION); - DBusGConnection * session = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); - if (session != NULL) { - self->priv->service_proxy = dbus_g_proxy_new_for_name(session, - SERVICE_NAME, - SERVICE_OBJ, - SERVICE_IFACE); - - dbus_g_proxy_add_signal(self->priv->service_proxy, "UpdateTime", G_TYPE_INVALID); - dbus_g_proxy_connect_signal(self->priv->service_proxy, - "UpdateTime", - G_CALLBACK(update_time), - self, - NULL); + self->priv->service_proxy_cancel = g_cancellable_new(); + + g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + SERVICE_NAME, + SERVICE_OBJ, + SERVICE_IFACE, + self->priv->service_proxy_cancel, + service_proxy_cb, + self); + + return; +} + +/* Callback from trying to create the proxy for the serivce, this + could include starting the service. Sometime it'll fail and + we'll try to start that dang service again! */ +static void +service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) +{ + GError * error = NULL; + + IndicatorDatetime * self = INDICATOR_DATETIME(user_data); + g_return_if_fail(self != NULL); + + GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); + + IndicatorDatetimePrivate * priv = INDICATOR_DATETIME_GET_PRIVATE(self); + + if (priv->service_proxy_cancel != NULL) { + g_object_unref(priv->service_proxy_cancel); + priv->service_proxy_cancel = NULL; } + if (error != NULL) { + g_error("Could not grab DBus proxy for %s: %s", SERVICE_NAME, error->message); + g_error_free(error); + return; + } + + /* Okay, we're good to grab the proxy at this point, we're + sure that it's ours. */ + priv->service_proxy = proxy; + + g_signal_connect(proxy, "g-signal", G_CALLBACK(receive_signal), self); + return; } @@ -564,17 +596,29 @@ return ltime; } -/* Recieves the signal from the service that we should update - the time right now. Usually from a timezone switch. */ +/* Update the time right now. Usually the result of a timezone switch. */ static void -update_time (DBusGProxy * proxy, gpointer user_data) +update_time (IndicatorDatetime * self) { - IndicatorDatetime * self = INDICATOR_DATETIME(user_data); struct tm * ltime = update_label(self); setup_timer(self, ltime); return; } +/* Receives all signals from the service, routed to the appropriate functions */ +static void +receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, + GVariant * parameters, gpointer user_data) +{ + IndicatorDatetime * self = INDICATOR_DATETIME(user_data); + + if (g_strcmp0(signal_name, "UpdateTime") == 0) { + update_time(self); + } + + return; +} + /* Runs every minute and updates the time */ gboolean timer_func (gpointer user_data) --- indicator-datetime-0.1.90.is.0.0.6.orig/src/dbus-shared.h +++ indicator-datetime-0.1.90.is.0.0.6/src/dbus-shared.h @@ -20,12 +20,12 @@ */ -#define SERVICE_NAME "org.ayatana.indicator.datetime" -#define SERVICE_IFACE "org.ayatana.indicator.datetime.service" -#define SERVICE_OBJ "/org/ayatana/indicator/datetime/service" +#define SERVICE_NAME "com.canonical.indicator.datetime" +#define SERVICE_IFACE "com.canonical.indicator.datetime.service" +#define SERVICE_OBJ "/com/canonical/indicator/datetime/service" #define SERVICE_VERSION 1 -#define MENU_OBJ "/org/ayatana/indicator/datetime/menu" +#define MENU_OBJ "/com/canonical/indicator/datetime/menu" #define DBUSMENU_CALENDAR_MENUITEM_TYPE "x-canonical-calendar-item"