[devhelp] BookTree/Window: block signal handler at a more appropriate place



commit 229708ed538b8454bfc17e56ff7c1c1b88493ff9
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Fri May 18 22:03:48 2018 +0200

    BookTree/Window: block signal handler at a more appropriate place

 devhelp/dh-book-tree.c |   20 --------------------
 src/dh-window.c        |   44 ++++++++++++++++++++++++--------------------
 2 files changed, 24 insertions(+), 40 deletions(-)
---
diff --git a/devhelp/dh-book-tree.c b/devhelp/dh-book-tree.c
index cbd7af8..1b03b3e 100644
--- a/devhelp/dh-book-tree.c
+++ b/devhelp/dh-book-tree.c
@@ -1006,7 +1006,6 @@ dh_book_tree_select_uri (DhBookTree  *tree,
         DhBookTreePrivate *priv;
         GtkTreeSelection *selection;
         FindURIData data;
-        DhLink *link;
 
         g_return_if_fail (DH_IS_BOOK_TREE (tree));
         g_return_if_fail (uri != NULL);
@@ -1029,31 +1028,12 @@ dh_book_tree_select_uri (DhBookTree  *tree,
         if (gtk_tree_selection_iter_is_selected (selection, &data.iter))
                 goto out;
 
-        /* FIXME: it's strange to block the signal here. The signal handler
-         * should probably be blocked in DhWindow instead.
-         */
-        g_signal_handlers_block_by_func (selection,
-                                         book_tree_selection_changed_cb,
-                                         tree);
-
         gtk_tree_view_expand_to_path (GTK_TREE_VIEW (tree), data.path);
-
-        gtk_tree_model_get (GTK_TREE_MODEL (priv->store),
-                            &data.iter,
-                            COL_LINK, &link,
-                            -1);
-        g_clear_pointer (&priv->selected_link, (GDestroyNotify)dh_link_unref);
-        priv->selected_link = link;
         gtk_tree_selection_select_iter (selection, &data.iter);
-
         gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (tree),
                                       data.path, NULL,
                                       FALSE, 0.0, 0.0);
 
-        g_signal_handlers_unblock_by_func (selection,
-                                           book_tree_selection_changed_cb,
-                                           tree);
-
 out:
         gtk_tree_path_free (data.path);
 }
diff --git a/src/dh-window.c b/src/dh-window.c
index c59ad67..1f368db 100644
--- a/src/dh-window.c
+++ b/src/dh-window.c
@@ -623,6 +623,28 @@ sidebar_link_selected_cb (DhSidebar *sidebar,
 }
 
 static void
+sync_active_web_view_uri_to_sidebar (DhWindow *window)
+{
+        DhWindowPrivate *priv = dh_window_get_instance_private (window);
+        DhWebView *web_view;
+        const gchar *uri = NULL;
+
+        g_signal_handlers_block_by_func (priv->sidebar,
+                                         sidebar_link_selected_cb,
+                                         window);
+
+        web_view = get_active_web_view (window);
+        if (web_view != NULL)
+                uri = webkit_web_view_get_uri (WEBKIT_WEB_VIEW (web_view));
+        if (uri != NULL)
+                dh_sidebar_select_uri (priv->sidebar, uri);
+
+        g_signal_handlers_unblock_by_func (priv->sidebar,
+                                           sidebar_link_selected_cb,
+                                           window);
+}
+
+static void
 update_search_in_web_view (DhWindow  *window,
                            DhWebView *view)
 {
@@ -776,24 +798,11 @@ notebook_switch_page_after_cb (GtkNotebook *notebook,
                                guint        new_page_num,
                                DhWindow    *window)
 {
-        DhWindowPrivate *priv = dh_window_get_instance_private (window);
-
         update_window_title (window);
         update_zoom_actions_sensitivity (window);
         update_back_forward_actions_sensitivity (window);
         update_search_in_active_web_view (window);
-
-        if (new_page != NULL) {
-                DhWebView *web_view;
-                const gchar *uri;
-
-                web_view = dh_tab_get_web_view (DH_TAB (new_page));
-
-                /* Sync the book tree */
-                uri = webkit_web_view_get_uri (WEBKIT_WEB_VIEW (web_view));
-                if (uri != NULL)
-                        dh_sidebar_select_uri (priv->sidebar, uri);
-        }
+        sync_active_web_view_uri_to_sidebar (window);
 }
 
 static void
@@ -1024,14 +1033,9 @@ web_view_load_changed_cb (DhWebView       *web_view,
                           WebKitLoadEvent  load_event,
                           DhWindow        *window)
 {
-        DhWindowPrivate *priv = dh_window_get_instance_private (window);
-
         if (load_event == WEBKIT_LOAD_COMMITTED &&
             web_view == get_active_web_view (window)) {
-                const gchar *uri;
-
-                uri = webkit_web_view_get_uri (WEBKIT_WEB_VIEW (web_view));
-                dh_sidebar_select_uri (priv->sidebar, uri);
+                sync_active_web_view_uri_to_sidebar (window);
         }
 }
 


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