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:
Erick Pérez Castellanos
2012-05-15 23:32:29 -04:00
parent 99a89e0e24
commit a873e0b73f
4 changed files with 121 additions and 45 deletions
+66 -15
View File
@@ -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;
}