From e71d27db284ccf431167816167bf72f1e23c334d Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Sun, 03 Aug 2008 11:01:28 +0000 Subject: Rework the jobs system in order to make it simpler and more extensible. It 2008-08-03 Carlos Garcia Campos * 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 --- (limited to 'shell/ev-jobs.h') 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 * 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 -- cgit v0.9.1