diff options
author | MacDue <macdue@dueutil.tech> | 2022-05-11 19:39:03 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-05-25 23:14:22 +0100 |
commit | 2f2671f2d31bbf0d018fba438500e8c56bbb8d7f (patch) | |
tree | 0e296053a748feefac9f8767931eec2487ab3924 | |
parent | 3fc0350caf09b08803b9fc399b681e1b5392fb11 (diff) | |
download | serenity-2f2671f2d31bbf0d018fba438500e8c56bbb8d7f.zip |
LibGUI: Add GUI::Process::spawn_or_show_error()
This is a wrapper around Core::Process::spawn() for GUI applications,
that shows an error if the call to spawn() failed.
-rw-r--r-- | Userland/Libraries/LibGUI/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Userland/Libraries/LibGUI/Process.cpp | 37 | ||||
-rw-r--r-- | Userland/Libraries/LibGUI/Process.h | 20 |
3 files changed, 58 insertions, 0 deletions
diff --git a/Userland/Libraries/LibGUI/CMakeLists.txt b/Userland/Libraries/LibGUI/CMakeLists.txt index d503ad53ff..11c8c58905 100644 --- a/Userland/Libraries/LibGUI/CMakeLists.txt +++ b/Userland/Libraries/LibGUI/CMakeLists.txt @@ -79,6 +79,7 @@ set(SOURCES PasswordInputDialog.cpp PasswordInputDialogGML.h PersistentModelIndex.cpp + Process.cpp ProcessChooser.cpp Progressbar.cpp RadioButton.cpp diff --git a/Userland/Libraries/LibGUI/Process.cpp b/Userland/Libraries/LibGUI/Process.cpp new file mode 100644 index 0000000000..612a93d9eb --- /dev/null +++ b/Userland/Libraries/LibGUI/Process.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022, MacDue <macdue@dueutil.tech> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <AK/Format.h> +#include <AK/StringView.h> +#include <LibGUI/MessageBox.h> +#include <LibGUI/Process.h> + +template<typename StringType> +void spawn_or_show_error(GUI::Window* parent_window, StringView path, Span<StringType const> arguments) +{ + auto spawn_result = Core::Process::spawn(path, arguments); + if (spawn_result.is_error()) + GUI::MessageBox::show_error(parent_window, String::formatted("Failed to spawn {}: {}", path, spawn_result.error())); +} + +namespace GUI { + +void Process::spawn_or_show_error(Window* parent_window, StringView path, Span<String const> arguments) +{ + ::spawn_or_show_error<String>(parent_window, path, arguments); +} + +void Process::spawn_or_show_error(Window* parent_window, StringView path, Span<StringView const> arguments) +{ + ::spawn_or_show_error<StringView>(parent_window, path, arguments); +} + +void Process::spawn_or_show_error(Window* parent_window, StringView path, Span<char const* const> arguments) +{ + ::spawn_or_show_error<char const*>(parent_window, path, arguments); +} + +} diff --git a/Userland/Libraries/LibGUI/Process.h b/Userland/Libraries/LibGUI/Process.h new file mode 100644 index 0000000000..5504ba8334 --- /dev/null +++ b/Userland/Libraries/LibGUI/Process.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2022, MacDue <macdue@dueutil.tech> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include <LibCore/Process.h> +#include <LibGUI/Forward.h> + +namespace GUI { + +struct Process { + static void spawn_or_show_error(Window* parent_window, StringView path, Span<String const> arguments); + static void spawn_or_show_error(Window* parent_window, StringView path, Span<StringView const> arguments); + static void spawn_or_show_error(Window* parent_window, StringView path, Span<char const* const> arguments = {}); +}; + +} |