[evolution/gnome-3-8] Add a boolean return to e_cal_model_add_client().



commit c6b96f4e4492552b0a9256140706f7d98bf2bdee
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sat Jun 1 09:10:16 2013 -0400

    Add a boolean return to e_cal_model_add_client().
    
    The function now returns TRUE if the ECalClient was actually added
    to the model, or FALSE if the model already had the ECalClient.
    
    Use this to avoid an unnecessary gnome_calendar_update_query() call
    in cal_shell_view_selector_client_added_cb().
    
    (cherry picked from commit 6477dd65708b286001b487ca89d4d5066a25bbfd)

 calendar/gui/e-cal-model.c                  |   26 +++++++++++++++++++-------
 calendar/gui/e-cal-model.h                  |    2 +-
 modules/calendar/e-cal-shell-view-private.c |    5 ++---
 3 files changed, 22 insertions(+), 11 deletions(-)
---
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index 49d89cd..b9c4d84 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -155,7 +155,7 @@ static gchar *ecm_value_to_string (ETableModel *etm, gint col, gconstpointer val
 
 static const gchar *ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data);
 
-static void add_new_client (ECalModel *model, ECalClient *client, gboolean do_query);
+static gboolean add_new_client (ECalModel *model, ECalClient *client, gboolean do_query);
 static void remove_client_objects (ECalModel *model, ClientData *client_data);
 static void remove_client (ECalModel *model, ClientData *client_data);
 static void redo_queries (ECalModel *model);
@@ -3182,7 +3182,7 @@ e_cal_model_update_status_message (ECalModel *model,
        g_signal_emit (model, signals[STATUS_MESSAGE], 0, message, percent);
 }
 
-static void
+static gboolean
 add_new_client (ECalModel *model,
                 ECalClient *client,
                 gboolean do_query)
@@ -3212,19 +3212,31 @@ add_new_client (ECalModel *model,
                update_e_cal_view_for_client (model, client_data);
 
        client_data_unref (client_data);
+
+       return update_view;
 }
 
 /**
- * e_cal_model_add_client
+ * e_cal_model_add_client:
+ * @model: an #ECalModel
+ * @client: an #ECalClient
+ *
+ * Adds @client to @model and creates an internal #ECalClientView for it.
+ *
+ * If @model already has @client from a previous e_cal_model_add_client()
+ * call (in other words, excluding e_cal_model_set_default_client()), then
+ * the function does nothing and returns %FALSE.
+ *
+ * Returns: %TRUE if @client was added, %FALSE if @model already had it
  */
-void
+gboolean
 e_cal_model_add_client (ECalModel *model,
                         ECalClient *client)
 {
-       g_return_if_fail (E_IS_CAL_MODEL (model));
-       g_return_if_fail (E_IS_CAL_CLIENT (client));
+       g_return_val_if_fail (E_IS_CAL_MODEL (model), FALSE);
+       g_return_val_if_fail (E_IS_CAL_CLIENT (client), FALSE);
 
-       add_new_client (model, client, TRUE);
+       return add_new_client (model, client, TRUE);
 }
 
 static void
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index 0a30ff6..19c89a7 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -247,7 +247,7 @@ ECalClient *        e_cal_model_ref_default_client  (ECalModel *model);
 void           e_cal_model_set_default_client  (ECalModel *model,
                                                 ECalClient *client);
 GList *                e_cal_model_list_clients        (ECalModel *model);
-void           e_cal_model_add_client          (ECalModel *model,
+gboolean       e_cal_model_add_client          (ECalModel *model,
                                                 ECalClient *cal_client);
 void           e_cal_model_remove_client       (ECalModel *model,
                                                 ECalClient *cal_client);
diff --git a/modules/calendar/e-cal-shell-view-private.c b/modules/calendar/e-cal-shell-view-private.c
index b0757b0..37e686e 100644
--- a/modules/calendar/e-cal-shell-view-private.c
+++ b/modules/calendar/e-cal-shell-view-private.c
@@ -334,9 +334,8 @@ cal_shell_view_selector_client_added_cb (ECalShellView *cal_shell_view,
        calendar = e_cal_shell_content_get_calendar (cal_shell_content);
        model = gnome_calendar_get_model (calendar);
 
-       e_cal_model_add_client (model, client);
-
-       gnome_calendar_update_query (calendar);
+       if (e_cal_model_add_client (model, client))
+               gnome_calendar_update_query (calendar);
 }
 
 static void


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