aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog40
-rwxr-xr-xconfigure20
-rw-r--r--configure.ac4
-rw-r--r--src/datetime-prefs-locations.c70
-rw-r--r--src/datetime-service.c68
-rw-r--r--src/dbus-shared.h4
-rw-r--r--src/indicator-datetime.c83
7 files changed, 195 insertions, 94 deletions
diff --git a/ChangeLog b/ChangeLog
index 032488c..e182b21 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,45 @@
# Generated by Makefile. Do not edit.
+2011-04-14 Ted Gould <ted@gould.cx>
+
+ 0.2.3
+
+2011-04-14 Ted Gould <ted@gould.cx>
+
+ Check for resume in the service and update the label as well
+
+2011-04-13 Michael Terry <mike@mterry.name>
+
+ watch for resume in the service, not the indicator; update today's menu label after resume
+
+2011-04-12 Ted Gould <ted@gould.cx>
+
+ If an item is removed, make sure we choose one.
+
+2011-04-11 karl-qdh <karl@qdh.org.uk>
+
+ Make selection change on remove item
+
+2011-04-12 Ted Gould <ted@gould.cx>
+
+ Work around libindicator not sending a close event by looking for it directly in the indicator
+
+2011-04-11 karl-qdh <karl@qdh.org.uk>
+
+ Fixed niggles
+
+2011-04-11 karl-qdh <karl@qdh.org.uk>
+
+ syntax fail
+
+2011-04-11 karl-qdh <karl@qdh.org.uk>
+
+ Improve debug messages and only react when hiding
+
+2011-04-11 karl-qdh <karl@qdh.org.uk>
+
+ Calendar reset, should work for mike
+
2011-04-07 Ted Gould <ted@gould.cx>
0.2.2
diff --git a/configure b/configure
index dce802a..da085fa 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.67 for indicator-datetime 0.2.2.
+# Generated by GNU Autoconf 2.67 for indicator-datetime 0.2.3.
#
# Report bugs to <ted@canonical.com>.
#
@@ -703,8 +703,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='indicator-datetime'
PACKAGE_TARNAME='indicator-datetime'
-PACKAGE_VERSION='0.2.2'
-PACKAGE_STRING='indicator-datetime 0.2.2'
+PACKAGE_VERSION='0.2.3'
+PACKAGE_STRING='indicator-datetime 0.2.3'
PACKAGE_BUGREPORT='ted@canonical.com'
PACKAGE_URL=''
@@ -1502,7 +1502,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 indicator-datetime 0.2.2 to adapt to many kinds of systems.
+\`configure' configures indicator-datetime 0.2.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1573,7 +1573,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of indicator-datetime 0.2.2:";;
+ short | recursive ) echo "Configuration of indicator-datetime 0.2.3:";;
esac
cat <<\_ACEOF
@@ -1701,7 +1701,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-indicator-datetime configure 0.2.2
+indicator-datetime configure 0.2.3
generated by GNU Autoconf 2.67
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2072,7 +2072,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 indicator-datetime $as_me 0.2.2, which was
+It was created by indicator-datetime $as_me 0.2.3, which was
generated by GNU Autoconf 2.67. Invocation command line was
$ $0 $@
@@ -2893,7 +2893,7 @@ fi
# Define the identity of the package.
PACKAGE=indicator-datetime
- VERSION=0.2.2
+ VERSION=0.2.3
cat >>confdefs.h <<_ACEOF
@@ -14964,7 +14964,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 indicator-datetime $as_me 0.2.2, which was
+This file was extended by indicator-datetime $as_me 0.2.3, which was
generated by GNU Autoconf 2.67. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15030,7 +15030,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="\\
-indicator-datetime config.status 0.2.2
+indicator-datetime config.status 0.2.3
configured by $0, generated by GNU Autoconf 2.67,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 6c62342..1504c6a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,11 +1,11 @@
-AC_INIT(indicator-datetime, 0.2.2, ted@canonical.com)
+AC_INIT(indicator-datetime, 0.2.3, ted@canonical.com)
AC_COPYRIGHT([Copyright 2009,2010 Canonical])
AC_PREREQ(2.53)
AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(indicator-datetime, 0.2.2)
+AM_INIT_AUTOMAKE(indicator-datetime, 0.2.3)
AM_MAINTAINER_MODE
diff --git a/src/datetime-prefs-locations.c b/src/datetime-prefs-locations.c
index 9c23a40..af0e10d 100644
--- a/src/datetime-prefs-locations.c
+++ b/src/datetime-prefs-locations.c
@@ -77,13 +77,81 @@ handle_remove (GtkWidget * button, GtkTreeView * tree)
gtk_tree_path_free (iter->data);
}
g_list_free (paths);
-
+
+ // Find the next item to select
+ GtkTreeIter *last_selected = g_list_nth_data(tree_iters, 0);
+ GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL (store), last_selected);
+ GtkTreeIter titer;
+ if (!gtk_tree_model_get_iter(GTK_TREE_MODEL (store), &titer, path)) {
+ g_debug("Failed to get last selected iter from path");
+ last_selected = NULL;
+ } else {
+ if (!gtk_tree_model_iter_next(GTK_TREE_MODEL (store), &titer)) {
+ if (gtk_tree_path_prev(path)) {
+ if (!gtk_tree_model_get_iter(GTK_TREE_MODEL (store), &titer, path)) {
+ g_debug("Failed to get iter from path");
+ last_selected = NULL;
+ } else {
+ last_selected = &titer;
+ }
+ } else {
+ g_debug("handle_remove: Failed to find another location to select (assume single selected)");
+ last_selected = NULL;
+ }
+ } else {
+ g_debug("Got next item in model");
+ last_selected = &titer;
+ }
+ }
+
+ if (last_selected) {
+ gboolean clear = TRUE;
+ path = gtk_tree_model_get_path(GTK_TREE_MODEL (store), last_selected);
+
+ // Step over the path to find an item which isn't in the delete list
+ if (g_list_length(tree_iters) > 1) {
+ for (iter = tree_iters; iter; iter = iter->next) {
+ GtkTreePath *ipath = gtk_tree_model_get_path(GTK_TREE_MODEL (store), (GtkTreeIter *)iter->data);
+ if (gtk_tree_path_compare(path, ipath) == 0) {
+ clear = FALSE;
+ break;
+ }
+ }
+ while (clear == FALSE) {
+ if (gtk_tree_path_prev(path)) {
+ clear = TRUE;
+ for (iter = tree_iters; iter; iter = iter->next) {
+ GtkTreePath *ipath = gtk_tree_model_get_path(GTK_TREE_MODEL (store), (GtkTreeIter *)iter->data);
+ if (gtk_tree_path_compare(path, ipath) == 0) {
+ clear = FALSE;
+ break;
+ }
+ }
+ if (clear) {
+ if (!gtk_tree_model_get_iter(GTK_TREE_MODEL (store), &titer, path)) {
+ g_debug("Failed to get iter from path");
+ last_selected = NULL;
+ } else {
+ last_selected = &titer;
+ }
+ }
+ } else {
+ last_selected = NULL;
+ break;
+ }
+ }
+ }
+ }
+
/* Now delete each iterator */
for (iter = tree_iters; iter; iter = iter->next) {
gtk_list_store_remove (store, (GtkTreeIter *)iter->data);
g_free (iter->data);
}
g_list_free (tree_iters);
+
+ if (last_selected)
+ gtk_tree_selection_select_iter(selection, last_selected);
}
static void
diff --git a/src/datetime-service.c b/src/datetime-service.c
index df37b5e..08ff9ad 100644
--- a/src/datetime-service.c
+++ b/src/datetime-service.c
@@ -440,28 +440,6 @@ day_selected_double_click_cb (DbusmenuMenuitem * menuitem, gchar *name, GVariant
return TRUE;
}
-static gboolean
-close_menu_cb (DbusmenuMenuitem * menuitem, gchar *name, GVariant *variant)
-{
- if (calendar == NULL) return FALSE;
- g_debug("Resetting date on menu close");
- start_time_appointments = 0;
- // TODO create a variant which will be an array of 3 ints {y,m,d}
- GVariant *date_variant;
- time_t curtime;
- struct tm *t1;
- time(&curtime);
- t1 = localtime(&curtime);
- GVariant *date[3];
- date[0] = g_variant_new_uint32(t1->tm_year + 1900);
- date[1] = g_variant_new_uint32(t1->tm_mon);
- date[2] = g_variant_new_uint32(t1->tm_mday);
- date_variant = g_variant_new_array(NULL, date, 3);
-
- dbusmenu_menuitem_property_set_variant (calendar, CALENDAR_MENUITEM_PROP_SET_DATE, date_variant);
- return TRUE;
-}
-
static guint ecaltimer = 0;
static void
@@ -1221,6 +1199,40 @@ setup_timer (void)
return;
}
+static void
+session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name,
+ GVariant * parameters, gpointer user_data)
+{
+ // Just returned from suspend
+ if (g_strcmp0(signal_name, "SystemIdleHintChanged") == 0) {
+ gboolean idle = FALSE;
+ g_variant_get(parameters, "(b)", &idle);
+ if (!idle) {
+ datetime_interface_update(DATETIME_INTERFACE(user_data));
+ update_datetime(NULL);
+ setup_timer();
+ }
+ }
+ return;
+}
+
+/* for hooking into console kit signal on wake from suspend */
+static void
+system_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data)
+{
+ GError * error = NULL;
+
+ GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error);
+
+ if (error != NULL) {
+ g_warning("Could not grab DBus proxy for ConsoleKit: %s", error->message);
+ g_error_free(error);
+ return;
+ }
+
+ g_signal_connect(proxy, "g-signal", G_CALLBACK(session_active_change_cb), user_data);
+}
+
/* Callback from getting the address */
static void
geo_address_cb (GeoclueAddress * address, int timestamp, GHashTable * addy_data, GeoclueAccuracy * accuracy, GError * error, gpointer user_data)
@@ -1439,9 +1451,6 @@ main (int argc, char ** argv)
build_menus(root);
- // Connect to the close signal to reset the calendar date
- g_signal_connect(root, "event::closed", G_CALLBACK(close_menu_cb), NULL);
-
/* Cache the timezone */
update_current_timezone();
@@ -1458,6 +1467,15 @@ main (int argc, char ** argv)
/* Setup the timer */
setup_timer();
+ /* And watch for system resumes */
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.freedesktop.ConsoleKit",
+ "/org/freedesktop/ConsoleKit/Manager",
+ "org.freedesktop.ConsoleKit.Manager",
+ NULL, system_proxy_cb, dbus);
+
mainloop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(mainloop);
diff --git a/src/dbus-shared.h b/src/dbus-shared.h
index 51632f9..9e3a781 100644
--- a/src/dbus-shared.h
+++ b/src/dbus-shared.h
@@ -29,11 +29,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#define DBUSMENU_CALENDAR_MENUITEM_TYPE "x-canonical-calendar-item"
-// The following properties are not *really* properties, but are just
-// a way of accessing the calendar from the service
#define CALENDAR_MENUITEM_PROP_MARKS "calendar-marks"
-#define CALENDAR_MENUITEM_PROP_SET_DATE "calendar-set-date"
-
#define APPOINTMENT_MENUITEM_TYPE "appointment-item"
#define APPOINTMENT_MENUITEM_PROP_LABEL "appointment-label"
diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c
index a999f42..1c05ff0 100644
--- a/src/indicator-datetime.c
+++ b/src/indicator-datetime.c
@@ -171,9 +171,7 @@ static void update_label (IndicatorDatetime * io, GDateTime **
static void guess_label_size (IndicatorDatetime * self);
static void setup_timer (IndicatorDatetime * self, GDateTime * datetime);
static void update_time (IndicatorDatetime * self);
-static void session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data);
static void receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name, GVariant * parameters, gpointer user_data);
-static void system_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data);
static void service_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data);
static gint generate_strftime_bitmask (const char *time_str);
static void timezone_update_labels (indicator_item_t * mi_data);
@@ -269,6 +267,35 @@ indicator_datetime_class_init (IndicatorDatetimeClass *klass)
}
static void
+menu_visible_notfy_cb(GtkWidget * menu, G_GNUC_UNUSED GParamSpec *pspec, gpointer user_data)
+{
+ IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
+ g_debug("notify visible signal recieved");
+
+ // we should only react if we're currently visible
+ gboolean visible;
+ g_object_get(G_OBJECT(menu), "visible", &visible, NULL);
+ if (visible) return;
+ g_debug("notify visible menu hidden, resetting date");
+
+ time_t curtime;
+
+ time(&curtime);
+ struct tm *today = localtime(&curtime);
+ int y = today->tm_year;
+ int m = today->tm_mon;
+ int d = today->tm_mday;
+
+ // Set the calendar to todays date
+ ido_calendar_menu_item_set_date (self->priv->ido_calendar, y+1900, m, d);
+
+ // Make sure the day-selected signal is sent so the menu updates - may duplicate
+ /*GVariant *variant = g_variant_new_uint32((guint)curtime);
+ guint timestamp = (guint)time(NULL);
+ dbusmenu_menuitem_handle_event(DBUSMENU_MENUITEM(self->priv->ido_calendar), "day-selected", variant, timestamp);*/
+}
+
+static void
indicator_datetime_init (IndicatorDatetime *self)
{
self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
@@ -348,6 +375,8 @@ indicator_datetime_init (IndicatorDatetime *self)
self->priv->menu = dbusmenu_gtkmenu_new(SERVICE_NAME, MENU_OBJ);
+ g_signal_connect(self->priv->menu, "notify::visible", G_CALLBACK(menu_visible_notfy_cb), self);
+
DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(self->priv->menu);
dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), DBUSMENU_CALENDAR_MENUITEM_TYPE, new_calendar_item, self, NULL);
dbusmenu_client_add_type_handler_full(DBUSMENU_CLIENT(client), APPOINTMENT_MENUITEM_TYPE, new_appointment_item, self, NULL);
@@ -365,34 +394,8 @@ indicator_datetime_init (IndicatorDatetime *self)
service_proxy_cb,
self);
- g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_NONE,
- NULL,
- "org.freedesktop.ConsoleKit",
- "/org/freedesktop/ConsoleKit/Manager",
- "org.freedesktop.ConsoleKit.Manager",
- NULL, system_proxy_cb, self);
return;
}
-/* for hooking into console kit signal on wake from suspend */
-static void
-system_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);
-
- if (error != NULL) {
- g_warning("Could not grab DBus proxy for %s: %s", SERVICE_NAME, error->message);
- g_error_free(error);
- return;
- }
- g_signal_connect(proxy, "g-signal", G_CALLBACK(session_active_change_cb), self);
-
-}
/* Callback from trying to create the proxy for the serivce, this
could include starting the service. Sometime it'll fail and
@@ -824,18 +827,6 @@ update_time (IndicatorDatetime * self)
return;
}
-static void
-session_active_change_cb (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name,
- GVariant * parameters, gpointer user_data)
-{
- // Just returned from suspend
- IndicatorDatetime * self = INDICATOR_DATETIME(user_data);
- if (g_strcmp0(signal_name, "SystemIdleHintChanged") == 0 && g_variant_get_boolean(parameters) == FALSE) {
- update_time(self);
- }
- return;
-}
-
/* Receives all signals from the service, routed to the appropriate functions */
static void
receive_signal (GDBusProxy * proxy, gchar * sender_name, gchar * signal_name,
@@ -1233,13 +1224,6 @@ calendar_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, I
} else {
g_debug("\tMarks: <cleared>");
}
- } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_SET_DATE)) {
- if (value != NULL) {
- gsize size = 3;
- const gint * array = g_variant_get_fixed_array(value, &size, sizeof(gint));
- g_debug("Setting date y-m-d: %d-%d-%d", array[0], array[1], array[2]);
- ido_calendar_menu_item_set_date (IDO_CALENDAR_MENU_ITEM (mi_data), array[0], array[1], array[2]);
- }
}
return;
}
@@ -1418,11 +1402,6 @@ new_calendar_item (DbusmenuMenuitem * newitem,
calendar_prop_change_cb(newitem, CALENDAR_MENUITEM_PROP_MARKS, propval, ido);
}
- propval = dbusmenu_menuitem_property_get_variant(newitem, CALENDAR_MENUITEM_PROP_SET_DATE);
- if (propval != NULL) {
- calendar_prop_change_cb(newitem, CALENDAR_MENUITEM_PROP_SET_DATE, propval, ido);
- }
-
return TRUE;
}