diff options
author | Iulian Radu <iulian.radu67@gmail.com> | 2017-04-02 21:22:06 +0300 |
---|---|---|
committer | Iulian Radu <iulian.radu67@gmail.com> | 2017-04-02 21:41:22 +0300 |
commit | 22bdf160770fc05d5ae433657d7e58fdc82c71df (patch) | |
tree | e71a071a4a53c7f7e0f6630f3b5efa64cb1b3d98 | |
parent | 9b668efbb2044174804c61b61743152ad85f8fb2 (diff) | |
download | epiphany-22bdf160770fc05d5ae433657d7e58fdc82c71df.tar.gz |
add-bookmark-popover: Save bookmarks on both popover show and close
Due to the fact that a bookmark is added to the manager when the popover
is closed, a press on the bookmark button followed by a press on the "Remove
bookmark" button causes a crash because ephy_bookmarks_manager_remove_bookmark()
tries to find the new bookmark which has not been added yet.
Revert to the original behaviour where a bookmark is saved immediately
after pressing the star, but also save the bookmark when the popover is
closed in case the user changed something while the popover was open
https://bugzilla.gnome.org/show_bug.cgi?id=780851
-rw-r--r-- | src/bookmarks/ephy-add-bookmark-popover.c | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/src/bookmarks/ephy-add-bookmark-popover.c b/src/bookmarks/ephy-add-bookmark-popover.c index 6d39d8511..195396d85 100644 --- a/src/bookmarks/ephy-add-bookmark-popover.c +++ b/src/bookmarks/ephy-add-bookmark-popover.c @@ -32,7 +32,6 @@ struct _EphyAddBookmarkPopover { GtkPopover parent_instance; char *address; - EphyBookmark *bookmark; gboolean is_new_bookmark; GtkWidget *grid; @@ -73,7 +72,6 @@ ephy_add_bookmark_popover_finalize (GObject *object) if (self->address) g_free (self->address); - g_object_unref (self->bookmark); G_OBJECT_CLASS (ephy_add_bookmark_popover_parent_class)->finalize (object); } @@ -115,26 +113,15 @@ static void ephy_add_bookmark_popover_closed_cb (GtkPopover *popover, gpointer user_data) { - EphyAddBookmarkPopover *self; EphyBookmarksManager *manager; - GtkWidget *location_entry; g_assert (EPHY_IS_ADD_BOOKMARK_POPOVER (popover)); - self = EPHY_ADD_BOOKMARK_POPOVER (popover); manager = ephy_shell_get_bookmarks_manager (ephy_shell_get_default ()); - if (self->is_new_bookmark) { - location_entry = GTK_WIDGET (ephy_header_bar_get_title_widget (self->header_bar)); - ephy_bookmarks_manager_add_bookmark (manager, self->bookmark); - ephy_location_entry_set_bookmark_icon_state (EPHY_LOCATION_ENTRY (location_entry), - EPHY_LOCATION_ENTRY_BOOKMARK_ICON_BOOKMARKED); - self->is_new_bookmark = FALSE; - } else { - ephy_bookmarks_manager_save_to_file_async (manager, NULL, - ephy_bookmarks_manager_save_to_file_warn_on_error_cb, - NULL); - } + ephy_bookmarks_manager_save_to_file_async (manager, NULL, + ephy_bookmarks_manager_save_to_file_warn_on_error_cb, + NULL); } static void @@ -204,34 +191,42 @@ void ephy_add_bookmark_popover_show (EphyAddBookmarkPopover *self) { EphyBookmarksManager *manager; + EphyBookmark *bookmark; EphyWindow *window; + EphyLocationEntry *location_entry; EphyEmbed *embed; const char *address; manager = ephy_shell_get_bookmarks_manager (ephy_shell_get_default ()); + location_entry = EPHY_LOCATION_ENTRY (ephy_header_bar_get_title_widget (self->header_bar)); window = ephy_header_bar_get_window (self->header_bar); embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window)); address = ephy_web_view_get_address (ephy_embed_get_web_view (embed)); - self->bookmark = ephy_bookmarks_manager_get_bookmark_by_url (manager, address); - if (!self->bookmark) { - self->bookmark = ephy_bookmark_new (address, - ephy_embed_get_title (embed), - g_sequence_new (g_free)); - self->is_new_bookmark = TRUE; + bookmark = ephy_bookmarks_manager_get_bookmark_by_url (manager, address); + if (!bookmark) { + bookmark = ephy_bookmark_new (address, + ephy_embed_get_title (embed), + g_sequence_new (g_free)); + + ephy_bookmarks_manager_add_bookmark (manager, bookmark); + ephy_location_entry_set_bookmark_icon_state (location_entry, + EPHY_LOCATION_ENTRY_BOOKMARK_ICON_BOOKMARKED); + g_object_unref (bookmark); } g_signal_connect_object (manager, "bookmark-removed", - G_CALLBACK (ephy_add_bookmark_popover_update_bookmarked_status_cb), - self, - G_CONNECT_SWAPPED); + G_CALLBACK (ephy_add_bookmark_popover_update_bookmarked_status_cb), + self, + G_CONNECT_SWAPPED); if (self->grid) gtk_widget_destroy (self->grid); - self->grid = ephy_bookmark_properties_grid_new (self->bookmark, + self->grid = ephy_bookmark_properties_grid_new (bookmark, EPHY_BOOKMARK_PROPERTIES_GRID_TYPE_POPOVER, GTK_WIDGET (self)); + gtk_container_add (GTK_CONTAINER (self), self->grid); gtk_popover_set_default_widget (GTK_POPOVER (self), ephy_bookmark_properties_grid_get_add_tag_button (EPHY_BOOKMARK_PROPERTIES_GRID (self->grid))); |