Added a bunch of changes.
Fixed some minors align issues Added method to GcalManager to get dtstart from events Added method to GcalManager to sync COLUMN_ACTIVE with GcalManagerUnit::enabled attribute Added method for receiving button press events of view in GcalWindow
This commit is contained in:
@@ -50,8 +50,6 @@ static gboolean gcal_floating_container_draw (GtkWidge
|
|||||||
|
|
||||||
static void gcal_floating_container_realize (GtkWidget *widget);
|
static void gcal_floating_container_realize (GtkWidget *widget);
|
||||||
|
|
||||||
static void gcal_floating_container_unrealize (GtkWidget *widget);
|
|
||||||
|
|
||||||
static void gcal_floating_container_style_updated (GtkWidget *widget);
|
static void gcal_floating_container_style_updated (GtkWidget *widget);
|
||||||
|
|
||||||
static void gcal_floating_container_add (GtkContainer *container,
|
static void gcal_floating_container_add (GtkContainer *container,
|
||||||
@@ -82,7 +80,6 @@ gcal_floating_container_class_init (GcalFloatingContainerClass *klass)
|
|||||||
widget_class->size_allocate = gcal_floating_container_size_allocate;
|
widget_class->size_allocate = gcal_floating_container_size_allocate;
|
||||||
widget_class->draw = gcal_floating_container_draw;
|
widget_class->draw = gcal_floating_container_draw;
|
||||||
widget_class->realize = gcal_floating_container_realize;
|
widget_class->realize = gcal_floating_container_realize;
|
||||||
widget_class->unrealize = gcal_floating_container_unrealize;
|
|
||||||
widget_class->style_updated = gcal_floating_container_style_updated;
|
widget_class->style_updated = gcal_floating_container_style_updated;
|
||||||
|
|
||||||
container_class->add = gcal_floating_container_add;
|
container_class->add = gcal_floating_container_add;
|
||||||
@@ -100,7 +97,6 @@ gcal_floating_container_init (GcalFloatingContainer *self)
|
|||||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
|
||||||
GCAL_TYPE_FLOATING_CONTAINER,
|
GCAL_TYPE_FLOATING_CONTAINER,
|
||||||
GcalFloatingContainerPrivate);
|
GcalFloatingContainerPrivate);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -289,11 +285,9 @@ gcal_floating_container_draw (GtkWidget *widget,
|
|||||||
cairo_t *cr)
|
cairo_t *cr)
|
||||||
{
|
{
|
||||||
GtkStyleContext *context;
|
GtkStyleContext *context;
|
||||||
GdkRectangle rect;
|
|
||||||
guint border_width;
|
guint border_width;
|
||||||
|
|
||||||
context = gtk_widget_get_style_context (widget);
|
context = gtk_widget_get_style_context (widget);
|
||||||
gtk_widget_get_allocation (widget, &rect);
|
|
||||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||||
|
|
||||||
gtk_render_background (context, cr,
|
gtk_render_background (context, cr,
|
||||||
@@ -305,7 +299,7 @@ gcal_floating_container_draw (GtkWidget *widget,
|
|||||||
gtk_widget_get_allocated_width (widget) - 2 * border_width,
|
gtk_widget_get_allocated_width (widget) - 2 * border_width,
|
||||||
gtk_widget_get_allocated_height (widget) - 2 * border_width);
|
gtk_widget_get_allocated_height (widget) - 2 * border_width);
|
||||||
if (GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw != NULL)
|
if (GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw != NULL)
|
||||||
GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw(widget, cr);
|
GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->draw (widget, cr);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -327,12 +321,6 @@ gcal_floating_container_realize (GtkWidget *widget)
|
|||||||
gtk_widget_set_parent_window (child, window);
|
gtk_widget_set_parent_window (child, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gcal_floating_container_unrealize (GtkWidget *widget)
|
|
||||||
{
|
|
||||||
GTK_WIDGET_CLASS (gcal_floating_container_parent_class)->unrealize (widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_floating_container_style_updated (GtkWidget *widget)
|
gcal_floating_container_style_updated (GtkWidget *widget)
|
||||||
{
|
{
|
||||||
|
|||||||
+66
-15
@@ -69,7 +69,7 @@ struct _GcalManagerPrivate
|
|||||||
/**
|
/**
|
||||||
* The list of clients we are managing.
|
* The list of clients we are managing.
|
||||||
* Each value is of type GCalStoreUnit
|
* Each value is of type GCalStoreUnit
|
||||||
* And is key is uid of the source
|
* And each key is the source uid
|
||||||
*/
|
*/
|
||||||
GHashTable *clients;
|
GHashTable *clients;
|
||||||
|
|
||||||
@@ -90,6 +90,7 @@ struct _GcalManagerPrivate
|
|||||||
|
|
||||||
GCancellable *loading_clients;
|
GCancellable *loading_clients;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Signal IDs */
|
/* Signal IDs */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -138,6 +139,11 @@ static void _gcal_manager_on_view_objects_modified (ECalClientView *view
|
|||||||
gpointer objects,
|
gpointer objects,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
static void _gcal_manager_on_sources_row_changed (GtkTreeModel *store,
|
||||||
|
GtkTreePath *path,
|
||||||
|
GtkTreeIter *iter,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
G_DEFINE_TYPE(GcalManager, gcal_manager, G_TYPE_OBJECT)
|
G_DEFINE_TYPE(GcalManager, gcal_manager, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -197,6 +203,11 @@ gcal_manager_init (GcalManager *self)
|
|||||||
GDK_TYPE_COLOR);
|
GDK_TYPE_COLOR);
|
||||||
g_object_ref_sink (priv->sources_model);
|
g_object_ref_sink (priv->sources_model);
|
||||||
|
|
||||||
|
g_signal_connect (priv->sources_model,
|
||||||
|
"row-changed",
|
||||||
|
G_CALLBACK (_gcal_manager_on_sources_row_changed),
|
||||||
|
self);
|
||||||
|
|
||||||
priv->initial_date = g_new(icaltimetype, 1);
|
priv->initial_date = g_new(icaltimetype, 1);
|
||||||
*(priv->initial_date) = icaltime_from_timet (time (NULL), 0);
|
*(priv->initial_date) = icaltime_from_timet (time (NULL), 0);
|
||||||
|
|
||||||
@@ -553,7 +564,7 @@ _gcal_manager_on_view_objects_added (ECalClientView *view,
|
|||||||
|
|
||||||
ECalClient *client;
|
ECalClient *client;
|
||||||
const gchar *source_uid;
|
const gchar *source_uid;
|
||||||
GcalManagerEventData *data;
|
gchar *event_uid;
|
||||||
|
|
||||||
priv = GCAL_MANAGER (user_data)->priv;
|
priv = GCAL_MANAGER (user_data)->priv;
|
||||||
events_data = NULL;
|
events_data = NULL;
|
||||||
@@ -579,22 +590,15 @@ _gcal_manager_on_view_objects_added (ECalClientView *view,
|
|||||||
component);
|
component);
|
||||||
}
|
}
|
||||||
|
|
||||||
data = g_new0 (GcalManagerEventData, 1);
|
event_uid = g_strdup_printf ("%s:%s",
|
||||||
data->source_uid = g_strdup (source_uid);
|
source_uid,
|
||||||
data->event_uid = g_strdup (icalcomponent_get_uid (l->data));
|
icalcomponent_get_uid (l->data));
|
||||||
events_data = g_slist_append (events_data, data);
|
events_data = g_slist_append (events_data, event_uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_signal_emit (GCAL_MANAGER (user_data), signals[EVENTS_ADDED], 0, events_data);
|
g_signal_emit (GCAL_MANAGER (user_data), signals[EVENTS_ADDED], 0, events_data);
|
||||||
|
|
||||||
for (l = events_data; l != NULL; l = l->next)
|
|
||||||
{
|
|
||||||
GcalManagerEventData *data;
|
|
||||||
data = l->data;
|
|
||||||
g_free (data->source_uid);
|
|
||||||
g_free (data->event_uid);
|
|
||||||
}
|
|
||||||
g_slist_free_full (events_data, g_free);
|
g_slist_free_full (events_data, g_free);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -624,6 +628,31 @@ _gcal_manager_on_view_objects_modified (ECalClientView *view,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gcal_manager_on_sources_row_changed (GtkTreeModel *store,
|
||||||
|
GtkTreePath *path,
|
||||||
|
GtkTreeIter *iter,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GcalManagerPrivate *priv;
|
||||||
|
GcalManagerUnit *unit;
|
||||||
|
gchar *source_uid;
|
||||||
|
gboolean active;
|
||||||
|
|
||||||
|
priv = GCAL_MANAGER (user_data)->priv;
|
||||||
|
gtk_tree_model_get (store,
|
||||||
|
iter,
|
||||||
|
COLUMN_UID,
|
||||||
|
&source_uid,
|
||||||
|
COLUMN_ACTIVE,
|
||||||
|
&active,
|
||||||
|
-1);
|
||||||
|
unit = g_hash_table_lookup (priv->clients, source_uid);
|
||||||
|
unit->enabled = active;
|
||||||
|
|
||||||
|
g_free (source_uid);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gcal_manager_new:
|
* gcal_manager_new:
|
||||||
*
|
*
|
||||||
@@ -681,7 +710,7 @@ gcal_manager_add_source (GcalManager *manager,
|
|||||||
for (groups = e_source_list_peek_groups (priv->system_sources);
|
for (groups = e_source_list_peek_groups (priv->system_sources);
|
||||||
groups != NULL;
|
groups != NULL;
|
||||||
groups = groups->next)
|
groups = groups->next)
|
||||||
{
|
{
|
||||||
if (g_strcmp0 (
|
if (g_strcmp0 (
|
||||||
base_uri,
|
base_uri,
|
||||||
e_source_group_peek_base_uri (E_SOURCE_GROUP (groups->data))) == 0)
|
e_source_group_peek_base_uri (E_SOURCE_GROUP (groups->data))) == 0)
|
||||||
@@ -701,7 +730,7 @@ gcal_manager_add_source (GcalManager *manager,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected_group == NULL)
|
if (selected_group == NULL)
|
||||||
{
|
{
|
||||||
@@ -789,3 +818,25 @@ gcal_manager_set_new_range (GcalManager *manager,
|
|||||||
_gcal_manager_reload_events (manager);
|
_gcal_manager_reload_events (manager);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
icaltimetype*
|
||||||
|
gcal_manager_get_start_date (GcalManager *manager,
|
||||||
|
const gchar *source_uid,
|
||||||
|
const gchar *event_uid)
|
||||||
|
{
|
||||||
|
GcalManagerPrivate *priv;
|
||||||
|
GcalManagerUnit *unit;
|
||||||
|
ECalComponent *event;
|
||||||
|
ECalComponentDateTime dt;
|
||||||
|
icaltimetype *dtstart;
|
||||||
|
|
||||||
|
priv = manager->priv;
|
||||||
|
|
||||||
|
unit = g_hash_table_lookup (priv->clients, source_uid);
|
||||||
|
event = g_hash_table_lookup (unit->events, event_uid);
|
||||||
|
e_cal_component_get_dtstart (event, &dt);
|
||||||
|
dtstart = gcal_dup_icaltime (dt.value);
|
||||||
|
|
||||||
|
e_cal_component_free_datetime (&dt);
|
||||||
|
return dtstart;
|
||||||
|
}
|
||||||
|
|||||||
+4
-7
@@ -37,13 +37,6 @@ G_BEGIN_DECLS
|
|||||||
typedef struct _GcalManager GcalManager;
|
typedef struct _GcalManager GcalManager;
|
||||||
typedef struct _GcalManagerClass GcalManagerClass;
|
typedef struct _GcalManagerClass GcalManagerClass;
|
||||||
typedef struct _GcalManagerPrivate GcalManagerPrivate;
|
typedef struct _GcalManagerPrivate GcalManagerPrivate;
|
||||||
typedef struct _GcalManagerEventData GcalManagerEventData;
|
|
||||||
|
|
||||||
struct _GcalManagerEventData
|
|
||||||
{
|
|
||||||
gchar *source_uid;
|
|
||||||
gchar *event_uid;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _GcalManager
|
struct _GcalManager
|
||||||
{
|
{
|
||||||
@@ -80,6 +73,10 @@ void gcal_manager_set_new_range (GcalManager *manager,
|
|||||||
const icaltimetype *initial_date,
|
const icaltimetype *initial_date,
|
||||||
const icaltimetype *final_date);
|
const icaltimetype *final_date);
|
||||||
|
|
||||||
|
icaltimetype* gcal_manager_get_start_date (GcalManager *manager,
|
||||||
|
const gchar *source_uid,
|
||||||
|
const gchar *event_uid);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GCAL_MANAGER_H__ */
|
#endif /* __GCAL_MANAGER_H__ */
|
||||||
|
|||||||
+50
-10
@@ -33,13 +33,15 @@
|
|||||||
|
|
||||||
struct _GcalWindowPrivate
|
struct _GcalWindowPrivate
|
||||||
{
|
{
|
||||||
ClutterActor *main_toolbar;
|
ClutterActor *main_toolbar;
|
||||||
ClutterActor *notebook_actor;
|
ClutterActor *notebook_actor;
|
||||||
ClutterActor *sources_actor;
|
ClutterActor *sources_actor;
|
||||||
|
|
||||||
GtkWidget *notebook;
|
GtkWidget *notebook;
|
||||||
GtkWidget *sources_view;
|
GtkWidget *sources_view;
|
||||||
GtkWidget *views [5];
|
GtkWidget *views [5];
|
||||||
|
|
||||||
|
GcalViewType active_view;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void gcal_window_constructed (GObject *object);
|
static void gcal_window_constructed (GObject *object);
|
||||||
@@ -61,6 +63,10 @@ static void _gcal_window_sources_row_activated (GtkTreeView *tree_view,
|
|||||||
GtkTreeViewColumn *column,
|
GtkTreeViewColumn *column,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
static void _gcal_window_view_clicked (GtkWidget *widget,
|
||||||
|
GdkEventButton *event,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
static void _gcal_window_events_added (GcalManager *manager,
|
static void _gcal_window_events_added (GcalManager *manager,
|
||||||
gpointer events_list,
|
gpointer events_list,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
@@ -208,6 +214,10 @@ gcal_window_constructed (GObject *object)
|
|||||||
"sources-shown",
|
"sources-shown",
|
||||||
G_CALLBACK (_gcal_window_sources_shown),
|
G_CALLBACK (_gcal_window_sources_shown),
|
||||||
object);
|
object);
|
||||||
|
g_signal_connect (priv->views[GCAL_VIEW_TYPE_MONTHLY],
|
||||||
|
"button-press-event",
|
||||||
|
G_CALLBACK (_gcal_window_view_clicked),
|
||||||
|
object);
|
||||||
|
|
||||||
gtk_widget_show (embed);
|
gtk_widget_show (embed);
|
||||||
}
|
}
|
||||||
@@ -294,9 +304,12 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar,
|
|||||||
GcalViewType view_type,
|
GcalViewType view_type,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalWindow *window;
|
GcalWindowPrivate *priv;
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
|
|
||||||
|
priv = GCAL_WINDOW (user_data)->priv;
|
||||||
|
priv->active_view = view_type;
|
||||||
|
|
||||||
/* FIXME: demo code */
|
/* FIXME: demo code */
|
||||||
icaltimetype *first_day;
|
icaltimetype *first_day;
|
||||||
icaltimetype *last_day;
|
icaltimetype *last_day;
|
||||||
@@ -307,10 +320,9 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar,
|
|||||||
*last_day = *first_day;
|
*last_day = *first_day;
|
||||||
last_day->day = 28;
|
last_day->day = 28;
|
||||||
|
|
||||||
window = GCAL_WINDOW (user_data);
|
manager = _gcal_window_get_manager (GCAL_WINDOW (user_data));
|
||||||
manager = _gcal_window_get_manager (window);
|
|
||||||
gcal_manager_set_new_range (manager, first_day, last_day);
|
gcal_manager_set_new_range (manager, first_day, last_day);
|
||||||
g_debug ("GcalViewType in GcalWindow %d", view_type);
|
g_debug ("GcalViewType in GcalWindow %d", priv->active_view);
|
||||||
g_free (first_day);
|
g_free (first_day);
|
||||||
g_free (last_day);
|
g_free (last_day);
|
||||||
}
|
}
|
||||||
@@ -369,12 +381,40 @@ _gcal_window_sources_row_activated (GtkTreeView *tree_view,
|
|||||||
-1);
|
-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gcal_window_view_clicked (GtkWidget *widget,
|
||||||
|
GdkEventButton *event,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_debug ("View Clicked");
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_gcal_window_events_added (GcalManager *manager,
|
_gcal_window_events_added (GcalManager *manager,
|
||||||
gpointer events_list,
|
gpointer events_list,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
GSList *l;
|
||||||
|
icaltimetype *starting_date;
|
||||||
|
gchar **tokens;
|
||||||
|
gchar *source_uid;
|
||||||
|
gchar *event_uid;
|
||||||
|
|
||||||
g_debug ("[IWEA]: obtained %d events", g_slist_length (events_list));
|
g_debug ("[IWEA]: obtained %d events", g_slist_length (events_list));
|
||||||
|
for (l = events_list; l != NULL; l = l->next)
|
||||||
|
{
|
||||||
|
g_debug ("event %s", (gchar*) l->data);
|
||||||
|
tokens = g_strsplit ((gchar*) l->data, ":", -1);
|
||||||
|
source_uid = tokens[0];
|
||||||
|
event_uid = tokens[1];
|
||||||
|
starting_date = gcal_manager_get_start_date (manager,
|
||||||
|
source_uid,
|
||||||
|
event_uid);
|
||||||
|
g_debug ("starts on %s", icaltime_as_ical_string (*starting_date));
|
||||||
|
|
||||||
|
g_free (starting_date);
|
||||||
|
g_strfreev (tokens);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget*
|
||||||
|
|||||||
Reference in New Issue
Block a user