]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Fix flickering on resizing
[evince.git] / shell / ev-window.c
index f412a260a72a962f91120d4c6bcc36c9385d35fd..2a3783476e71fd723fb4284997cc5cbf854efa2d 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);
 }
@@ -1839,7 +1844,7 @@ ev_window_cmd_escape (GtkAction *action, EvWindow *window)
 }
 
 static void
-update_view_size (EvWindow *window)
+update_view_size (EvView *view, EvWindow *window)
 {
        int width, height;
        GtkRequisition vsb_requisition;
@@ -1870,14 +1875,6 @@ update_view_size (EvWindow *window)
                                   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,10 +1888,10 @@ 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);
+       g_signal_handlers_disconnect_by_func (ev_window->priv->view, update_view_size, ev_window);
 
        if (sizing_mode != EV_SIZING_FREE)
-               update_view_size (ev_window);
+               update_view_size (NULL, ev_window);
 
        switch (sizing_mode) {
        case EV_SIZING_BEST_FIT:
@@ -1902,8 +1899,8 @@ ev_window_sizing_mode_changed_cb (EvView *view, GParamSpec *pspec,
                              "hscrollbar-policy", GTK_POLICY_NEVER,
                              "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
                              NULL);
-               g_signal_connect (scrolled_window, "size-allocate",
-                                 G_CALLBACK (size_allocate_cb),
+               g_signal_connect (ev_window->priv->view, "zoom_invalid",
+                                 G_CALLBACK (update_view_size),
                                  ev_window);
                break;
        case EV_SIZING_FIT_WIDTH:
@@ -1911,8 +1908,8 @@ ev_window_sizing_mode_changed_cb (EvView *view, GParamSpec *pspec,
                              "hscrollbar-policy", GTK_POLICY_NEVER,
                              "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
                              NULL);
-               g_signal_connect (scrolled_window, "size-allocate",
-                                 G_CALLBACK (size_allocate_cb),
+               g_signal_connect (ev_window->priv->view, "zoom_invalid",
+                                 G_CALLBACK (update_view_size),
                                  ev_window);
                break;
        case EV_SIZING_FREE:
@@ -2371,10 +2368,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 +2401,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 +2654,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 +2735,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 +2924,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));