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-13 18:45:06 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-06-13 18:45:06 (GMT)
commit7fef38d9e59026334152230f1cd847e163e8457c (patch)
tree83fb7731c11b20f6447c6e50cd62b1253acb0360 /shell/ev-properties.c
parent2b426ab269babe95b051894c1484929543e19ce9 (diff)
Separate scan and fill so that we can incrementally fill from the main
2005-06-13 Marco Pesenti Gritti <mpg@redhat.com> * backend/ev-document-fonts.c: (ev_document_fonts_get_progress), (ev_document_fonts_scan), (ev_document_fonts_fill_model): * backend/ev-document-fonts.h: Separate scan and fill so that we can incrementally fill from the main thread. Add a progress api. * data/evince-properties.glade: * pdf/ev-poppler.cc: * shell/ev-jobs.c: (ev_job_fonts_new), (ev_job_fonts_run): * shell/ev-jobs.h: * shell/ev-properties.c: (update_progress_label), (job_fonts_finished_cb), (setup_fonts_view): Incrementally feel the list and show the progress percentage in a label like acrobat does.
Diffstat (limited to 'shell/ev-properties.c')
-rw-r--r--shell/ev-properties.c78
1 files changed, 44 insertions, 34 deletions
diff --git a/shell/ev-properties.c b/shell/ev-properties.c
index 6007f13..e8eca8f 100644
--- a/shell/ev-properties.c
+++ b/shell/ev-properties.c
@@ -106,61 +106,60 @@ set_property (GladeXML *xml, Property property, const char *text)
}
static void
+update_progress_label (GtkWidget *label, double progress)
+{
+ if (progress > 0) {
+ char *progress_text;
+ progress_text = g_strdup_printf (_("Gathering font information... %3d%%"),
+ (int) (progress * 100));
+ gtk_label_set_text (GTK_LABEL (label), progress_text);
+ g_free (progress_text);
+ } else {
+ gtk_label_set_text (GTK_LABEL (label), "");
+ }
+}
+
+static void
job_fonts_finished_cb (EvJob *job, GtkTreeView *tree_view)
{
- GtkTreeModel *model = EV_JOB_FONTS (job)->model;
+ EvDocumentFonts *document_fonts = EV_DOCUMENT_FONTS (job->document);
+ GtkWidget *progress_label;
+ double progress;
+
+ progress_label = g_object_get_data (G_OBJECT (tree_view), "progress_label");
+ progress = ev_document_fonts_get_progress (document_fonts);
+ update_progress_label (progress_label, progress);
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);
+ EvJob *new_job;
+
+ ev_document_fonts_fill_model (document_fonts,
+ gtk_tree_view_get_model (tree_view));
+ new_job = ev_job_fonts_new (job->document);
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");
-
- 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);
+ EvJob *job;
+ GtkWidget *tree_view;
+ GtkWidget *progress_label;
- gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (list_store));
- g_object_unref (list_store);
+ tree_view = glade_xml_get_widget (xml, "fonts_treeview");
+ progress_label = glade_xml_get_widget (xml, "font_progress_label");
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
- gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), renderer, FALSE);
@@ -169,7 +168,18 @@ setup_fonts_view (GladeXML *xml, EvDocument *document)
"text", EV_DOCUMENT_FONTS_COLUMN_NAME,
NULL);
- fill_fonts_treeview (GTK_TREE_VIEW (widget), document);
+ list_store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view),
+ GTK_TREE_MODEL (list_store));
+
+ job = ev_job_fonts_new (document);
+ g_object_set_data (G_OBJECT (tree_view), "progress_label",
+ progress_label);
+ 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);
}
GtkDialog *