]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Make PgUp/Down behave like Space
[evince.git] / shell / ev-window.c
index f412a260a72a962f91120d4c6bcc36c9385d35fd..6549d3fd7996a2ad0a45dd78f3884d0549369722 100644 (file)
@@ -458,11 +458,12 @@ update_sizing_buttons (EvWindow *window)
 }
 
 void
-ev_window_open_page (EvWindow *ev_window, int page)
+ev_window_open_page_label (EvWindow   *ev_window, 
+                          const char *label)
 {
        if (ev_window->priv->page_cache) {
-           page = CLAMP (page, 0, ev_page_cache_get_n_pages (ev_window->priv->page_cache));
-           ev_page_cache_set_current_page (ev_window->priv->page_cache, page);
+               ev_page_cache_set_page_label (ev_window->priv->page_cache, 
+                                             label);
        }
 }
 
@@ -1785,7 +1786,11 @@ ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
        uri = g_strdup (ev_window->priv->uri);
 
        ev_window_open (ev_window, uri);
-       ev_window_open_page (ev_window, page);
+
+       /* In case the number of pages in the document has changed. */
+       page = CLAMP (page, 0, ev_page_cache_get_n_pages (ev_window->priv->page_cache));
+
+       ev_page_cache_set_current_page (ev_window->priv->page_cache, page);
 
        g_free (uri);
 }
@@ -1838,46 +1843,6 @@ ev_window_cmd_escape (GtkAction *action, EvWindow *window)
        }
 }
 
-static void
-update_view_size (EvWindow *window)
-{
-       int width, height;
-       GtkRequisition vsb_requisition;
-       GtkRequisition hsb_requisition;
-       int scrollbar_spacing;
-
-       /* Calculate the width available for the */
-       width = window->priv->scrolled_window->allocation.width;
-       height = window->priv->scrolled_window->allocation.height;
-
-       if (gtk_scrolled_window_get_shadow_type (GTK_SCROLLED_WINDOW (window->priv->scrolled_window)) == GTK_SHADOW_IN) {
-               width -= 2 * window->priv->view->style->xthickness;
-               height -= 2 * window->priv->view->style->ythickness;
-       }
-
-       gtk_widget_size_request (GTK_SCROLLED_WINDOW (window->priv->scrolled_window)->vscrollbar,
-                                &vsb_requisition);
-       gtk_widget_size_request (GTK_SCROLLED_WINDOW (window->priv->scrolled_window)->hscrollbar,
-                                &hsb_requisition);
-       gtk_widget_style_get (window->priv->scrolled_window,
-                             "scrollbar_spacing", &scrollbar_spacing,
-                             NULL);
-
-       ev_view_set_zoom_for_size (EV_VIEW (window->priv->view),
-                                  MAX (1, width),
-                                  MAX (1, height),
-                                  vsb_requisition.width + scrollbar_spacing,
-                                  hsb_requisition.height + scrollbar_spacing);
-}
-
-static void
-size_allocate_cb (GtkWidget     *scrolled_window,
-                 GtkAllocation *allocation,
-                 EvWindow      *window)
-{
-       update_view_size (window);
-}
-
 static void     
 ev_window_sizing_mode_changed_cb (EvView *view, GParamSpec *pspec,
                                  EvWindow   *ev_window)
@@ -1891,29 +1856,18 @@ ev_window_sizing_mode_changed_cb (EvView *view, GParamSpec *pspec,
 
        scrolled_window = ev_window->priv->scrolled_window;
 
-       g_signal_handlers_disconnect_by_func (scrolled_window, size_allocate_cb, ev_window);
-
-       if (sizing_mode != EV_SIZING_FREE)
-               update_view_size (ev_window);
-
        switch (sizing_mode) {
        case EV_SIZING_BEST_FIT:
                g_object_set (G_OBJECT (scrolled_window),
                              "hscrollbar-policy", GTK_POLICY_NEVER,
                              "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
                              NULL);
-               g_signal_connect (scrolled_window, "size-allocate",
-                                 G_CALLBACK (size_allocate_cb),
-                                 ev_window);
                break;
        case EV_SIZING_FIT_WIDTH:
                g_object_set (G_OBJECT (scrolled_window),
                              "hscrollbar-policy", GTK_POLICY_NEVER,
                              "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
                              NULL);
-               g_signal_connect (scrolled_window, "size-allocate",
-                                 G_CALLBACK (size_allocate_cb),
-                                 ev_window);
                break;
        case EV_SIZING_FREE:
                g_object_set (G_OBJECT (scrolled_window),
@@ -2371,10 +2325,10 @@ static const GtkActionEntry entries[] = {
           G_CALLBACK (ev_window_cmd_view_reload) },
 
         /* Go menu */
-        { "GoPreviousPage", GTK_STOCK_GO_BACK, N_("_Previous Page"), "Page_Up",
+        { "GoPreviousPage", GTK_STOCK_GO_BACK, N_("_Previous Page"), "<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"), "Page_Down",
+        { "GoNextPage", GTK_STOCK_GO_FORWARD, N_("_Next Page"), "<control>Page_Down",
           N_("Go to the next page"),
           G_CALLBACK (ev_window_cmd_go_next_page) },
         { "GoFirstPage", GTK_STOCK_GOTO_FIRST, N_("_First Page"), "<control>Home",
@@ -2404,6 +2358,12 @@ static const GtkActionEntry entries[] = {
         { "Slash", GTK_STOCK_FIND, NULL, "slash",
           N_("Find a word or phrase in the document"),
           G_CALLBACK (ev_window_cmd_edit_find) },
+        { "PageDown", NULL, "", "Page_Down",
+          N_("Scroll one page forward"),
+          G_CALLBACK (ev_window_cmd_scroll_forward) },
+        { "PageUp", NULL, "", "Page_Up",
+          N_("Scroll one page backward"),
+          G_CALLBACK (ev_window_cmd_scroll_backward) },
         { "Space", NULL, "", "space",
           N_("Scroll one page forward"),
           G_CALLBACK (ev_window_cmd_scroll_forward) },
@@ -2651,6 +2611,8 @@ static void
 set_view_actions_sensitivity (EvWindow *window, gboolean sensitive)
 {
        if (window->priv->action_group) {
+               set_action_sensitive (window, "PageDown", sensitive);
+               set_action_sensitive (window, "PageUp", sensitive);
                set_action_sensitive (window, "Space", sensitive);
                set_action_sensitive (window, "ShiftSpace", sensitive);
                set_action_sensitive (window, "BackSpace", sensitive);
@@ -2730,7 +2692,7 @@ ev_window_init (EvWindow *ev_window)
        if (!gtk_ui_manager_add_ui_from_file (ev_window->priv->ui_manager,
                                              DATADIR"/evince-ui.xml",
                                              &error)) {
-               g_message ("building menus failed: %s", error->message);
+               g_warning ("building menus failed: %s", error->message);
                g_error_free (error);
        }
 
@@ -2919,8 +2881,8 @@ ev_window_init (EvWindow *ev_window)
                          G_CALLBACK (find_bar_search_changed_cb),
                          ev_window);
 
-       /* Give focus to the scrolled window */
-       gtk_widget_grab_focus (ev_window->priv->scrolled_window);
+       /* Give focus to the document view */
+       gtk_widget_grab_focus (ev_window->priv->view);
 
        /* Drag and Drop */
        gtk_drag_dest_unset (GTK_WIDGET (ev_window));