summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Services/Taskbar/QuickLaunchWidget.cpp41
-rw-r--r--Userland/Services/Taskbar/QuickLaunchWidget.h7
-rw-r--r--Userland/Services/Taskbar/TaskbarWindow.cpp3
3 files changed, 39 insertions, 12 deletions
diff --git a/Userland/Services/Taskbar/QuickLaunchWidget.cpp b/Userland/Services/Taskbar/QuickLaunchWidget.cpp
index 85985ac924..78db4e10e1 100644
--- a/Userland/Services/Taskbar/QuickLaunchWidget.cpp
+++ b/Userland/Services/Taskbar/QuickLaunchWidget.cpp
@@ -6,6 +6,7 @@
#include "QuickLaunchWidget.h"
#include <AK/LexicalPath.h>
+#include <AK/OwnPtr.h>
#include <Kernel/API/InodeWatcherFlags.h>
#include <LibConfig/Client.h>
#include <LibCore/FileWatcher.h>
@@ -82,7 +83,25 @@ DeprecatedString QuickLaunchEntryFile::name() const
return m_path;
}
-QuickLaunchWidget::QuickLaunchWidget()
+ErrorOr<NonnullRefPtr<QuickLaunchWidget>> QuickLaunchWidget::create()
+{
+ Vector<NonnullOwnPtr<QuickLaunchEntry>> entries;
+ auto keys = Config::list_keys("Taskbar"sv, quick_launch);
+ for (auto& name : keys) {
+ auto value = Config::read_string("Taskbar"sv, quick_launch, name);
+ auto entry = QuickLaunchEntry::create_from_config_value(value);
+ if (!entry)
+ continue;
+
+ entries.append(entry.release_nonnull());
+ }
+
+ auto widget = TRY(AK::adopt_nonnull_ref_or_enomem(new (nothrow) QuickLaunchWidget(move(entries))));
+ TRY(widget->create_context_menu());
+ return widget;
+}
+
+QuickLaunchWidget::QuickLaunchWidget(Vector<NonnullOwnPtr<QuickLaunchEntry>> entries)
{
set_shrink_to_fit(true);
set_layout<GUI::HorizontalBoxLayout>();
@@ -90,8 +109,17 @@ QuickLaunchWidget::QuickLaunchWidget()
set_frame_thickness(0);
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()
+{
+ auto icon = TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png"sv));
m_context_menu = GUI::Menu::construct();
- m_context_menu_default_action = GUI::Action::create("&Remove", Gfx::Bitmap::try_load_from_file("/res/icons/16x16/delete.png"sv).release_value_but_fixme_should_propagate_errors(), [this](auto&) {
+ m_context_menu_default_action = GUI::Action::create("&Remove", icon, [this](auto&) {
Config::remove_key("Taskbar"sv, quick_launch, m_context_menu_app_name);
auto button = find_child_of_type_named<GUI::Button>(m_context_menu_app_name);
if (button) {
@@ -100,14 +128,7 @@ QuickLaunchWidget::QuickLaunchWidget()
});
m_context_menu->add_action(*m_context_menu_default_action);
- auto keys = Config::list_keys("Taskbar"sv, quick_launch);
- for (auto& name : keys) {
- auto value = Config::read_string("Taskbar"sv, quick_launch, name);
- auto entry = QuickLaunchEntry::create_from_config_value(value);
- if (!entry)
- continue;
- add_or_adjust_button(name, entry.release_nonnull());
- }
+ return {};
}
OwnPtr<QuickLaunchEntry> QuickLaunchEntry::create_from_config_value(StringView value)
diff --git a/Userland/Services/Taskbar/QuickLaunchWidget.h b/Userland/Services/Taskbar/QuickLaunchWidget.h
index 78a9bc19e0..e3203d7704 100644
--- a/Userland/Services/Taskbar/QuickLaunchWidget.h
+++ b/Userland/Services/Taskbar/QuickLaunchWidget.h
@@ -6,6 +6,8 @@
#pragma once
+#include <AK/Error.h>
+#include <AK/RefPtr.h>
#include <LibConfig/Listener.h>
#include <LibCore/FileWatcher.h>
#include <LibDesktop/AppFile.h>
@@ -78,6 +80,7 @@ class QuickLaunchWidget : public GUI::Frame
C_OBJECT(QuickLaunchWidget);
public:
+ static ErrorOr<NonnullRefPtr<QuickLaunchWidget>> create();
virtual ~QuickLaunchWidget() override = default;
virtual void config_key_was_removed(DeprecatedString const&, DeprecatedString const&, DeprecatedString const&) override;
@@ -87,8 +90,10 @@ public:
virtual void drop_event(GUI::DropEvent&) override;
private:
- QuickLaunchWidget();
+ explicit QuickLaunchWidget(Vector<NonnullOwnPtr<QuickLaunchEntry>> entries);
void add_or_adjust_button(DeprecatedString const&, NonnullOwnPtr<QuickLaunchEntry>&&);
+ ErrorOr<void> create_context_menu();
+
RefPtr<GUI::Menu> m_context_menu;
RefPtr<GUI::Action> m_context_menu_default_action;
DeprecatedString m_context_menu_app_name;
diff --git a/Userland/Services/Taskbar/TaskbarWindow.cpp b/Userland/Services/Taskbar/TaskbarWindow.cpp
index bcbaead65a..3730a7d49a 100644
--- a/Userland/Services/Taskbar/TaskbarWindow.cpp
+++ b/Userland/Services/Taskbar/TaskbarWindow.cpp
@@ -63,7 +63,8 @@ TaskbarWindow::TaskbarWindow()
main_widget.set_layout<GUI::HorizontalBoxLayout>();
main_widget.layout()->set_margins({ 2, 3, 0, 3 });
- m_quick_launch = Taskbar::QuickLaunchWidget::construct();
+ // FIXME: Propagate this error up as well
+ m_quick_launch = MUST(Taskbar::QuickLaunchWidget::create());
main_widget.add_child(*m_quick_launch);
m_task_button_container = main_widget.add<GUI::Widget>();