Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-jobs.c
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2007-07-26 17:19:49 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2007-07-26 17:19:49 (GMT)
commit0316bea7b62a35a692afad8cef9ecfb4a1d6a4f5 (patch)
tree11616346c2778f19be43aa24963a861d7e307096 /shell/ev-jobs.c
parente70119b293ab8a26bdea4a56407bb0f41f1e43aa (diff)
Add page_ready signal to notify that page is ready as soon as possible
2007-07-26 Carlos Garcia Campos <carlosgc@gnome.org> * shell/ev-pixbuf-cache.c: (job_page_ready_cb), (job_finished_cb), (copy_job_page_and_selection_to_job_info), (copy_job_to_job_info), (add_job), (ev_pixbuf_cache_get_surface), (ev_pixbuf_cache_get_link_mapping), (ev_pixbuf_cache_get_image_mapping), (ev_pixbuf_cache_get_form_field_mapping), (ev_pixbuf_cache_get_text_mapping): * shell/ev-jobs.[ch]: (ev_job_render_class_init), (notify_page_ready), (ev_job_render_page_ready), (ev_job_render_run): Add page_ready signal to notify that page is ready as soon as possible even if other page elements like links, forms, images or text mapping are not ready yet. svn path=/trunk/; revision=2581
Diffstat (limited to 'shell/ev-jobs.c')
-rw-r--r--shell/ev-jobs.c69
1 files changed, 50 insertions, 19 deletions
diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c
index d61185c..d5d45f2 100644
--- a/shell/ev-jobs.c
+++ b/shell/ev-jobs.c
@@ -32,13 +32,18 @@ static void ev_job_load_class_init (EvJobLoadClass *class);
static void ev_job_print_init (EvJobPrint *job);
static void ev_job_print_class_init (EvJobPrintClass *class);
-enum
-{
+enum {
FINISHED,
LAST_SIGNAL
};
+enum {
+ PAGE_READY,
+ RENDER_LAST_SIGNAL
+};
+
static guint job_signals[LAST_SIGNAL] = { 0 };
+static guint job_render_signals[RENDER_LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
@@ -152,6 +157,15 @@ ev_job_render_class_init (EvJobRenderClass *class)
oclass = G_OBJECT_CLASS (class);
+ job_render_signals [PAGE_READY] =
+ g_signal_new ("page-ready",
+ EV_TYPE_JOB_RENDER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvJobRenderClass, page_ready),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
oclass->dispose = ev_job_render_dispose;
}
@@ -316,6 +330,21 @@ render_finished_cb (EvDocument *document,
ev_job_finished (EV_JOB (job));
}
+static gboolean
+notify_page_ready (EvJobRender *job)
+{
+ g_signal_emit (job, job_render_signals[PAGE_READY], 0);
+
+ return FALSE;
+}
+
+static void
+ev_job_render_page_ready (EvJobRender *job)
+{
+ job->page_ready = TRUE;
+ g_idle_add ((GSourceFunc)notify_page_ready, job);
+}
+
void
ev_job_render_run (EvJobRender *job)
{
@@ -333,23 +362,6 @@ ev_job_render_run (EvJobRender *job)
ev_document_fc_mutex_lock ();
job->surface = ev_document_render (EV_JOB (job)->document, job->rc);
-
- if (job->include_links && EV_IS_DOCUMENT_LINKS (EV_JOB (job)->document))
- job->link_mapping =
- ev_document_links_get_links (EV_DOCUMENT_LINKS (EV_JOB (job)->document),
- job->rc->page);
- if (job->include_images && EV_IS_DOCUMENT_IMAGES (EV_JOB (job)->document))
- job->image_mapping =
- ev_document_images_get_images (EV_DOCUMENT_IMAGES (EV_JOB (job)->document),
- job->rc->page);
- if (job->include_forms && EV_IS_DOCUMENT_FORMS (EV_JOB (job)->document))
- job->form_field_mapping =
- ev_document_forms_get_form_fields (EV_DOCUMENT_FORMS (EV_JOB(job)->document),
- job->rc->page);
- if (job->include_text && EV_IS_SELECTION (EV_JOB (job)->document))
- job->text_mapping =
- ev_selection_get_selection_map (EV_SELECTION (EV_JOB (job)->document),
- job->rc);
if (job->include_selection && EV_IS_SELECTION (EV_JOB (job)->document)) {
ev_selection_render_selection (EV_SELECTION (EV_JOB (job)->document),
job->rc,
@@ -362,8 +374,27 @@ ev_job_render_run (EvJobRender *job)
job->rc,
&(job->selection_points));
}
+
+ ev_job_render_page_ready (job);
ev_document_fc_mutex_unlock ();
+
+ if (job->include_text && EV_IS_SELECTION (EV_JOB (job)->document))
+ job->text_mapping =
+ ev_selection_get_selection_map (EV_SELECTION (EV_JOB (job)->document),
+ job->rc);
+ if (job->include_links && EV_IS_DOCUMENT_LINKS (EV_JOB (job)->document))
+ job->link_mapping =
+ ev_document_links_get_links (EV_DOCUMENT_LINKS (EV_JOB (job)->document),
+ job->rc->page);
+ if (job->include_forms && EV_IS_DOCUMENT_FORMS (EV_JOB (job)->document))
+ job->form_field_mapping =
+ ev_document_forms_get_form_fields (EV_DOCUMENT_FORMS (EV_JOB(job)->document),
+ job->rc->page);
+ if (job->include_images && EV_IS_DOCUMENT_IMAGES (EV_JOB (job)->document))
+ job->image_mapping =
+ ev_document_images_get_images (EV_DOCUMENT_IMAGES (EV_JOB (job)->document),
+ job->rc->page);
EV_JOB (job)->finished = TRUE;
}