]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
unref the pixbuf iff it exists.
[evince.git] / shell / ev-window.c
index 46ae9a201e194f4072f6dc6b6efb81f4a8bc8396..836bc918a4b4e100e77e392387d6b88a8be04df0 100644 (file)
 #include "ev-document-fonts.h"
 #include "ev-document-find.h"
 #include "ev-document-security.h"
+#include "ev-document-types.h"
 #include "ev-job-queue.h"
 #include "ev-jobs.h"
 #include "ev-statusbar.h"
+#include "ev-sidebar-page.h"
 #include "eggfindbar.h"
-#include "egg-recent-view-gtk.h"
+#include "egg-recent-view-uimanager.h"
 #include "egg-recent-view.h"
 #include "egg-recent-model.h"
 #include "egg-toolbar-editor.h"
@@ -58,6 +60,7 @@
 #include "ev-application.h"
 #include "ev-stock-icons.h"
 #include "ev-file-helpers.h"
+
 #include <poppler.h>
 
 #include <glib/gi18n.h>
@@ -80,6 +83,7 @@ typedef enum {
        EV_CHROME_SIDEBAR       = 1 << 2,
        EV_CHROME_FINDBAR       = 1 << 3,
        EV_CHROME_STATUSBAR     = 1 << 4,
+       EV_CHROME_RAISE_TOOLBAR = 1 << 5,
        EV_CHROME_NORMAL        = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR | EV_CHROME_SIDEBAR | EV_CHROME_STATUSBAR
 } EvChrome;
 
