Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/libmisc
diff options
context:
space:
mode:
Diffstat (limited to 'libmisc')
-rw-r--r--libmisc/Makefile.am1
-rw-r--r--libmisc/ev-page-action-widget.c93
-rw-r--r--libmisc/ev-page-action-widget.h12
-rw-r--r--libmisc/ev-page-action.c100
-rw-r--r--libmisc/ev-page-action.h14
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