Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell/ev-properties.c
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <mpg@redhat.com>2005-06-11 14:15:42 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-06-11 14:15:42 (GMT)
commitcbdeaed3897f8fdd01995a356c1e3a829fffbf7e (patch)
treecdecbff828fe40a30bb201cf6e883f3674b5aafc /shell/ev-properties.c
parente1dd38e5d83e54780cdc37a02f2e3e44eee6400a (diff)
Make fonts model fill incrementally.
2005-06-11 Marco Pesenti Gritti <mpg@redhat.com> * backend/ev-document-fonts.c: (ev_document_fonts_fill_model): * backend/ev-document-fonts.h: * pdf/ev-poppler.cc: Make fonts model fill incrementally. * shell/ev-job-queue.c: (handle_job), (search_for_jobs_unlocked), (no_jobs_available_unlocked), (ev_job_queue_init), (find_queue), (ev_job_queue_remove_job): * shell/ev-jobs.c: (ev_job_fonts_init), (ev_job_fonts_class_init), (ev_job_fonts_new), (ev_job_fonts_run): * shell/ev-jobs.h: New job for fonts scanning * shell/ev-properties.c: (job_fonts_finished_cb), (fill_fonts_treeview), (setup_fonts_view), (ev_properties_new): * shell/ev-properties.h: * shell/ev-window.c: (ev_window_cmd_file_properties): Incrementally feel the treeview using the new job. Show Loading... message until scanning is completed. Hopefully I didnt break the build without the poppler patch.
Diffstat (limited to 'shell/ev-properties.c')
-rw-r--r--shell/ev-properties.c63
1 files changed, 57 insertions, 6 deletions
diff --git a/shell/ev-properties.c b/shell/ev-properties.c
index 7830384..6007f13 100644
--- a/shell/ev-properties.c
+++ b/shell/ev-properties.c
@@ -24,6 +24,8 @@
#include "ev-properties.h"
#include "ev-document-fonts.h"
+#include "ev-jobs.h"
+#include "ev-job-queue.h"
#include <glib/gi18n.h>
#include <gtk/gtk.h>
@@ -31,6 +33,12 @@
#include <time.h>
#include <sys/time.h>
+enum
+{
+ FONT_NAME_COL,
+ NUM_COLS
+};
+
typedef enum
{
TITLE_PROPERTY,
@@ -98,14 +106,57 @@ set_property (GladeXML *xml, Property property, const char *text)
}
static void
-setup_fonts_view (GladeXML *xml, GtkTreeModel *fonts)
+job_fonts_finished_cb (EvJob *job, GtkTreeView *tree_view)
+{
+ GtkTreeModel *model = EV_JOB_FONTS (job)->model;
+
+ if (EV_JOB_FONTS (job)->scan_completed) {
+ g_signal_handlers_disconnect_by_func
+ (job, job_fonts_finished_cb, tree_view);
+ gtk_tree_view_set_model (tree_view, model);
+ } else {
+ EvJob *new_job = ev_job_fonts_new (job->document, model);
+ ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
+ g_object_unref (new_job);
+ }
+}
+
+static void
+fill_fonts_treeview (GtkTreeView *tree_view,
+ EvDocument *document)
+{
+ GtkListStore *list_store;
+ EvJob *job;
+
+ list_store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING);
+ g_object_set_data_full (G_OBJECT (tree_view), "list_store",
+ list_store, g_object_unref);
+
+ job = ev_job_fonts_new (document, GTK_TREE_MODEL (list_store));
+ g_signal_connect_object (job, "finished",
+ G_CALLBACK (job_fonts_finished_cb),
+ tree_view, 0);
+ ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
+ g_object_unref (job);
+}
+
+static void
+setup_fonts_view (GladeXML *xml, EvDocument *document)
{
GtkWidget *widget;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
+ GtkListStore *list_store;
+ GtkTreeIter iter;
widget = glade_xml_get_widget (xml, "fonts_treeview");
- gtk_tree_view_set_model (GTK_TREE_VIEW (widget), fonts);
+
+ list_store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING);
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter, FONT_NAME_COL, _("Loading..."), -1);
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (list_store));
+ g_object_unref (list_store);
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
@@ -117,10 +168,12 @@ setup_fonts_view (GladeXML *xml, GtkTreeModel *fonts)
gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
"text", EV_DOCUMENT_FONTS_COLUMN_NAME,
NULL);
+
+ fill_fonts_treeview (GTK_TREE_VIEW (widget), document);
}
GtkDialog *
-ev_properties_new (const EvDocumentInfo *info, GtkTreeModel *fonts)
+ev_properties_new (EvDocument *document, const EvDocumentInfo *info)
{
GladeXML *xml;
GtkWidget *dialog;
@@ -182,9 +235,7 @@ ev_properties_new (const EvDocumentInfo *info, GtkTreeModel *fonts)
set_property (xml, SECURITY_PROPERTY, info->security);
}
- if (fonts) {
- setup_fonts_view (xml, fonts);
- }
+ setup_fonts_view (xml, document);
return GTK_DIALOG (dialog);
}