diff --git a/Userland/Applications/Assistant/Providers.cpp b/Userland/Applications/Assistant/Providers.cpp index 11c5e85c4d..d80ba65314 100644 --- a/Userland/Applications/Assistant/Providers.cpp +++ b/Userland/Applications/Assistant/Providers.cpp @@ -11,11 +11,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include @@ -29,7 +29,7 @@ namespace Assistant { -void AppResult::activate() const +void AppResult::activate(GUI::Window& window) const { if (chdir(Core::StandardPaths::home_directory().characters()) < 0) { perror("chdir"); @@ -37,29 +37,29 @@ void AppResult::activate() const } auto arguments_list = m_arguments.split_view(' '); - m_app_file->spawn(arguments_list.span()); + m_app_file->spawn_with_escalation_or_show_error(window, arguments_list.span()); } -void CalculatorResult::activate() const +void CalculatorResult::activate(GUI::Window& window) const { + (void)window; GUI::Clipboard::the().set_plain_text(title()); } -void FileResult::activate() const +void FileResult::activate(GUI::Window& window) const { + (void)window; Desktop::Launcher::open(URL::create_with_file_scheme(title())); } -void TerminalResult::activate() const +void TerminalResult::activate(GUI::Window& window) const { - // FIXME: This should be a GUI::Process::spawn_or_show_error(), however this is a - // Assistant::Result object, which does not have access to the application's GUI::Window* pointer - // (which spawn_or_show_error() needs in case it has to open a error message box). - (void)Core::Process::spawn("/bin/Terminal"sv, Array { "-k", "-e", title().characters() }); + GUI::Process::spawn_or_show_error(&window, "/bin/Terminal"sv, Array { "-k", "-e", title().characters() }); } -void URLResult::activate() const +void URLResult::activate(GUI::Window& window) const { + (void)window; Desktop::Launcher::open(URL::create_with_url_or_path(title())); } diff --git a/Userland/Applications/Assistant/Providers.h b/Userland/Applications/Assistant/Providers.h index b4450bcd7d..a20afc5db4 100644 --- a/Userland/Applications/Assistant/Providers.h +++ b/Userland/Applications/Assistant/Providers.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -23,7 +24,7 @@ class Result : public RefCounted { public: virtual ~Result() = default; - virtual void activate() const = 0; + virtual void activate(GUI::Window&) const = 0; virtual Gfx::Bitmap const* bitmap() const = 0; @@ -61,7 +62,7 @@ public: { } ~AppResult() override = default; - void activate() const override; + void activate(GUI::Window&) const override; virtual Gfx::Bitmap const* bitmap() const override { return m_bitmap; } @@ -79,7 +80,7 @@ public: { } ~CalculatorResult() override = default; - void activate() const override; + void activate(GUI::Window&) const override; virtual Gfx::Bitmap const* bitmap() const override { return m_bitmap; } @@ -94,7 +95,7 @@ public: { } ~FileResult() override = default; - void activate() const override; + void activate(GUI::Window&) const override; virtual Gfx::Bitmap const* bitmap() const override; }; @@ -107,7 +108,7 @@ public: { } ~TerminalResult() override = default; - void activate() const override; + void activate(GUI::Window&) const override; virtual Gfx::Bitmap const* bitmap() const override { return m_bitmap; } @@ -123,7 +124,7 @@ public: { } ~URLResult() override = default; - void activate() const override; + void activate(GUI::Window&) const override; virtual Gfx::Bitmap const* bitmap() const override { return m_bitmap; } diff --git a/Userland/Applications/Assistant/main.cpp b/Userland/Applications/Assistant/main.cpp index fc5da293c4..a80e3df33e 100644 --- a/Userland/Applications/Assistant/main.cpp +++ b/Userland/Applications/Assistant/main.cpp @@ -205,7 +205,7 @@ ErrorOr serenity_main(Main::Arguments arguments) if (!app_state.selected_index.has_value()) return; lockfile.release(); - app_state.results[app_state.selected_index.value()]->activate(); + app_state.results[app_state.selected_index.value()]->activate(window); GUI::Application::the()->quit(); }; text_box.on_up_pressed = [&]() { @@ -251,8 +251,8 @@ ErrorOr serenity_main(Main::Arguments arguments) match.set_icon(result->bitmap()); match.set_text(String::from_byte_string(result->title()).release_value_but_fixme_should_propagate_errors()); match.set_tooltip(result->tooltip()); - match.on_click = [&result](auto) { - result->activate(); + match.on_click = [&](auto) { + result->activate(window); GUI::Application::the()->quit(); }; }