[evolution/gnome-3-8] Add e_cal_model_list_clients().



commit e093e2600240243f7d6112894767cf9a827280fa
Author: Matthew Barnes <mbarnes redhat com>
Date:   Fri Apr 12 14:21:48 2013 -0400

    Add e_cal_model_list_clients().
    
    Replaces e_cal_model_get_client_list().
    
    Does the same thing, except the returned ECalClient instances are
    referenced for thread-safety.
    
    (cherry picked from commit 1141e231478410ecd83c78507612e57f58f2ccf1)

 calendar/gui/e-cal-model.c                   |    9 ++++++---
 calendar/gui/e-cal-model.h                   |    2 +-
 calendar/gui/e-task-table.c                  |    4 ++--
 calendar/gui/gnome-cal.c                     |   26 ++++++++++++++------------
 modules/calendar/e-cal-shell-view-private.c  |   15 +++++++--------
 modules/calendar/e-task-shell-view-private.c |   10 +++++-----
 6 files changed, 35 insertions(+), 31 deletions(-)
---
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index fe9bca6..982337c 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -2319,7 +2319,7 @@ e_cal_model_set_default_client (ECalModel *model,
 }
 
 GList *
-e_cal_model_get_client_list (ECalModel *model)
+e_cal_model_list_clients (ECalModel *model)
 {
        GQueue results = G_QUEUE_INIT;
        GList *list, *link;
@@ -2333,14 +2333,17 @@ e_cal_model_get_client_list (ECalModel *model)
 
        for (link = list; link != NULL; link = g_list_next (link)) {
                ClientData *client_data = link->data;
+               ECalClient *client;
+
+               client = client_data->client;
 
                /* Exclude the default client if we're not querying it. */
-               if (client_data->client == default_client) {
+               if (client == default_client) {
                        if (!client_data->do_query)
                                continue;
                }
 
-               g_queue_push_tail (&results, client_data->client);
+               g_queue_push_tail (&results, g_object_ref (client));
        }
 
        g_list_free_full (list, (GDestroyNotify) client_data_unref);
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index 9164d9c..58d1613 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -246,7 +246,7 @@ void                e_cal_model_set_work_day_start_minute
 ECalClient *   e_cal_model_get_default_client  (ECalModel *model);
 void           e_cal_model_set_default_client  (ECalModel *model,
                                                 ECalClient *client);
-GList *                e_cal_model_get_client_list     (ECalModel *model);
+GList *                e_cal_model_list_clients        (ECalModel *model);
 ECalClient *   e_cal_model_get_client_for_source
                                                (ECalModel *model,
                                                 ESource *source);
diff --git a/calendar/gui/e-task-table.c b/calendar/gui/e-task-table.c
index e014fe1..6f7fb83 100644
--- a/calendar/gui/e-task-table.c
+++ b/calendar/gui/e-task-table.c
@@ -1873,7 +1873,7 @@ e_task_table_process_completed_tasks (ETaskTable *task_table,
        if (!(hide_sexp && show_sexp))
                show_sexp = g_strdup ("(is-completed?)");
 
-       client_list = e_cal_model_get_client_list (model);
+       client_list = e_cal_model_list_clients (model);
 
        /* Delete rows from model */
        if (hide_sexp) {
@@ -1889,7 +1889,7 @@ e_task_table_process_completed_tasks (ETaskTable *task_table,
                        show_completed_rows_ready, model);
        }
 
-       g_list_free (client_list);
+       g_list_free_full (client_list, (GDestroyNotify) g_object_unref);
 
        g_free (hide_sexp);
        g_free (show_sexp);
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index c418c32..3d10de2 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -1155,7 +1155,7 @@ update_query_async (struct _date_query_msg *msg)
        GnomeCalendarPrivate *priv;
        ECalClientView *new_view;
        gchar *real_sexp;
-       GList *list, *iter;
+       GList *list, *link;
 
        priv = gcal->priv;
 
@@ -1169,12 +1169,11 @@ update_query_async (struct _date_query_msg *msg)
                return; /* No time range is set, so don't start a query */
        }
 
-       list = e_cal_model_get_client_list (priv->model);
-       g_list_foreach (list, (GFunc) g_object_ref, NULL);
+       list = e_cal_model_list_clients (priv->model);
 
        /* create queries for each loaded client */
-       for (iter = list; iter != NULL; iter = iter->next) {
-               ECalClient *client = E_CAL_CLIENT (iter->data);
+       for (link = list; link != NULL; link = g_list_next (link)) {
+               ECalClient *client = E_CAL_CLIENT (link->data);
                GError *error = NULL;
 
                new_view = NULL;
@@ -1210,8 +1209,7 @@ update_query_async (struct _date_query_msg *msg)
                g_mutex_unlock (&priv->dn_query_lock);
        }
 
-       g_list_foreach (list, (GFunc) g_object_unref, NULL);
-       g_list_free (list);
+       g_list_free_full (list, (GDestroyNotify) g_object_unref);
 
        /* free memory */
        g_free (real_sexp);
@@ -2305,11 +2303,14 @@ void
 gnome_calendar_purge (GnomeCalendar *gcal,
                       time_t older_than)
 {
+       ECalModel *model;
        gchar *sexp, *start, *end;
-       GList *clients, *l;
+       GList *list, *link;
 
        g_return_if_fail (GNOME_IS_CALENDAR (gcal));
 
+       model = gnome_calendar_get_model (gcal);
+
        start = isodate_from_time_t (0);
        end = isodate_from_time_t (older_than);
        sexp = g_strdup_printf (
@@ -2319,9 +2320,10 @@ gnome_calendar_purge (GnomeCalendar *gcal,
        gcal_update_status_message (gcal, _("Purging"), -1);
 
        /* FIXME Confirm expunge */
-       clients = e_cal_model_get_client_list (gnome_calendar_get_model (gcal));
-       for (l = clients; l != NULL; l = l->next) {
-               ECalClient *client = l->data;
+       list = e_cal_model_list_clients (model);
+
+       for (link = list; link != NULL; link = g_list_next (link)) {
+               ECalClient *client = E_CAL_CLIENT (link->data);
                GSList *objects, *m;
                GError *error = NULL;
 
@@ -2397,7 +2399,7 @@ gnome_calendar_purge (GnomeCalendar *gcal,
                g_slist_free (objects);
        }
 
-       g_list_free (clients);
+       g_list_free_full (list, (GDestroyNotify) g_object_unref);
 
        gcal_update_status_message (gcal, NULL, -1);
 
diff --git a/modules/calendar/e-cal-shell-view-private.c b/modules/calendar/e-cal-shell-view-private.c
index b8a5583..366af1b 100644
--- a/modules/calendar/e-cal-shell-view-private.c
+++ b/modules/calendar/e-cal-shell-view-private.c
@@ -1462,7 +1462,7 @@ static void
 cal_iterate_searching (ECalShellView *cal_shell_view)
 {
        ECalShellViewPrivate *priv;
-       GList *clients, *iter;
+       GList *list, *link;
        ECalModel *model;
        time_t new_time, range1, range2;
        icaltimezone *timezone;
@@ -1547,9 +1547,9 @@ cal_iterate_searching (ECalShellView *cal_shell_view)
        model = gnome_calendar_get_model (
                e_cal_shell_content_get_calendar (
                cal_shell_view->priv->cal_shell_content));
-       clients = e_cal_model_get_client_list (model);
+       list = e_cal_model_list_clients (model);
 
-       if (!clients) {
+       if (list == NULL) {
                e_activity_set_state (
                        priv->searching_activity, E_ACTIVITY_COMPLETED);
                g_object_unref (priv->searching_activity);
@@ -1590,19 +1590,18 @@ cal_iterate_searching (ECalShellView *cal_shell_view)
        g_free (end);
 
        cancellable = e_activity_get_cancellable (priv->searching_activity);
-       g_list_foreach (clients, (GFunc) g_object_ref, NULL);
-       priv->search_pending_count = g_list_length (clients);
+       priv->search_pending_count = g_list_length (list);
        priv->search_time = new_time;
 
-       for (iter = clients; iter; iter = iter->next) {
-               ECalClient *client = iter->data;
+       for (link = list; link != NULL; link = g_list_next (link)) {
+               ECalClient *client = E_CAL_CLIENT (link);
 
                e_cal_client_get_object_list (
                        client, sexp, cancellable,
                        cal_search_get_object_list_cb, cal_shell_view);
        }
 
-       g_list_free_full (clients, g_object_unref);
+       g_list_free_full (list, (GDestroyNotify) g_object_unref);
        g_free (sexp);
 }
 
diff --git a/modules/calendar/e-task-shell-view-private.c b/modules/calendar/e-task-shell-view-private.c
index 87a843d..4da3fbd 100644
--- a/modules/calendar/e-task-shell-view-private.c
+++ b/modules/calendar/e-task-shell-view-private.c
@@ -510,7 +510,7 @@ e_task_shell_view_delete_completed (ETaskShellView *task_shell_view)
 {
        ETaskShellContent *task_shell_content;
        ECalModel *model;
-       GList *list, *iter;
+       GList *list, *link;
        const gchar *sexp;
 
        g_return_if_fail (E_IS_TASK_SHELL_VIEW (task_shell_view));
@@ -523,10 +523,10 @@ e_task_shell_view_delete_completed (ETaskShellView *task_shell_view)
        e_task_shell_view_set_status_message (
                task_shell_view, _("Expunging"), -1.0);
 
-       list = e_cal_model_get_client_list (model);
+       list = e_cal_model_list_clients (model);
 
-       for (iter = list; iter != NULL; iter = iter->next) {
-               ECalClient *client = E_CAL_CLIENT (iter->data);
+       for (link = list; link != NULL; link = g_list_next (link)) {
+               ECalClient *client = E_CAL_CLIENT (link->data);
                GSList *objects, *obj;
                GError *error = NULL;
 
@@ -565,7 +565,7 @@ e_task_shell_view_delete_completed (ETaskShellView *task_shell_view)
                e_cal_client_free_icalcomp_slist (objects);
        }
 
-       g_list_free (list);
+       g_list_free_full (list, (GDestroyNotify) g_object_unref);
 
        e_task_shell_view_set_status_message (task_shell_view, NULL, -1.0);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]