]> www.fi.muni.cz Git - evince.git/blobdiff - libview/ev-jobs.c
[dualscreen] fix crash on ctrl+w and fix control window closing
[evince.git] / libview / ev-jobs.c
index 3e33886f7f4a761f029544dffe26abd88a803eeb..816a56bbb3c7987351291af6d82f778eb0c41243 100644 (file)
@@ -216,7 +216,7 @@ ev_job_run (EvJob *job)
 void
 ev_job_cancel (EvJob *job)
 {
-       if (job->cancelled || (job->finished && job->idle_finished_id == 0))
+       if (job->cancelled)
                return;
 
        ev_debug_message (DEBUG_JOBS, "job %s (%p) cancelled", EV_GET_TYPE_NAME (job), job);
@@ -225,6 +225,10 @@ ev_job_cancel (EvJob *job)
        /* This should never be called from a thread */
        job->cancelled = TRUE;
        g_cancellable_cancel (job->cancellable);
+
+        if (job->finished && job->idle_finished_id == 0)
+                return;
+
        g_signal_emit (job, job_signals[CANCELLED], 0);
 }
 
@@ -331,6 +335,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 +378,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;
@@ -780,7 +818,8 @@ ev_job_thumbnail_run (EvJob *job)
        g_object_unref (rc);
        ev_document_doc_mutex_unlock ();
 
-       job_thumb->thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
+       if (pixbuf)
+               job_thumb->thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
        g_object_unref (pixbuf);
 
        ev_job_succeeded (job);
@@ -1521,6 +1560,9 @@ ev_job_print_run (EvJob *job)
 
        ev_document_doc_mutex_unlock ();
 
+        if (g_cancellable_is_cancelled (job->cancellable))
+                return FALSE;
+
        cr_status = cairo_status (job_print->cr);
        if (cr_status == CAIRO_STATUS_SUCCESS) {
                ev_job_succeeded (job);