]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-application.c
[windows] Make evince relocatable on windows - GUI
[evince.git] / shell / ev-application.c
index 9c7770ae0b1a75a1023a3316305e85ccc87b29e9..3d4afb1b56dc378e877d709bec024c9c43443249 100644 (file)
@@ -57,6 +57,7 @@ struct _EvApplication {
        GObject base_instance;
 
        gchar *dot_dir;
+       gchar *data_dir;
        gchar *accel_map_file;
        gchar *toolbars_file;
        gchar *crashed_file;
@@ -68,7 +69,8 @@ struct _EvApplication {
 
        EggSMClient *smclient;
 
-       gchar *last_chooser_uri;
+       gchar *filechooser_open_uri;
+       gchar *filechooser_save_uri;
 
 #ifdef ENABLE_DBUS
        EvMediaPlayerKeys *keys;
@@ -786,8 +788,12 @@ ev_application_shutdown (EvApplication *application)
 
         g_free (application->dot_dir);
         application->dot_dir = NULL;
-       g_free (application->last_chooser_uri);
-        application->last_chooser_uri = NULL;
+        g_free (application->data_dir);
+        application->data_dir = NULL;
+       g_free (application->filechooser_open_uri);
+        application->filechooser_open_uri = NULL;
+       g_free (application->filechooser_save_uri);
+       application->filechooser_save_uri = NULL;
 
        g_object_unref (application);
         instance = NULL;
@@ -805,6 +811,7 @@ ev_application_init (EvApplication *ev_application)
 {
        gint i;
        const gchar *home_dir;
+       gchar *toolbar_path;
 
         ev_application->dot_dir = g_build_filename (g_get_home_dir (),
                                                     ".gnome2",
@@ -815,6 +822,18 @@ ev_application_init (EvApplication *ev_application)
         if (!ev_dir_ensure_exists (ev_application->dot_dir, 0700))
                 exit (1);
 
+#ifdef G_OS_WIN32
+{
+       gchar *dir;
+
+       dir = g_win32_get_package_installation_directory_of_module (NULL);
+       ev_application->data_dir = g_build_filename (dir, "share", "evince", NULL);
+       g_free (dir);
+}
+#else
+       ev_application->data_dir = g_strdup (DATADIR);
+#endif
+
        ev_application_init_session (ev_application);
 
        home_dir = g_get_home_dir ();
@@ -832,14 +851,17 @@ ev_application_init (EvApplication *ev_application)
        ev_application->toolbars_file = g_build_filename
                        (ev_application->dot_dir, "evince_toolbar.xml", NULL);
 
+       toolbar_path = g_build_filename (ev_application->data_dir,
+                                        "evince-toolbar.xml", NULL);
        egg_toolbars_model_load_names (ev_application->toolbars_model,
-                                      DATADIR "/evince-toolbar.xml");
+                                      toolbar_path);
 
        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");
+                                                 toolbar_path);
        }
+       g_free (toolbar_path);
 
        /* Open item doesn't exist anymore,
         * convert it to OpenRecent for compatibility
@@ -924,16 +946,32 @@ ev_application_save_toolbars_model (EvApplication *application)
 }
 
 void
-ev_application_set_chooser_uri (EvApplication *application, const gchar *uri)
+ev_application_set_filechooser_uri (EvApplication       *application,
+                                   GtkFileChooserAction action,
+                                   const gchar         *uri)
 {
-       g_free (application->last_chooser_uri);
-       application->last_chooser_uri = g_strdup (uri);
+       if (action == GTK_FILE_CHOOSER_ACTION_OPEN) {
+               g_free (application->filechooser_open_uri);
+               application->filechooser_open_uri = g_strdup (uri);
+       } else if (action == GTK_FILE_CHOOSER_ACTION_SAVE) {
+               g_free (application->filechooser_save_uri);
+               application->filechooser_save_uri = g_strdup (uri);
+       }
 }
 
 const gchar *
-ev_application_get_chooser_uri (EvApplication *application)
+ev_application_get_filechooser_uri (EvApplication       *application,
+                                   GtkFileChooserAction action)
 {
-       return application->last_chooser_uri;
+       if (action == GTK_FILE_CHOOSER_ACTION_OPEN) {
+               if (application->filechooser_open_uri)
+                       return application->filechooser_open_uri;
+       } else if (action == GTK_FILE_CHOOSER_ACTION_SAVE) {
+               if (application->filechooser_save_uri)
+                       return application->filechooser_save_uri;
+       }
+
+       return NULL;
 }
 
 void
@@ -1095,3 +1133,9 @@ ev_application_get_dot_dir (EvApplication   *application)
 {
        return application->dot_dir;
 }
+
+const gchar *
+ev_application_get_data_dir (EvApplication   *application)
+{
+       return application->data_dir;
+}