From c4b192c34c4758bd078d1a212d69c6ae5084d6c8 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Wed, 19 Aug 2009 13:29:40 +0000 Subject: Move part of the EvPageCache to EvDocument The static data about the document is stored now in EvDocument class --- (limited to 'libmisc') diff --git a/libmisc/ev-page-action-widget.c b/libmisc/ev-page-action-widget.c index c24c756..249775c 100644 --- a/libmisc/ev-page-action-widget.c +++ b/libmisc/ev-page-action-widget.c @@ -42,9 +42,11 @@ struct _EvPageActionWidget { GtkToolItem parent; + EvDocument *document; + EvPageCache *page_cache; + GtkWidget *entry; GtkWidget *label; - EvPageCache *page_cache; guint signal_id; GtkTreeModel *filter_model; GtkTreeModel *model; @@ -56,14 +58,13 @@ G_DEFINE_TYPE (EvPageActionWidget, ev_page_action_widget, GTK_TYPE_TOOL_ITEM) static void update_pages_label (EvPageActionWidget *action_widget, - gint page, - EvPageCache *page_cache) + gint page) { char *label_text; gint n_pages; - n_pages = page_cache ? ev_page_cache_get_n_pages (page_cache) : 0; - if (page_cache && ev_page_cache_has_nonnumeric_page_labels (page_cache)) { + n_pages = ev_document_get_n_pages (action_widget->document); + if (ev_document_has_text_page_labels (action_widget->document)) { label_text = g_strdup_printf (_("(%d of %d)"), page + 1, n_pages); } else { label_text = g_strdup_printf (_("of %d"), n_pages); @@ -77,14 +78,14 @@ page_changed_cb (EvPageCache *page_cache, gint page, EvPageActionWidget *action_widget) { - if (page_cache && page >= 0) { + if (page >= 0) { gchar *page_label; gtk_entry_set_width_chars (GTK_ENTRY (action_widget->entry), - CLAMP (ev_page_cache_get_max_label_chars (page_cache), + CLAMP (ev_document_get_max_label_len (action_widget->document), 6, 12)); - page_label = ev_page_cache_get_page_label (page_cache, page); + page_label = ev_document_get_page_label (action_widget->document, page); gtk_entry_set_text (GTK_ENTRY (action_widget->entry), page_label); gtk_editable_set_position (GTK_EDITABLE (action_widget->entry), -1); g_free (page_label); @@ -93,7 +94,7 @@ page_changed_cb (EvPageCache *page_cache, gtk_entry_set_text (GTK_ENTRY (action_widget->entry), ""); } - update_pages_label (action_widget, page, page_cache); + update_pages_label (action_widget, page); } static gboolean @@ -104,7 +105,7 @@ page_scroll_cb (EvPageActionWidget *action_widget, GdkEventScroll *event) pageno = ev_page_cache_get_current_page (page_cache); if ((event->direction == GDK_SCROLL_DOWN) && - (pageno < ev_page_cache_get_n_pages (page_cache) - 1)) + (pageno < ev_document_get_n_pages (action_widget->document) - 1)) pageno++; if ((event->direction == GDK_SCROLL_UP) && (pageno > 0)) pageno--; @@ -139,8 +140,8 @@ activate_cb (EvPageActionWidget *action_widget) /* rest the entry to the current page if we were unable to * change it */ page_cache = action_widget->page_cache; - page_label = ev_page_cache_get_page_label (page_cache, - ev_page_cache_get_current_page (page_cache)); + page_label = ev_document_get_page_label (action_widget->document, + ev_page_cache_get_current_page (page_cache)); gtk_entry_set_text (GTK_ENTRY (action_widget->entry), page_label); gtk_editable_set_position (GTK_EDITABLE (action_widget->entry), -1); g_free (page_label); @@ -159,6 +160,7 @@ ev_page_action_widget_init (EvPageActionWidget *action_widget) gtk_widget_add_events (action_widget->entry, GDK_BUTTON_MOTION_MASK); gtk_entry_set_width_chars (GTK_ENTRY (action_widget->entry), 5); + gtk_entry_set_text (GTK_ENTRY (action_widget->entry), ""); g_signal_connect_swapped (action_widget->entry, "scroll-event", G_CALLBACK (page_scroll_cb), action_widget); @@ -186,9 +188,16 @@ ev_page_action_widget_init (EvPageActionWidget *action_widget) } void -ev_page_action_widget_set_page_cache (EvPageActionWidget *action_widget, - EvPageCache *page_cache) +ev_page_action_widget_set_document (EvPageActionWidget *action_widget, + EvDocument *document) { + EvPageCache *page_cache = ev_page_cache_get (document); + + g_object_ref (document); + if (action_widget->document) + g_object_unref (action_widget->document); + action_widget->document = document; + if (action_widget->page_cache != NULL) { if (action_widget->signal_id > 0) { g_signal_handler_disconnect (action_widget->page_cache, @@ -200,21 +209,16 @@ ev_page_action_widget_set_page_cache (EvPageActionWidget *action_widget, action_widget->page_cache = NULL; } - if (page_cache != NULL) { - action_widget->page_cache = page_cache; - g_object_add_weak_pointer (G_OBJECT (page_cache), - (gpointer)&action_widget->page_cache); - action_widget->signal_id = - g_signal_connect_object (page_cache, "page-changed", - G_CALLBACK (page_changed_cb), - action_widget, 0); - page_changed_cb (page_cache, - ev_page_cache_get_current_page (page_cache), - action_widget); - } else { - action_widget->signal_id = 0; - page_changed_cb (NULL, 0, action_widget); - } + action_widget->page_cache = page_cache; + g_object_add_weak_pointer (G_OBJECT (page_cache), + (gpointer)&action_widget->page_cache); + action_widget->signal_id = + g_signal_connect_object (page_cache, "page-changed", + G_CALLBACK (page_changed_cb), + action_widget, 0); + page_changed_cb (page_cache, + ev_page_cache_get_current_page (page_cache), + action_widget); } static void @@ -233,6 +237,11 @@ ev_page_action_widget_finalize (GObject *object) action_widget->page_cache = NULL; } + if (action_widget->document) { + g_object_unref (action_widget->document); + action_widget->document = NULL; + } + G_OBJECT_CLASS (ev_page_action_widget_parent_class)->finalize (object); } diff --git a/libmisc/ev-page-action-widget.h b/libmisc/ev-page-action-widget.h index 066cf5c..1c9ee35 100644 --- a/libmisc/ev-page-action-widget.h +++ b/libmisc/ev-page-action-widget.h @@ -41,6 +41,6 @@ GType ev_page_action_widget_get_type (void) G_GNUC_CONST; void ev_page_action_widget_update_model (EvPageActionWidget *proxy, GtkTreeModel *model); -void ev_page_action_widget_set_page_cache (EvPageActionWidget *action_widget, - EvPageCache *page_cache); +void ev_page_action_widget_set_document (EvPageActionWidget *action_widget, + EvDocument *document); void ev_page_action_widget_grab_focus (EvPageActionWidget *proxy); diff --git a/libmisc/ev-page-action.c b/libmisc/ev-page-action.c index ced1666..090712e 100644 --- a/libmisc/ev-page-action.c +++ b/libmisc/ev-page-action.c @@ -33,7 +33,7 @@ struct _EvPageActionPrivate { - EvPageCache *page_cache; + EvDocument *document; GtkTreeModel *model; }; @@ -55,7 +55,7 @@ G_DEFINE_TYPE (EvPageAction, ev_page_action, GTK_TYPE_ACTION) enum { PROP_0, - PROP_PAGE_CACHE, + PROP_DOCUMENT, PROP_MODEL, }; @@ -70,9 +70,10 @@ create_tool_item (GtkAction *action) } static void -update_page_cache (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *proxy) +update_document (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *proxy) { - ev_page_action_widget_set_page_cache (proxy, page->priv->page_cache); + if (page->priv->document) + ev_page_action_widget_set_document (proxy, page->priv->document); } static void @@ -97,14 +98,12 @@ static void connect_proxy (GtkAction *action, GtkWidget *proxy) { if (GTK_IS_TOOL_ITEM (proxy)) { - g_signal_connect_object (action, "notify::page-cache", - G_CALLBACK (update_page_cache), + g_signal_connect_object (action, "notify::document", + G_CALLBACK (update_document), proxy, 0); g_signal_connect (proxy, "activate_link", G_CALLBACK (activate_link_cb), action); - update_page_cache (EV_PAGE_ACTION (action), NULL, - EV_PAGE_ACTION_WIDGET (proxy)); g_signal_connect_object (action, "notify::model", G_CALLBACK (update_model), proxy, 0); @@ -118,9 +117,9 @@ ev_page_action_dispose (GObject *object) { EvPageAction *page = EV_PAGE_ACTION (object); - if (page->priv->page_cache) { - g_object_unref (page->priv->page_cache); - page->priv->page_cache = NULL; + if (page->priv->document) { + g_object_unref (page->priv->document); + page->priv->document = NULL; } G_OBJECT_CLASS (ev_page_action_parent_class)->dispose (object); @@ -133,18 +132,18 @@ ev_page_action_set_property (GObject *object, GParamSpec *pspec) { EvPageAction *page; - EvPageCache *page_cache; + EvDocument *document; GtkTreeModel *model; - + page = EV_PAGE_ACTION (object); switch (prop_id) { - case PROP_PAGE_CACHE: - page_cache = page->priv->page_cache; - page->priv->page_cache = EV_PAGE_CACHE (g_value_dup_object (value)); - if (page_cache) - g_object_unref (page_cache); + case PROP_DOCUMENT: + document = page->priv->document; + page->priv->document = EV_DOCUMENT (g_value_dup_object (value)); + if (document) + g_object_unref (document); break; case PROP_MODEL: model = page->priv->model; @@ -165,13 +164,13 @@ ev_page_action_get_property (GObject *object, GParamSpec *pspec) { EvPageAction *page; - + page = EV_PAGE_ACTION (object); switch (prop_id) { - case PROP_PAGE_CACHE: - g_value_set_object (value, page->priv->page_cache); + case PROP_DOCUMENT: + g_value_set_object (value, page->priv->document); break; case PROP_MODEL: g_value_set_object (value, page->priv->model); @@ -185,13 +184,8 @@ ev_page_action_get_property (GObject *object, void ev_page_action_set_document (EvPageAction *page, EvDocument *document) { - EvPageCache *page_cache = NULL; - - if (document) - page_cache = ev_page_cache_get (document); - g_object_set (page, - "page-cache", page_cache, + "document", document, "model", NULL, NULL); } @@ -251,11 +245,11 @@ ev_page_action_class_init (EvPageActionClass *class) G_TYPE_OBJECT); g_object_class_install_property (object_class, - PROP_PAGE_CACHE, - g_param_spec_object ("page-cache", - "Page Cache", - "Current page cache", - EV_TYPE_PAGE_CACHE, + PROP_DOCUMENT, + g_param_spec_object ("document", + "Document", + "Current document", + EV_TYPE_DOCUMENT, G_PARAM_READWRITE)); g_object_class_install_property (object_class, -- cgit v0.9.1