From 4fec9540ec865a52070770a3a872e1fa7cc8ccc6 Mon Sep 17 00:00:00 2001 From: Arda Cinar Date: Fri, 23 Dec 2022 22:38:02 +0300 Subject: [PATCH] Taskbar: Handle errors when adding/changing quick launch entries This patch removes 2 FIXMEs :^) --- .../Services/Taskbar/QuickLaunchWidget.cpp | 38 ++++++++++++------- Userland/Services/Taskbar/QuickLaunchWidget.h | 5 ++- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Userland/Services/Taskbar/QuickLaunchWidget.cpp b/Userland/Services/Taskbar/QuickLaunchWidget.cpp index 78db4e10e1..5ea9e0ba91 100644 --- a/Userland/Services/Taskbar/QuickLaunchWidget.cpp +++ b/Userland/Services/Taskbar/QuickLaunchWidget.cpp @@ -96,23 +96,19 @@ ErrorOr> QuickLaunchWidget::create() entries.append(entry.release_nonnull()); } - auto widget = TRY(AK::adopt_nonnull_ref_or_enomem(new (nothrow) QuickLaunchWidget(move(entries)))); + auto widget = TRY(AK::adopt_nonnull_ref_or_enomem(new (nothrow) QuickLaunchWidget())); TRY(widget->create_context_menu()); + TRY(widget->add_quick_launch_buttons(move(entries))); return widget; } -QuickLaunchWidget::QuickLaunchWidget(Vector> entries) +QuickLaunchWidget::QuickLaunchWidget() { set_shrink_to_fit(true); set_layout(); layout()->set_spacing(0); set_frame_thickness(0); set_fixed_height(24); - - for (auto& entry : entries) { - auto name = entry->name(); - add_or_adjust_button(name, move(entry)); - } } ErrorOr QuickLaunchWidget::create_context_menu() @@ -131,6 +127,16 @@ ErrorOr QuickLaunchWidget::create_context_menu() return {}; } +ErrorOr QuickLaunchWidget::add_quick_launch_buttons(Vector> entries) +{ + for (auto& entry : entries) { + auto name = entry->name(); + TRY(add_or_adjust_button(name, move(entry))); + } + + return {}; +} + OwnPtr QuickLaunchEntry::create_from_config_value(StringView value) { if (!value.starts_with('/') && value.ends_with(".af"sv)) { @@ -161,13 +167,12 @@ static DeprecatedString sanitize_entry_name(DeprecatedString const& name) return name.replace(" "sv, ""sv, ReplaceMode::All).replace("="sv, ""sv, ReplaceMode::All); } -void QuickLaunchWidget::add_or_adjust_button(DeprecatedString const& button_name, NonnullOwnPtr&& entry) +ErrorOr QuickLaunchWidget::add_or_adjust_button(DeprecatedString const& button_name, NonnullOwnPtr&& entry) { auto file_name_to_watch = entry->file_name_to_watch(); if (!file_name_to_watch.is_null()) { if (!m_watcher) { - // FIXME: Propagate errors - m_watcher = MUST(Core::FileWatcher::create()); + m_watcher = TRY(Core::FileWatcher::create()); m_watcher->on_change = [this](Core::FileWatcherEvent const& event) { auto name = sanitize_entry_name(event.event_path); dbgln("Removing QuickLaunch entry {}", name); @@ -176,8 +181,7 @@ void QuickLaunchWidget::add_or_adjust_button(DeprecatedString const& button_name remove_child(*button); }; } - // FIXME: Propagate errors - MUST(m_watcher->add_watch(file_name_to_watch, Core::FileWatcherEvent::Type::Deleted)); + TRY(m_watcher->add_watch(file_name_to_watch, Core::FileWatcherEvent::Type::Deleted)); } auto button = find_child_of_type_named(button_name); @@ -201,6 +205,8 @@ void QuickLaunchWidget::add_or_adjust_button(DeprecatedString const& button_name m_context_menu_app_name = button_name; m_context_menu->popup(context_menu_event.screen_position(), m_context_menu_default_action); }; + + return {}; } void QuickLaunchWidget::config_key_was_removed(DeprecatedString const& domain, DeprecatedString const& group, DeprecatedString const& key) @@ -218,7 +224,9 @@ void QuickLaunchWidget::config_string_did_change(DeprecatedString const& domain, auto entry = QuickLaunchEntry::create_from_config_value(value); if (!entry) return; - add_or_adjust_button(key, entry.release_nonnull()); + auto result = add_or_adjust_button(key, entry.release_nonnull()); + if (result.is_error()) + GUI::MessageBox::show_error(window(), DeprecatedString::formatted("Failed to change quick launch entry: {}", result.release_error())); } } @@ -239,7 +247,9 @@ void QuickLaunchWidget::drop_event(GUI::DropEvent& event) auto entry = QuickLaunchEntry::create_from_path(url.path()); if (entry) { auto item_name = sanitize_entry_name(entry->name()); - add_or_adjust_button(item_name, entry.release_nonnull()); + auto result = add_or_adjust_button(item_name, entry.release_nonnull()); + if (result.is_error()) + GUI::MessageBox::show_error(window(), DeprecatedString::formatted("Failed to add quick launch entry: {}", result.release_error())); Config::write_string("Taskbar"sv, quick_launch, item_name, url.path()); } } diff --git a/Userland/Services/Taskbar/QuickLaunchWidget.h b/Userland/Services/Taskbar/QuickLaunchWidget.h index e3203d7704..d5497c5c54 100644 --- a/Userland/Services/Taskbar/QuickLaunchWidget.h +++ b/Userland/Services/Taskbar/QuickLaunchWidget.h @@ -90,9 +90,10 @@ public: virtual void drop_event(GUI::DropEvent&) override; private: - explicit QuickLaunchWidget(Vector> entries); - void add_or_adjust_button(DeprecatedString const&, NonnullOwnPtr&&); + explicit QuickLaunchWidget(); + ErrorOr add_or_adjust_button(DeprecatedString const&, NonnullOwnPtr&&); ErrorOr create_context_menu(); + ErrorOr add_quick_launch_buttons(Vector> entries); RefPtr m_context_menu; RefPtr m_context_menu_default_action;