]> www.fi.muni.cz Git - evince.git/commitdiff
Fill links page labels for the index in the links thread
authorCarlos Garcia Campos <carlosgc@gnome.org>
Sun, 5 Sep 2010 09:39:16 +0000 (11:39 +0200)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Sun, 5 Sep 2010 09:41:50 +0000 (11:41 +0200)
Getting the page of a named destination requires to take the doc lock,
so it might block the main thread.

libview/ev-jobs.c
shell/ev-sidebar-links.c

index 3e33886f7f4a761f029544dffe26abd88a803eeb..561a0f98aaf1b179c67b3ba4865c24368ba85378 100644 (file)
@@ -331,6 +331,38 @@ ev_job_links_dispose (GObject *object)
        (* G_OBJECT_CLASS (ev_job_links_parent_class)->dispose) (object);
 }
 
+static gboolean
+fill_page_labels (GtkTreeModel   *tree_model,
+                 GtkTreePath    *path,
+                 GtkTreeIter    *iter,
+                 EvJob          *job)
+{
+       EvDocumentLinks *document_links;
+       EvLink          *link;
+       gchar           *page_label;
+
+       gtk_tree_model_get (tree_model, iter,
+                           EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+                           -1);
+
+       if (!link)
+               return FALSE;
+
+       document_links = EV_DOCUMENT_LINKS (job->document);
+       page_label = ev_document_links_get_link_page_label (document_links, link);
+       if (!page_label)
+               return FALSE;
+
+       gtk_tree_store_set (GTK_TREE_STORE (tree_model), iter,
+                           EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, page_label,
+                           -1);
+
+       g_free (page_label);
+       g_object_unref (link);
+
+       return FALSE;
+}
+
 static gboolean
 ev_job_links_run (EvJob *job)
 {
@@ -342,7 +374,9 @@ ev_job_links_run (EvJob *job)
        ev_document_doc_mutex_lock ();
        job_links->model = ev_document_links_get_links_model (EV_DOCUMENT_LINKS (job->document));
        ev_document_doc_mutex_unlock ();
-       
+
+       gtk_tree_model_foreach (job_links->model, (GtkTreeModelForeachFunc)fill_page_labels, job);
+
        ev_job_succeeded (job);
        
        return FALSE;
index 3d6885dffbc71ed32275baeacdf6d137387def2c..69856084a653328dd0262ae68850a9b39fe50ce1 100644 (file)
@@ -455,38 +455,6 @@ ev_sidebar_links_init (EvSidebarLinks *ev_sidebar_links)
        ev_sidebar_links_construct (ev_sidebar_links);
 }
 
-static gboolean
-fill_page_labels (GtkTreeModel   *tree_model,
-                  GtkTreePath    *path,
-                  GtkTreeIter    *iter,
-                 EvSidebarLinks *sidebar_links)
-{
-       EvDocumentLinks *document_links;
-       EvLink          *link;
-       gchar           *page_label;
-
-       gtk_tree_model_get (tree_model, iter,
-                           EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
-                           -1);
-
-       if (!link)
-               return FALSE;
-
-       document_links = EV_DOCUMENT_LINKS (sidebar_links->priv->document);
-       page_label = ev_document_links_get_link_page_label (document_links, link);
-       if (!page_label)
-               return FALSE;
-
-       gtk_tree_store_set (GTK_TREE_STORE (tree_model), iter,
-                           EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, page_label,
-                           -1);
-
-       g_free (page_label);
-       g_object_unref (link);
-
-       return FALSE;
-}
-
 /* Public Functions */
 
 GtkWidget *
@@ -653,8 +621,6 @@ job_finished_callback (EvJobLinks     *job,
 
        ev_sidebar_links_set_links_model (sidebar_links, job->model);
 
-       gtk_tree_model_foreach (priv->model, (GtkTreeModelForeachFunc)fill_page_labels, sidebar_links);
-
        gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), job->model);
        
        g_object_unref (job);