almanah r118 - in trunk: . src src/link-factories src/links



Author: pwithnall
Date: Sat Dec  6 21:56:45 2008
New Revision: 118
URL: http://svn.gnome.org/viewvc/almanah?rev=118&view=rev

Log:
2008-12-06  Philip Withnall  <philip tecnocode co uk>

	* src/link-factories/calendar.c (get_links):
	* src/links/calendar-appointment.c
	(almanah_calendar_appointment_link_finalize),
	(almanah_calendar_appointment_link_new),
	(almanah_calendar_appointment_link_format_value),
	(almanah_calendar_appointment_link_view):
	* src/links/calendar-appointment.h:
	* src/links/calendar-task.c
	(almanah_calendar_task_link_format_value),
	(almanah_calendar_task_link_view): Allow appointment and task links to
	be viewed by spawning Evolution.
	* src/main-window.c (clear_factory_links), (mw_links_updated_cb):
	Fix a memory leak caused by not unreffing some links.



Modified:
   trunk/ChangeLog
   trunk/src/link-factories/calendar.c
   trunk/src/links/calendar-appointment.c
   trunk/src/links/calendar-appointment.h
   trunk/src/links/calendar-task.c
   trunk/src/main-window.c

Modified: trunk/src/link-factories/calendar.c
==============================================================================
--- trunk/src/link-factories/calendar.c	(original)
+++ trunk/src/link-factories/calendar.c	Sat Dec  6 21:56:45 2008
@@ -135,7 +135,7 @@
 			}
 		} else {
 			/* Appointment */
-			link = ALMANAH_LINK (almanah_calendar_appointment_link_new (event->event.appointment.uid, event->event.appointment.summary));
+			link = ALMANAH_LINK (almanah_calendar_appointment_link_new (event->event.appointment.summary, event->event.appointment.start_time));
 		}
 
 		if (link != NULL)

Modified: trunk/src/links/calendar-appointment.c
==============================================================================
--- trunk/src/links/calendar-appointment.c	(original)
+++ trunk/src/links/calendar-appointment.c	Sat Dec  6 21:56:45 2008
@@ -22,6 +22,7 @@
 
 #include "link.h"
 #include "calendar-appointment.h"
+#include "main.h"
 
 static void almanah_calendar_appointment_link_init (AlmanahCalendarAppointmentLink *self);
 static void almanah_calendar_appointment_link_finalize (GObject *object);
@@ -29,8 +30,8 @@
 static gboolean almanah_calendar_appointment_link_view (AlmanahLink *link);
 
 struct _AlmanahCalendarAppointmentLinkPrivate {
-	gchar *uid;
 	gchar *summary;
+	GTime start_time;
 };
 
 G_DEFINE_TYPE (AlmanahCalendarAppointmentLink, almanah_calendar_appointment_link, ALMANAH_TYPE_LINK)
@@ -65,7 +66,6 @@
 {
 	AlmanahCalendarAppointmentLinkPrivate *priv = ALMANAH_CALENDAR_APPOINTMENT_LINK_GET_PRIVATE (object);
 
-	g_free (priv->uid);
 	g_free (priv->summary);
 
 	/* Chain up to the parent class */
@@ -73,24 +73,60 @@
 }
 
 AlmanahCalendarAppointmentLink *
-almanah_calendar_appointment_link_new (const gchar *uid, const gchar *summary)
+almanah_calendar_appointment_link_new (const gchar *summary, GTime start_time)
 {
 	AlmanahCalendarAppointmentLink *link = g_object_new (ALMANAH_TYPE_CALENDAR_APPOINTMENT_LINK, NULL);
-	link->priv->uid = g_strdup (uid);
 	link->priv->summary = g_strdup (summary);
+	link->priv->start_time = start_time;
+
 	return link;
 }
 
 static const gchar *
 almanah_calendar_appointment_link_format_value (AlmanahLink *link)
 {
-	/* TODO */
 	return ALMANAH_CALENDAR_APPOINTMENT_LINK (link)->priv->summary;
 }
 
 static gboolean
 almanah_calendar_appointment_link_view (AlmanahLink *link)
 {
-	/* TODO */
+	AlmanahCalendarAppointmentLinkPrivate *priv = ALMANAH_CALENDAR_APPOINTMENT_LINK (link)->priv;
+	struct tm utc_date_tm;
+	gchar *command_line;
+	gboolean retval;
+	GError *error = NULL;
+
+	gmtime_r ((const time_t*) &(priv->start_time), &utc_date_tm);
+
+	/* FIXME: once bug 409200 is fixed, we'll have to make this hh:mm:ss
+	 * instead of hhmmss */
+	command_line = g_strdup_printf ("evolution calendar:///?startdate=%.4d%.2d%.2dT%.2d%.2d%.2dZ",
+					utc_date_tm.tm_year + 1900,
+					utc_date_tm.tm_mon + 1,
+					utc_date_tm.tm_mday,
+					utc_date_tm.tm_hour,
+					utc_date_tm.tm_min,
+					0);
+
+	if (almanah->debug == TRUE)
+		g_debug ("Executing \"%s\".", command_line);
+
+	retval = gdk_spawn_command_line_on_screen (gtk_widget_get_screen (almanah->main_window), command_line, &error);
+	g_free (command_line);
+
+	if (retval == FALSE) {
+		GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW (almanah->main_window),
+							    GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+							    _("Error launching Evolution"));
+		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message);
+		gtk_dialog_run (GTK_DIALOG (dialog));
+		gtk_widget_destroy (dialog);
+
+		g_error_free (error);
+
+		return FALSE;
+	}
+
 	return TRUE;
 }