@@ -99,6 +103,10 @@ struct _EvWindowPrivate {
        GtkWidget *page_view;
        GtkWidget *password_view;
        GtkWidget *statusbar;
+       GtkWidget *sidebar_thumbs;
+
+       /* Dialogs */
+       EvProperties *properties;
 
        /* UI Builders */
        GtkActionGroup *action_group;
@@ -131,7 +139,7 @@ struct _EvWindowPrivate {
 
        /* recent file stuff */
        EggRecentModel *recent_model;
-       EggRecentViewGtk *recent_view;
+       EggRecentViewUIManager *recent_view;
 };
 
 static const GtkTargetEntry ev_drop_types[] = {
@@ -205,13 +213,18 @@ update_action_sensitivity (EvWindow *ev_window)
        int n_pages = 0, page = -1;
        gboolean ok_to_print = TRUE;
        gboolean ok_to_copy = TRUE;
+       gboolean has_properties = TRUE;
 
        view = EV_VIEW (ev_window->priv->view);
+
        document = ev_window->priv->document;
+
        if (document)
                info = ev_page_cache_get_info (ev_window->priv->page_cache);
+
        page_mode = ev_window->priv->page_mode;
        has_document = document != NULL;
+
        if (has_document && ev_window->priv->page_cache) {
                page = ev_page_cache_get_current_page (ev_window->priv->page_cache);
                n_pages = ev_page_cache_get_n_pages (ev_window->priv->page_cache);
@@ -223,11 +236,15 @@ update_action_sensitivity (EvWindow *ev_window)
                ok_to_copy = (info->permissions & EV_DOCUMENT_PERMISSIONS_OK_TO_COPY);
        }
 
+       if (!info || info->fields_mask == 0) {
+               has_properties = FALSE;
+       }
+
        /* File menu */
        /* "FileOpen": always sensitive */
        set_action_sensitive (ev_window, "FileSaveAs", has_document && ok_to_copy);
        set_action_sensitive (ev_window, "FilePrint", has_pages && ok_to_print);
-       set_action_sensitive (ev_window, "FileProperties", has_document);
+       set_action_sensitive (ev_window, "FileProperties", has_document && has_properties);
        /* "FileCloseWindow": always sensitive */
 
         /* Edit menu */
@@ -240,6 +257,8 @@ update_action_sensitivity (EvWindow *ev_window)
                              has_pages && EV_IS_DOCUMENT_FIND (document));
        set_action_sensitive (ev_window, "EditFindNext",
                              ev_view_can_find_next (view));
+       set_action_sensitive (ev_window, "EditRotateLeft", has_document);
+       set_action_sensitive (ev_window, "EditRotateRight", has_document);
 
         /* View menu */
        set_action_sensitive (ev_window, "ViewContinuous", has_pages);
@@ -307,9 +326,11 @@ update_chrome_visibility (EvWindow *window)
        fullscreen_mode = fullscreen || presentation;
 
        menubar = (priv->chrome & EV_CHROME_MENUBAR) != 0 && !fullscreen_mode;
-       toolbar = (priv->chrome & EV_CHROME_TOOLBAR) != 0 && !fullscreen_mode;
+       toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0  || 
+                  (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && !fullscreen_mode;
        sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && !fullscreen_mode;
-       fullscreen_toolbar = (priv->chrome & EV_CHROME_TOOLBAR) != 0;
+       fullscreen_toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0 ||
+                             (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0);
        statusbar = (priv->chrome & EV_CHROME_STATUSBAR) != 0 && !fullscreen_mode;
        findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0;
 
@@ -358,6 +379,9 @@ ev_window_cmd_focus_page_selector (GtkAction *act, EvWindow *window)
 {
        GtkAction *action;
        
+       update_chrome_flag (window, EV_CHROME_RAISE_TOOLBAR, NULL, TRUE);
+       set_action_sensitive (window, "ViewToolbar", FALSE);
+       
        action = gtk_action_group_get_action (window->priv->action_group,
                                              PAGE_SELECTOR_ACTION);
        ev_page_action_grab_focus (EV_PAGE_ACTION (action));
@@ -594,11 +618,12 @@ page_changed_cb (EvPageCache *page_cache,
 static void
 update_document_mode (EvWindow *window, EvDocumentMode mode)
 {
-       if (mode == EV_DOCUMENT_MODE_FULL_SCREEN) {
-               ev_window_fullscreen (window);
-       } else if (mode == EV_DOCUMENT_MODE_PRESENTATION) {
+       if (mode == EV_DOCUMENT_MODE_PRESENTATION) {
                ev_window_run_presentation (window);
        }
+       else if (mode == EV_DOCUMENT_MODE_FULL_SCREEN) {
+               ev_window_fullscreen (window);
+       }
 }
 
 static void
@@ -640,6 +665,11 @@ ev_window_setup_document (EvWindow *ev_window)
 
        info = ev_page_cache_get_info (ev_window->priv->page_cache);
        update_document_mode (ev_window, info->mode);
+
+       if (ev_window->priv->properties) {
+               ev_properties_set_document (ev_window->priv->properties,
+                                           ev_window->priv->document);
+       }
 }
 
 static void
@@ -872,6 +902,7 @@ ev_window_xfer_job_cb  (EvJobXfer *job,
                                  G_CALLBACK (ev_window_load_job_cb),
                                  ev_window);
                ev_job_queue_add_job (ev_window->priv->load_job, EV_JOB_PRIORITY_HIGH);
+               g_object_unref (document);
        }               
 }
 
@@ -940,14 +971,18 @@ ev_window_cmd_file_open (GtkAction *action, EvWindow *ev_window)
 }
 
 static void
-ev_window_cmd_recent_file_activate (EggRecentViewGtk *view, EggRecentItem *item,
+ev_window_cmd_recent_file_activate (GtkAction *action,
                                    EvWindow *ev_window)
 {
        char *uri;
+       EggRecentItem *item;
        GtkWidget *window;
 
-       uri = egg_recent_item_get_uri (item);
+       item = egg_recent_view_uimanager_get_item (ev_window->priv->recent_view,
+                                                  action);
 
+       uri = egg_recent_item_get_uri (item);
+       
        window = GTK_WIDGET (ev_application_get_empty_window (EV_APP));
        gtk_widget_show (window);
        ev_window_open_uri (EV_WINDOW (window), uri);
@@ -968,23 +1003,20 @@ ev_window_add_recent (EvWindow *window, const char *filename)
 static void
 ev_window_setup_recent (EvWindow *ev_window)
 {
-       GtkWidget *menu_item;
-       GtkWidget *menu;
 
-       menu_item = gtk_ui_manager_get_widget (ev_window->priv->ui_manager, "/MainMenu/FileMenu");
-       menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu_item));
-       menu_item = gtk_ui_manager_get_widget (ev_window->priv->ui_manager, "/MainMenu/FileMenu/RecentFilesMenu");
 
-       g_return_if_fail (menu != NULL);
-       g_return_if_fail (menu_item != NULL);
 
        /* it would be better if we just filtered by mime-type, but there
         * doesn't seem to be an easy way to figure out which mime-types we
         * can handle */
        ev_window->priv->recent_model = egg_recent_model_new (EGG_RECENT_MODEL_SORT_MRU);
 
-       ev_window->priv->recent_view = egg_recent_view_gtk_new (menu, menu_item);
-       egg_recent_view_gtk_show_icons (EGG_RECENT_VIEW_GTK (ev_window->priv->recent_view), FALSE);
+       ev_window->priv->recent_view = egg_recent_view_uimanager_new (ev_window->priv->ui_manager,
+                                                                     "/MainMenu/FileMenu/RecentFilesMenu",
+                                                                     G_CALLBACK (ev_window_cmd_recent_file_activate), 
+                                                                     ev_window);       
+
+        egg_recent_view_uimanager_show_icons (EGG_RECENT_VIEW_UIMANAGER (ev_window->priv->recent_view), FALSE);
        egg_recent_model_set_limit (ev_window->priv->recent_model, 5);
 
        egg_recent_view_set_model (EGG_RECENT_VIEW (ev_window->priv->recent_view),
@@ -993,7 +1025,7 @@ ev_window_setup_recent (EvWindow *ev_window)
        egg_recent_model_set_filter_groups (ev_window->priv->recent_model,
                                            "Evince", NULL);
 
-       egg_recent_view_gtk_set_trailing_sep (ev_window->priv->recent_view, TRUE);
+       egg_recent_view_uimanager_set_trailing_sep (ev_window->priv->recent_view, TRUE);
        
        g_signal_connect (ev_window->priv->recent_view, "activate",
                        G_CALLBACK (ev_window_cmd_recent_file_activate), ev_window);
@@ -1069,8 +1101,11 @@ static void
 ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window)
 {
        GtkWidget *fc;
-       GtkFileFilter *pdf_filter, *all_filter;
-       gchar *uri = NULL;
+
+       gchar *uri;
+       gchar *basename;
+       static char* folder = NULL;
+
        gboolean success;
 
        fc = gtk_file_chooser_dialog_new (
@@ -1081,18 +1116,17 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window)
                NULL);
        gtk_window_set_modal (GTK_WINDOW (fc), TRUE);
 
-       pdf_filter = gtk_file_filter_new ();
-       gtk_file_filter_set_name (pdf_filter, _("PDF Documents"));
-       gtk_file_filter_add_mime_type (pdf_filter, "application/pdf");
-       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fc), pdf_filter);
-
-       all_filter = gtk_file_filter_new ();
-       gtk_file_filter_set_name (all_filter, _("All Files"));
-       gtk_file_filter_add_pattern (all_filter, "*");
-       gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fc), all_filter);
-       gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (fc), pdf_filter);
-
+       ev_document_types_add_filters_for_type (fc, G_TYPE_FROM_INSTANCE (ev_window->priv->document));
        gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_OK);
