Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-jobs.h
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2008-08-03 11:01:28 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2008-08-03 11:01:28 (GMT)
commite71d27db284ccf431167816167bf72f1e23c334d (patch)
tree1f1d9aff48947adcbaecbdfe3b181f6adb00cb3e /shell/ev-jobs.h
parenta68744f0210c49bcaded78edd29e7198bf58f8e7 (diff)
Rework the jobs system in order to make it simpler and more extensible. It
2008-08-03 Carlos Garcia Campos <carlosgc@gnome.org> * libdocument/ev-document.[ch]: (ev_document_doc_mutex_trylock), (ev_document_fc_mutex_trylock): * shell/Makefile.am: * shell/ev-job-queue.[ch]: * shell/ev-job-scheduler.[ch]: * shell/ev-jobs.[ch]: (ev_job_init), (ev_job_dispose), (ev_job_class_init), (emit_finished), (ev_job_emit_finished), (ev_job_run), (ev_job_cancel), (ev_job_failed), (ev_job_failed_from_error), (ev_job_succeeded), (ev_job_is_finished), (ev_job_is_failed), (ev_job_get_run_mode), (ev_job_set_run_mode), (ev_job_links_init), (ev_job_links_run), (ev_job_links_class_init), (ev_job_render_init), (notify_page_ready), (ev_job_render_page_ready), (ev_job_render_run), (ev_job_render_class_init), (ev_job_thumbnail_init), (ev_job_thumbnail_run), (ev_job_thumbnail_class_init), (ev_job_fonts_init), (ev_job_fonts_run), (ev_job_fonts_class_init), (ev_job_load_init), (ev_job_load_run), (ev_job_load_class_init), (ev_job_save_init), (ev_job_save_dispose), (ev_job_save_run), (ev_job_save_class_init), (ev_job_print_init), (ev_job_print_dispose), (ev_job_print_run), (ev_job_print_class_init): * shell/ev-page-cache.c: * shell/ev-pixbuf-cache.[ch]: (dispose_cache_job_info), (check_job_size_and_unref), (move_one_job), (copy_job_to_job_info), (add_job), (ev_pixbuf_cache_add_jobs_if_needed): * shell/ev-properties-fonts.c: (ev_properties_fonts_dispose), (job_fonts_finished_cb), (job_fonts_updated_cb), (ev_properties_fonts_set_document): * shell/ev-sidebar-links.c: (ev_sidebar_links_dispose), (ev_sidebar_links_set_document): * shell/ev-sidebar-thumbnails.c: (clear_range), (add_range), (ev_sidebar_thumbnails_set_document), (ev_sidebar_thumbnails_clear_job): * shell/ev-view-private.h: * shell/ev-view.c: * shell/ev-window.c: (ev_window_clear_thumbnail_job), (ev_window_refresh_window_thumbnail), (password_dialog_response), (ev_window_clear_load_job), (ev_window_clear_reload_job), (ev_window_load_job_cb), (ev_window_reload_job_cb), (window_open_file_copy_ready_cb), (ev_window_open_uri), (ev_window_reload_document), (ev_window_clear_save_job), (ev_window_save_job_cb), (file_save_dialog_response_cb), (ev_window_clear_print_job), (ev_window_print_job_cb), (ev_window_print_dialog_response_cb): * shell/main.c: (main): Rework the jobs system in order to make it simpler and more extensible. It allows to run jobs in the main loop instead of using a thread when it's appropriate like the fonts job. Now it's also possible to cancel jobs that are currently running. svn path=/trunk/; revision=3092
Diffstat (limited to 'shell/ev-jobs.h')
-rw-r--r--shell/ev-jobs.h61
1 files changed, 42 insertions, 19 deletions
diff --git a/shell/ev-jobs.h b/shell/ev-jobs.h
index c63a32c..c0f9572 100644
--- a/shell/ev-jobs.h
+++ b/shell/ev-jobs.h
@@ -1,5 +1,6 @@
/* this file is part of evince, a gnome document viewer
*
+ * Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org>
* Copyright (C) 2005 Red Hat, Inc
*
* Evince is free software; you can redistribute it and/or modify it
@@ -55,6 +56,7 @@ typedef struct _EvJobPrintClass EvJobPrintClass;
#define EV_JOB(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB, EvJob))
#define EV_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB, EvJobClass))
#define EV_IS_JOB(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB))
+#define EV_JOB_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_JOB, EvJobClass))
#define EV_TYPE_JOB_LINKS (ev_job_links_get_type())
#define EV_JOB_LINKS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LINKS, EvJobLinks))
@@ -92,23 +94,38 @@ typedef struct _EvJobPrintClass EvJobPrintClass;
#define EV_IS_JOB_PRINT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_PRINT))
typedef enum {
- EV_JOB_PRIORITY_LOW,
- EV_JOB_PRIORITY_HIGH,
-} EvJobPriority;
+ EV_JOB_RUN_THREAD,
+ EV_JOB_RUN_MAIN_LOOP
+} EvJobRunMode;
struct _EvJob
{
GObject parent;
+
EvDocument *document;
- gboolean finished;
- gboolean async;
+
+ EvJobRunMode run_mode;
+
+ guint cancelled : 1;
+ guint finished : 1;
+ guint failed : 1;
+
+ GError *error;
+ GCancellable *cancellable;
+
+ guint idle_finished_id;
+ guint idle_cancelled_id;
};
struct _EvJobClass
{
GObjectClass parent_class;
- void (* finished) (EvJob *job);
+ gboolean (*run) (EvJob *job);
+
+ /* Signals */
+ void (* cancelled) (EvJob *job);
+ void (* finished) (EvJob *job);
};
struct _EvJobLinks
@@ -194,6 +211,9 @@ struct _EvJobFonts
struct _EvJobFontsClass
{
EvJobClass parent_class;
+
+ /* Signals */
+ void (* updated) (EvJobFonts *job);
};
struct _EvJobLoad
@@ -203,7 +223,6 @@ struct _EvJobLoad
EvLinkDest *dest;
EvWindowRunMode mode;
gchar *search_string;
- GError *error;
gchar *uri;
};
@@ -216,7 +235,6 @@ struct _EvJobSave
{
EvJob parent;
- GError *error;
gchar *uri;
gchar *document_uri;
};
@@ -230,7 +248,6 @@ struct _EvJobPrint
{
EvJob parent;
- GError *error;
const gchar *format;
gchar *temp_file;
EvPrintRange *ranges;
@@ -251,12 +268,26 @@ struct _EvJobPrintClass
/* Base job class */
GType ev_job_get_type (void) G_GNUC_CONST;
-void ev_job_finished (EvJob *job);
+gboolean ev_job_run (EvJob *job);
+void ev_job_cancel (EvJob *job);
+void ev_job_failed (EvJob *job,
+ GQuark domain,
+ gint code,
+ const gchar *format,
+ ...);
+void ev_job_failed_from_error (EvJob *job,
+ GError *error);
+void ev_job_succeeded (EvJob *job);
+gboolean ev_job_is_cancelled (EvJob *job);
+gboolean ev_job_is_finished (EvJob *job);
+gboolean ev_job_is_failed (EvJob *job);
+EvJobRunMode ev_job_get_run_mode (EvJob *job);
+void ev_job_set_run_mode (EvJob *job,
+ EvJobRunMode run_mode);
/* EvJobLinks */
GType ev_job_links_get_type (void) G_GNUC_CONST;
EvJob *ev_job_links_new (EvDocument *document);
-void ev_job_links_run (EvJobLinks *thumbnail);
/* EvJobRender */
GType ev_job_render_get_type (void) G_GNUC_CONST;
@@ -272,20 +303,15 @@ void ev_job_render_set_selection_info (EvJobRender *job,
EvSelectionStyle selection_style,
GdkColor *text,
GdkColor *base);
-void ev_job_render_run (EvJobRender *thumbnail);
-
/* EvJobThumbnail */
GType ev_job_thumbnail_get_type (void) G_GNUC_CONST;
EvJob *ev_job_thumbnail_new (EvDocument *document,
gint page,
gint rotation,
gdouble scale);
-void ev_job_thumbnail_run (EvJobThumbnail *thumbnail);
-
/* EvJobFonts */
GType ev_job_fonts_get_type (void) G_GNUC_CONST;
EvJob *ev_job_fonts_new (EvDocument *document);
-void ev_job_fonts_run (EvJobFonts *fonts);
/* EvJobLoad */
GType ev_job_load_get_type (void) G_GNUC_CONST;
@@ -295,14 +321,12 @@ EvJob *ev_job_load_new (const gchar *uri,
const gchar *search_string);
void ev_job_load_set_uri (EvJobLoad *load,
const gchar *uri);
-void ev_job_load_run (EvJobLoad *load);
/* EvJobSave */
GType ev_job_save_get_type (void) G_GNUC_CONST;
EvJob *ev_job_save_new (EvDocument *document,
const gchar *uri,
const gchar *document_uri);
-void ev_job_save_run (EvJobSave *save);
/* EvJobPrint */
GType ev_job_print_get_type (void) G_GNUC_CONST;
@@ -317,7 +341,6 @@ EvJob *ev_job_print_new (EvDocument *document,
gint copies,
gdouble collate,
gdouble reverse);
-void ev_job_print_run (EvJobPrint *print);
G_END_DECLS