]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-window.c
Make this return TRUE only if any backends were loaded, so the ev_init()
[evince.git] / shell / ev-window.c
index eb606ef9c1779abffcd827d65927bd5168102c50..523a8c6aa164342bde35b792b2512eb5f026ef21 100644 (file)
@@ -61,6 +61,7 @@
 #include "ev-document-images.h"
 #include "ev-document-links.h"
 #include "ev-document-thumbnails.h"
 #include "ev-document-images.h"
 #include "ev-document-links.h"
 #include "ev-document-thumbnails.h"
+#include "ev-document-type-builtins.h"
 #include "ev-file-exporter.h"
 #include "ev-file-helpers.h"
 #include "ev-file-monitor.h"
 #include "ev-file-exporter.h"
 #include "ev-file-helpers.h"
 #include "ev-file-monitor.h"
@@ -86,6 +87,7 @@
 #include "ev-utils.h"
 #include "ev-keyring.h"
 #include "ev-view.h"
 #include "ev-utils.h"
 #include "ev-keyring.h"
 #include "ev-view.h"
+#include "ev-view-type-builtins.h"
 #include "ev-window.h"
 #include "ev-window-title.h"
 #include "ev-print-operation.h"
 #include "ev-window.h"
 #include "ev-window-title.h"
 #include "ev-print-operation.h"
@@ -181,7 +183,6 @@ struct _EvWindowPrivate {
        char *uri;
        glong uri_mtime;
        char *local_uri;
        char *uri;
        glong uri_mtime;
        char *local_uri;
-       EvLinkDest *dest;
        gboolean unlink_temp_file;
        gboolean in_reload;
        EvFileMonitor *monitor;
        gboolean unlink_temp_file;
        gboolean in_reload;
        EvFileMonitor *monitor;
@@ -193,6 +194,11 @@ struct _EvWindowPrivate {
        EvWindowPageMode page_mode;
        EvWindowTitle *title;
 
        EvWindowPageMode page_mode;
        EvWindowTitle *title;
 
+       /* Load params */
+       EvLinkDest       *dest;
+       gchar            *search_string;
+       EvWindowRunMode   window_mode;
+
        EvJob            *load_job;
        EvJob            *reload_job;
        EvJob            *thumbnail_job;
        EvJob            *load_job;
        EvJob            *reload_job;
        EvJob            *thumbnail_job;
@@ -238,10 +244,6 @@ static const gchar *document_print_settings[] = {
        GTK_PRINT_SETTINGS_OUTPUT_URI
 };
 
        GTK_PRINT_SETTINGS_OUTPUT_URI
 };
 
-static const GtkTargetEntry ev_window_drop_targets[] = {
-       { "text/uri-list", 0, 0 }
-};
-
 static void    ev_window_update_actions                (EvWindow         *ev_window);
 static void     ev_window_sidebar_visibility_changed_cb (EvSidebar        *ev_sidebar,
                                                         GParamSpec       *pspec,
 static void    ev_window_update_actions                (EvWindow         *ev_window);
 static void     ev_window_sidebar_visibility_changed_cb (EvSidebar        *ev_sidebar,
                                                         GParamSpec       *pspec,
@@ -1073,7 +1075,7 @@ setup_view_from_metadata (EvWindow *window)
        /* Sizing mode */
        if (ev_metadata_manager_get (uri, "sizing_mode", &sizing_mode, FALSE)) {
                enum_value = g_enum_get_value_by_nick
        /* Sizing mode */
        if (ev_metadata_manager_get (uri, "sizing_mode", &sizing_mode, FALSE)) {
                enum_value = g_enum_get_value_by_nick
-                       (EV_SIZING_MODE_CLASS, g_value_get_string (&sizing_mode));
+                       (g_type_class_peek (EV_TYPE_SIZING_MODE), g_value_get_string (&sizing_mode));
                g_value_unset (&sizing_mode);
                ev_view_set_sizing_mode (view, enum_value->value);
        }
                g_value_unset (&sizing_mode);
                ev_view_set_sizing_mode (view, enum_value->value);
        }
@@ -1372,7 +1374,7 @@ ev_window_load_job_cb (EvJob *job,
        if (!ev_job_is_failed (job)) {
                ev_window_set_document (ev_window, document);
                
        if (!ev_job_is_failed (job)) {
                ev_window_set_document (ev_window, document);
                
-               if (job_load->mode != EV_WINDOW_MODE_PREVIEW) {
+               if (ev_window->priv->window_mode != EV_WINDOW_MODE_PREVIEW) {
                        setup_view_from_metadata (ev_window);
                }
 
                        setup_view_from_metadata (ev_window);
                }
 
@@ -1392,17 +1394,23 @@ ev_window_load_job_cb (EvJob *job,
                                                  flags);
                }
 
                                                  flags);
                }
 
-               if (job_load->dest) {
+               if (ev_window->priv->dest) {
                        EvLink *link;
                        EvLinkAction *link_action;
        
                        EvLink *link;
                        EvLinkAction *link_action;
        
-                       link_action = ev_link_action_new_dest (g_object_ref (job_load->dest));
+                       link_action = ev_link_action_new_dest (ev_window->priv->dest);
                        link = ev_link_new (NULL, link_action);
                        ev_view_handle_link (EV_VIEW (ev_window->priv->view), link);
                        g_object_unref (link);
                        link = ev_link_new (NULL, link_action);
                        ev_view_handle_link (EV_VIEW (ev_window->priv->view), link);
                        g_object_unref (link);
+
+                       /* Already unrefed by ev_link_action
+                        * FIXME: link action should inc dest ref counting
+                        * or not unref it at all
+                        */
+                       ev_window->priv->dest = NULL;
                }
 
                }
 
-               switch (job_load->mode) {
+               switch (ev_window->priv->window_mode) {
                        case EV_WINDOW_MODE_FULLSCREEN:
                                ev_window_run_fullscreen (ev_window);
                                break;
                        case EV_WINDOW_MODE_FULLSCREEN:
                                ev_window_run_fullscreen (ev_window);
                                break;
@@ -1416,15 +1424,18 @@ ev_window_load_job_cb (EvJob *job,
                                break;
                }
 
                                break;
                }
 
-               if (job_load->search_string && EV_IS_DOCUMENT_FIND (document)) {
+               if (ev_window->priv->search_string && EV_IS_DOCUMENT_FIND (document)) {
                        ev_window_cmd_edit_find (NULL, ev_window);
                        egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar),
                        ev_window_cmd_edit_find (NULL, ev_window);
                        egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar),
-                                                       job_load->search_string);
+                                                       ev_window->priv->search_string);
                }
 
                }
 