+       
+       if (folder) {
+               gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER (fc), 
+                                                       folder);
+       }
+       
+       basename = g_path_get_basename (ev_window->priv->uri);
+       gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (fc), basename);
+       g_free (basename);
 
        gtk_widget_show (fc);
 
@@ -1114,6 +1148,12 @@ ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window)
                else
                        save_error_dialog (GTK_WINDOW (fc), uri);
        }
+
+       if (folder != NULL)
+               g_free (folder);
+                               
+       folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (fc));
+
        gtk_widget_destroy (fc);
 }
 
@@ -1246,15 +1286,15 @@ ev_window_cmd_file_print (GtkAction *action, EvWindow *ev_window)
 static void
 ev_window_cmd_file_properties (GtkAction *action, EvWindow *ev_window)
 {
-       EvDocument *document = ev_window->priv->document;
-       const EvDocumentInfo *info;
-       GtkDialog *dialog;
+       if (ev_window->priv->properties == NULL) {
+               ev_window->priv->properties = ev_properties_new ();
+               ev_properties_set_document (ev_window->priv->properties,
+                                           ev_window->priv->document);
+               g_object_add_weak_pointer (G_OBJECT (ev_window->priv->properties),
+                                          (gpointer *) &(ev_window->priv->properties));
+       }
 
-       info = ev_page_cache_get_info (ev_window->priv->page_cache);
-       dialog = ev_properties_new (document, info);
-       gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (ev_window));
-       gtk_dialog_run (dialog);
-       gtk_widget_destroy (GTK_WIDGET (dialog));
+       ev_properties_show (ev_window->priv->properties, GTK_WIDGET (ev_window));
 }
                                        
 static void
