From 37f7969cacde126daaaffbd334c47099593f5a7a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 18 May 2010 21:47:35 -0500 Subject: Adding a dbus service file. --- data/Makefile.am | 11 +++++++++++ data/indicator-datetime.service.in | 3 +++ 2 files changed, 14 insertions(+) create mode 100644 data/indicator-datetime.service.in diff --git a/data/Makefile.am b/data/Makefile.am index e69de29..b19cee4 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -0,0 +1,11 @@ +#SUBDIRS = icons + +dbus_servicesdir = $(DBUSSERVICEDIR) +dbus_services_DATA = indicator-datetime.service + +%.service: %.service.in + sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@ + +EXTRA_DIST = indicator-datetime.service.in + +CLEANFILES = indicator-datetime.service diff --git a/data/indicator-datetime.service.in b/data/indicator-datetime.service.in new file mode 100644 index 0000000..bcb70e3 --- /dev/null +++ b/data/indicator-datetime.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=org.ayatana.indicator.datetime +Exec=@libexecdir@/indicator-datetime-service -- cgit v1.2.3 From b26f447dfc25709562851f4f40b041b17e8081e4 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 18 May 2010 21:51:51 -0500 Subject: Some shared names for our dbus stuff --- src/dbus-shared.h | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/dbus-shared.h diff --git a/src/dbus-shared.h b/src/dbus-shared.h new file mode 100644 index 0000000..c8b4a9e --- /dev/null +++ b/src/dbus-shared.h @@ -0,0 +1,7 @@ + +#define SERVICE_NAME "org.ayatana.indicator.datetime" +#define SERVICE_IFACE "org.ayatana.indicator.datetime.service" +#define SERVICE_OBJ "/org/ayatana/indicator/datetime/service" + +#define MENU_OBJ "/org/ayatana/indicator/datetime/menu" + -- cgit v1.2.3 From 497c15b8df490f1718529f3e68ee56cab47c65a0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 18 May 2010 21:52:49 -0500 Subject: Deping on the header --- src/Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am index bf9093d..fe3db2e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,8 @@ libexec_PROGRAMS = indicator-datetime-service indicator_datetime_service_SOURCES = \ - datetime-service.c + datetime-service.c \ + dbus-shared.h indicator_datetime_service_CFLAGS = \ -Wall \ -Werror \ @@ -13,6 +14,7 @@ indicator_datetime_service_LDADD = \ datetimelibdir = $(INDICATORDIR) datetimelib_LTLIBRARIES = libdatetime.la libdatetime_la_SOURCES = \ + dbus-shared.h \ indicator-datetime.c libdatetime_la_CFLAGS = \ $(INDICATOR_CFLAGS) \ -- cgit v1.2.3 From 12731f4f2554e923c92cc04aafb5c5c126be983a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 18 May 2010 22:07:07 -0500 Subject: Adding a shared version number --- src/dbus-shared.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dbus-shared.h b/src/dbus-shared.h index c8b4a9e..88ad4f5 100644 --- a/src/dbus-shared.h +++ b/src/dbus-shared.h @@ -2,6 +2,7 @@ #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_VERSION 1 #define MENU_OBJ "/org/ayatana/indicator/datetime/menu" -- cgit v1.2.3 From fe6148723172d93d97fa941184ecc9a256201379 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 18 May 2010 22:07:22 -0500 Subject: Building the basic service structure --- src/datetime-service.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/datetime-service.c b/src/datetime-service.c index 63590c7..da4cd87 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -1,7 +1,40 @@ +#include +#include + +#include + +#include "dbus-shared.h" + +static IndicatorService * service = NULL; +static GMainLoop * mainloop = NULL; + +static void +service_shutdown (IndicatorService * service, gpointer user_data) +{ + g_warning("Shutting down service!"); + g_main_loop_quit(mainloop); + return; +} + int main (int argc, char ** argv) { + g_type_init(); + + service = indicator_service_new_version(SERVICE_NAME, SERVICE_VERSION); + g_signal_connect(service, INDICATOR_SERVICE_SIGNAL_SHUTDOWN, G_CALLBACK(service_shutdown), NULL); + + /* Setting up i18n and gettext. Apparently, we need + all of these. */ + setlocale (LC_ALL, ""); + bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + textdomain (GETTEXT_PACKAGE); + + mainloop = g_main_loop_new(NULL, FALSE); + g_main_loop_run(mainloop); + + g_object_unref(G_OBJECT(service)); return 0; } -- cgit v1.2.3 From 8d461077788a54834bb7770fb19af119ae41eb32 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 18 May 2010 22:27:08 -0500 Subject: Adding a service manager to start the service. --- src/indicator-datetime.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 434883e..448d736 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -10,6 +10,9 @@ /* Indicator Stuff */ #include #include +#include + +#include "dbus-shared.h" #define INDICATOR_DATETIME_TYPE (indicator_datetime_get_type ()) @@ -40,6 +43,8 @@ struct _IndicatorDatetimePrivate { guint idle_measure; gint max_width; + + IndicatorServiceManager * sm; }; #define INDICATOR_DATETIME_GET_PRIVATE(o) \ @@ -91,6 +96,10 @@ indicator_datetime_init (IndicatorDatetime *self) self->priv->idle_measure = 0; self->priv->max_width = 0; + self->priv->sm = NULL; + + self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION); + return; } @@ -124,6 +133,11 @@ indicator_datetime_dispose (GObject *object) self->priv->idle_measure = 0; } + if (self->priv->sm != NULL) { + g_object_unref(G_OBJECT(self->priv->sm)); + self->priv->sm = NULL; + } + G_OBJECT_CLASS (indicator_datetime_parent_class)->dispose (object); return; } -- cgit v1.2.3 From 69996154dbde58371e67ab88b8eb16dd5decca2d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 19 May 2010 11:41:27 -0500 Subject: Switching the menu to be from the service. --- src/indicator-datetime.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 448d736..f114476 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -12,6 +12,9 @@ #include #include +/* DBusMenu */ +#include + #include "dbus-shared.h" @@ -45,6 +48,7 @@ struct _IndicatorDatetimePrivate { gint max_width; IndicatorServiceManager * sm; + DbusmenuGtkMenu * menu; }; #define INDICATOR_DATETIME_GET_PRIVATE(o) \ @@ -97,6 +101,7 @@ indicator_datetime_init (IndicatorDatetime *self) self->priv->max_width = 0; self->priv->sm = NULL; + self->priv->menu = NULL; self->priv->sm = indicator_service_manager_new_version(SERVICE_NAME, SERVICE_VERSION); @@ -133,6 +138,11 @@ indicator_datetime_dispose (GObject *object) self->priv->idle_measure = 0; } + if (self->priv->menu != NULL) { + g_object_unref(G_OBJECT(self->priv->menu)); + self->priv->menu = NULL; + } + if (self->priv->sm != NULL) { g_object_unref(G_OBJECT(self->priv->sm)); self->priv->sm = NULL; @@ -348,6 +358,12 @@ get_menu (IndicatorObject * io) { IndicatorDatetime * self = INDICATOR_DATETIME(io); + if (self->priv->menu == NULL) { + self->priv->menu = dbusmenu_gtkmenu_new(SERVICE_NAME, MENU_OBJ); + } + + return GTK_MENU(self->priv->menu); + GtkWidget * menu = NULL; GtkWidget * item = NULL; -- cgit v1.2.3 From e66edab185ed5f916dc15628956d89f87ab10b44 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 19 May 2010 12:41:30 -0500 Subject: Now we have a menu, whoo ha! --- src/datetime-service.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/datetime-service.c b/src/datetime-service.c index da4cd87..d2e2b3e 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -4,10 +4,22 @@ #include +#include +#include + #include "dbus-shared.h" static IndicatorService * service = NULL; static GMainLoop * mainloop = NULL; +static DbusmenuServer * server = NULL; +static DbusmenuMenuitem * root = NULL; + +static void +build_menus (DbusmenuMenuitem * root) +{ + + return; +} static void service_shutdown (IndicatorService * service, gpointer user_data) @@ -22,6 +34,7 @@ main (int argc, char ** argv) { g_type_init(); + /* Acknowledging the service init and setting up the interface */ service = indicator_service_new_version(SERVICE_NAME, SERVICE_VERSION); g_signal_connect(service, INDICATOR_SERVICE_SIGNAL_SHUTDOWN, G_CALLBACK(service_shutdown), NULL); @@ -31,10 +44,18 @@ main (int argc, char ** argv) bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); textdomain (GETTEXT_PACKAGE); + /* Building the base menu */ + server = dbusmenu_server_new(MENU_OBJ); + root = dbusmenu_menuitem_new(); + dbusmenu_server_set_root(server, root); + build_menus(root); + mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); g_object_unref(G_OBJECT(service)); + g_object_unref(G_OBJECT(server)); + g_object_unref(G_OBJECT(root)); return 0; } -- cgit v1.2.3 From 33799d8b1d8417218688a7d2599c24bc14e04e4c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 19 May 2010 12:42:48 -0500 Subject: Comments --- src/datetime-service.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/datetime-service.c b/src/datetime-service.c index d2e2b3e..ee29a7a 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -14,6 +14,9 @@ static GMainLoop * mainloop = NULL; static DbusmenuServer * server = NULL; static DbusmenuMenuitem * root = NULL; +/* Does the work to build the default menu, really calls out + to other functions but this is the core to clean up the + main function. */ static void build_menus (DbusmenuMenuitem * root) { @@ -21,6 +24,8 @@ build_menus (DbusmenuMenuitem * root) return; } +/* Repsonds to the service object saying it's time to shutdown. + It stops the mainloop. */ static void service_shutdown (IndicatorService * service, gpointer user_data) { @@ -29,6 +34,7 @@ service_shutdown (IndicatorService * service, gpointer user_data) return; } +/* Function to build everything up. Entry point from asm. */ int main (int argc, char ** argv) { -- cgit v1.2.3 From cfef5b08bd7812d6f97854f157ab0227a9cdfd03 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 7 Jul 2010 16:24:17 -0500 Subject: Make date and time menu items. --- src/datetime-service.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/datetime-service.c b/src/datetime-service.c index ee29a7a..99a24f5 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -14,12 +14,32 @@ static GMainLoop * mainloop = NULL; static DbusmenuServer * server = NULL; static DbusmenuMenuitem * root = NULL; +/* Items */ +static DbusmenuMenuitem * date = NULL; +static DbusmenuMenuitem * calendar = NULL; + /* Does the work to build the default menu, really calls out to other functions but this is the core to clean up the main function. */ static void build_menus (DbusmenuMenuitem * root) { + if (date == NULL) { + date = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (date, DBUSMENU_MENUITEM_PROP_LABEL, _("No date yet...")); + dbusmenu_menuitem_property_set_bool(date, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); + dbusmenu_menuitem_child_append(root, date); + //update_label(self); + } + + if (calendar == NULL) { + calendar = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (calendar, DBUSMENU_MENUITEM_PROP_LABEL, _("Open Calendar")); + /* insensitive until we check for available apps */ + dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); + dbusmenu_menuitem_child_append(root, calendar); + // queue checking for apps + } return; } -- cgit v1.2.3 From 4a8b1c170bde2526aea845e628894e1cceaa92d5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 7 Jul 2010 16:36:46 -0500 Subject: Making the separator and the settings item. --- src/datetime-service.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/datetime-service.c b/src/datetime-service.c index 99a24f5..9154db5 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -5,6 +5,7 @@ #include #include +#include #include #include "dbus-shared.h" @@ -41,6 +42,17 @@ build_menus (DbusmenuMenuitem * root) // queue checking for apps } + DbusmenuMenuitem * separator = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_append(root, separator); + + DbusmenuMenuitem * settings = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set (settings, DBUSMENU_MENUITEM_PROP_LABEL, _("Set Time and Date...")); + /* insensitive until we check for available apps */ + dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); + //g_signal_connect(G_OBJECT(settings), DBUSMENU_MENUITEM_SIGNAL_ACTIVATE, G_CALLBACK(activate_cb), "time-admin"); + dbusmenu_menuitem_child_append(root, settings); + return; } -- cgit v1.2.3 From 515a3e5f9068e5eb06765c47ba90e2857a22c264 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 7 Jul 2010 16:44:55 -0500 Subject: Activating the settings --- src/datetime-service.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/datetime-service.c b/src/datetime-service.c index 9154db5..ad64417 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -15,10 +15,22 @@ static GMainLoop * mainloop = NULL; static DbusmenuServer * server = NULL; static DbusmenuMenuitem * root = NULL; -/* Items */ +/* Global Items */ static DbusmenuMenuitem * date = NULL; static DbusmenuMenuitem * calendar = NULL; +/* Run a particular program based on an activation */ +static void +activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command) +{ + GError * error = NULL; + + if (!g_spawn_command_line_async(command, &error)) { + g_warning("Unable to start %s: %s", (char *)command, error->message); + g_error_free(error); + } +} + /* Does the work to build the default menu, really calls out to other functions but this is the core to clean up the main function. */ @@ -50,7 +62,7 @@ build_menus (DbusmenuMenuitem * root) dbusmenu_menuitem_property_set (settings, DBUSMENU_MENUITEM_PROP_LABEL, _("Set Time and Date...")); /* insensitive until we check for available apps */ dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); - //g_signal_connect(G_OBJECT(settings), DBUSMENU_MENUITEM_SIGNAL_ACTIVATE, G_CALLBACK(activate_cb), "time-admin"); + g_signal_connect(G_OBJECT(settings), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), "time-admin"); dbusmenu_menuitem_child_append(root, settings); return; -- cgit v1.2.3 From f18df8357982711d1f3b1f9d766405592a6f6a16 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 7 Jul 2010 17:01:53 -0500 Subject: Ignoring the generated service file. --- .bzrignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.bzrignore b/.bzrignore index ecb1c28..6504595 100644 --- a/.bzrignore +++ b/.bzrignore @@ -5,3 +5,4 @@ src/libdatetime_la-indicator-datetime.lo src/indicator-datetime-service po/indicator-datetime.pot indicator-datetime-[0-9].[0-9].[0-9].tar.gz +data/indicator-datetime.service -- cgit v1.2.3 From 03e448f0dfaf9c3a268b1b089563b7fd65252b09 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 12 Jul 2010 14:57:25 -0500 Subject: Adding in a check for the calendar application. --- src/datetime-service.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/datetime-service.c b/src/datetime-service.c index ad64417..6cbaf93 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -31,6 +31,25 @@ activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command) } } +/* Looks for the calendar application and enables the item if + we have one */ +static gboolean +check_for_calendar (gpointer user_data) +{ + g_return_val_if_fail (calendar != NULL, FALSE); + + gchar *evo = g_find_program_in_path("evolution"); + if (evo != NULL) { + dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE); + dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); + g_free(evo); + } else { + dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); + } + + return FALSE; +} + /* Does the work to build the default menu, really calls out to other functions but this is the core to clean up the main function. */ @@ -50,8 +69,11 @@ build_menus (DbusmenuMenuitem * root) dbusmenu_menuitem_property_set (calendar, DBUSMENU_MENUITEM_PROP_LABEL, _("Open Calendar")); /* insensitive until we check for available apps */ dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); + g_signal_connect (G_OBJECT(calendar), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK (activate_cb), "evolution -c calendar"); dbusmenu_menuitem_child_append(root, calendar); - // queue checking for apps + + g_idle_add(check_for_calendar, NULL); } DbusmenuMenuitem * separator = dbusmenu_menuitem_new(); -- cgit v1.2.3 From 4edb23e4a529f287cec6bbc18153b2e65df11f32 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 12 Jul 2010 14:59:59 -0500 Subject: Adding some good debugging messages. --- src/datetime-service.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/datetime-service.c b/src/datetime-service.c index 6cbaf93..06b64c1 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -25,6 +25,7 @@ activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command) { GError * error = NULL; + g_debug("Issuing command '%s'", command); if (!g_spawn_command_line_async(command, &error)) { g_warning("Unable to start %s: %s", (char *)command, error->message); g_error_free(error); @@ -40,10 +41,12 @@ check_for_calendar (gpointer user_data) gchar *evo = g_find_program_in_path("evolution"); if (evo != NULL) { + g_debug("Found the calendar application: %s", evo); dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE); dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); g_free(evo); } else { + g_debug("Unable to find calendar app."); dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); } @@ -56,6 +59,7 @@ check_for_calendar (gpointer user_data) static void build_menus (DbusmenuMenuitem * root) { + g_debug("Building Menus."); if (date == NULL) { date = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (date, DBUSMENU_MENUITEM_PROP_LABEL, _("No date yet...")); -- cgit v1.2.3 From 4117028fe68956d4c8b1db460a908a5779410421 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 12 Jul 2010 15:09:39 -0500 Subject: Setting up the update of the label for the date. --- src/datetime-service.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/datetime-service.c b/src/datetime-service.c index 06b64c1..37e5af4 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -19,6 +19,34 @@ static DbusmenuMenuitem * root = NULL; static DbusmenuMenuitem * date = NULL; static DbusmenuMenuitem * calendar = NULL; +/* Updates the label in the date menuitem */ +static gboolean +update_datetime (gpointer user_data) +{ + g_debug("Updating Date/Time"); + + gchar longstr[128]; + time_t t; + struct tm *ltime; + + t = time(NULL); + ltime = localtime(&t); + if (ltime == NULL) { + g_warning("Error getting local time"); + dbusmenu_menuitem_property_set(date, DBUSMENU_MENUITEM_PROP_LABEL, _("Error getting time")); + return FALSE; + } + + /* Note: may require some localization tweaks */ + strftime(longstr, 128, "%A, %e %B %Y", ltime); + + gchar * utf8 = g_locale_to_utf8(longstr, -1, NULL, NULL, NULL); + dbusmenu_menuitem_property_set(date, DBUSMENU_MENUITEM_PROP_LABEL, utf8); + g_free(utf8); + + return FALSE; +} + /* Run a particular program based on an activation */ static void activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command) @@ -65,7 +93,9 @@ build_menus (DbusmenuMenuitem * root) dbusmenu_menuitem_property_set (date, DBUSMENU_MENUITEM_PROP_LABEL, _("No date yet...")); dbusmenu_menuitem_property_set_bool(date, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); dbusmenu_menuitem_child_append(root, date); - //update_label(self); + + g_idle_add(update_datetime, NULL); + /* TODO: Set up updating daily */ } if (calendar == NULL) { -- cgit v1.2.3 From f257b20a08c111c630e72f31d0e1431eb238253e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 12 Jul 2010 15:12:26 -0500 Subject: Removing some now service provided code. --- src/indicator-datetime.c | 91 ------------------------------------------------ 1 file changed, 91 deletions(-) diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index f114476..af2c417 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -40,8 +40,6 @@ struct _IndicatorDatetime { struct _IndicatorDatetimePrivate { GtkLabel * label; - GtkMenuItem * date; - GtkMenuItem * calendar; guint timer; guint idle_measure; @@ -93,8 +91,6 @@ indicator_datetime_init (IndicatorDatetime *self) self->priv = INDICATOR_DATETIME_GET_PRIVATE(self); self->priv->label = NULL; - self->priv->date = NULL; - self->priv->calendar = NULL; self->priv->timer = 0; self->priv->idle_measure = 0; @@ -118,16 +114,6 @@ indicator_datetime_dispose (GObject *object) self->priv->label = NULL; } - if (self->priv->date != NULL) { - g_object_unref(self->priv->date); - self->priv->date = NULL; - } - - if (self->priv->calendar != NULL) { - g_object_unref(self->priv->calendar); - self->priv->calendar = NULL; - } - if (self->priv->timer != 0) { g_source_remove(self->priv->timer); self->priv->timer = 0; @@ -212,15 +198,6 @@ update_label (IndicatorDatetime * io) self->priv->idle_measure = g_idle_add(idle_measure, io); } - if (self->priv->date == NULL) return; - - /* Note: may require some localization tweaks */ - strftime(longstr, 128, "%A, %e %B %Y", ltime); - - utf8 = g_locale_to_utf8(longstr, -1, NULL, NULL, NULL); - gtk_menu_item_set_label(self->priv->date, utf8); - g_free(utf8); - return; } @@ -241,17 +218,6 @@ minute_timer_func (gpointer user_data) return FALSE; } -static void -activate_cb (GtkWidget *widget, const gchar *command) -{ - GError * error = NULL; - - if (!g_spawn_command_line_async(command, &error)) { - g_warning("Unable to start %s: %s", (char *)command, error->message); - g_error_free(error); - } -} - /* Does a quick meausre of how big the string is in pixels with a Pango layout */ static gint @@ -335,24 +301,6 @@ get_label (IndicatorObject * io) return self->priv->label; } -static void -check_for_calendar_application (IndicatorDatetime * self) -{ - GtkMenuItem * item = self->priv->calendar; - g_return_if_fail (item != NULL); - - gchar *evo = g_find_program_in_path("evolution"); - if (evo != NULL) { - g_signal_connect (GTK_MENU_ITEM (item), "activate", - G_CALLBACK (activate_cb), "evolution -c calendar"); - gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE); - gtk_widget_show(GTK_WIDGET(item)); - g_free(evo); - } else { - gtk_widget_hide(GTK_WIDGET(item)); - } -} - static GtkMenu * get_menu (IndicatorObject * io) { @@ -363,43 +311,4 @@ get_menu (IndicatorObject * io) } return GTK_MENU(self->priv->menu); - - GtkWidget * menu = NULL; - GtkWidget * item = NULL; - - menu = gtk_menu_new(); - - if (self->priv->date == NULL) { - item = gtk_menu_item_new_with_label("No date yet..."); - gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - self->priv->date = GTK_MENU_ITEM (item); - update_label(self); - } - - if (self->priv->calendar == NULL) { - item = gtk_menu_item_new_with_label(_("Open Calendar")); - /* insensitive until we check for available apps */ - gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - self->priv->calendar = GTK_MENU_ITEM (item); - } - - gtk_menu_shell_append (GTK_MENU_SHELL (menu), - gtk_separator_menu_item_new ()); - - GtkWidget *settings_mi = gtk_menu_item_new_with_label (_("Set Time and Date...")); - g_signal_connect (GTK_MENU_ITEM (settings_mi), "activate", - G_CALLBACK (activate_cb), "time-admin"); - gtk_menu_shell_append (GTK_MENU_SHELL(menu), settings_mi); - gtk_widget_show(settings_mi); - - /* show_all to reveal the separator */ - gtk_widget_show_all(menu); - - /* Note: maybe should move that to an idle loop if that helps with - boot performance */ - check_for_calendar_application (self); - - return GTK_MENU(menu); } -- cgit v1.2.3 From 16a8df4b6d59fe642984ccae311f424017c8c0bc Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 12 Jul 2010 15:28:16 -0500 Subject: Setting up checking for time-admin as well. --- src/datetime-service.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/datetime-service.c b/src/datetime-service.c index 37e5af4..a701453 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -18,6 +18,7 @@ static DbusmenuMenuitem * root = NULL; /* Global Items */ static DbusmenuMenuitem * date = NULL; static DbusmenuMenuitem * calendar = NULL; +static DbusmenuMenuitem * settings = NULL; /* Updates the label in the date menuitem */ static gboolean @@ -81,6 +82,26 @@ check_for_calendar (gpointer user_data) return FALSE; } +/* Looks for the time and date admin application and enables the + item we have one */ +static gboolean +check_for_timeadmin (gpointer user_data) +{ + g_return_val_if_fail (settings != NULL, FALSE); + + gchar * timeadmin = g_find_program_in_path("time-admin"); + if (timeadmin != NULL) { + g_debug("Found the time-admin application: %s", timeadmin); + dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE); + g_free(timeadmin); + } else { + g_debug("Unable to find time-admin app."); + dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); + } + + return FALSE; +} + /* Does the work to build the default menu, really calls out to other functions but this is the core to clean up the main function. */ @@ -114,12 +135,13 @@ build_menus (DbusmenuMenuitem * root) dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); dbusmenu_menuitem_child_append(root, separator); - DbusmenuMenuitem * settings = dbusmenu_menuitem_new(); + settings = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (settings, DBUSMENU_MENUITEM_PROP_LABEL, _("Set Time and Date...")); /* insensitive until we check for available apps */ dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE); g_signal_connect(G_OBJECT(settings), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), "time-admin"); dbusmenu_menuitem_child_append(root, settings); + g_idle_add(check_for_timeadmin, NULL); return; } -- cgit v1.2.3 From 24057387255fcfa67251f65474d11f32f6058e24 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 12 Jul 2010 15:28:27 -0500 Subject: Adding a check for dbusmenu gtk as well. --- configure.ac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index a5696df..a741152 100644 --- a/configure.ac +++ b/configure.ac @@ -34,9 +34,11 @@ PKG_PROG_PKG_CONFIG INDICATOR_REQUIRED_VERSION=0.3.0 DBUSMENUGLIB_REQUIRED_VERSION=0.1.1 +DBUSMENUGTK_REQUIRED_VERSION=0.1.1 PKG_CHECK_MODULES(INDICATOR, indicator >= $INDICATOR_REQUIRED_VERSION - dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION) + dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION + dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION) AC_SUBST(INDICATOR_CFLAGS) AC_SUBST(INDICATOR_LIBS) -- cgit v1.2.3 From df30f437fd80697d97544fafa43999a05debefb0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 12 Jul 2010 15:34:19 -0500 Subject: Legal stuffs --- src/datetime-service.c | 20 ++++++++++++++++++++ src/dbus-shared.h | 21 +++++++++++++++++++++ src/indicator-datetime.c | 21 +++++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/src/datetime-service.c b/src/datetime-service.c index a701453..56d024e 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -1,3 +1,23 @@ +/* +An indicator to show date and time information. + +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 diff --git a/src/dbus-shared.h b/src/dbus-shared.h index 88ad4f5..aa6d933 100644 --- a/src/dbus-shared.h +++ b/src/dbus-shared.h @@ -1,3 +1,24 @@ +/* +An indicator to show date and time information. + +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 . +*/ + #define SERVICE_NAME "org.ayatana.indicator.datetime" #define SERVICE_IFACE "org.ayatana.indicator.datetime.service" diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index af2c417..cb33c75 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -1,3 +1,24 @@ +/* +An indicator to show date and time information. + +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 . +*/ + #ifdef HAVE_CONFIG_H #include "config.h" #endif -- cgit v1.2.3