[gtk+/places-sidebar] Factor out code to find a bookmark in the list of bookmarks
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/places-sidebar] Factor out code to find a bookmark in the list of bookmarks
- Date: Tue, 11 Sep 2012 20:18:25 +0000 (UTC)
commit 8b1eb6db998808d7235a212e104af19ef8e27d87
Author: Federico Mena Quintero <federico gnome org>
Date: Tue Sep 11 15:02:01 2012 -0500
Factor out code to find a bookmark in the list of bookmarks
Signed-off-by: Federico Mena Quintero <federico gnome org>
gtk/gtkbookmarksmanager.c | 110 +++++++++++++++++++++-----------------------
gtk/gtkbookmarksmanager.h | 7 ++-
gtk/gtkplacessidebar.c | 2 +-
3 files changed, 58 insertions(+), 61 deletions(-)
---
diff --git a/gtk/gtkbookmarksmanager.c b/gtk/gtkbookmarksmanager.c
index abd31af..aa55dac 100644
--- a/gtk/gtkbookmarksmanager.c
+++ b/gtk/gtkbookmarksmanager.c
@@ -276,38 +276,39 @@ _gtk_bookmarks_manager_list_bookmarks (GtkBookmarksManager *manager)
return g_slist_reverse (files);
}
+GSList *
+find_bookmark_link_for_file (GSList *bookmarks, GFile *file)
+{
+ for (; bookmarks; bookmarks = bookmarks->next)
+ {
+ GtkBookmark *bookmark = bookmarks->data;
+
+ if (g_file_equal (file, bookmark->file))
+ return bookmarks;
+ }
+
+ return NULL;
+}
+
gboolean
_gtk_bookmarks_manager_insert_bookmark (GtkBookmarksManager *manager,
GFile *file,
gint position,
GError **error)
{
- GSList *bookmarks;
+ GSList *link;
GtkBookmark *bookmark;
- gboolean result = TRUE;
GFile *bookmarks_file;
g_return_val_if_fail (manager != NULL, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- bookmarks = manager->bookmarks;
-
- while (bookmarks)
- {
- bookmark = bookmarks->data;
- bookmarks = bookmarks->next;
-
- if (g_file_equal (bookmark->file, file))
- {
- /* File is already in bookmarks */
- result = FALSE;
- break;
- }
- }
+ link = find_bookmark_link_for_file (manager->bookmarks, file);
- if (!result)
+ if (link)
{
- gchar *uri = g_file_get_uri (file);
+ bookmark = link->data;
+ gchar *uri = g_file_get_uri (bookmark->file);
g_set_error (error,
GTK_FILE_CHOOSER_ERROR,
@@ -339,9 +340,7 @@ _gtk_bookmarks_manager_remove_bookmark (GtkBookmarksManager *manager,
GFile *file,
GError **error)
{
- GtkBookmark *bookmark;
- GSList *bookmarks;
- gboolean result = FALSE;
+ GSList *link;
GFile *bookmarks_file;
g_return_val_if_fail (manager != NULL, FALSE);
@@ -350,25 +349,16 @@ _gtk_bookmarks_manager_remove_bookmark (GtkBookmarksManager *manager,
if (!manager->bookmarks)
return FALSE;
- bookmarks = manager->bookmarks;
-
- while (bookmarks)
+ link = find_bookmark_link_for_file (manager->bookmarks, file);
+ if (link)
{
- bookmark = bookmarks->data;
-
- if (g_file_equal (bookmark->file, file))
- {
- result = TRUE;
- manager->bookmarks = g_slist_remove_link (manager->bookmarks, bookmarks);
- _gtk_bookmark_free (bookmark);
- g_slist_free_1 (bookmarks);
- break;
- }
+ GtkBookmark *bookmark = link->data;
- bookmarks = bookmarks->next;
+ manager->bookmarks = g_slist_remove_link (manager->bookmarks, link);
+ _gtk_bookmark_free (bookmark);
+ g_slist_free_1 (link);
}
-
- if (!result)
+ else
{
gchar *uri = g_file_get_uri (file);
@@ -421,40 +411,46 @@ _gtk_bookmarks_manager_get_bookmark_label (GtkBookmarksManager *manager,
return label;
}
-void
+gboolean
_gtk_bookmarks_manager_set_bookmark_label (GtkBookmarksManager *manager,
GFile *file,
- const gchar *label)
+ const gchar *label,
+ GError **error)
{
- gboolean changed = FALSE;
GFile *bookmarks_file;
- GSList *bookmarks;
+ GSList *link;
- g_return_if_fail (manager != NULL);
- g_return_if_fail (file != NULL);
+ g_return_val_if_fail (manager != NULL, FALSE);
+ g_return_val_if_fail (file != NULL, FALSE);
- bookmarks = manager->bookmarks;
+ link = find_bookmark_link_for_file (manager->bookmarks, file);
+ if (link)
+ {
+ GtkBookmark *bookmark = link->data;
- while (bookmarks)
+ g_free (bookmark->label);
+ bookmark->label = g_strdup (label);
+ }
+ else
{
- GtkBookmark *bookmark;
+ gchar *uri = g_file_get_uri (file);
- bookmark = bookmarks->data;
- bookmarks = bookmarks->next;
+ g_set_error (error,
+ GTK_FILE_CHOOSER_ERROR,
+ GTK_FILE_CHOOSER_ERROR_NONEXISTENT,
+ "%s does not exist in the bookmarks list",
+ uri);
- if (g_file_equal (file, bookmark->file))
- {
- g_free (bookmark->label);
- bookmark->label = g_strdup (label);
- changed = TRUE;
- break;
- }
+ g_free (uri);
+
+ return FALSE;
}
bookmarks_file = get_bookmarks_file ();
save_bookmarks (bookmarks_file, manager->bookmarks);
g_object_unref (bookmarks_file);
- if (changed)
- notify_changed (manager);
+ notify_changed (manager);
+
+ return TRUE;
}
diff --git a/gtk/gtkbookmarksmanager.h b/gtk/gtkbookmarksmanager.h
index a991c04..8c00052 100644
--- a/gtk/gtkbookmarksmanager.h
+++ b/gtk/gtkbookmarksmanager.h
@@ -67,8 +67,9 @@ gboolean _gtk_bookmarks_manager_remove_bookmark (GtkBookmarksManager *manager,
gchar * _gtk_bookmarks_manager_get_bookmark_label (GtkBookmarksManager *manager,
GFile *file);
-void _gtk_bookmarks_manager_set_bookmark_label (GtkBookmarksManager *manager,
- GFile *file,
- const gchar *label);
+gboolean _gtk_bookmarks_manager_set_bookmark_label (GtkBookmarksManager *manager,
+ GFile *file,
+ const gchar *label,
+ GError **error);
#endif /* __GTK_BOOKMARKS_MANAGER_H__ */
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index a7c94a8..3477764 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -3016,7 +3016,7 @@ bookmarks_edited (GtkCellRenderer *cell,
gtk_tree_path_free (path);
file = g_file_new_for_uri (uri);
- _gtk_bookmarks_manager_set_bookmark_label (sidebar->bookmarks_manager, file, new_text);
+ _gtk_bookmarks_manager_set_bookmark_label (sidebar->bookmarks_manager, file, new_text, NULL); /* NULL-GError */
g_object_unref (file);
g_free (uri);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]