- int value;
-
- value = gtk_spin_button_get_value (GTK_SPIN_BUTTON (spin));
-
- g_signal_emit (action, signals[GOTO_PAGE_SIGNAL], 0, value);
+ EvPageAction *page = EV_PAGE_ACTION (action);
+ EvPageCache *page_cache;
+ const char *text;
+ gchar *page_label;
+ gint page_number;
+ gboolean changed;
+
+ text = gtk_entry_get_text (GTK_ENTRY (entry));
+ page_cache = page->priv->page_cache;
+
+ g_signal_emit (action, signals[ACTIVATE_LABEL], 0, text, &changed);
+
+ if (changed)
+ return;
+
+ /* Check whether it's a valid page number */
+ page_number = atoi (text) - 1;
+ if (page_number >= 0 &&
+ page_number < ev_page_cache_get_n_pages (page_cache)) {
+ page_label = ev_page_cache_get_page_label (page_cache, page_number);
+ gtk_entry_set_text (GTK_ENTRY (entry), page_label);
+ gtk_editable_set_position (GTK_EDITABLE (entry), -1);
+
+ g_signal_emit (action, signals[ACTIVATE_LABEL], 0, page_label, &changed);
+ g_free (page_label);
+
+ return;
+ }
+
+ /* rest the entry to the current page if we were unable to
+ * change it */
+ page_label = ev_page_cache_get_page_label (page_cache,
+ ev_page_cache_get_current_page (page_cache));
+ gtk_entry_set_text (GTK_ENTRY (entry), page_label);
+ gtk_editable_set_position (GTK_EDITABLE (entry), -1);
+ g_free (page_label);