← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~karl-qdh/indicator-datetime/datereset into lp:indicator-datetime

 

Karl Lattimer has proposed merging lp:~karl-qdh/indicator-datetime/datereset into lp:indicator-datetime.

Requested reviews:
  Ted Gould (ted)
Related bugs:
  Bug #649800 in Indicator Date and Time: "datetime indicator won't show today's date if you've ever clicked on any others"
  https://bugs.launchpad.net/indicator-datetime/+bug/649800

For more details, see:
https://code.launchpad.net/~karl-qdh/indicator-datetime/datereset/+merge/57173

Different method of resetting the date works.
-- 
https://code.launchpad.net/~karl-qdh/indicator-datetime/datereset/+merge/57173
Your team ayatana-commits is subscribed to branch lp:indicator-datetime.
=== modified file 'src/datetime-service.c'
--- src/datetime-service.c	2011-04-07 15:48:50 +0000
+++ src/datetime-service.c	2011-04-11 14:18:32 +0000
@@ -440,28 +440,6 @@
 	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
@@ -1439,9 +1417,6 @@
 	
 	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();
 

=== modified file 'src/dbus-shared.h'
--- src/dbus-shared.h	2011-03-30 15:29:58 +0000
+++ src/dbus-shared.h	2011-04-11 14:18:32 +0000
@@ -29,11 +29,7 @@
 
 #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"

=== modified file 'src/indicator-datetime.c'
--- src/indicator-datetime.c	2011-03-31 10:35:35 +0000
+++ src/indicator-datetime.c	2011-04-11 14:18:32 +0000
@@ -269,6 +269,35 @@
 }
 
 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 +377,8 @@
 
 	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);
@@ -1233,13 +1264,6 @@
 		} 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 +1442,6 @@
 		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;
 }
 


Follow ups