+static void
+update_pages_label (EvPageActionWidget *action_widget,
+ gint page)
+{
+ char *label_text;
+ gint n_pages;
+
+ 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);
+ }
+ gtk_label_set_text (GTK_LABEL (action_widget->label), label_text);
+ g_free (label_text);
+}
+
+static void
+ev_page_action_widget_set_current_page (EvPageActionWidget *action_widget,
+ gint page)
+{
+ if (page >= 0) {
+ gchar *page_label;
+
+ gtk_entry_set_width_chars (GTK_ENTRY (action_widget->entry),
+ CLAMP (ev_document_get_max_label_len (action_widget->document),
+ 6, 12));
+
+ 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);
+
+ } else {
+ gtk_entry_set_text (GTK_ENTRY (action_widget->entry), "");
+ }
+
+ 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)
+{
+ EvDocumentModel *model = action_widget->doc_model;
+ gint pageno;
+
+ 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_document_model_set_page (model, pageno);
+
+ return TRUE;
+}
+
+static void
+activate_cb (EvPageActionWidget *action_widget)
+{
+ EvDocumentModel *model;
+ const char *text;
+ EvLinkDest *link_dest;
+ EvLinkAction *link_action;
+ EvLink *link;
+ gchar *link_text;
+ gint current_page;
+
+ model = action_widget->doc_model;
+ current_page = ev_document_model_get_page (model);
+
+ text = gtk_entry_get_text (GTK_ENTRY (action_widget->entry));
+
+ link_dest = ev_link_dest_new_page_label (text);
+ link_action = ev_link_action_new_dest (link_dest);
+ link_text = g_strdup_printf ("Page: %s", text);
+ link = ev_link_new (link_text, link_action);
+
+ g_signal_emit (action_widget, widget_signals[WIDGET_ACTIVATE_LINK], 0, link);
+
+ g_object_unref (link);
+ g_free (link_text);
+
+ if (current_page == ev_document_model_get_page (model))
+ ev_page_action_widget_set_current_page (action_widget, current_page);
+}
+