event-widget: add internal #ECalComponent object
The changes made here are minimal to get this building. GcalEventWidget needs a new rethink and rework to accommodate to those new internal attributes, which replaces some of the old ones.
This commit is contained in:
+114
-9
@@ -23,16 +23,21 @@
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
/* properties */
|
/* properties */
|
||||||
gchar *uuid;
|
gchar *uuid;
|
||||||
gchar *summary;
|
gchar *summary;
|
||||||
GdkRGBA *color;
|
GdkRGBA *color;
|
||||||
icaltimetype *dt_start;
|
icaltimetype *dt_start;
|
||||||
icaltimetype *dt_end;
|
icaltimetype *dt_end;
|
||||||
gboolean all_day;
|
gboolean all_day;
|
||||||
gboolean has_reminders;
|
gboolean has_reminders;
|
||||||
|
|
||||||
GdkWindow *event_window;
|
/* weak ESource reference */
|
||||||
gboolean button_pressed;
|
ESource *source;
|
||||||
|
/* ECalComponent data */
|
||||||
|
ECalComponent *component;
|
||||||
|
|
||||||
|
GdkWindow *event_window;
|
||||||
|
gboolean button_pressed;
|
||||||
} GcalEventWidgetPrivate;
|
} GcalEventWidgetPrivate;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -67,6 +72,8 @@ static void gcal_event_widget_get_property (GObject *object,
|
|||||||
GValue *value,
|
GValue *value,
|
||||||
GParamSpec *pspec);
|
GParamSpec *pspec);
|
||||||
|
|
||||||
|
static void gcal_event_widget_finalize (GObject *object);
|
||||||
|
|
||||||
static void gcal_event_widget_get_preferred_width (GtkWidget *widget,
|
static void gcal_event_widget_get_preferred_width (GtkWidget *widget,
|
||||||
gint *minimum,
|
gint *minimum,
|
||||||
gint *natural);
|
gint *natural);
|
||||||
@@ -107,6 +114,7 @@ gcal_event_widget_class_init(GcalEventWidgetClass *klass)
|
|||||||
object_class->constructed = gcal_event_widget_constructed;
|
object_class->constructed = gcal_event_widget_constructed;
|
||||||
object_class->set_property = gcal_event_widget_set_property;
|
object_class->set_property = gcal_event_widget_set_property;
|
||||||
object_class->get_property = gcal_event_widget_get_property;
|
object_class->get_property = gcal_event_widget_get_property;
|
||||||
|
object_class->finalize = gcal_event_widget_finalize;
|
||||||
|
|
||||||
widget_class = GTK_WIDGET_CLASS (klass);
|
widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
widget_class->get_preferred_width = gcal_event_widget_get_preferred_width;
|
widget_class->get_preferred_width = gcal_event_widget_get_preferred_width;
|
||||||
@@ -318,6 +326,20 @@ gcal_event_widget_get_property (GObject *object,
|
|||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gcal_event_widget_finalize (GObject *object)
|
||||||
|
{
|
||||||
|
GcalEventWidgetPrivate *priv;
|
||||||
|
|
||||||
|
priv =
|
||||||
|
gcal_event_widget_get_instance_private (GCAL_EVENT_WIDGET (object));
|
||||||
|
|
||||||
|
if (priv->component != NULL)
|
||||||
|
g_object_unref (priv->component);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (gcal_event_widget_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_event_widget_get_preferred_width (GtkWidget *widget,
|
gcal_event_widget_get_preferred_width (GtkWidget *widget,
|
||||||
gint *minimum,
|
gint *minimum,
|
||||||
@@ -616,6 +638,89 @@ gcal_event_widget_new (gchar *uuid)
|
|||||||
return g_object_new (GCAL_TYPE_EVENT_WIDGET, "uuid", uuid, NULL);
|
return g_object_new (GCAL_TYPE_EVENT_WIDGET, "uuid", uuid, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gcal_event_widget_new_from_data:
|
||||||
|
* @data: a #GcalEventData instance
|
||||||
|
*
|
||||||
|
* Create an event widget by passing its #ECalComponent and #ESource
|
||||||
|
*
|
||||||
|
* Returns: a #GcalEventWidget as #GtkWidget
|
||||||
|
**/
|
||||||
|
GtkWidget*
|
||||||
|
gcal_event_widget_new_from_data (GcalEventData *data)
|
||||||
|
{
|
||||||
|
GtkWidget *widget;
|
||||||
|
GcalEventWidget *event;
|
||||||
|
GcalEventWidgetPrivate *priv;
|
||||||
|
|
||||||
|
ECalComponentText e_summary;
|
||||||
|
ESourceSelectable *extension;
|
||||||
|
GdkRGBA *color;
|
||||||
|
ECalComponentDateTime dt;
|
||||||
|
icaltimetype *date;
|
||||||
|
gboolean start_is_date, end_is_date;
|
||||||
|
|
||||||
|
widget = g_object_new (GCAL_TYPE_EVENT_WIDGET, NULL);
|
||||||
|
|
||||||
|
event = GCAL_EVENT_WIDGET (widget);
|
||||||
|
|
||||||
|
priv = gcal_event_widget_get_instance_private (event);
|
||||||
|
priv->component = data->event_component;
|
||||||
|
priv->source = data->source;
|
||||||
|
|
||||||
|
/* summary */
|
||||||
|
e_cal_component_get_summary (priv->component, &e_summary);
|
||||||
|
gcal_event_widget_set_summary (event, e_summary.value);
|
||||||
|
|
||||||
|
/* color */
|
||||||
|
color = g_new0 (GdkRGBA, 1);
|
||||||
|
|
||||||
|
extension = E_SOURCE_SELECTABLE (
|
||||||
|
e_source_get_extension (priv->source,
|
||||||
|
E_SOURCE_EXTENSION_CALENDAR));
|
||||||
|
gdk_rgba_parse (color, e_source_selectable_get_color (extension));
|
||||||
|
gcal_event_widget_set_color (event, color);
|
||||||
|
gdk_rgba_free (color);
|
||||||
|
|
||||||
|
/* start date */
|
||||||
|
e_cal_component_get_dtstart (priv->component, &dt);
|
||||||
|
date = gcal_dup_icaltime (dt.value);
|
||||||
|
|
||||||
|
/* FIXME: fix the timezone issue */
|
||||||
|
/* if (date->is_date != 1) */
|
||||||
|
/* *date = icaltime_convert_to_zone (*(dt.value), */
|
||||||
|
/* priv->system_timezone); */
|
||||||
|
start_is_date = date->is_date == 1;
|
||||||
|
|
||||||
|
gcal_event_widget_set_date (event, date);
|
||||||
|
e_cal_component_free_datetime (&dt);
|
||||||
|
g_free (date);
|
||||||
|
|
||||||
|
/* end date */
|
||||||
|
e_cal_component_get_dtend (priv->component, &dt);
|
||||||
|
date = gcal_dup_icaltime (dt.value);
|
||||||
|
|
||||||
|
/* FIXME: fix the timezone issue */
|
||||||
|
/* if (date->is_date != 1) */
|
||||||
|
/* *date = icaltime_convert_to_zone (*(dt.value), */
|
||||||
|
/* priv->system_timezone); */
|
||||||
|
end_is_date = date->is_date == 1;
|
||||||
|
|
||||||
|
gcal_event_widget_set_end_date (event, date);
|
||||||
|
e_cal_component_free_datetime (&dt);
|
||||||
|
g_free (date);
|
||||||
|
|
||||||
|
/* set_all_day */
|
||||||
|
gcal_event_widget_set_all_day (event, start_is_date && end_is_date);
|
||||||
|
|
||||||
|
/* set_has_reminders */
|
||||||
|
gcal_event_widget_set_has_reminders (
|
||||||
|
event,
|
||||||
|
e_cal_component_has_alarms (priv->component));
|
||||||
|
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget*
|
||||||
gcal_event_widget_new_with_summary_and_color (const gchar *summary,
|
gcal_event_widget_new_with_summary_and_color (const gchar *summary,
|
||||||
const GdkRGBA *color)
|
const GdkRGBA *color)
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
#ifndef __GCAL_EVENT_WIDGET_H__
|
#ifndef __GCAL_EVENT_WIDGET_H__
|
||||||
#define __GCAL_EVENT_WIDGET_H__
|
#define __GCAL_EVENT_WIDGET_H__
|
||||||
|
|
||||||
|
#include "gcal-manager.h"
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
#include <libical/icaltime.h>
|
#include <libical/icaltime.h>
|
||||||
@@ -54,6 +56,8 @@ GType gcal_event_widget_get_type (void);
|
|||||||
|
|
||||||
GtkWidget* gcal_event_widget_new (gchar *uuid);
|
GtkWidget* gcal_event_widget_new (gchar *uuid);
|
||||||
|
|
||||||
|
GtkWidget* gcal_event_widget_new_from_data (GcalEventData *data);
|
||||||
|
|
||||||
GtkWidget* gcal_event_widget_new_with_summary_and_color (const gchar *summary,
|
GtkWidget* gcal_event_widget_new_with_summary_and_color (const gchar *summary,
|
||||||
const GdkRGBA *color);
|
const GdkRGBA *color);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user