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-15 00:11:33 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-06-15 00:11:33 (GMT)
commit4301d174db5623094cb313a467a2abab34a2b381 (patch)
treed388cbc51e8f1cc1d33164167d266fcc1e41dc90 /shell/ev-properties.c
parenta09a209d6ad8446ad981c66ed3733d8f17263918 (diff)
Make it an object, cleanup the code, api to show it as transient and to
2005-06-15 Marco Pesenti Gritti <mpg@redhat.com> * shell/ev-properties.c: (ev_properties_dispose), (ev_properties_class_init), (dialog_destroy_cb), (ev_properties_init), (job_fonts_finished_cb), (setup_fonts_view), (ev_properties_set_document), (ev_properties_new), (ev_properties_show): * shell/ev-properties.h: Make it an object, cleanup the code, api to show it as transient and to set the document. * shell/ev-window.c: (ev_window_setup_document), (ev_window_cmd_file_properties): Adapt to EvProperties changes, do not show multiple times, update it when document changes.
Diffstat (limited to 'shell/ev-properties.c')
-rw-r--r--shell/ev-properties.c170
1 files changed, 123 insertions, 47 deletions
diff --git a/shell/ev-properties.c b/shell/ev-properties.c
index 295194f..b7c0bcc 100644
--- a/shell/ev-properties.c
+++ b/shell/ev-properties.c
@@ -26,6 +26,7 @@
#include "ev-document-fonts.h"
#include "ev-jobs.h"
#include "ev-job-queue.h"
+#include "ev-page-cache.h"
#include <glib/gi18n.h>
#include <gtk/gtk.h>
@@ -76,6 +77,82 @@ static const PropertyInfo properties_info[] = {
{ SECURITY_PROPERTY, "security" }
};
+struct _EvProperties {
+ GObject base_instance;
+
+ GladeXML *xml;
+
+ GtkWidget *dialog;
+ GtkWidget *fonts_treeview;
+ GtkWidget *fonts_progress_label;
+ GtkWidget *font_page;
+
+ EvDocument *document;
+};
+
+struct _EvPropertiesClass {
+ GObjectClass base_class;
+};
+
+G_DEFINE_TYPE (EvProperties, ev_properties, G_TYPE_OBJECT)
+
+static void
+ev_properties_dispose (GObject *object)
+{
+ EvProperties *properties = EV_PROPERTIES (object);
+
+ if (properties->xml) {
+ g_object_unref (properties->xml);
+ properties->xml = NULL;
+ }
+}
+
+static void
+ev_properties_class_init (EvPropertiesClass *properties_class)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (properties_class);
+
+ g_object_class->dispose = ev_properties_dispose;
+}
+
+static void
+dialog_destroy_cb (GtkWidget *dialog, EvProperties *properties)
+{
+ g_object_unref (properties);
+}
+
+static void
+ev_properties_init (EvProperties *properties)
+{
+ GladeXML *xml;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ /* Create a new GladeXML object from XML file glade_file */
+ xml = glade_xml_new (DATADIR "/evince-properties.glade", NULL, NULL);
+ properties->xml = xml;
+ g_assert (xml != NULL);
+
+ properties->dialog = glade_xml_get_widget (xml, "properties_dialog");
+ properties->fonts_treeview = glade_xml_get_widget (xml, "fonts_treeview");
+ properties->fonts_progress_label = glade_xml_get_widget (xml, "font_progress_label");
+ properties->font_page = glade_xml_get_widget (xml, "fonts_page");
+
+ 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 (properties->fonts_treeview), column);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), renderer, FALSE);
+ gtk_tree_view_column_set_title (GTK_TREE_VIEW_COLUMN (column), _("Name"));
+ gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
+ "text", EV_DOCUMENT_FONTS_COLUMN_NAME,
+ NULL);
+
+ g_signal_connect (properties->dialog, "destroy",
+ G_CALLBACK (dialog_destroy_cb), properties);
+}
+
/* Returns a locale specific date and time representation */
static char *
ev_properties_format_date (GTime utime)
@@ -120,24 +197,24 @@ update_progress_label (GtkWidget *label, double progress)
}
static void
-job_fonts_finished_cb (EvJob *job, GtkTreeView *tree_view)
-{
+job_fonts_finished_cb (EvJob *job, EvProperties *properties)
+{
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);
+ update_progress_label (properties->fonts_progress_label, progress);
if (EV_JOB_FONTS (job)->scan_completed) {
g_signal_handlers_disconnect_by_func
- (job, job_fonts_finished_cb, tree_view);
+ (job, job_fonts_finished_cb, properties);
} else {
+ GtkTreeModel *model;
EvJob *new_job;
- ev_document_fonts_fill_model (document_fonts,
- gtk_tree_view_get_model (tree_view));
+ model = gtk_tree_view_get_model
+ (GTK_TREE_VIEW (properties->fonts_treeview));
+ ev_document_fonts_fill_model (document_fonts, model);
new_job = ev_job_fonts_new (job->document);
ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
g_object_unref (new_job);
@@ -145,57 +222,37 @@ job_fonts_finished_cb (EvJob *job, GtkTreeView *tree_view)
}
static void
-setup_fonts_view (GladeXML *xml, EvDocument *document)
+setup_fonts_view (EvProperties *properties)
{
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
+ GtkTreeView *tree_view = GTK_TREE_VIEW (properties->fonts_treeview);
GtkListStore *list_store;
EvJob *job;
- GtkWidget *tree_view;
- GtkWidget *progress_label;
-
- 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 (tree_view), column);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), renderer, FALSE);
- gtk_tree_view_column_set_title (GTK_TREE_VIEW_COLUMN (column), _("Name"));
- gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
- "text", EV_DOCUMENT_FONTS_COLUMN_NAME,
- NULL);
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));
+ gtk_tree_view_set_model (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);
+ job = ev_job_fonts_new (properties->document);
g_signal_connect_object (job, "finished",
G_CALLBACK (job_fonts_finished_cb),
- tree_view, 0);
+ properties, 0);
ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
g_object_unref (job);
}
-GtkDialog *
-ev_properties_new (EvDocument *document, const EvDocumentInfo *info)
+void
+ev_properties_set_document (EvProperties *properties,
+ EvDocument *document)
{
- GladeXML *xml;
- GtkWidget *dialog;
+ EvPageCache *page_cache;
+ GladeXML *xml = properties->xml;
+ const EvDocumentInfo *info;
char *text;
-
- /* Create a new GladeXML object from XML file glade_file */
- xml = glade_xml_new (DATADIR "/evince-properties.glade", NULL, NULL);
- g_return_val_if_fail (xml != NULL, NULL);
- dialog = glade_xml_get_widget (xml, "properties_dialog");
- g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
-
+ properties->document = document;
+
+ page_cache = ev_page_cache_get (document);
+ info = ev_page_cache_get_info (page_cache);
+
if (info->fields_mask & EV_DOCUMENT_INFO_TITLE) {
set_property (xml, TITLE_PROPERTY, info->title);
}
@@ -246,10 +303,29 @@ ev_properties_new (EvDocument *document, const EvDocumentInfo *info)
}
if (EV_IS_DOCUMENT_FONTS (document)) {
- setup_fonts_view (xml, document);
+ gtk_widget_show (properties->font_page);
+ setup_fonts_view (properties);
} else {
- gtk_widget_hide (glade_xml_get_widget (xml, "fonts_page"));
+ gtk_widget_hide (properties->font_page);
}
+}
+
+EvProperties *
+ev_properties_new ()
+{
+ EvProperties *properties;
- return GTK_DIALOG (dialog);
+ properties = g_object_new (EV_TYPE_PROPERTIES, NULL);
+
+ return properties;
+}
+
+void
+ev_properties_show (EvProperties *properties, GtkWidget *parent)
+{
+ gtk_window_set_transient_for (GTK_WINDOW (properties->dialog),
+ GTK_WINDOW (parent));
+ g_signal_connect (properties->dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_widget_show (properties->dialog);
}