From cbc666786c8d367736fb607f03bb41da1a0fe14a Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Thu, 17 Jan 2013 15:56:47 -0500 Subject: [PATCH 2/2] Use bookmarks file from gtk-3.0 XDG config dir if present The logic to parse/save the bookmarks file is modified as following: - if $XDG_CONFIG_DIR/gtk-3.0/bookmarks is found, load and save that - otherwise if $HOME/.gtk-bookmarks is found, load and save that - if none are found (e.g. on a new installation), there's nothing to load, but save to the new location https://bugs.freedesktop.org/show_bug.cgi?id=59527 --- parse.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/parse.c b/parse.c index 9720c71..7772144 100644 --- a/parse.c +++ b/parse.c @@ -1,6 +1,28 @@ #include "parse.h" #include +static char * +get_gtk_bookmarks_filename (void) +{ + char *filename, *legacy_filename; + gboolean exists, legacy_exists; + + filename = g_build_filename (g_get_user_config_dir (), "gtk-3.0", "bookmarks", NULL); + exists = g_file_test (filename, G_FILE_TEST_EXISTS); + + if (exists) + return filename; + + legacy_filename = g_build_filename (g_get_home_dir (), ".gtk-bookmarks", NULL); + legacy_exists = g_file_test (legacy_filename, G_FILE_TEST_EXISTS); + + if (legacy_exists) + return legacy_filename; + + /* if neither exist, return the new filename */ + return filename; +} + char * parse_xdg_dirs_locale (void) { @@ -121,9 +143,7 @@ parse_gtk_bookmarks (void) GtkBookmark *bookmark; GList *bookmarks; - filename = g_build_filename (g_get_home_dir (), - ".gtk-bookmarks", - NULL); + filename = get_gtk_bookmarks_filename (); bookmarks = NULL; /* Read new list from file */ @@ -163,14 +183,12 @@ parse_gtk_bookmarks (void) void save_gtk_bookmarks (GList *bookmarks) { - char *filename; + char *filename, *dirname; GString *str; GList *l; GtkBookmark *bookmark; - filename = g_build_filename (g_get_home_dir (), - ".gtk-bookmarks", - NULL); + filename = get_gtk_bookmarks_filename (); str = g_string_new (""); for (l = bookmarks; l != NULL; l = l->next) @@ -183,8 +201,11 @@ save_gtk_bookmarks (GList *bookmarks) g_string_append_printf (str, "%s\n", bookmark->uri); } - g_file_set_contents (filename, str->str, str->len, NULL); - + dirname = g_path_get_dirname (filename); + if (g_mkdir_with_parents (dirname, 0700) == 0) + g_file_set_contents (filename, str->str, str->len, NULL); + g_string_free (str, TRUE); g_free (filename); + g_free (dirname); } -- 1.8.1