X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=inline;f=shell%2Fev-application.c;h=5a870148fd3c4352fc9e984cc8c5081598987433;hb=d3688d90ef2ac74632997a421a042e44534af9d9;hp=6e4cf62d5017ca14c9b6f308d1b370152ce8969d;hpb=37efd94eac7f72c2f87a5442ec200bb06fa8558e;p=evince.git diff --git a/shell/ev-application.c b/shell/ev-application.c index 6e4cf62d..5a870148 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 @@ -58,8 +58,6 @@ static gboolean ev_application_open_uri (EvApplication *application, #include "ev-application-service.h" #endif -static void ev_application_save_print_settings (EvApplication *application); - struct _EvApplication { GObject base_instance; @@ -67,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 @@ -85,10 +79,6 @@ struct _EvApplication { gchar *filechooser_open_uri; gchar *filechooser_save_uri; - - GtkPrintSettings *print_settings; - GtkPageSetup *page_setup; - GKeyFile *print_settings_file; }; struct _EvApplicationClass { @@ -104,10 +94,6 @@ G_DEFINE_TYPE (EvApplication, ev_application, G_TYPE_OBJECT); #define APPLICATION_DBUS_INTERFACE "org.gnome.evince.Application" #endif -#define EV_PRINT_SETTINGS_FILE "print-settings" -#define EV_PRINT_SETTINGS_GROUP "Print Settings" -#define EV_PAGE_SETUP_GROUP "Page Setup" - /** * ev_application_get_instance: * @@ -422,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) { @@ -799,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) { @@ -811,35 +851,10 @@ 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); - ev_application_save_print_settings (application); - - if (application->print_settings_file) { - g_key_file_free (application->print_settings_file); - application->print_settings_file = NULL; - } - - if (application->print_settings) { - g_object_unref (application->print_settings); - application->print_settings = NULL; - } - - if (application->page_setup) { - g_object_unref (application->page_setup); - application->page_setup = NULL; - } + g_object_unref (application->scr_saver); + application->scr_saver = NULL; #ifdef ENABLE_DBUS if (application->keys) { @@ -875,9 +890,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 (), @@ -885,10 +897,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; @@ -903,51 +911,9 @@ 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; - } - } + ev_application_accel_map_load (ev_application); - egg_toolbars_model_set_flags (ev_application->toolbars_model, 0, - EGG_TB_MODEL_NOT_REMOVABLE); + ev_application->scr_saver = totem_scrsaver_new (); #ifdef ENABLE_DBUS ev_application->connection = dbus_g_bus_get (DBUS_BUS_STARTER, &error); @@ -955,7 +921,6 @@ ev_application_init (EvApplication *ev_application) dbus_g_connection_register_g_object (ev_application->connection, APPLICATION_DBUS_OBJECT_PATH, G_OBJECT (ev_application)); - ev_application->scr_saver = totem_scrsaver_new (ev_application->connection); } else { g_warning ("Error connection to DBus: %s\n", error->message); g_error_free (error); @@ -999,19 +964,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, @@ -1044,160 +996,22 @@ ev_application_get_filechooser_uri (EvApplication *application, void ev_application_screensaver_enable (EvApplication *application) { - if (application->scr_saver) - totem_scrsaver_enable (application->scr_saver); + totem_scrsaver_enable (application->scr_saver); } void ev_application_screensaver_disable (EvApplication *application) { - if (application->scr_saver) - totem_scrsaver_disable (application->scr_saver); -} - -static GKeyFile * -ev_application_get_print_settings_file (EvApplication *application) -{ - gchar *filename; - - if (application->print_settings_file) - return application->print_settings_file; - - application->print_settings_file = g_key_file_new (); - - filename = g_build_filename (ev_application_get_dot_dir (application), EV_PRINT_SETTINGS_FILE, NULL); - if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) { - GError *error = NULL; - - g_key_file_load_from_file (application->print_settings_file, - filename, - G_KEY_FILE_KEEP_COMMENTS | - G_KEY_FILE_KEEP_TRANSLATIONS, - &error); - if (error) { - g_warning ("%s", error->message); - g_error_free (error); - } - } - g_free (filename); - - return application->print_settings_file; -} - -static void -ev_application_save_print_settings (EvApplication *application) -{ - GKeyFile *key_file; - gchar *filename; - gchar *data; - gssize data_length; - GError *error = NULL; - - if (!application->print_settings && !application->page_setup) - return; - - key_file = ev_application_get_print_settings_file (application); - if (application->print_settings) - gtk_print_settings_to_key_file (application->print_settings, - key_file, - EV_PRINT_SETTINGS_GROUP); - if (application->page_setup) - gtk_page_setup_to_key_file (application->page_setup, - key_file, - EV_PAGE_SETUP_GROUP); - - filename = g_build_filename (ev_application_get_dot_dir (application), EV_PRINT_SETTINGS_FILE, NULL); - data = g_key_file_to_data (key_file, (gsize *)&data_length, NULL); - g_file_set_contents (filename, data, data_length, &error); - if (error) { - g_warning ("%s", error->message); - g_error_free (error); - } - g_free (data); - g_free (filename); -} - -GtkPrintSettings * -ev_application_get_print_settings (EvApplication *application) -{ - GKeyFile *key_file; - GtkPrintSettings *print_settings; - - if (application->print_settings) - return application->print_settings; - - key_file = ev_application_get_print_settings_file (application); - print_settings = g_key_file_has_group (key_file, EV_PRINT_SETTINGS_GROUP) ? - gtk_print_settings_new_from_key_file (key_file, EV_PRINT_SETTINGS_GROUP, NULL) : - gtk_print_settings_new (); - - application->print_settings = print_settings ? print_settings : gtk_print_settings_new (); - - return application->print_settings; -} - -void -ev_application_set_print_settings (EvApplication *application, - GtkPrintSettings *settings) -{ - GKeyFile *key_file; - - g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings)); - - if (settings == application->print_settings) - return; - - key_file = ev_application_get_print_settings_file (application); - - if (application->print_settings) - g_object_unref (application->print_settings); - - application->print_settings = g_object_ref (settings); - gtk_print_settings_to_key_file (settings, key_file, EV_PRINT_SETTINGS_GROUP); -} - -GtkPageSetup * -ev_application_get_page_setup (EvApplication *application) -{ - GKeyFile *key_file; - GtkPageSetup *page_setup; - - if (application->page_setup) - return application->page_setup; - - key_file = ev_application_get_print_settings_file (application); - page_setup = g_key_file_has_group (key_file, EV_PAGE_SETUP_GROUP) ? - gtk_page_setup_new_from_key_file (key_file, EV_PAGE_SETUP_GROUP, NULL) : - gtk_page_setup_new (); - - application->page_setup = page_setup ? page_setup : gtk_page_setup_new (); - - return application->page_setup; -} - -void -ev_application_set_page_setup (EvApplication *application, - GtkPageSetup *page_setup) -{ - GKeyFile *key_file; - - g_return_if_fail (GTK_IS_PAGE_SETUP (page_setup)); - - if (page_setup == application->page_setup) - return; - - key_file = ev_application_get_print_settings_file (application); - - if (application->page_setup) - g_object_unref (application->page_setup); - - application->page_setup = g_object_ref (page_setup); - gtk_page_setup_to_key_file (page_setup, key_file, EV_PAGE_SETUP_GROUP); + totem_scrsaver_disable (application->scr_saver); } 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; }