From 8f5cc613d22e6cb1a66d3d2bcc8b140813558d24 Mon Sep 17 00:00:00 2001 From: Kemal Zebari Date: Wed, 3 May 2023 15:01:52 -0700 Subject: [PATCH] Browser: Don't show error message box when canceling editor dialog Currently, an error message box appears when a user tries to cancel the editor dialog while editing or adding a bookmark. This snapshot resolves this by having `add_bookmark()` and `BookmarksBarWidget::edit_bookmark()` perform an if check on the result of `BookmarkEditor::edit_bookmark()` to see if the dialog was canceled. --- .../Browser/BookmarksBarWidget.cpp | 30 +++++++++++++++---- .../Applications/Browser/BookmarksBarWidget.h | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Userland/Applications/Browser/BookmarksBarWidget.cpp b/Userland/Applications/Browser/BookmarksBarWidget.cpp index ec30449564..ec38aa44a2 100644 --- a/Userland/Applications/Browser/BookmarksBarWidget.cpp +++ b/Userland/Applications/Browser/BookmarksBarWidget.cpp @@ -321,22 +321,42 @@ ErrorOr BookmarksBarWidget::add_bookmark(StringView url, StringView title) if (on_bookmark_change) on_bookmark_change(); - if (auto result = edit_bookmark(url, PerformEditOn::NewBookmark); result.is_error()) { - (void)remove_bookmark(url); - return Error::copy(result.release_error()); + values = BookmarkEditor::edit_bookmark(window(), title, url, PerformEditOn::NewBookmark); + if (values.is_empty()) + return remove_bookmark(url); + + auto model_has_updated = false; + for (int item_index = 0; item_index < model()->row_count(); item_index++) { + auto item_url = model()->index(item_index, 1).data().to_deprecated_string(); + + if (item_url == url) { + TRY(update_model(values, [item_index](auto& model, auto&& values) { + return model.set(item_index, move(values)); + })); + model_has_updated = true; + break; + } } + if (!model_has_updated) + return Error::from_string_view("Bookmark not found"sv); + + if (on_bookmark_change) + on_bookmark_change(); + return {}; } -ErrorOr BookmarksBarWidget::edit_bookmark(StringView url, PerformEditOn perform_edit_on) +ErrorOr BookmarksBarWidget::edit_bookmark(StringView url) { for (int item_index = 0; item_index < model()->row_count(); ++item_index) { auto item_title = model()->index(item_index, 0).data().to_deprecated_string(); auto item_url = model()->index(item_index, 1).data().to_deprecated_string(); if (item_url == url) { - auto values = BookmarkEditor::edit_bookmark(window(), item_title, item_url, perform_edit_on); + auto values = BookmarkEditor::edit_bookmark(window(), item_title, item_url, PerformEditOn::ExistingBookmark); + if (values.is_empty()) + return {}; TRY(update_model(values, [item_index](auto& model, auto&& values) { return model.set(item_index, move(values)); diff --git a/Userland/Applications/Browser/BookmarksBarWidget.h b/Userland/Applications/Browser/BookmarksBarWidget.h index c4bc426cfe..cd12af5715 100644 --- a/Userland/Applications/Browser/BookmarksBarWidget.h +++ b/Userland/Applications/Browser/BookmarksBarWidget.h @@ -44,7 +44,7 @@ public: bool contains_bookmark(StringView url); ErrorOr remove_bookmark(StringView url); ErrorOr add_bookmark(StringView url, StringView title); - ErrorOr edit_bookmark(StringView url, PerformEditOn perform_edit_on = PerformEditOn::ExistingBookmark); + ErrorOr edit_bookmark(StringView url); virtual Optional calculated_min_size() const override {