+               g_free (ev_window->priv->search_string);
+               ev_window->priv->search_string = NULL;
+
                /* Create a monitor for the document */
                ev_window->priv->monitor = ev_file_monitor_new (ev_window->priv->uri);
                /* Create a monitor for the document */
                ev_window->priv->monitor = ev_file_monitor_new (ev_window->priv->uri);
-               g_signal_connect_swapped (G_OBJECT (ev_window->priv->monitor), "changed",
+               g_signal_connect_swapped (ev_window->priv->monitor, "changed",
                                          G_CALLBACK (ev_window_document_changed),
                                          ev_window);
                
                                          G_CALLBACK (ev_window_document_changed),
                                          ev_window);
                
@@ -1807,6 +1818,7 @@ ev_window_open_uri (EvWindow       *ev_window,
        ev_view_set_loading (EV_VIEW (ev_window->priv->view), TRUE);
 
        ev_window->priv->unlink_temp_file = unlink_temp_file;
        ev_view_set_loading (EV_VIEW (ev_window->priv->view), TRUE);
 
        ev_window->priv->unlink_temp_file = unlink_temp_file;
+       ev_window->priv->window_mode = mode;
 
        if (mode == EV_WINDOW_MODE_PREVIEW) {
                ev_window->priv->print_settings_file = print_settings ? 
 
        if (mode == EV_WINDOW_MODE_PREVIEW) {
                ev_window->priv->print_settings_file = print_settings ? 
@@ -1817,9 +1829,18 @@ ev_window_open_uri (EvWindow       *ev_window,
                g_free (ev_window->priv->uri);
        ev_window->priv->uri = g_strdup (uri);
 
                g_free (ev_window->priv->uri);
        ev_window->priv->uri = g_strdup (uri);
 
+       if (ev_window->priv->search_string)
+               g_free (ev_window->priv->search_string);
+       ev_window->priv->search_string = search_string ?
+               g_strdup (search_string) : NULL;
+
+       if (ev_window->priv->dest)
+               g_object_unref (ev_window->priv->dest);
+       ev_window->priv->dest = dest ? g_object_ref (dest) : NULL;
+
        setup_size_from_metadata (ev_window);
        
        setup_size_from_metadata (ev_window);
        
-       ev_window->priv->load_job = ev_job_load_new (uri, dest, mode, search_string);
+       ev_window->priv->load_job = ev_job_load_new (uri);
        g_signal_connect (ev_window->priv->load_job,
                          "finished",
                          G_CALLBACK (ev_window_load_job_cb),
        g_signal_connect (ev_window->priv->load_job,
                          "finished",
                          G_CALLBACK (ev_window_load_job_cb),
@@ -1840,7 +1861,7 @@ ev_window_reload_local (EvWindow *ev_window)
        const gchar *uri;
        
        uri = ev_window->priv->local_uri ? ev_window->priv->local_uri : ev_window->priv->uri;
        const gchar *uri;
        
        uri = ev_window->priv->local_uri ? ev_window->priv->local_uri : ev_window->priv->uri;
-       ev_window->priv->reload_job = ev_job_load_new (uri, NULL, 0, NULL);
+       ev_window->priv->reload_job = ev_job_load_new (uri);
        g_signal_connect (ev_window->priv->reload_job, "finished",
                          G_CALLBACK (ev_window_reload_job_cb),
                          ev_window);
        g_signal_connect (ev_window->priv->reload_job, "finished",
                          G_CALLBACK (ev_window_reload_job_cb),
                          ev_window);
@@ -2313,7 +2334,7 @@ ev_window_setup_recent (EvWindow *ev_window)
                                        gtk_recent_info_ref (info),
                                        (GDestroyNotify) gtk_recent_info_unref);
                
                                        gtk_recent_info_ref (info),
                                        (GDestroyNotify) gtk_recent_info_unref);
                
-               g_signal_connect (G_OBJECT (action), "activate",
+               g_signal_connect (action, "activate",
                                  G_CALLBACK (ev_window_cmd_recent_file_activate),
                                  (gpointer) ev_window);
 
                                  G_CALLBACK (ev_window_cmd_recent_file_activate),
                                  (gpointer) ev_window);
 
@@ -2928,13 +2949,13 @@ ev_window_print_range (EvWindow *ev_window,
                ev_window->priv->print_queue = g_queue_new ();
 
        op = ev_print_operation_new (ev_window->priv->document);
                ev_window->priv->print_queue = g_queue_new ();
 
        op = ev_print_operation_new (ev_window->priv->document);
-       g_signal_connect (G_OBJECT (op), "begin_print",
+       g_signal_connect (op, "begin_print",
                          G_CALLBACK (ev_window_print_operation_begin_print),
                          (gpointer)ev_window);
                          G_CALLBACK (ev_window_print_operation_begin_print),
                          (gpointer)ev_window);
-       g_signal_connect (G_OBJECT (op), "status_changed",
+       g_signal_connect (op, "status_changed",
                          G_CALLBACK (ev_window_print_operation_status_changed),
                          (gpointer)ev_window);
                          G_CALLBACK (ev_window_print_operation_status_changed),
                          (gpointer)ev_window);
-       g_signal_connect (G_OBJECT (op), "done",
+       g_signal_connect (op, "done",
                          G_CALLBACK (ev_window_print_operation_done),
                          (gpointer)ev_window);
 
                          G_CALLBACK (ev_window_print_operation_done),
                          (gpointer)ev_window);
 
@@ -4063,7 +4084,7 @@ save_sizing_mode (EvWindow *window)
        GEnumValue *enum_value;
 
        mode = ev_view_get_sizing_mode (EV_VIEW (window->priv->view));
        GEnumValue *enum_value;
 
        mode = ev_view_get_sizing_mode (EV_VIEW (window->priv->view));
-       enum_value = g_enum_get_value (EV_SIZING_MODE_CLASS, mode);
+       enum_value = g_enum_get_value (g_type_class_peek (EV_TYPE_SIZING_MODE), mode);
 
        if (!ev_window_is_empty (window))
                ev_metadata_manager_set_string (window->priv->uri, "sizing_mode",
 
        if (!ev_window_is_empty (window))
                ev_metadata_manager_set_string (window->priv->uri, "sizing_mode",
@@ -4898,6 +4919,11 @@ ev_window_dispose (GObject *object)
                priv->uri = NULL;
        }
 
                priv->uri = NULL;
        }
 
+       if (priv->search_string) {
+               g_free (priv->search_string);
+               priv->search_string = NULL;
+       }
+       
        if (priv->dest) {
                g_object_unref (priv->dest);
                priv->dest = NULL;
        if (priv->dest) {
                g_object_unref (priv->dest);
                priv->dest = NULL;
@@ -6237,9 +6263,9 @@ ev_window_init (EvWindow *ev_window)
        /* Drag and Drop */
        gtk_drag_dest_set (GTK_WIDGET (ev_window),
                           GTK_DEST_DEFAULT_ALL,
        /* Drag and Drop */
        gtk_drag_dest_set (GTK_WIDGET (ev_window),
                           GTK_DEST_DEFAULT_ALL,
-                          ev_window_drop_targets,
-                          G_N_ELEMENTS (ev_window_drop_targets),
+                          NULL, 0,
                           GDK_ACTION_COPY);
                           GDK_ACTION_COPY);
+       gtk_drag_dest_add_uri_targets (GTK_WIDGET (ev_window));
 }
 
 /**
 }
 
 /**