]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Some leaks fixed
[evince.git] / shell / ev-window.c
index 4e8db2f0e8deeb849fcea143767b6c49a281e78e..29141d224a588b9b73dcc2d95400be296efefc43 100644 (file)
@@ -48,7 +48,7 @@
 #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"
@@ -101,6 +101,7 @@ struct _EvWindowPrivate {
        GtkWidget *page_view;
        GtkWidget *password_view;
        GtkWidget *statusbar;
+       GtkWidget *sidebar_thumbs;
 
        /* Dialogs */
        EvProperties *properties;
@@ -136,7 +137,7 @@ struct _EvWindowPrivate {
 
        /* recent file stuff */
        EggRecentModel *recent_model;
-       EggRecentViewGtk *recent_view;
+       EggRecentViewUIManager *recent_view;
 };
 
 static const GtkTargetEntry ev_drop_types[] = {
@@ -888,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);
        }               
 }
 
@@ -956,14 +958,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);
@@ -984,23 +990,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),
@@ -1009,7 +1012,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);
@@ -1802,12 +1805,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
@@ -2386,10 +2391,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
@@ -2405,6 +2413,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;
@@ -2854,6 +2873,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);
 }
 
 
@@ -2897,13 +2917,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);
        }
 }
 
@@ -3045,6 +3066,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),