X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-application.c;h=812adae4d89517ac96a488344011dc92db8170f1;hb=5f554d8e362a35e05840068e1b3ea935be5d3c47;hp=e2f066344b212a0e32a6070773e503d9c9f08ade;hpb=53b5b04e123bdbb6993b43b3883e6f7e9c8878b6;p=evince.git diff --git a/shell/ev-application.c b/shell/ev-application.c index e2f06634..812adae4 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,7 +65,6 @@ struct _EvApplication { gchar *dot_dir; gchar *data_dir; - gchar *accel_map_file; #ifdef ENABLE_DBUS DBusGConnection *connection; @@ -786,6 +785,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) { @@ -798,12 +841,8 @@ 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; - } - + ev_application_accel_map_save (application); + #ifdef ENABLE_DBUS if (application->keys) { g_object_unref (application->keys); @@ -838,7 +877,6 @@ ev_application_class_init (EvApplicationClass *ev_application_class) static void ev_application_init (EvApplication *ev_application) { - const gchar *home_dir; GError *error = NULL; ev_application->dot_dir = g_build_filename (g_get_home_dir (), @@ -846,10 +884,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; @@ -864,15 +898,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_accel_map_load (ev_application); #ifdef ENABLE_DBUS ev_application->connection = dbus_g_bus_get (DBUS_BUS_STARTER, &error); @@ -968,8 +994,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; }