From 602f7fc6c5e5ff91e64de65758a6464431dbbcc9 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Fri, 15 Dec 2006 10:18:38 +0000 Subject: Check if text inserted in page entry is a valid page number when it 2006-12-15 Carlos Garcia Campos * shell/ev-page-action.[ch]: (activate_cb): * shell/ev-window.c: (activate_label_cb): Check if text inserted in page entry is a valid page number when it doesn't match to any document page label. Fixes bug #383165. --- (limited to 'shell/ev-page-action.c') diff --git a/shell/ev-page-action.c b/shell/ev-page-action.c index 52c74f5..7c28edc 100644 --- a/shell/ev-page-action.c +++ b/shell/ev-page-action.c @@ -33,6 +33,7 @@ #include #include #include +#include struct _EvPageActionPrivate { @@ -113,6 +114,8 @@ activate_cb (GtkWidget *entry, GtkAction *action) 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)); @@ -120,16 +123,30 @@ activate_cb (GtkWidget *entry, GtkAction *action) g_signal_emit (action, signals[ACTIVATE_LABEL], 0, text, &changed); - if (!changed) { - /* rest the entry to the current page if we were unable to - * change it */ - gchar *page_label = - ev_page_cache_get_page_label (page_cache, - ev_page_cache_get_current_page (page_cache)); + 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); } static GtkWidget * -- cgit v0.9.1