]> 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 2020e9cebc75e47bd28ca7a3cf90eceb3b17871d..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);
        }               
 }
 
@@ -1801,12 +1804,14 @@ 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
@@ -1896,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)
 {
@@ -2575,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 */
@@ -2817,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);
 }
 
 
@@ -2860,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);
        }
 }
 
@@ -3008,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),