]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-sidebar-links.c
Use document info from page cache instead of document itself. fix for crash
[evince.git] / shell / ev-sidebar-links.c
index 1d73822b5567cb23b22e312d6c4af9455474e9a6..688200732fc77c742f2d68c8f0b1b470856a2957 100644 (file)
@@ -67,6 +67,8 @@ static void row_activated_callback                    (GtkTreeView *treeview,
                                                         GtkTreePath *arg1,
                                                         GtkTreeViewColumn *arg2,
                                                         gpointer user_data);
+static void job_finished_callback                      (EvJobLinks     *job,
+                                                        EvSidebarLinks *sidebar_links);
 static void ev_sidebar_links_page_iface_init           (EvSidebarPageIface *iface);
 static void ev_sidebar_links_set_document                      (EvSidebarPage  *sidebar_page,
                                                         EvDocument     *document);
@@ -143,6 +145,14 @@ ev_sidebar_links_dispose (GObject *object)
                sidebar->priv->page_cache = NULL;
        }
 
+       if (sidebar->priv->job) {
+               g_signal_handlers_disconnect_by_func (sidebar->priv->job,
+                                                     job_finished_callback, sidebar);
+               ev_job_queue_remove_job (sidebar->priv->job);                                                 
+               g_object_unref (sidebar->priv->job);
+               sidebar->priv->job = NULL;
+       }
+
        G_OBJECT_CLASS (ev_sidebar_links_parent_class)->dispose (object);
 }
 
@@ -523,6 +533,7 @@ job_finished_callback (EvJobLinks     *job,
 
        gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), job->model);
        g_object_unref (job);
+       priv->job = NULL;
 
        /* Expand one level of the tree */
        path = gtk_tree_path_new_first ();
@@ -572,6 +583,13 @@ ev_sidebar_links_set_document (EvSidebarPage  *sidebar_page,
        priv->document = g_object_ref (document);
        priv->page_cache = ev_document_get_page_cache (document);
 
+       if (priv->job) {
+               g_signal_handlers_disconnect_by_func (priv->job,
+                                                     job_finished_callback,
+                                                     sidebar_links);
+               g_object_unref (priv->job);
+       }
+
        priv->job = ev_job_links_new (document);
        g_signal_connect (priv->job,
                          "finished",
@@ -579,7 +597,6 @@ ev_sidebar_links_set_document (EvSidebarPage  *sidebar_page,
                          sidebar_links);
        /* The priority doesn't matter for this job */
        ev_job_queue_add_job (priv->job, EV_JOB_PRIORITY_LOW);
-
 }
 
 static gboolean