From 50dbb636dc2078b21a7d981b1d4d3c3a25384648 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 15 Oct 2013 14:14:41 -0500 Subject: use the clock app's icon for the 'Clock' menuitem, and launch the clock app when it's clicked. --- configure.ac | 6 ++++-- debian/control | 1 + src/service.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 8b95695..c41dc38 100644 --- a/configure.ac +++ b/configure.ac @@ -52,6 +52,7 @@ ICAL_REQUIRED_VERSION=0.48 ECAL_REQUIRED_VERSION=3.5 EDS_REQUIRED_VERSION=3.5 URL_DISPATCHER_1_REQUIRED_VERSION=1 +JSON_GLIB_REQUIRED_VERSION=0.16.2 GTK3_REQUIRED_VERSION=3.1.4 @@ -60,8 +61,9 @@ PKG_CHECK_MODULES(SERVICE, [glib-2.0 >= $GLIB_REQUIRED_VERSION geoclue >= $GEOCLUE_REQUIRED_VERSION libical >= $ICAL_REQUIRED_VERSION libecal-1.2 >= $ECAL_REQUIRED_VERSION - libedataserver-1.2 >= EDS_REQUIRED_VERSION - url-dispatcher-1 >= URL_DISPATCHER_1_REQUIRED_VERSION]) + libedataserver-1.2 >= $EDS_REQUIRED_VERSION + url-dispatcher-1 >= $URL_DISPATCHER_1_REQUIRED_VERSION + json-glib-1.0 >= $JSON_GLIB_REQUIRED_VERSION]) ########################### # Control Center panel diff --git a/debian/control b/debian/control index 67938bf..993d41a 100644 --- a/debian/control +++ b/debian/control @@ -40,6 +40,7 @@ Depends: ${shlibs:Depends}, systemd-shim, Recommends: indicator-applet | indicator-renderer, evolution-data-server, + click, gnome-control-center-datetime | ubuntu-system-settings, Conflicts: indicator-datetime (<< 13.10.0) Replaces: indicator-datetime (<< 13.10.0) diff --git a/src/service.c b/src/service.c index 12857bb..2516b2d 100644 --- a/src/service.c +++ b/src/service.c @@ -24,6 +24,7 @@ #include #include +#include #include #include "dbus-shared.h" @@ -783,14 +784,57 @@ add_appointments (IndicatorDatetimeService * self, GMenu * menu, gboolean terse) g_date_time_unref (now); } +static const gchar * +get_clock_app_icon_filename (void) +{ + static gboolean initialized = FALSE; + static gchar * icon_filename = NULL; + + /* try to extract the clock app's filename from click. (/$pkgdir/$icon) */ + if (!initialized) + { + gchar * pkgdir = NULL; + g_spawn_command_line_sync ("click pkgdir com.ubuntu.clock", &pkgdir, NULL, NULL, NULL); + if (pkgdir != NULL) + { + gchar * manifest = NULL; + g_strstrip (pkgdir); + g_spawn_command_line_sync ("click info com.ubuntu.clock", &manifest, NULL, NULL, NULL); + if (manifest != NULL) + { + JsonParser * parser = json_parser_new (); + if (json_parser_load_from_data (parser, manifest, -1, NULL)) + { + JsonNode * root = json_parser_get_root (parser); /* transfer-none */ + if ((root != NULL) && (JSON_NODE_TYPE(root) == JSON_NODE_OBJECT)) + { + JsonObject * o = json_node_get_object (root); /* transfer-none */ + const gchar * icon_name = json_object_get_string_member (o, "icon"); + icon_filename = g_build_filename (pkgdir, icon_name, NULL); + } + } + g_object_unref (parser); + g_free (manifest); + } + g_free (pkgdir); + } + + initialized = TRUE; + } + + return icon_filename; +} + static GMenuModel * create_phone_appointments_section (IndicatorDatetimeService * self) { GMenu * menu = g_menu_new (); GMenuItem * menu_item; + const gchar * icon_filename; - menu_item = g_menu_item_new (_("Clock"), NULL); - g_menu_item_set_attribute (menu_item, G_MENU_ATTRIBUTE_ICON, "s", "clock"); + menu_item = g_menu_item_new (_("Clock"), "indicator.activate-phone-clock-app"); + if ((icon_filename = get_clock_app_icon_filename ())) + g_menu_item_set_attribute (menu_item, G_MENU_ATTRIBUTE_ICON, "s", icon_filename); g_menu_append_item (menu, menu_item); g_object_unref (menu_item); @@ -1311,6 +1355,15 @@ on_phone_settings_activated (GSimpleAction * a G_GNUC_UNUSED, url_dispatch_send ("settings:///system/time-date", NULL, NULL); } +static void +on_phone_clock_activated (GSimpleAction * a G_GNUC_UNUSED, + GVariant * param G_GNUC_UNUSED, + gpointer gself G_GNUC_UNUSED) +{ + const char * url = "appid://com.ubuntu.clock/clock/current-user-version"; + url_dispatch_send (url, NULL, NULL); +} + static void on_activate_planner (GSimpleAction * a G_GNUC_UNUSED, GVariant * param, @@ -1364,6 +1417,7 @@ init_gactions (IndicatorDatetimeService * self) GActionEntry entries[] = { { "activate-desktop-settings", on_desktop_settings_activated }, { "activate-phone-settings", on_phone_settings_activated }, + { "activate-phone-clock-app", on_phone_clock_activated }, { "activate-planner", on_activate_planner, "x", NULL }, { "set-location", on_set_location, "s" } }; -- cgit v1.2.3