+2009-01-26 Christian Persch <chpe@gnome.org>
+
+ * libdocument/ev-file-helpers.c: (ev_dir_ensure_exists),
+ (ev_tmp_dir), (ev_file_helpers_init), (ev_file_helpers_shutdown):
+ * libdocument/ev-file-helpers.h:
+ * shell/ev-application.c: (ev_application_shutdown),
+ (ev_application_init), (ev_application_screensaver_disable),
+ (ev_application_save_print_settings),
+ (ev_application_set_page_setup):
+ * shell/ev-application.h:
+ * shell/ev-metadata-manager.c: (load_values),
+ (ev_metadata_manager_save): Move ev_dot_dir() from libdocument to
+ shell, since it shouldn't be public API. Bug #569120.
+
+ * libdocument/ev-file-helpers.c: (ev_tmp_filename): Use
+ g_get_prgname() instead of hardcoding "evince" for the tmpdir name.
+
2009-01-25 Christian Persch <chpe@gnome.org>
Bug 569082 – use versioned directory for backends
#include "ev-file-helpers.h"
-static gchar *dot_dir = NULL;
static gchar *tmp_dir = NULL;
static gint count = 0;
-static gboolean
-ensure_dir_exists (const char *dir)
+gboolean
+ev_dir_ensure_exists (const gchar *dir,
+ int mode)
{
- if (g_file_test (dir, G_FILE_TEST_IS_DIR))
- return TRUE;
-
- if (g_mkdir_with_parents (dir, 488) == 0)
+ if (g_mkdir_with_parents (dir, mode) == 0)
return TRUE;
if (errno == EEXIST)
return g_file_test (dir, G_FILE_TEST_IS_DIR);
- g_warning ("Failed to create directory %s: %s", dir, strerror (errno));
+ g_warning ("Failed to create directory %s: %s", dir, g_strerror (errno));
return FALSE;
}
-const gchar *
-ev_dot_dir (void)
-{
- if (dot_dir == NULL) {
- gboolean exists;
-
- dot_dir = g_build_filename (g_get_home_dir (),
- ".gnome2",
- "evince",
- NULL);
-
- exists = ensure_dir_exists (dot_dir);
- if (!exists)
- exit (1);
- }
-
- return dot_dir;
-}
-
const gchar *
ev_tmp_dir (void)
{
if (tmp_dir == NULL) {
gboolean exists;
- gchar *dirname;
+ gchar *dirname, *prgname;
- dirname = g_strdup_printf ("evince-%u", getpid ());
+ prgname = g_get_prgname ();
+ dirname = g_strdup_printf ("%s-%u", prgname ? prgname : "unknown", getpid ());
tmp_dir = g_build_filename (g_get_tmp_dir (),
dirname,
NULL);
g_free (dirname);
- exists = ensure_dir_exists (tmp_dir);
+ exists = ev_dir_ensure_exists (tmp_dir, 0700);
g_assert (exists);
}
g_rmdir (tmp_dir);
g_free (tmp_dir);
- g_free (dot_dir);
-
- dot_dir = NULL;
tmp_dir = NULL;
}
EV_COMPRESSION_GZIP
} EvCompressionType;
-const gchar *ev_dot_dir (void);
-
const gchar *ev_tmp_dir (void);
void ev_file_helpers_init (void);
void ev_file_helpers_shutdown (void);
+gboolean ev_dir_ensure_exists (const gchar *dir,
+ int mode);
+
GFile *ev_tmp_file_get (const gchar *prefix);
gchar *ev_tmp_filename (const char *prefix);
void ev_tmp_filename_unlink (const gchar *filename);
#include <config.h>
+#include <stdlib.h>
#include <string.h>
#include <glib.h>
struct _EvApplication {
GObject base_instance;
+ gchar *dot_dir;
gchar *accel_map_file;
-
gchar *toolbars_file;
EggToolbarsModel *toolbars_model;
}
#endif /* ENABLE_DBUS */
+ g_free (application->dot_dir);
+ application->dot_dir = NULL;
g_free (application->last_chooser_uri);
+ application->last_chooser_uri = NULL;
+
g_object_unref (application);
gtk_main_quit ();
ev_application_init_session (ev_application);
+ ev_application->dot_dir = g_build_filename (g_get_home_dir (),
+ ".gnome2",
+ "evince",
+ NULL);
+
+ /* FIXME: why make this fatal? */
+ if (!ev_dir_ensure_exists (ev_application->dot_dir, 0700))
+ exit (1);
+
home_dir = g_get_home_dir ();
if (home_dir) {
ev_application->accel_map_file = g_build_filename (home_dir,
ev_application->toolbars_model = egg_toolbars_model_new ();
ev_application->toolbars_file = g_build_filename
- (ev_dot_dir (), "evince_toolbar.xml", NULL);
+ (ev_application->dot_dir, "evince_toolbar.xml", NULL);
egg_toolbars_model_load_names (ev_application->toolbars_model,
DATADIR "/evince-toolbar.xml");
application->print_settings_file = g_key_file_new ();
- filename = g_build_filename (ev_dot_dir (), EV_PRINT_SETTINGS_FILE, NULL);
+ 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;
key_file,
EV_PAGE_SETUP_GROUP);
- filename = g_build_filename (ev_dot_dir (), EV_PRINT_SETTINGS_FILE, NULL);
+ 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) {
application->page_setup = g_object_ref (page_setup);
gtk_page_setup_to_key_file (page_setup, key_file, EV_PAGE_SETUP_GROUP);
}
+
+const gchar *
+ev_application_get_dot_dir (EvApplication *application)
+{
+ return application->dot_dir;
+}
GtkPageSetup *ev_application_get_page_setup (EvApplication *application);
void ev_application_set_page_setup (EvApplication *application,
GtkPageSetup *page_setup);
+const gchar *ev_application_get_dot_dir (EvApplication *application);
G_END_DECLS
#include <libxml/xmlreader.h>
#include "ev-metadata-manager.h"
+#include "ev-application.h"
#include "ev-file-helpers.h"
#define METADATA_FILE "ev-metadata.xml"
xmlKeepBlanksDefault (0);
/* FIXME: file locking - Paolo */
- file_name = g_build_filename (ev_dot_dir (), METADATA_FILE, NULL);
+ file_name = g_build_filename (ev_application_get_dot_dir (EV_APP), METADATA_FILE, NULL);
if (!g_file_test (file_name, G_FILE_TEST_EXISTS))
{
g_free (file_name);
(GHFunc)save_item, root);
/* FIXME: lock file - Paolo */
- file_name = g_build_filename (ev_dot_dir (), METADATA_FILE, NULL);
+ file_name = g_build_filename (ev_application_get_dot_dir (EV_APP), METADATA_FILE, NULL);
xmlSaveFormatFile (file_name, doc, 1);
g_free (file_name);