mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-15 20:33:10 +00:00
Taskbar: Handle errors when adding/changing quick launch entries
This patch removes 2 FIXMEs :^)
This commit is contained in:
parent
1acc788500
commit
4fec9540ec
|
@ -96,23 +96,19 @@ ErrorOr<NonnullRefPtr<QuickLaunchWidget>> QuickLaunchWidget::create()
|
||||||
entries.append(entry.release_nonnull());
|
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->create_context_menu());
|
||||||
|
TRY(widget->add_quick_launch_buttons(move(entries)));
|
||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
QuickLaunchWidget::QuickLaunchWidget(Vector<NonnullOwnPtr<QuickLaunchEntry>> entries)
|
QuickLaunchWidget::QuickLaunchWidget()
|
||||||
{
|
{
|
||||||
set_shrink_to_fit(true);
|
set_shrink_to_fit(true);
|
||||||
set_layout<GUI::HorizontalBoxLayout>();
|
set_layout<GUI::HorizontalBoxLayout>();
|
||||||
layout()->set_spacing(0);
|
layout()->set_spacing(0);
|
||||||
set_frame_thickness(0);
|
set_frame_thickness(0);
|
||||||
set_fixed_height(24);
|
set_fixed_height(24);
|
||||||
|
|
||||||
for (auto& entry : entries) {
|
|
||||||
auto name = entry->name();
|
|
||||||
add_or_adjust_button(name, move(entry));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ErrorOr<void> QuickLaunchWidget::create_context_menu()
|
ErrorOr<void> QuickLaunchWidget::create_context_menu()
|
||||||
|
@ -131,6 +127,16 @@ ErrorOr<void> QuickLaunchWidget::create_context_menu()
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<void> QuickLaunchWidget::add_quick_launch_buttons(Vector<NonnullOwnPtr<QuickLaunchEntry>> entries)
|
||||||
|
{
|
||||||
|
for (auto& entry : entries) {
|
||||||
|
auto name = entry->name();
|
||||||
|
TRY(add_or_adjust_button(name, move(entry)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
OwnPtr<QuickLaunchEntry> QuickLaunchEntry::create_from_config_value(StringView value)
|
OwnPtr<QuickLaunchEntry> QuickLaunchEntry::create_from_config_value(StringView value)
|
||||||
{
|
{
|
||||||
if (!value.starts_with('/') && value.ends_with(".af"sv)) {
|
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);
|
return name.replace(" "sv, ""sv, ReplaceMode::All).replace("="sv, ""sv, ReplaceMode::All);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickLaunchWidget::add_or_adjust_button(DeprecatedString const& button_name, NonnullOwnPtr<QuickLaunchEntry>&& entry)
|
ErrorOr<void> QuickLaunchWidget::add_or_adjust_button(DeprecatedString const& button_name, NonnullOwnPtr<QuickLaunchEntry>&& entry)
|
||||||
{
|
{
|
||||||
auto file_name_to_watch = entry->file_name_to_watch();
|
auto file_name_to_watch = entry->file_name_to_watch();
|
||||||
if (!file_name_to_watch.is_null()) {
|
if (!file_name_to_watch.is_null()) {
|
||||||
if (!m_watcher) {
|
if (!m_watcher) {
|
||||||
// FIXME: Propagate errors
|
m_watcher = TRY(Core::FileWatcher::create());
|
||||||
m_watcher = MUST(Core::FileWatcher::create());
|
|
||||||
m_watcher->on_change = [this](Core::FileWatcherEvent const& event) {
|
m_watcher->on_change = [this](Core::FileWatcherEvent const& event) {
|
||||||
auto name = sanitize_entry_name(event.event_path);
|
auto name = sanitize_entry_name(event.event_path);
|
||||||
dbgln("Removing QuickLaunch entry {}", name);
|
dbgln("Removing QuickLaunch entry {}", name);
|
||||||
|
@ -176,8 +181,7 @@ void QuickLaunchWidget::add_or_adjust_button(DeprecatedString const& button_name
|
||||||
remove_child(*button);
|
remove_child(*button);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
// FIXME: Propagate errors
|
TRY(m_watcher->add_watch(file_name_to_watch, Core::FileWatcherEvent::Type::Deleted));
|
||||||
MUST(m_watcher->add_watch(file_name_to_watch, Core::FileWatcherEvent::Type::Deleted));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto button = find_child_of_type_named<GUI::Button>(button_name);
|
auto button = find_child_of_type_named<GUI::Button>(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_app_name = button_name;
|
||||||
m_context_menu->popup(context_menu_event.screen_position(), m_context_menu_default_action);
|
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)
|
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);
|
auto entry = QuickLaunchEntry::create_from_config_value(value);
|
||||||
if (!entry)
|
if (!entry)
|
||||||
return;
|
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());
|
auto entry = QuickLaunchEntry::create_from_path(url.path());
|
||||||
if (entry) {
|
if (entry) {
|
||||||
auto item_name = sanitize_entry_name(entry->name());
|
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());
|
Config::write_string("Taskbar"sv, quick_launch, item_name, url.path());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,9 +90,10 @@ public:
|
||||||
virtual void drop_event(GUI::DropEvent&) override;
|
virtual void drop_event(GUI::DropEvent&) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit QuickLaunchWidget(Vector<NonnullOwnPtr<QuickLaunchEntry>> entries);
|
explicit QuickLaunchWidget();
|
||||||
void add_or_adjust_button(DeprecatedString const&, NonnullOwnPtr<QuickLaunchEntry>&&);
|
ErrorOr<void> add_or_adjust_button(DeprecatedString const&, NonnullOwnPtr<QuickLaunchEntry>&&);
|
||||||
ErrorOr<void> create_context_menu();
|
ErrorOr<void> create_context_menu();
|
||||||
|
ErrorOr<void> add_quick_launch_buttons(Vector<NonnullOwnPtr<QuickLaunchEntry>> entries);
|
||||||
|
|
||||||
RefPtr<GUI::Menu> m_context_menu;
|
RefPtr<GUI::Menu> m_context_menu;
|
||||||
RefPtr<GUI::Action> m_context_menu_default_action;
|
RefPtr<GUI::Action> m_context_menu_default_action;
|
||||||
|
|
Loading…
Reference in a new issue