]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
s/next page/page down s/previous page/page up
[evince.git] / shell / ev-window.c
index a1e86548c70aeeeef44e892d8650d98f72e38edf..007ca8893ac86d434178bde2ad9beb9d35b3695e 100644 (file)
@@ -29,6 +29,8 @@
 #endif
 
 #include "ev-window.h"
+#include "ev-navigation-action.h"
+#include "ev-page-action.h"
 #include "ev-sidebar.h"
 #include "ev-sidebar-bookmarks.h"
 #include "ev-sidebar-thumbnails.h"
@@ -73,6 +75,7 @@ struct _EvWindowPrivate {
        guint help_message_cid;
        GtkWidget *exit_fullscreen_popup;
        char *uri;
+       GtkAction *page_action;
 
        EvDocument *document;
 
@@ -182,8 +185,8 @@ update_action_sensitivity (EvWindow *ev_window)
        page = ev_view_get_page (EV_VIEW (ev_window->priv->view));
 
        set_action_sensitive (ev_window, "GoFirstPage", page > 1);
-       set_action_sensitive (ev_window, "GoPreviousPage", page > 1);
-       set_action_sensitive (ev_window, "GoNextPage", page < n_pages);
+       set_action_sensitive (ev_window, "GoPageDown", page > 1);
+       set_action_sensitive (ev_window, "GoPageUp", page < n_pages);
        set_action_sensitive (ev_window, "GoLastPage", page < n_pages);
 }
 
@@ -270,6 +273,17 @@ update_window_title (EvDocument *document, GParamSpec *pspec, EvWindow *ev_windo
        g_free (title);
 }
 
+static void
+update_total_pages (EvWindow *ev_window)
+{
+       EvPageAction *page_action;
+       int pages;
+
+       pages = ev_document_get_n_pages (ev_window->priv->document);
+       page_action = EV_PAGE_ACTION (ev_window->priv->page_action);
+       ev_page_action_set_total_pages (page_action, pages);
+}
+
 void
 ev_window_open (EvWindow *ev_window, const char *uri)
 {
@@ -308,8 +322,8 @@ ev_window_open (EvWindow *ev_window, const char *uri)
                        ev_sidebar_set_document (EV_SIDEBAR (ev_window->priv->sidebar),
                                                 document);
 
+                       update_total_pages (ev_window);
                        update_action_sensitivity (ev_window);
-               
                } else {
                        g_assert (error != NULL);
                        g_object_unref (document);
@@ -741,7 +755,7 @@ ev_window_cmd_go_forward (GtkAction *action, EvWindow *ev_window)
 }
 
 static void
-ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window)
+ev_window_cmd_go_page_up (GtkAction *action, EvWindow *ev_window)
 {
         g_return_if_fail (EV_IS_WINDOW (ev_window));
 
@@ -750,7 +764,7 @@ ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window)
 }
 
 static void
-ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window)
+ev_window_cmd_go_page_down (GtkAction *action, EvWindow *ev_window)
 {
         g_return_if_fail (EV_IS_WINDOW (ev_window));
 
@@ -922,10 +936,22 @@ disconnect_proxy_cb (GtkUIManager *ui_manager, GtkAction *action,
        }
 }
 
+static void
+update_current_page (EvWindow *ev_window)
+{
+       EvPageAction *page_action;
+       int page;
+
+       page = ev_view_get_page (EV_VIEW (ev_window->priv->view));
+       page_action = EV_PAGE_ACTION (ev_window->priv->page_action);
+       ev_page_action_set_current_page (page_action, page);
+}
+
 static void
 view_page_changed_cb (EvView   *view,
                      EvWindow *ev_window)
 {
+       update_current_page (ev_window);
        update_action_sensitivity (ev_window);
 }
 
@@ -1126,12 +1152,12 @@ static GtkActionEntry entries[] = {
         { "GoForward", GTK_STOCK_GO_FORWARD, N_("Fo_rward"), "<mod1>Right",
           N_("Go to the page viewed before this one"),
           G_CALLBACK (ev_window_cmd_go_forward) },
-        { "GoPreviousPage", GTK_STOCK_GO_BACK, N_("_Previous Page"), "<control>Page_Up",
+        { "GoPageDown", GTK_STOCK_GO_UP, N_("_Page Up"), "<control>Page_Up",
           N_("Go to the previous page"),
-          G_CALLBACK (ev_window_cmd_go_previous_page) },
-        { "GoNextPage", GTK_STOCK_GO_FORWARD, N_("_Next Page"), "<control>Page_Down",
+          G_CALLBACK (ev_window_cmd_go_page_up) },
+        { "GoPageUp", GTK_STOCK_GO_DOWN, N_("_Page Down"), "<control>Page_Down",
           N_("Go to the next page"),
-          G_CALLBACK (ev_window_cmd_go_next_page) },
+          G_CALLBACK (ev_window_cmd_go_page_down) },
         { "GoFirstPage", GTK_STOCK_GOTO_FIRST, N_("_First Page"), "<control>Home",
           N_("Go to the first page"),
           G_CALLBACK (ev_window_cmd_go_first_page) },        
@@ -1166,6 +1192,53 @@ static GtkToggleActionEntry toggle_entries[] = {
           G_CALLBACK (ev_window_cmd_view_fullscreen) },
 };
 
+static void
+goto_page_cb (GtkAction *action, int page_number, EvWindow *ev_window)
+{
+
+       ev_view_set_page (EV_VIEW (ev_window->priv->view), page_number);
+}
+
+static void
+register_custom_actions (EvWindow *window, GtkActionGroup *group)
+{
+       GtkAction *action;
+
+       action = g_object_new (EV_TYPE_NAVIGATION_ACTION,
+                              "name", "NavigationBack",
+                              "label", _("Back"),
+                              "stock_id", GTK_STOCK_GO_BACK,
+                              "tooltip", _("Go back"),
+                              "arrow-tooltip", _("Back history"),
+                              "direction", EV_NAVIGATION_DIRECTION_BACK,
+                              "is_important", TRUE,
+                              NULL);
+       gtk_action_group_add_action (group, action);
+       g_object_unref (action);
+
+       action = g_object_new (EV_TYPE_NAVIGATION_ACTION,
+                              "name", "NavigationForward",
+                              "label", _("Forward"),
+                              "stock_id", GTK_STOCK_GO_FORWARD,
+                              "tooltip", _("Go forward"),
+                              "arrow-tooltip", _("Forward history"),
+                              "direction", EV_NAVIGATION_DIRECTION_FORWARD,
+                              NULL);
+       gtk_action_group_add_action (group, action);
+       g_object_unref (action);
+
+       action = g_object_new (EV_TYPE_PAGE_ACTION,
+                              "name", "PageSelector",
+                              "label", _("Page"),
+                              "tooltip", _("Select Page"),
+                              NULL);
+       g_signal_connect (action, "goto_page",
+                         G_CALLBACK (goto_page_cb), window);
+       window->priv->page_action = action;
+       gtk_action_group_add_action (group, action);
+       g_object_unref (action);
+}
+
 static void
 ev_window_init (EvWindow *ev_window)
 {
@@ -1194,6 +1267,8 @@ ev_window_init (EvWindow *ev_window)
                                             G_N_ELEMENTS (toggle_entries),
                                             ev_window);
 
+       register_custom_actions (ev_window, action_group);
+
        ev_window->priv->ui_manager = gtk_ui_manager_new ();
        gtk_ui_manager_insert_action_group (ev_window->priv->ui_manager,
                                            action_group, 0);