X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-application.c;h=9fe6596acc64eae059e3c5482b8662940a0f46e7;hb=7ffaa3a0083d1f59a721f9f22f23d29d3cfc52aa;hp=cc271f5d64c3cc6390050a0b67e58f3e65b2efca;hpb=70919434b478e8f1073eed56097d29b6f2dba314;p=evince.git diff --git a/shell/ev-application.c b/shell/ev-application.c index cc271f5d..9fe6596a 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -27,10 +27,12 @@ #include #include +#include #include #ifdef GDK_WINDOWING_X11 #include #endif +#include #include "totem-scrsaver.h" @@ -39,9 +41,7 @@ #endif #include "ev-application.h" -#include "ev-document-factory.h" #include "ev-file-helpers.h" -#include "ev-utils.h" #include "ev-stock-icons.h" #ifdef ENABLE_DBUS @@ -65,16 +65,12 @@ struct _EvApplication { gchar *dot_dir; gchar *data_dir; - gchar *accel_map_file; - gchar *toolbars_file; #ifdef ENABLE_DBUS DBusGConnection *connection; EvMediaPlayerKeys *keys; #endif - EggToolbarsModel *toolbars_model; - TotemScrsaver *scr_saver; #ifdef WITH_SMCLIENT @@ -412,7 +408,17 @@ ev_spawn (const char *uri, gboolean res; GError *error = NULL; +#ifdef G_OS_WIN32 +{ + gchar *dir; + + dir = g_win32_get_package_installation_directory_of_module (NULL); + argv[arg++] = g_build_filename (dir, "bin", "evince", NULL); + g_free (dir); +} +#else argv[arg++] = g_build_filename (BINDIR, "evince", NULL); +#endif /* Page label */ if (dest) { @@ -789,6 +795,50 @@ ev_application_open_uri_list (EvApplication *application, } } +static void +ev_application_accel_map_save (EvApplication *application) +{ + gchar *accel_map_file; + gchar *tmp_filename; + gint fd; + + accel_map_file = g_build_filename (g_get_home_dir (), + ".gnome2", "accels", + "evince", NULL); + + tmp_filename = g_strdup_printf ("%s.XXXXXX", accel_map_file); + + fd = g_mkstemp (tmp_filename); + if (fd == -1) { + g_free (accel_map_file); + g_free (tmp_filename); + + return; + } + gtk_accel_map_save_fd (fd); + close (fd); + + if (g_rename (tmp_filename, accel_map_file) == -1) { + /* FIXME: win32? */ + g_unlink (tmp_filename); + } + + g_free (accel_map_file); + g_free (tmp_filename); +} + +static void +ev_application_accel_map_load (EvApplication *application) +{ + gchar *accel_map_file; + + accel_map_file = g_build_filename (g_get_home_dir (), + ".gnome2", "accels", + "evince", NULL); + gtk_accel_map_load (accel_map_file); + g_free (accel_map_file); +} + void ev_application_shutdown (EvApplication *application) { @@ -801,18 +851,7 @@ ev_application_shutdown (EvApplication *application) application->uri = NULL; } - if (application->accel_map_file) { - gtk_accel_map_save (application->accel_map_file); - g_free (application->accel_map_file); - application->accel_map_file = NULL; - } - - if (application->toolbars_model) { - g_object_unref (application->toolbars_model); - g_free (application->toolbars_file); - application->toolbars_model = NULL; - application->toolbars_file = NULL; - } + ev_application_accel_map_save (application); #ifdef ENABLE_DBUS if (application->keys) { @@ -848,9 +887,6 @@ ev_application_class_init (EvApplicationClass *ev_application_class) static void ev_application_init (EvApplication *ev_application) { - gint i; - const gchar *home_dir; - gchar *toolbar_path; GError *error = NULL; ev_application->dot_dir = g_build_filename (g_get_home_dir (), @@ -858,10 +894,6 @@ ev_application_init (EvApplication *ev_application) "evince", NULL); - /* FIXME: why make this fatal? */ - if (!ev_dir_ensure_exists (ev_application->dot_dir, 0700)) - exit (1); - #ifdef G_OS_WIN32 { gchar *dir; @@ -876,51 +908,7 @@ ev_application_init (EvApplication *ev_application) ev_application_init_session (ev_application); - home_dir = g_get_home_dir (); - if (home_dir) { - ev_application->accel_map_file = g_build_filename (home_dir, - ".gnome2", - "accels", - "evince", - NULL); - gtk_accel_map_load (ev_application->accel_map_file); - } - - ev_application->toolbars_model = egg_toolbars_model_new (); - - 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, - 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, - toolbar_path); - } - g_free (toolbar_path); - - /* Open item doesn't exist anymore, - * convert it to OpenRecent for compatibility - */ - for (i = 0; i < egg_toolbars_model_n_items (ev_application->toolbars_model, 0); i++) { - const gchar *item; - - item = egg_toolbars_model_item_nth (ev_application->toolbars_model, 0, i); - if (g_ascii_strcasecmp (item, "FileOpen") == 0) { - egg_toolbars_model_remove_item (ev_application->toolbars_model, 0, i); - egg_toolbars_model_add_item (ev_application->toolbars_model, 0, i, - "FileOpenRecent"); - ev_application_save_toolbars_model (ev_application); - break; - } - } - - egg_toolbars_model_set_flags (ev_application->toolbars_model, 0, - EGG_TB_MODEL_NOT_REMOVABLE); + ev_application_accel_map_load (ev_application); #ifdef ENABLE_DBUS ev_application->connection = dbus_g_bus_get (DBUS_BUS_STARTER, &error); @@ -972,19 +960,6 @@ ev_application_get_media_keys (EvApplication *application) #endif /* ENABLE_DBUS */ } -EggToolbarsModel * -ev_application_get_toolbars_model (EvApplication *application) -{ - return application->toolbars_model; -} - -void -ev_application_save_toolbars_model (EvApplication *application) -{ - egg_toolbars_model_save_toolbars (application->toolbars_model, - application->toolbars_file, "1.0"); -} - void ev_application_set_filechooser_uri (EvApplication *application, GtkFileChooserAction action, @@ -1029,8 +1004,12 @@ ev_application_screensaver_disable (EvApplication *application) } const gchar * -ev_application_get_dot_dir (EvApplication *application) +ev_application_get_dot_dir (EvApplication *application, + gboolean create) { + if (create) + g_mkdir_with_parents (application->dot_dir, 0700); + return application->dot_dir; }