@@ -1335,7 +1375,8 @@ ev_window_update_fullscreen_popup (EvWindow *window)
 
        g_return_if_fail (popup != NULL);
 
-       toolbar = (window->priv->chrome & EV_CHROME_TOOLBAR) != 0;
+       toolbar = (window->priv->chrome & EV_CHROME_TOOLBAR) != 0 || 
+                 (window->priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0;
        popup_width = popup->requisition.width;
        popup_height = popup->requisition.height;
 
@@ -1781,6 +1822,20 @@ ev_window_cmd_edit_toolbar_cb (GtkDialog *dialog, gint response, gpointer data)
         gtk_widget_destroy (GTK_WIDGET (dialog));
 }
 
+static void
+ev_window_cmd_edit_rotate_left (GtkAction *action, EvWindow *ev_window)
+{
+       ev_view_rotate_left (EV_VIEW (ev_window->priv->view));
+       ev_sidebar_thumbnails_refresh (EV_SIDEBAR_THUMBNAILS (ev_window->priv->sidebar_thumbs));
+}
+
+static void
+ev_window_cmd_edit_rotate_right (GtkAction *action, EvWindow *ev_window)
+{
+       ev_view_rotate_right (EV_VIEW (ev_window->priv->view));
+       ev_sidebar_thumbnails_refresh (EV_SIDEBAR_THUMBNAILS (ev_window->priv->sidebar_thumbs));
+}
+
 static void
 ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window)
 {
@@ -1868,6 +1923,33 @@ ev_window_cmd_go_last_page (GtkAction *action, EvWindow *ev_window)
        ev_page_cache_set_current_page (ev_window->priv->page_cache, n_pages - 1);
 }
 
+static void
+ev_window_cmd_go_forward (GtkAction *action, EvWindow *ev_window)
+{
+       int n_pages, current_page;
+       
+        g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+       n_pages = ev_page_cache_get_n_pages (ev_window->priv->page_cache);
+       current_page = ev_page_cache_get_current_page (ev_window->priv->page_cache);
+       
+       if (current_page + 10 < n_pages)
+               ev_page_cache_set_current_page (ev_window->priv->page_cache, current_page + 10);
+}
+
+static void
+ev_window_cmd_go_backward (GtkAction *action, EvWindow *ev_window)
+{
+       int current_page;
+       
+        g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+       current_page = ev_page_cache_get_current_page (ev_window->priv->page_cache);
+       
+       if (current_page - 10 >= 0)
+               ev_page_cache_set_current_page (ev_window->priv->page_cache, current_page - 10);
+}
+
 static void
 ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
 {
@@ -2103,7 +2185,7 @@ ev_window_cmd_help_about (GtkAction *action, EvWindow *ev_window)
                "name", _("Evince"),
                "version", VERSION,
                "copyright",
-               _("\xc2\xa9 1996-2004 The Evince authors"),
+               _("\xc2\xa9 1996-2005 The Evince authors"),
                "license", license_trans,
                "website", "http://www.gnome.org/projects/evince",
                "comments", comments,
@@ -2145,17 +2227,18 @@ ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, GParamSpec *pspe
                                         EvWindow   *ev_window)
 {
        GtkAction *action;
-       gboolean visible, fullscreen;
+       gboolean visible, fullscreen_mode;
+
+
+       fullscreen_mode = ev_view_get_presentation (EV_VIEW (ev_window->priv->view)) ||
+                              ev_view_get_fullscreen (EV_VIEW (ev_window->priv->view));
 
-       g_object_get (ev_window->priv->view,
-                     "fullscreen", &fullscreen,
-                     NULL);
        visible = GTK_WIDGET_VISIBLE (ev_sidebar);
 
        /* In fullscreen mode the sidebar is not visible,
         * but we don't want to update the chrome
         */
-       if (fullscreen)
+       if (fullscreen_mode)
                return;
        
        action = gtk_action_group_get_action (ev_window->priv->action_group, "ViewSidebar");
@@ -2330,10 +2413,13 @@ zoom_control_changed_cb (EphyZoomAction *action,
                mode = EV_SIZING_FIT_WIDTH;
        } else {
                mode = EV_SIZING_FREE;
-               ev_view_set_zoom (EV_VIEW (ev_window->priv->view), zoom, FALSE);
        }
        
        ev_view_set_sizing_mode (EV_VIEW (ev_window->priv->view), mode);
+       
+       if (mode == EV_SIZING_FREE) {
+               ev_view_set_zoom (EV_VIEW (ev_window->priv->view), zoom, FALSE);
+       }
 }
 
 static void
