diff options
Diffstat (limited to 'libmisc')
-rw-r--r-- | libmisc/Makefile.am | 1 | ||||
-rw-r--r-- | libmisc/ev-page-action-widget.c | 93 | ||||
-rw-r--r-- | libmisc/ev-page-action-widget.h | 12 | ||||
-rw-r--r-- | libmisc/ev-page-action.c | 100 | ||||
-rw-r--r-- | libmisc/ev-page-action.h | 14 |
5 files changed, 108 insertions, 112 deletions
diff --git a/libmisc/Makefile.am b/libmisc/Makefile.am index 290f574..38a43fa 100644 --- a/libmisc/Makefile.am +++ b/libmisc/Makefile.am @@ -10,6 +10,7 @@ libevmisc_la_CFLAGS = \ -DDATADIR=\"$(pkgdatadir)\" \ -I$(top_srcdir) \ -I$(top_srcdir)/libdocument \ + -I$(top_srcdir)/libview \ $(SHELL_CORE_CFLAGS) \ $(WARNING_CFLAGS) \ $(DISABLE_DEPRECATED) diff --git a/libmisc/ev-page-action-widget.c b/libmisc/ev-page-action-widget.c index 249775c..2b29e78 100644 --- a/libmisc/ev-page-action-widget.c +++ b/libmisc/ev-page-action-widget.c @@ -43,7 +43,7 @@ struct _EvPageActionWidget GtkToolItem parent; EvDocument *document; - EvPageCache *page_cache; + EvDocumentModel *doc_model; GtkWidget *entry; GtkWidget *label; @@ -74,9 +74,8 @@ update_pages_label (EvPageActionWidget *action_widget, } static void -page_changed_cb (EvPageCache *page_cache, - gint page, - EvPageActionWidget *action_widget) +ev_page_action_widget_set_current_page (EvPageActionWidget *action_widget, + gint page) { if (page >= 0) { gchar *page_label; @@ -97,19 +96,28 @@ page_changed_cb (EvPageCache *page_cache, update_pages_label (action_widget, page); } +static void +page_changed_cb (EvDocumentModel *model, + gint old_page, + gint new_page, + EvPageActionWidget *action_widget) +{ + ev_page_action_widget_set_current_page (action_widget, new_page); +} + static gboolean page_scroll_cb (EvPageActionWidget *action_widget, GdkEventScroll *event) { - EvPageCache *page_cache = action_widget->page_cache; + EvDocumentModel *model = action_widget->doc_model; gint pageno; - pageno = ev_page_cache_get_current_page (page_cache); + pageno = ev_document_model_get_page (model); if ((event->direction == GDK_SCROLL_DOWN) && (pageno < ev_document_get_n_pages (action_widget->document) - 1)) pageno++; if ((event->direction == GDK_SCROLL_UP) && (pageno > 0)) pageno--; - ev_page_cache_set_current_page (page_cache, pageno); + ev_document_model_set_page (model, pageno); return TRUE; } @@ -117,7 +125,7 @@ page_scroll_cb (EvPageActionWidget *action_widget, GdkEventScroll *event) static void activate_cb (EvPageActionWidget *action_widget) { - EvPageCache *page_cache; + EvDocumentModel *model; const char *text; gchar *page_label; EvLinkDest *link_dest; @@ -139,9 +147,9 @@ 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; + model = action_widget->doc_model; page_label = ev_document_get_page_label (action_widget->document, - ev_page_cache_get_current_page (page_cache)); + ev_document_model_get_page (model)); 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); @@ -187,38 +195,48 @@ ev_page_action_widget_init (EvPageActionWidget *action_widget) gtk_widget_show (GTK_WIDGET (action_widget)); } -void -ev_page_action_widget_set_document (EvPageActionWidget *action_widget, - EvDocument *document) +static void +ev_page_action_widget_document_changed_cb (EvDocumentModel *model, + GParamSpec *pspec, + EvPageActionWidget *action_widget) { - EvPageCache *page_cache = ev_page_cache_get (document); + EvDocument *document = ev_document_model_get_document (model); 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, - action_widget->signal_id); - action_widget->signal_id = 0; - } - g_object_remove_weak_pointer (G_OBJECT (action_widget->page_cache), - (gpointer)&action_widget->page_cache); - action_widget->page_cache = NULL; + if (action_widget->signal_id > 0) { + g_signal_handler_disconnect (action_widget->doc_model, + action_widget->signal_id); + action_widget->signal_id = 0; } - - 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_signal_connect_object (action_widget->doc_model, + "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); + + ev_page_action_widget_set_current_page (action_widget, + ev_document_model_get_page (model)); +} + +void +ev_page_action_widget_set_model (EvPageActionWidget *action_widget, + EvDocumentModel *model) +{ + if (action_widget->doc_model) { + g_object_remove_weak_pointer (G_OBJECT (action_widget->doc_model), + (gpointer)&action_widget->doc_model); + } + action_widget->doc_model = model; + g_object_add_weak_pointer (G_OBJECT (model), + (gpointer)&action_widget->doc_model); + + g_signal_connect (model, "notify::document", + G_CALLBACK (ev_page_action_widget_document_changed_cb), + action_widget); } static void @@ -226,15 +244,15 @@ ev_page_action_widget_finalize (GObject *object) { EvPageActionWidget *action_widget = EV_PAGE_ACTION_WIDGET (object); - if (action_widget->page_cache != NULL) { + if (action_widget->doc_model != NULL) { if (action_widget->signal_id > 0) { - g_signal_handler_disconnect (action_widget->page_cache, + g_signal_handler_disconnect (action_widget->doc_model, action_widget->signal_id); action_widget->signal_id = 0; } - g_object_remove_weak_pointer (G_OBJECT (action_widget->page_cache), - (gpointer)&action_widget->page_cache); - action_widget->page_cache = NULL; + g_object_remove_weak_pointer (G_OBJECT (action_widget->doc_model), + (gpointer)&action_widget->doc_model); + action_widget->doc_model = NULL; } if (action_widget->document) { @@ -432,7 +450,7 @@ get_filter_model_from_model (GtkTreeModel *model) void -ev_page_action_widget_update_model (EvPageActionWidget *proxy, GtkTreeModel *model) +ev_page_action_widget_update_links_model (EvPageActionWidget *proxy, GtkTreeModel *model) { GtkTreeModel *filter_model; GtkEntryCompletion *completion; @@ -470,7 +488,6 @@ ev_page_action_widget_update_model (EvPageActionWidget *proxy, GtkTreeModel *mod gtk_entry_set_completion (GTK_ENTRY (proxy->entry), completion); g_object_unref (completion); - g_object_unref (model); } void diff --git a/libmisc/ev-page-action-widget.h b/libmisc/ev-page-action-widget.h index 1c9ee35..52e09b6 100644 --- a/libmisc/ev-page-action-widget.h +++ b/libmisc/ev-page-action-widget.h @@ -36,11 +36,11 @@ struct _EvPageActionWidgetClass EvLink *link); }; -GType ev_page_action_widget_get_type (void) G_GNUC_CONST; +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_update_links_model (EvPageActionWidget *proxy, + GtkTreeModel *model); -void ev_page_action_widget_set_document (EvPageActionWidget *action_widget, - EvDocument *document); -void ev_page_action_widget_grab_focus (EvPageActionWidget *proxy); +void ev_page_action_widget_set_model (EvPageActionWidget *action_widget, + EvDocumentModel *doc_model); +void ev_page_action_widget_grab_focus (EvPageActionWidget *proxy); diff --git a/libmisc/ev-page-action.c b/libmisc/ev-page-action.c index 090712e..6c36351 100644 --- a/libmisc/ev-page-action.c +++ b/libmisc/ev-page-action.c @@ -33,7 +33,7 @@ struct _EvPageActionPrivate { - EvDocument *document; + EvDocumentModel *doc_model; GtkTreeModel *model; }; @@ -55,8 +55,7 @@ G_DEFINE_TYPE (EvPageAction, ev_page_action, GTK_TYPE_ACTION) enum { PROP_0, - PROP_DOCUMENT, - PROP_MODEL, + PROP_MODEL }; static GtkWidget * @@ -70,22 +69,9 @@ create_tool_item (GtkAction *action) } static void -update_document (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *proxy) -{ - if (page->priv->document) - ev_page_action_widget_set_document (proxy, page->priv->document); -} - -static void update_model (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *proxy) { - GtkTreeModel *model; - - g_object_get (G_OBJECT (page), - "model", &model, - NULL); - - ev_page_action_widget_update_model (proxy, model); + ev_page_action_widget_update_links_model (proxy, page->priv->model); } static void @@ -97,10 +83,11 @@ activate_link_cb (EvPageActionWidget *proxy, EvLink *link, EvPageAction *action) static void connect_proxy (GtkAction *action, GtkWidget *proxy) { + EvPageAction *page = EV_PAGE_ACTION (action); + if (GTK_IS_TOOL_ITEM (proxy)) { - g_signal_connect_object (action, "notify::document", - G_CALLBACK (update_document), - proxy, 0); + ev_page_action_widget_set_model (EV_PAGE_ACTION_WIDGET (proxy), + page->priv->doc_model); g_signal_connect (proxy, "activate_link", G_CALLBACK (activate_link_cb), action); @@ -117,11 +104,13 @@ ev_page_action_dispose (GObject *object) { EvPageAction *page = EV_PAGE_ACTION (object); - if (page->priv->document) { - g_object_unref (page->priv->document); - page->priv->document = NULL; + if (page->priv->model) { + g_object_unref (page->priv->model); + page->priv->model = NULL; } + page->priv->doc_model = NULL; + G_OBJECT_CLASS (ev_page_action_parent_class)->dispose (object); } @@ -131,25 +120,13 @@ ev_page_action_set_property (GObject *object, const GValue *value, GParamSpec *pspec) { - EvPageAction *page; - EvDocument *document; + EvPageAction *page = EV_PAGE_ACTION (object); GtkTreeModel *model; - page = EV_PAGE_ACTION (object); - switch (prop_id) { - 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; - page->priv->model = GTK_TREE_MODEL (g_value_dup_object (value)); - if (model) - g_object_unref (model); + ev_page_action_set_links_model (page, g_value_get_object (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -163,15 +140,10 @@ ev_page_action_get_property (GObject *object, GValue *value, GParamSpec *pspec) { - EvPageAction *page; - - page = EV_PAGE_ACTION (object); + EvPageAction *page = EV_PAGE_ACTION (object); switch (prop_id) { - case PROP_DOCUMENT: - g_value_set_object (value, page->priv->document); - break; case PROP_MODEL: g_value_set_object (value, page->priv->model); break; @@ -182,21 +154,33 @@ ev_page_action_get_property (GObject *object, } void -ev_page_action_set_document (EvPageAction *page, EvDocument *document) +ev_page_action_set_model (EvPageAction *page, + EvDocumentModel *model) { - g_object_set (page, - "document", document, - "model", NULL, - NULL); + g_return_if_fail (EV_IS_PAGE_ACTION (page)); + g_return_if_fail (EV_IS_DOCUMENT_MODEL (model)); + + if (page->priv->doc_model == model) + return; + + page->priv->doc_model = model; } void -ev_page_action_set_model (EvPageAction *page_action, - GtkTreeModel *model) +ev_page_action_set_links_model (EvPageAction *page, + GtkTreeModel *links_model) { - g_object_set (page_action, - "model", model, - NULL); + g_return_if_fail (EV_IS_PAGE_ACTION (page)); + g_return_if_fail (GTK_IS_TREE_MODEL (links_model)); + + if (page->priv->model == links_model) + return; + + if (page->priv->model) + g_object_unref (page->priv->model); + page->priv->model = g_object_ref (links_model); + + g_object_notify (G_OBJECT (page), "model"); } void @@ -245,18 +229,10 @@ ev_page_action_class_init (EvPageActionClass *class) G_TYPE_OBJECT); g_object_class_install_property (object_class, - PROP_DOCUMENT, - g_param_spec_object ("document", - "Document", - "Current document", - EV_TYPE_DOCUMENT, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_MODEL, g_param_spec_object ("model", "Model", - "Current Model", + "Current Links Model", GTK_TYPE_TREE_MODEL, G_PARAM_READWRITE)); diff --git a/libmisc/ev-page-action.h b/libmisc/ev-page-action.h index dc13bdd..1817089 100644 --- a/libmisc/ev-page-action.h +++ b/libmisc/ev-page-action.h @@ -24,6 +24,7 @@ #include <gtk/gtk.h> #include <evince-document.h> +#include <evince-view.h> G_BEGIN_DECLS @@ -54,12 +55,13 @@ struct _EvPageActionClass EvLink *link); }; -GType ev_page_action_get_type (void); -void ev_page_action_set_document (EvPageAction *page_action, - EvDocument *document); -void ev_page_action_set_model (EvPageAction *page_action, - GtkTreeModel *model); -void ev_page_action_grab_focus (EvPageAction *page_action); +GType ev_page_action_get_type (void) G_GNUC_CONST; + +void ev_page_action_set_model (EvPageAction *page_action, + EvDocumentModel *model); +void ev_page_action_set_links_model (EvPageAction *page_action, + GtkTreeModel *links_model); +void ev_page_action_grab_focus (EvPageAction *page_action); G_END_DECLS |