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_unrealize (GtkWidget *widget);
|
||||
|
||||
static void gcal_floating_container_style_updated (GtkWidget *widget);
|
||||
|
||||
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->draw = gcal_floating_container_draw;
|
||||
widget_class->realize = gcal_floating_container_realize;
|
||||
widget_class->unrealize = gcal_floating_container_unrealize;
|
||||
widget_class->style_updated = gcal_floating_container_style_updated;
|
||||
|
||||
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,
|
||||
GCAL_TYPE_FLOATING_CONTAINER,
|
||||
GcalFloatingContainerPrivate);
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -289,11 +285,9 @@ gcal_floating_container_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GtkStyleContext *context;
|
||||
GdkRectangle rect;
|
||||
guint border_width;
|
||||
|
||||
context = gtk_widget_get_style_context (widget);
|
||||
gtk_widget_get_allocation (widget, &rect);
|
||||
border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
|
||||
|
||||
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_height (widget) - 2 * border_width);
|
||||
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;
|
||||
}
|
||||
@@ -327,12 +321,6 @@ gcal_floating_container_realize (GtkWidget *widget)
|
||||
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
|
||||
gcal_floating_container_style_updated (GtkWidget *widget)
|
||||
{
|
||||
|
||||
+66
-15
@@ -69,7 +69,7 @@ struct _GcalManagerPrivate
|
||||
/**
|
||||
* The list of clients we are managing.
|
||||
* Each value is of type GCalStoreUnit
|
||||
* And is key is uid of the source
|
||||
* And each key is the source uid
|
||||
*/
|
||||
GHashTable *clients;
|
||||
|
||||
@@ -90,6 +90,7 @@ struct _GcalManagerPrivate
|
||||
|
||||
GCancellable *loading_clients;
|
||||
};
|
||||
|
||||
/* Signal IDs */
|
||||
enum
|
||||
{
|
||||
@@ -138,6 +139,11 @@ static void _gcal_manager_on_view_objects_modified (ECalClientView *view
|
||||
gpointer objects,
|
||||
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)
|
||||
|
||||
static void
|
||||
@@ -197,6 +203,11 @@ gcal_manager_init (GcalManager *self)
|
||||
GDK_TYPE_COLOR);
|
||||
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) = icaltime_from_timet (time (NULL), 0);
|
||||
|
||||
@@ -553,7 +564,7 @@ _gcal_manager_on_view_objects_added (ECalClientView *view,
|
||||
|
||||
ECalClient *client;
|
||||
const gchar *source_uid;
|
||||
GcalManagerEventData *data;
|
||||
gchar *event_uid;
|
||||
|
||||
priv = GCAL_MANAGER (user_data)->priv;
|
||||
events_data = NULL;
|
||||
@@ -579,22 +590,15 @@ _gcal_manager_on_view_objects_added (ECalClientView *view,
|
||||
component);
|
||||
}
|
||||
|
||||
data = g_new0 (GcalManagerEventData, 1);
|
||||
data->source_uid = g_strdup (source_uid);
|
||||
data->event_uid = g_strdup (icalcomponent_get_uid (l->data));
|
||||
events_data = g_slist_append (events_data, data);
|
||||
event_uid = g_strdup_printf ("%s:%s",
|
||||
source_uid,
|
||||
icalcomponent_get_uid (l->data));
|
||||
events_data = g_slist_append (events_data, event_uid);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
*
|
||||
@@ -681,7 +710,7 @@ gcal_manager_add_source (GcalManager *manager,
|
||||
for (groups = e_source_list_peek_groups (priv->system_sources);
|
||||
groups != NULL;
|
||||
groups = groups->next)
|
||||
{
|
||||
{
|
||||
if (g_strcmp0 (
|
||||
base_uri,
|
||||
e_source_group_peek_base_uri (E_SOURCE_GROUP (groups->data))) == 0)
|
||||
@@ -701,7 +730,7 @@ gcal_manager_add_source (GcalManager *manager,
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (selected_group == NULL)
|
||||
{
|
||||
@@ -789,3 +818,25 @@ gcal_manager_set_new_range (GcalManager *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 _GcalManagerClass GcalManagerClass;
|
||||
typedef struct _GcalManagerPrivate GcalManagerPrivate;
|
||||
typedef struct _GcalManagerEventData GcalManagerEventData;
|
||||
|
||||
struct _GcalManagerEventData
|
||||
{
|
||||
gchar *source_uid;
|
||||
gchar *event_uid;
|
||||
};
|
||||
|
||||
struct _GcalManager
|
||||
{
|
||||
@@ -80,6 +73,10 @@ void gcal_manager_set_new_range (GcalManager *manager,
|
||||
const icaltimetype *initial_date,
|
||||
const icaltimetype *final_date);
|
||||
|
||||
icaltimetype* gcal_manager_get_start_date (GcalManager *manager,
|
||||
const gchar *source_uid,
|
||||
const gchar *event_uid);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GCAL_MANAGER_H__ */
|
||||
|
||||
+50
-10
@@ -33,13 +33,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;
|
||||
};
|
||||
|
||||
static void gcal_window_constructed (GObject *object);
|
||||
@@ -61,6 +63,10 @@ static void _gcal_window_sources_row_activated (GtkTreeView *tree_view,
|
||||
GtkTreeViewColumn *column,
|
||||
gpointer user_data);
|
||||
|
||||
static void _gcal_window_view_clicked (GtkWidget *widget,
|
||||
GdkEventButton *event,
|
||||
gpointer user_data);
|
||||
|
||||
static void _gcal_window_events_added (GcalManager *manager,
|
||||
gpointer events_list,
|
||||
gpointer user_data);
|
||||
@@ -208,6 +214,10 @@ gcal_window_constructed (GObject *object)
|
||||
"sources-shown",
|
||||
G_CALLBACK (_gcal_window_sources_shown),
|
||||
object);
|
||||
g_signal_connect (priv->views[GCAL_VIEW_TYPE_MONTHLY],
|
||||
"button-press-event",
|
||||
G_CALLBACK (_gcal_window_view_clicked),
|
||||
object);
|
||||
|
||||
gtk_widget_show (embed);
|
||||
}
|
||||
@@ -294,9 +304,12 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar,
|
||||
GcalViewType view_type,
|
||||
gpointer user_data)
|
||||
{
|
||||
GcalWindow *window;
|
||||
GcalWindowPrivate *priv;
|
||||
GcalManager *manager;
|
||||
|
||||
priv = GCAL_WINDOW (user_data)->priv;
|
||||
priv->active_view = view_type;
|
||||
|
||||
/* FIXME: demo code */
|
||||
icaltimetype *first_day;
|
||||
icaltimetype *last_day;
|
||||
@@ -307,10 +320,9 @@ _gcal_window_view_changed (GcalMainToolbar *main_toolbar,
|
||||
*last_day = *first_day;
|
||||
last_day->day = 28;
|
||||
|
||||
window = GCAL_WINDOW (user_data);
|
||||
manager = _gcal_window_get_manager (window);
|
||||
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", view_type);
|
||||
g_debug ("GcalViewType in GcalWindow %d", priv->active_view);
|
||||
g_free (first_day);
|
||||
g_free (last_day);
|
||||
}
|
||||
@@ -369,12 +381,40 @@ _gcal_window_sources_row_activated (GtkTreeView *tree_view,
|
||||
-1);
|
||||
}
|
||||
|
||||
static void
|
||||
_gcal_window_view_clicked (GtkWidget *widget,
|
||||
GdkEventButton *event,
|
||||
gpointer user_data)
|
||||
{
|
||||
g_debug ("View Clicked");
|
||||
}
|
||||
|
||||
static void
|
||||
_gcal_window_events_added (GcalManager *manager,
|
||||
gpointer events_list,
|
||||
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));
|
||||
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*
|
||||
|
||||
Reference in New Issue
Block a user