diff options
Diffstat (limited to 'plugins/filebrowser')
-rw-r--r-- | plugins/filebrowser/pluma-file-bookmarks-store.c | 133 |
1 files changed, 85 insertions, 48 deletions
diff --git a/plugins/filebrowser/pluma-file-bookmarks-store.c b/plugins/filebrowser/pluma-file-bookmarks-store.c index 073d6bb3..bcd550a2 100644 --- a/plugins/filebrowser/pluma-file-bookmarks-store.c +++ b/plugins/filebrowser/pluma-file-bookmarks-store.c @@ -494,66 +494,103 @@ add_bookmark (PlumaFileBookmarksStore * model, return ret; } -static void -init_bookmarks (PlumaFileBookmarksStore * model) +static gchar * +get_bookmarks_file (void) +{ + return g_build_filename (g_get_user_config_dir (), "gtk-3.0", "bookmarks", NULL); +} + +static gchar * +get_legacy_bookmarks_file (void) +{ + return g_build_filename (g_get_home_dir (), ".gtk-bookmarks", NULL); +} + +static gboolean +parse_bookmarks_file (PlumaFileBookmarksStore *model, + const gchar *bookmarks, + gboolean *added) { - gchar *bookmarks; GError *error = NULL; gchar *contents; gchar **lines; gchar **line; - gboolean added = FALSE; - /* Read the bookmarks file */ - bookmarks = g_build_filename (g_get_home_dir (), - ".gtk-bookmarks", - NULL); - - if (g_file_get_contents (bookmarks, &contents, NULL, &error)) { - lines = g_strsplit (contents, "\n", 0); - - for (line = lines; *line; ++line) { - if (**line) { - gchar *pos; - gchar *name; - - /* CHECK: is this really utf8? */ - pos = g_utf8_strchr (*line, -1, ' '); - - if (pos != NULL) { - *pos = '\0'; - name = pos + 1; - } else { - name = NULL; - } - - /* the bookmarks file should contain valid - * URIs, but paranoia is good */ - if (pluma_utils_is_valid_uri (*line)) { - added |= add_bookmark (model, name, *line); - } + if (!g_file_get_contents (bookmarks, &contents, NULL, &error)) + { + /* The bookmarks file doesn't exist (which is perfectly fine) */ + g_error_free (error); + + return FALSE; + } + + lines = g_strsplit (contents, "\n", 0); + + for (line = lines; *line; ++line) + { + if (**line) + { + gchar *pos; + gchar *name; + + /* CHECK: is this really utf8? */ + pos = g_utf8_strchr (*line, -1, ' '); + + if (pos != NULL) + { + *pos = '\0'; + name = pos + 1; + } + else + { + name = NULL; + } + + /* the bookmarks file should contain valid + * URIs, but paranoia is good */ + if (pluma_utils_is_valid_uri (*line)) + { + *added |= add_bookmark (model, name, *line); } } + } + + g_strfreev (lines); + g_free (contents); - g_strfreev (lines); - g_free (contents); + /* Add a watch */ + if (model->priv->bookmarks_monitor == NULL) + { + GFile *file; - /* Add a watch */ - if (model->priv->bookmarks_monitor == NULL) { - GFile * file; + file = g_file_new_for_path (bookmarks); + model->priv->bookmarks_monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL); + g_object_unref (file); - file = g_file_new_for_path (bookmarks); - model->priv->bookmarks_monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, NULL); - g_object_unref (file); + g_signal_connect (model->priv->bookmarks_monitor, + "changed", + G_CALLBACK (on_bookmarks_file_changed), + model); + } - g_signal_connect (model->priv->bookmarks_monitor, - "changed", - (GCallback)on_bookmarks_file_changed, - model); - } - } else { - /* The bookmarks file doesn't exist (which is perfectly fine) */ - g_error_free (error); + return TRUE; +} + +static void +init_bookmarks (PlumaFileBookmarksStore *model) +{ + gchar *bookmarks; + gboolean added = FALSE; + + bookmarks = get_bookmarks_file (); + + if (!parse_bookmarks_file (model, bookmarks, &added)) + { + g_free (bookmarks); + + /* try the old location (gtk <= 3.4) */ + bookmarks = get_legacy_bookmarks_file (); + parse_bookmarks_file (model, bookmarks, &added); } if (added) { |