@@ -2349,6 +2435,17 @@ ev_window_dispose (GObject *object)
                priv->toolbar_file = NULL;
        }
 
+       if (priv->recent_model) {
+               g_object_unref (priv->recent_model);
+               priv->recent_model = NULL;
+       }
+
+       if (priv->recent_view) {
+               g_object_unref (priv->recent_view);
+               priv->recent_view = NULL;
+       }
+
+
        if (priv->ui_manager) {
                g_object_unref (priv->ui_manager);
                priv->ui_manager = NULL;
@@ -2474,6 +2571,12 @@ static const GtkActionEntry entries[] = {
         { "EditToolbar", NULL, N_("T_oolbar"), NULL,
           N_("Customize the toolbar"),
           G_CALLBACK (ev_window_cmd_edit_toolbar) },
+       { "EditRotateLeft", NULL, N_("Rotate _Left"), NULL,
+         N_("Rotate the document to the left"),
+         G_CALLBACK (ev_window_cmd_edit_rotate_left) },
+       { "EditRotateRight", NULL, N_("Rotate _Right"), NULL,
+         N_("Rotate the document to the right"),
+         G_CALLBACK (ev_window_cmd_edit_rotate_right) },
 
         /* View menu */
         { "ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus",
@@ -2541,12 +2644,21 @@ static const GtkActionEntry entries[] = {
         { "Plus", GTK_STOCK_ZOOM_IN, NULL, "plus",
           N_("Enlarge the document"),
           G_CALLBACK (ev_window_cmd_view_zoom_in) },
+        { "CtrlEqual", GTK_STOCK_ZOOM_IN, NULL, "<control>equal",
+          N_("Enlarge the document"),
+          G_CALLBACK (ev_window_cmd_view_zoom_in) },
         { "Minus", GTK_STOCK_ZOOM_OUT, NULL, "minus",
           N_("Shrink the document"),
           G_CALLBACK (ev_window_cmd_view_zoom_out) },
         { "FocusPageSelector", NULL, "", "<control>l",
           N_("Focus the page selector"),
-          G_CALLBACK (ev_window_cmd_focus_page_selector) }
+          G_CALLBACK (ev_window_cmd_focus_page_selector) },
+        { "GoBackwardFast", NULL, "", "<shift>Page_Up",
+          N_("Go ten pages backward"),
+          G_CALLBACK (ev_window_cmd_go_backward) },
+        { "GoForwardFast", NULL, "", "<shift>Page_Down",
+          N_("Go ten pages forward"),
+          G_CALLBACK (ev_window_cmd_go_forward) },
 };
 
 /* Toggle items */
@@ -2783,6 +2895,7 @@ sidebar_widget_model_set (EvSidebarLinks *ev_sidebar_links,
 
        action = gtk_action_group_get_action (ev_window->priv->action_group, PAGE_SELECTOR_ACTION);
        ev_page_action_set_model (EV_PAGE_ACTION (action), model);
+       g_object_unref (model);
 }
 
 
@@ -2805,6 +2918,9 @@ set_view_actions_sensitivity (EvWindow *window, gboolean sensitive)
 static void
 view_actions_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window)
 {
+       update_chrome_flag (window, EV_CHROME_RAISE_TOOLBAR, NULL, FALSE);
+       set_action_sensitive (window, "ViewToolbar", TRUE);
+
        set_view_actions_sensitivity (window, TRUE);
 }
 
@@ -2815,14 +2931,23 @@ view_actions_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *wi
 }
 
 static void