Modified: trunk/src/links/calendar-appointment.h
==============================================================================
--- trunk/src/links/calendar-appointment.h	(original)
+++ trunk/src/links/calendar-appointment.h	Sat Dec  6 21:56:45 2008
@@ -46,7 +46,7 @@
 } AlmanahCalendarAppointmentLinkClass;
 
 GType almanah_calendar_appointment_link_get_type (void);
-AlmanahCalendarAppointmentLink *almanah_calendar_appointment_link_new (const gchar *uid, const gchar *summary);
+AlmanahCalendarAppointmentLink *almanah_calendar_appointment_link_new (const gchar *summary, GTime start_time);
 
 G_END_DECLS
 

Modified: trunk/src/links/calendar-task.c
==============================================================================
--- trunk/src/links/calendar-task.c	(original)
+++ trunk/src/links/calendar-task.c	Sat Dec  6 21:56:45 2008
@@ -22,6 +22,7 @@
 
 #include "link.h"
 #include "calendar-task.h"
+#include "main.h"
 
 static void almanah_calendar_task_link_init (AlmanahCalendarTaskLink *self);
 static void almanah_calendar_task_link_finalize (GObject *object);
@@ -84,13 +85,37 @@
 static const gchar *
 almanah_calendar_task_link_format_value (AlmanahLink *link)
 {
-	/* TODO */
 	return ALMANAH_CALENDAR_TASK_LINK (link)->priv->summary;
 }
 
 static gboolean
 almanah_calendar_task_link_view (AlmanahLink *link)
 {
-	/* TODO */
+	AlmanahCalendarTaskLinkPrivate *priv = ALMANAH_CALENDAR_TASK_LINK (link)->priv;
+	gchar *command_line;
+	gboolean retval;
+	GError *error = NULL;
+
+	command_line = g_strdup_printf ("evolution task:%s", priv->uid);
+
+	if (almanah->debug == TRUE)
+		g_debug ("Executing \"%s\".", command_line);
+
+	retval = gdk_spawn_command_line_on_screen (gtk_widget_get_screen (almanah->main_window), command_line, &error);
+	g_free (command_line);
+
+	if (retval == FALSE) {
+		GtkWidget *dialog = gtk_message_dialog_new (GTK_WINDOW (almanah->main_window),
+							    GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+							    _("Error launching Evolution"));
+		gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message);
+		gtk_dialog_run (GTK_DIALOG (dialog));
+		gtk_widget_destroy (dialog);
+
+		g_error_free (error);
+
+		return FALSE;
+	}
+
 	return TRUE;
 }

Modified: trunk/src/main-window.c
==============================================================================
--- trunk/src/main-window.c	(original)
+++ trunk/src/main-window.c	Sat Dec  6 21:56:45 2008
@@ -826,7 +826,6 @@
 
 		gtk_tree_model_get (model, &iter, 2, &row_type_id, -1);
 
-		/* TODO: Make sure the links are unreffed appropriately */
 		if (row_type_id == type_id) {
 			if (almanah->debug == TRUE) {
 				AlmanahLink *link;
@@ -875,6 +874,8 @@
 				    1, almanah_link_get_icon_name (link),
 				    2, type_id,
 				    -1);
+
+		g_object_unref (link);
 	}
 
 	if (almanah->debug == TRUE)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]