]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Fixed lot's of memory leaks, for example, memory leak on reload, described
[evince.git] / shell / ev-window.c
index e9e1c4e65a6699e656aa059941e01fe525a7c3ac..10bdb9cd6e9cfcfe6bf2badab566acaf730ba8f7 100644 (file)
@@ -101,6 +101,7 @@ struct _EvWindowPrivate {
        GtkWidget *page_view;
        GtkWidget *password_view;
        GtkWidget *statusbar;
+       GtkWidget *sidebar_thumbs;
 
        /* Dialogs */
        EvProperties *properties;
@@ -604,11 +605,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
@@ -887,6 +889,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);
        }               
 }
 
@@ -1798,24 +1801,17 @@ ev_window_cmd_edit_toolbar_cb (GtkDialog *dialog, gint response, gpointer data)
 }
 
 static void
-ev_window_cmd_edit_landscape (GtkAction *action, EvWindow *ev_window)
-{
-       ev_view_set_orientation (EV_VIEW (ev_window->priv->view),
-                                EV_ORIENTATION_LANDSCAPE);
-}
-
-static void
-ev_window_cmd_edit_portrait (GtkAction *action, EvWindow *ev_window)
+ev_window_cmd_edit_rotate_left (GtkAction *action, EvWindow *ev_window)
 {
-       ev_view_set_orientation (EV_VIEW (ev_window->priv->view),
-                                EV_ORIENTATION_PORTRAIT);
+       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_flip (GtkAction *action, EvWindow *ev_window)
+ev_window_cmd_edit_rotate_right (GtkAction *action, EvWindow *ev_window)
 {
-       ev_view_set_orientation (EV_VIEW (ev_window->priv->view),
-                                EV_ORIENTATION_SEASCAPE);
+       ev_view_rotate_right (EV_VIEW (ev_window->priv->view));
+       ev_sidebar_thumbnails_refresh (EV_SIDEBAR_THUMBNAILS (ev_window->priv->sidebar_thumbs));
 }
 
 static void
@@ -1905,6 +1901,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)
 {
@@ -2511,15 +2534,12 @@ static const GtkActionEntry entries[] = {
         { "EditToolbar", NULL, N_("T_oolbar"), NULL,
           N_("Customize the toolbar"),
           G_CALLBACK (ev_window_cmd_edit_toolbar) },
-       { "EditLandscape", NULL, N_("_Landscape"), NULL,
-         N_("Change the document orientation to landscape"),
-         G_CALLBACK (ev_window_cmd_edit_landscape) },
-       { "EditPortrait", NULL, N_("_Portrait"), NULL,
-         N_("Change the document orientation to portrait"),
-         G_CALLBACK (ev_window_cmd_edit_portrait) },
-       { "EditFlip", NULL, N_("_Flip"), NULL,
-         N_("Flip the document"),
-         G_CALLBACK (ev_window_cmd_edit_flip) },
+       { "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",
@@ -2587,12 +2607,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 */
@@ -2829,6 +2858,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);
 }
 
 
@@ -2872,13 +2902,14 @@ sidebar_page_main_widget_update_cb (GObject *ev_sidebar_page,
        
        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),
+       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),
+               g_signal_connect_object (widget, "focus_out_event",
+                                        G_CALLBACK (view_actions_focus_out_cb),
                                         ev_window, 0);
+               g_object_unref (widget);
        }
 }
 
@@ -3020,6 +3051,7 @@ ev_window_init (EvWindow *ev_window)
                             sidebar_widget);
 
        sidebar_widget = ev_sidebar_thumbnails_new ();
+       ev_window->priv->sidebar_thumbs = sidebar_widget;
        g_signal_connect (sidebar_widget,
                          "notify::main-widget",
                          G_CALLBACK (sidebar_page_main_widget_update_cb),