summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMacDue <macdue@dueutil.tech>2022-05-11 19:39:03 +0100
committerLinus Groh <mail@linusgroh.de>2022-05-25 23:14:22 +0100
commit2f2671f2d31bbf0d018fba438500e8c56bbb8d7f (patch)
tree0e296053a748feefac9f8767931eec2487ab3924
parent3fc0350caf09b08803b9fc399b681e1b5392fb11 (diff)
downloadserenity-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.txt1
-rw-r--r--Userland/Libraries/LibGUI/Process.cpp37
-rw-r--r--Userland/Libraries/LibGUI/Process.h20
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 = {});
+};
+
+}