]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Work around the Escape conflict (find bar and unfullscreen)
[evince.git] / shell / ev-window.c
index 3185e66e39dc17f943dadfd428cf54d46eb7769c..734846ffc8aace25c5d620be9ac8530b08e04844 100644 (file)
@@ -366,8 +366,10 @@ update_sizing_buttons (EvWindow *window)
 void
 ev_window_open_page (EvWindow *ev_window, int page)
 {
-       if (ev_window->priv->page_cache)
-               ev_page_cache_set_current_page (ev_window->priv->page_cache, page);
+       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);
+       }
 }
 
 void
@@ -551,10 +553,12 @@ ev_window_setup_document (EvWindow *ev_window)
                                 "notify::title",
                                 G_CALLBACK (update_window_title),
                                 ev_window, 0);
-       g_signal_connect_object (G_OBJECT (document),
-                                "find_changed",
-                                G_CALLBACK (find_changed_cb),  
-                                ev_window, 0);
+       if (EV_IS_DOCUMENT_FIND (document)) {
+               g_signal_connect_object (G_OBJECT (document),
+                                        "find_changed",
+                                        G_CALLBACK (find_changed_cb),  
+                                        ev_window, 0);
+       }
 
        ev_window_set_page_mode (ev_window, PAGE_MODE_SINGLE_PAGE);
 
@@ -1624,12 +1628,7 @@ ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
 
        g_return_if_fail (EV_IS_WINDOW (ev_window));
 
-#if 0
-       /* FIXME: uncomment when this is written.*/
-       page = ev_page_cache_get_page (ev_window->priv->page_cache);
-#else
-       page = 1;
-#endif
+       page = ev_page_cache_get_current_page (ev_window->priv->page_cache);
        uri = g_strdup (ev_window->priv->uri);
 
        ev_window_open (ev_window, uri);
@@ -1659,6 +1658,19 @@ ev_window_cmd_leave_fullscreen (GtkAction *action, EvWindow *window)
        gtk_window_unfullscreen (GTK_WINDOW (window));
 }
 
+static void
+ev_window_cmd_escape (GtkAction *action, EvWindow *window)
+{
+       GtkWidget *widget;
+
+       widget = gtk_window_get_focus (GTK_WINDOW (window));
+       if (widget && gtk_widget_get_ancestor (widget, EGG_TYPE_FIND_BAR)) {
+               update_chrome_flag (window, EV_CHROME_FINDBAR, NULL, FALSE);
+       } else {
+               gtk_window_unfullscreen (GTK_WINDOW (window));
+       }
+}
+
 static void
 update_view_size (EvWindow *window)
 {
@@ -2153,9 +2165,12 @@ static GtkActionEntry entries[] = {
          G_CALLBACK (ev_window_cmd_help_about) },
 
        /* Toolbar-only */
-       { "LeaveFullscreen", EV_STOCK_LEAVE_FULLSCREEN, N_("Leave Fullscreen"), "Escape",
+       { "LeaveFullscreen", EV_STOCK_LEAVE_FULLSCREEN, N_("Leave Fullscreen"), NULL,
          N_("Leave fullscreen mode"),
-         G_CALLBACK (ev_window_cmd_leave_fullscreen) }
+         G_CALLBACK (ev_window_cmd_leave_fullscreen) },
+
+       { "Escape", NULL, N_("Selection Caret"), "Escape", "",
+         G_CALLBACK (ev_window_cmd_escape) }
 };
 
 /* Toggle items */