almanah r118 - in trunk: . src src/link-factories src/links
- From: pwithnall svn gnome org
- To: svn-commits-list gnome org
- Subject: almanah r118 - in trunk: . src src/link-factories src/links
- Date: Sat, 6 Dec 2008 21:56:46 +0000 (UTC)
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]