]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-application.c
Use GtkRecent instead of EggRecent when it's available. Fixes bug #349273
[evince.git] / shell / ev-application.c
index e3c78a9eb9cc94fa2452e17d1e14a80e311bea84..88a2ee983f331bad22ce8f1dc12d50f0860f8de1 100644 (file)
@@ -239,6 +239,7 @@ void
 ev_application_open_uri_at_dest (EvApplication  *application,
                                 const char     *uri,
                                 EvLinkDest     *dest,
+                                EvWindowRunMode mode,
                                 guint           timestamp)
 {
        EvWindow *new_window;
@@ -263,7 +264,7 @@ ev_application_open_uri_at_dest (EvApplication  *application,
 
        /* We need to load uri before showing the window, so
           we can restore window size without flickering */     
-       ev_window_open_uri (new_window, uri, dest);
+       ev_window_open_uri (new_window, uri, dest, mode);
 
        gtk_widget_show (GTK_WIDGET (new_window));
 
@@ -274,18 +275,34 @@ ev_application_open_uri_at_dest (EvApplication  *application,
 gboolean
 ev_application_open_uri (EvApplication  *application,
                         const char     *uri,
-                        const char     *page_label,
+                        GHashTable     *args,
                         guint           timestamp,
                         GError        **error)
 {
-       ev_application_open_uri_at_dest (application, uri, NULL, timestamp);
+       EvLinkDest      *dest = NULL;
+       EvWindowRunMode  mode = EV_WINDOW_MODE_NORMAL;
+
+       if (args) {
+               GValue *value = NULL;
+               
+               value = g_hash_table_lookup (args, "page-label");
+               if (value) {
+                       const gchar *page_label;
+                       
+                       page_label = g_value_get_string (value);
+                       dest = ev_link_dest_new_page_label (page_label);
+               }
+               
+               value = g_hash_table_lookup (args, "mode");
+               if (value) {
+                       mode = g_value_get_uint (value);
+               }
+       }
        
-       if (page_label && strcmp (page_label, "") != 0) {
-               EvWindow *window;
+       ev_application_open_uri_at_dest (application, uri, dest, mode, timestamp);
 
-               window = ev_application_get_uri_window (application, uri);
-               ev_window_open_page_label (window, page_label);
-       }
+       if (dest)
+               g_object_unref (dest);
 
        return TRUE;
 }
@@ -313,10 +330,12 @@ ev_application_shutdown (EvApplication *application)
                application->toolbars_file = NULL;
        }
 
+#ifndef HAVE_GTK_RECENT
        if (application->recent_model) {
                g_object_unref (application->recent_model);
                application->recent_model = NULL;
        }
+#endif
        
        g_free (application->last_chooser_uri);
        g_object_unref (application);
@@ -339,15 +358,19 @@ ev_application_init (EvApplication *ev_application)
        ev_application->toolbars_file = g_build_filename
                        (ev_dot_dir (), "evince_toolbar.xml", NULL);
 
-       if (!egg_toolbars_model_load (ev_application->toolbars_model,
-                                     ev_application->toolbars_file)) {
-               egg_toolbars_model_load (ev_application->toolbars_model,
-                                        DATADIR"/evince-toolbar.xml");
+       egg_toolbars_model_load_names (ev_application->toolbars_model,
+                                      DATADIR "/evince-toolbar.xml");
+
+       if (!egg_toolbars_model_load_toolbars (ev_application->toolbars_model,
+                                              ev_application->toolbars_file)) {
+               egg_toolbars_model_load_toolbars (ev_application->toolbars_model,
+                                                 DATADIR"/evince-toolbar.xml");
        }
 
        egg_toolbars_model_set_flags (ev_application->toolbars_model, 0,
                                      EGG_TB_MODEL_NOT_REMOVABLE); 
-                                     
+
+#ifndef HAVE_GTK_RECENT
        ev_application->recent_model = egg_recent_model_new (EGG_RECENT_MODEL_SORT_MRU);
        /* FIXME we should add a mime type filter but current eggrecent
            has only a varargs style api which does not work well when
@@ -355,6 +378,7 @@ ev_application_init (EvApplication *ev_application)
        egg_recent_model_set_limit (ev_application->recent_model, 5);   
        egg_recent_model_set_filter_groups (ev_application->recent_model,
                                            "Evince", NULL);
+#endif /* HAVE_GTK_RECENT */
 }
 
 GList *
@@ -381,15 +405,17 @@ EggToolbarsModel *ev_application_get_toolbars_model (EvApplication *application)
        return application->toolbars_model;
 }
 
+#ifndef HAVE_GTK_RECENT
 EggRecentModel *ev_application_get_recent_model (EvApplication *application)
 {
        return application->recent_model;
 }
+#endif
 
 void ev_application_save_toolbars_model (EvApplication *application)
 {
-        egg_toolbars_model_save (application->toolbars_model,
-                                application->toolbars_file, "1.0");
+        egg_toolbars_model_save_toolbars (application->toolbars_model,
+                                         application->toolbars_file, "1.0");
 }
 
 void ev_application_set_chooser_uri (EvApplication *application, const gchar *uri)