-enable_view_actions_for_widget (EvWindow *window, GtkWidget *widget)
+sidebar_page_main_widget_update_cb (GObject *ev_sidebar_page,
+                                   GParamSpec         *pspec,
+                                   EvWindow           *ev_window)
 {
-       g_signal_connect_object (widget, "focus_in_event",
-                                G_CALLBACK (view_actions_focus_in_cb),
-                                window, 0);
-       g_signal_connect_object (widget, "focus_out_event",
-                                G_CALLBACK (view_actions_focus_out_cb),
-                                window, 0);
+       GtkWidget *widget;
+       
+       g_object_get (ev_sidebar_page, "main_widget", &widget, NULL);
+
+       if (widget != NULL) {           
+               g_signal_connect_object (widget, "focus_in_event",
+                                        G_CALLBACK (view_actions_focus_in_cb),
+                                        ev_window, 0);
+               g_signal_connect_object (widget, "focus_out_event",
+                                        G_CALLBACK (view_actions_focus_out_cb),
+                                        ev_window, 0);
+               g_object_unref (widget);
+       }
 }
 
 static void
@@ -2831,7 +2956,7 @@ ev_window_init (EvWindow *ev_window)
        GtkActionGroup *action_group;
        GtkAccelGroup *accel_group;
        GError *error = NULL;
-       GtkWidget *sidebar_widget, *toolbar_dock, *tree_view;
+       GtkWidget *sidebar_widget, *toolbar_dock;
        GConfValue *value;
        GConfClient *client;
        int sidebar_size;
@@ -2957,21 +3082,23 @@ ev_window_init (EvWindow *ev_window)
                          "notify::model",
                          G_CALLBACK (sidebar_widget_model_set),
                          ev_window);
-       tree_view = ev_sidebar_links_get_treeview
-                       (EV_SIDEBAR_LINKS (sidebar_widget));
-       enable_view_actions_for_widget (ev_window, tree_view);
+       sidebar_page_main_widget_update_cb (G_OBJECT (sidebar_widget), NULL, ev_window);
        gtk_widget_show (sidebar_widget);
        ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
                             sidebar_widget);
 
        sidebar_widget = ev_sidebar_thumbnails_new ();
-       tree_view = ev_sidebar_thumbnails_get_treeview
-                       (EV_SIDEBAR_THUMBNAILS (sidebar_widget));
-       //enable_view_actions_for_widget (ev_window, tree_view);
+       ev_window->priv->sidebar_thumbs = sidebar_widget;
+       g_signal_connect (sidebar_widget,
+                         "notify::main-widget",
+                         G_CALLBACK (sidebar_page_main_widget_update_cb),
+                         ev_window);
+       sidebar_page_main_widget_update_cb (G_OBJECT (sidebar_widget), NULL, ev_window);
        gtk_widget_show (sidebar_widget);
        ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
                             sidebar_widget);
 
+
        ev_window->priv->scrolled_window =
                GTK_WIDGET (g_object_new (GTK_TYPE_SCROLLED_WINDOW,
                                          "shadow-type", GTK_SHADOW_IN,
@@ -2987,10 +3114,16 @@ ev_window_init (EvWindow *ev_window)
                                  "unlock",
                                  G_CALLBACK (ev_window_popup_password_dialog),
                                  ev_window);
-       enable_view_actions_for_widget (ev_window, ev_window->priv->view);
+       g_signal_connect_object (ev_window->priv->view, "focus_in_event",
+                                G_CALLBACK (view_actions_focus_in_cb),
+                                ev_window, 0);
+       g_signal_connect_object (ev_window->priv->view, "focus_out_event",
+                                G_CALLBACK (view_actions_focus_out_cb),
+                                ev_window, 0);
        gtk_widget_show (ev_window->priv->view);
        gtk_widget_show (ev_window->priv->password_view);
 
+
        /* We own a ref on these widgets, as we can swap them in and out */
        g_object_ref (ev_window->priv->view);
        //g_object_ref (ev_window->priv->page_view);