[evolution] eds-I#138 - Notify clients when backend is refreshing its content



commit 144b77ed13574cda1b4232e5630088f983c46010
Author: Milan Crha <mcrha redhat com>
Date:   Fri Aug 9 12:14:25 2019 +0200

    eds-I#138 - Notify clients when backend is refreshing its content
    
    Change how the view's progress notifications are handle for calendar
    and contacts, to show them in the same way in all the related GUI views.
    
    Related to https://gitlab.gnome.org/GNOME/evolution-data-server/issues/138

 src/addressbook/gui/widgets/e-addressbook-view.c   | 39 -------------------
 .../addressbook/e-book-shell-view-private.c        | 44 ++++++++++++++++++++++
 src/modules/calendar/e-cal-base-shell-content.c    | 18 ++++++---
 3 files changed, 56 insertions(+), 45 deletions(-)
---
diff --git a/src/addressbook/gui/widgets/e-addressbook-view.c 
b/src/addressbook/gui/widgets/e-addressbook-view.c
index dfe4c98ecc..d7c3101370 100644
--- a/src/addressbook/gui/widgets/e-addressbook-view.c
+++ b/src/addressbook/gui/widgets/e-addressbook-view.c
@@ -50,8 +50,6 @@
 
 #define d(x)
 
-static void    status_message                  (EAddressbookView *view,
-                                                const gchar *status, gint percent);
 static void    search_result                   (EAddressbookView *view,
                                                 const GError *error);
 static void    folder_bar_message              (EAddressbookView *view,
@@ -946,9 +944,6 @@ e_addressbook_view_new (EShellView *shell_view,
 
        view = E_ADDRESSBOOK_VIEW (widget);
 
-       g_signal_connect_swapped (
-               view->priv->model, "status_message",
-               G_CALLBACK (status_message), view);
        g_signal_connect_swapped (
                view->priv->model, "search_result",
                G_CALLBACK (search_result), view);
@@ -1078,40 +1073,6 @@ e_addressbook_view_get_paste_target_list (EAddressbookView *view)
        return view->priv->paste_target_list;
 }
 
-static void
-status_message (EAddressbookView *view,
-                const gchar *status,
-                gint percent)
-{
-       EActivity *activity;
-       EShellView *shell_view;
-       EShellBackend *shell_backend;
-
-       activity = view->priv->activity;
-       shell_view = e_addressbook_view_get_shell_view (view);
-       shell_backend = e_shell_view_get_shell_backend (shell_view);
-
-       if (status == NULL || *status == '\0') {
-               if (activity != NULL) {
-                       view->priv->activity = NULL;
-                       e_activity_set_state (activity, E_ACTIVITY_COMPLETED);
-                       g_object_unref (activity);
-               }
-
-       } else if (activity == NULL) {
-               activity = e_activity_new ();
-               view->priv->activity = activity;
-               e_activity_set_text (activity, status);
-               if (percent >= 0)
-                       e_activity_set_percent (activity, percent);
-               e_shell_backend_add_activity (shell_backend, activity);
-       } else {
-               e_activity_set_text (activity, status);
-               if (percent >= 0)
-                       e_activity_set_percent (activity, percent);
-       }
-}
-
 static void
 search_result (EAddressbookView *view,
                const GError *error)
diff --git a/src/modules/addressbook/e-book-shell-view-private.c 
b/src/modules/addressbook/e-book-shell-view-private.c
index 284b6f7b06..de22fa845c 100644
--- a/src/modules/addressbook/e-book-shell-view-private.c
+++ b/src/modules/addressbook/e-book-shell-view-private.c
@@ -304,6 +304,46 @@ exit:
        g_object_unref (view);
 }
 
+static void
+model_status_message_cb (EAddressbookModel *model,
+                        const gchar *message,
+                        gint percent,
+                        gpointer user_data)
+{
+       EShellView *shell_view = user_data;
+       EBookClient *book_client;
+       ESource *source;
+       ESourceSelector *selector;
+
+       g_return_if_fail (E_IS_ADDRESSBOOK_MODEL (model));
+       g_return_if_fail (E_IS_BOOK_SHELL_VIEW (shell_view));
+
+       book_client = e_addressbook_model_get_client (model);
+       source = e_client_get_source (E_CLIENT (book_client));
+
+       if (!source)
+               return;
+
+       selector = e_book_shell_sidebar_get_selector (E_BOOK_SHELL_SIDEBAR (e_shell_view_get_shell_sidebar 
(shell_view)));
+
+       if (message && *message) {
+               gchar *tooltip = NULL;
+
+               if (percent > 0) {
+                       /* Translators: This is a running activity whose percent complete is known. */
+                       tooltip = g_strdup_printf (_("%s (%d%% complete)"), message, percent);
+               }
+
+               e_source_selector_set_source_is_busy (selector, source, TRUE);
+               e_source_selector_set_source_tooltip (selector, source, tooltip ? tooltip : message);
+
+               g_free (tooltip);
+       } else {
+               e_source_selector_set_source_is_busy (selector, source, FALSE);
+               e_source_selector_set_source_tooltip (selector, source, NULL);
+       }
+}
+
 static void
 book_shell_view_activate_selected_source (EBookShellView *book_shell_view,
                                           ESourceSelector *selector)
@@ -385,6 +425,10 @@ book_shell_view_activate_selected_source (EBookShellView *book_shell_view,
                        G_CALLBACK (contacts_removed),
                        book_shell_view, G_CONNECT_SWAPPED);
 
+               g_signal_connect_object (
+                       model, "status-message",
+                       G_CALLBACK (model_status_message_cb), book_shell_view, 0);
+
                e_signal_connect_notify_object (
                        model, "notify::query",
                        G_CALLBACK (model_query_changed_cb),
diff --git a/src/modules/calendar/e-cal-base-shell-content.c b/src/modules/calendar/e-cal-base-shell-content.c
index d313d21639..5caf656957 100644
--- a/src/modules/calendar/e-cal-base-shell-content.c
+++ b/src/modules/calendar/e-cal-base-shell-content.c
@@ -133,15 +133,21 @@ cal_base_shell_content_view_state_changed_cb (ECalDataModel *data_model,
 
        if (state == E_CAL_DATA_MODEL_VIEW_STATE_START ||
            state == E_CAL_DATA_MODEL_VIEW_STATE_PROGRESS) {
-               e_source_selector_set_source_is_busy (selector, source, TRUE);
+               e_source_selector_set_source_is_busy (selector, source, state == 
E_CAL_DATA_MODEL_VIEW_STATE_START || (message && *message) || percent > 0);
 
-               if (message) {
-                       gchar *tooltip;
+               if (message && *message) {
+                       gchar *tooltip = NULL;
+
+                       if (percent > 0) {
+                               /* Translators: This is a running activity whose percent complete is known. */
+                               tooltip = g_strdup_printf (_("%s (%d%% complete)"), message, percent);
+                       }
+
+                       e_source_selector_set_source_tooltip (selector, source, tooltip ? tooltip : message);
 
-                       /* Translators: This is a running activity whose percent complete is known. */
-                       tooltip = g_strdup_printf (_("%s (%d%% complete)"), message, percent);
-                       e_source_selector_set_source_tooltip (selector, source, tooltip);
                        g_free (tooltip);
+               } else {
+                       e_source_selector_set_source_tooltip (selector, source, NULL);
                }
        } else {
                e_source_selector_set_source_is_busy (selector, source, FALSE);


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