diff --git a/src/gcal-month-view.c b/src/gcal-month-view.c index 267b7b9d..1a783fa9 100644 --- a/src/gcal-month-view.c +++ b/src/gcal-month-view.c @@ -20,6 +20,7 @@ #include "gcal-month-view.h" #include "gcal-utils.h" +#include "gcal-view.h" #include @@ -53,6 +54,11 @@ const char* weekdays [] = "Sat" }; +static void _gcal_view_interface_init (GcalViewIface *iface); + +static gboolean _gcal_month_view_is_in_range (GcalView *view, + icaltimetype *date); + static void gcal_month_view_set_property (GObject *object, guint property_id, const GValue *value, @@ -86,7 +92,12 @@ static void _gcal_month_view_draw_month_grid (GcalMonthView *mont_vie gint width, gint height); -G_DEFINE_TYPE(GcalMonthView, gcal_month_view, GTK_TYPE_WIDGET) +G_DEFINE_TYPE_WITH_CODE (GcalMonthView, + gcal_month_view, + GTK_TYPE_WIDGET, + G_IMPLEMENT_INTERFACE (GCAL_TYPE_VIEW, + _gcal_view_interface_init)); + static void gcal_month_view_class_init (GcalMonthViewClass *klass) { @@ -130,6 +141,21 @@ static void gcal_month_view_init (GcalMonthView *self) GcalMonthViewPrivate); } +static void +_gcal_view_interface_init (GcalViewIface *iface) +{ + iface->is_in_range = _gcal_month_view_is_in_range; +} + +static gboolean +_gcal_month_view_is_in_range (GcalView *view, + icaltimetype *date) +{ + g_debug ("Implementation of is_in_range called"); + return TRUE; +} + + static void gcal_month_view_set_property (GObject *object, guint property_id, diff --git a/src/gcal-utils.h b/src/gcal-utils.h index 1d12b6d8..1d227438 100644 --- a/src/gcal-utils.h +++ b/src/gcal-utils.h @@ -30,7 +30,7 @@ typedef enum GCAL_VIEW_TYPE_MONTHLY, GCAL_VIEW_TYPE_YEARLY, GCAL_VIEW_TYPE_LIST, -} GcalViewType; +} GcalViewTypeEnum; void gcal_gtk_tree_view_set_activate_on_single_click (GtkTreeView *tree_view, gboolean should_activate); diff --git a/src/gcal-view.c b/src/gcal-view.c index d03d4a4f..8fc772bf 100644 --- a/src/gcal-view.c +++ b/src/gcal-view.c @@ -20,6 +20,8 @@ #include "gcal-view.h" +#include + static void gcal_view_base_init (gpointer g_iface) { @@ -40,8 +42,8 @@ gcal_view_get_type (void) { const GTypeInfo info = { - sizeof (GcalViewInterface), - NULL, /* base_init */ + sizeof (GcalViewIface), + gcal_view_base_init, /* base_init */ NULL, /* base_finalize */ NULL, /* class_init */ NULL, /* class_finalize */ @@ -50,19 +52,12 @@ gcal_view_get_type (void) 0, /* n_preallocs */ NULL /* instance_init */ }; - const GInterfaceInfo view_info = - { - (GInterfaceInitFunc) gcal_view_base_init, - NULL, /* interface_finalize */ - NULL /* interface_data */ - }; - type = g_type_register_static (G_TYPE_OBJECT, - "GcalViewType", + type = g_type_register_static (G_TYPE_INTERFACE, + "GcalView", &info, 0); - g_type_add_interface_static (type, - GCAL_TYPE_VIEW, - &view_info); + g_type_interface_add_prerequisite (type, + G_TYPE_OBJECT); } return type; } @@ -71,5 +66,7 @@ gboolean gcal_view_is_in_range (GcalView *view, icaltimetype *date) { + g_return_val_if_fail (GCAL_IS_VIEW (view), FALSE); + return GCAL_VIEW_GET_INTERFACE (view)->is_in_range (view, date); } diff --git a/src/gcal-view.h b/src/gcal-view.h index 19eed4c4..c0c91eb1 100644 --- a/src/gcal-view.h +++ b/src/gcal-view.h @@ -29,13 +29,13 @@ G_BEGIN_DECLS #define GCAL_TYPE_VIEW (gcal_view_get_type ()) #define GCAL_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GCAL_TYPE_VIEW, GcalView)) #define GCAL_IS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GCAL_TYPE_VIEW)) -#define GCAL_VIEW_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GCAL_TYPE_VIEW, GcalViewInterface)) +#define GCAL_VIEW_GET_INTERFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GCAL_TYPE_VIEW, GcalViewIface)) typedef struct _GcalView GcalView; -typedef struct _GcalViewInterface GcalViewInterface; +typedef struct _GcalViewIface GcalViewIface; -struct _GcalViewInterface +struct _GcalViewIface { GTypeInterface parent_iface; diff --git a/src/gcal-window.c b/src/gcal-window.c index abaae9b6..a893367d 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -22,6 +22,7 @@ #include "gcal-floating-container.h" #include "gcal-main-toolbar.h" #include "gcal-month-view.h" +#include "gcal-view.h" #include "gcal-utils.h" #include @@ -33,15 +34,15 @@ struct _GcalWindowPrivate { - ClutterActor *main_toolbar; - ClutterActor *notebook_actor; - ClutterActor *sources_actor; + ClutterActor *main_toolbar; + ClutterActor *notebook_actor; + ClutterActor *sources_actor; - GtkWidget *notebook; - GtkWidget *sources_view; - GtkWidget *views [5]; + GtkWidget *notebook; + GtkWidget *sources_view; + GtkWidget *views [5]; - GcalViewType active_view; + GcalViewTypeEnum active_view; }; static void gcal_window_constructed (GObject *object); @@ -51,7 +52,7 @@ GcalManager* _gcal_window_get_manager (GcalWindow *window); static void _gcal_window_set_sources_view (GcalWindow *window); static void _gcal_window_view_changed (GcalMainToolbar *main_toolbar, - GcalViewType view_type, + GcalViewTypeEnum view_type, gpointer user_data); static void _gcal_window_sources_shown (GcalMainToolbar *main_toolbar, @@ -300,9 +301,9 @@ _gcal_window_set_sources_view (GcalWindow *window) } static void -_gcal_window_view_changed (GcalMainToolbar *main_toolbar, - GcalViewType view_type, - gpointer user_data) +_gcal_window_view_changed (GcalMainToolbar *main_toolbar, + GcalViewTypeEnum view_type, + gpointer user_data) { GcalWindowPrivate *priv; GcalManager *manager; @@ -322,7 +323,7 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar, manager = _gcal_window_get_manager (GCAL_WINDOW (user_data)); gcal_manager_set_new_range (manager, first_day, last_day); - g_debug ("GcalViewType in GcalWindow %d", priv->active_view); + g_debug ("GcalViewTypeEnum in GcalWindow %d", priv->active_view); g_free (first_day); g_free (last_day); } @@ -394,12 +395,15 @@ _gcal_window_events_added (GcalManager *manager, gpointer events_list, gpointer user_data) { + GcalWindowPrivate *priv; GSList *l; icaltimetype *starting_date; gchar **tokens; gchar *source_uid; gchar *event_uid; + priv = GCAL_WINDOW (user_data)->priv; + g_debug ("[IWEA]: obtained %d events", g_slist_length (events_list)); for (l = events_list; l != NULL; l = l->next) { @@ -411,6 +415,19 @@ _gcal_window_events_added (GcalManager *manager, source_uid, event_uid); g_debug ("starts on %s", icaltime_as_ical_string (*starting_date)); + g_debug ("GcalViewTypeEnum in GcalWindow %d", priv->active_view); + /* FIXME: here priv->views[priv->active_view] instead of hardcoding + * GCAL_VIEW_TYPE_MONTHLY */ + if (gcal_view_is_in_range ( + GCAL_VIEW (priv->views[GCAL_VIEW_TYPE_MONTHLY]), + starting_date)) + { + g_debug ("Returned true call on interface function"); + } + else + { + g_debug ("Returned false call on interface func"); + } g_free (starting_date); g_strfreev (tokens);