From ca5b4de2d8ea30431e1dee38b9f80bbddfc549d0 Mon Sep 17 00:00:00 2001 From: apio Date: Thu, 1 Feb 2024 21:15:31 +0100 Subject: [PATCH] libui+apps: Change ui::App::init() to take the socket path directly instead of command-line arguments --- apps/2048.cpp | 4 ++-- apps/about.cpp | 4 ++-- apps/clock.cpp | 4 ++-- apps/gol.cpp | 4 ++-- apps/startui.cpp | 9 +++++++-- apps/taskbar.cpp | 4 ++-- libui/include/ui/App.h | 3 ++- libui/src/App.cpp | 10 +--------- terminal/main.cpp | 4 ++-- 9 files changed, 22 insertions(+), 24 deletions(-) diff --git a/apps/2048.cpp b/apps/2048.cpp index de2111b7..cbda65b3 100644 --- a/apps/2048.cpp +++ b/apps/2048.cpp @@ -343,12 +343,12 @@ class GameWidget final : public ui::Widget } }; -Result luna_main(int argc, char** argv) +Result luna_main(int, char**) { srand((unsigned)time(NULL)); ui::App app; - TRY(app.init(argc, argv)); + TRY(app.init()); auto* window = TRY(ui::Window::create(ui::Rect { 300, 300, 400, 400 })); app.set_main_window(window); diff --git a/apps/about.cpp b/apps/about.cpp index b5bd18cd..c2e2a06e 100644 --- a/apps/about.cpp +++ b/apps/about.cpp @@ -7,10 +7,10 @@ static constexpr ui::Color BACKGROUND_COLOR = ui::Color::from_rgb(89, 89, 89); -Result luna_main(int argc, char** argv) +Result luna_main(int, char**) { ui::App app; - TRY(app.init(argc, argv)); + TRY(app.init()); auto* window = TRY(ui::Window::create(ui::Rect { 300, 300, 400, 300 })); app.set_main_window(window); diff --git a/apps/clock.cpp b/apps/clock.cpp index 31951308..9e307059 100644 --- a/apps/clock.cpp +++ b/apps/clock.cpp @@ -18,10 +18,10 @@ void update_time() ui::App::the().main_window()->draw(); } -Result luna_main(int argc, char** argv) +Result luna_main(int, char**) { ui::App app; - TRY(app.init(argc, argv)); + TRY(app.init()); auto* window = TRY(ui::Window::create(ui::Rect { 500, 400, 100, 50 })); app.set_main_window(window); diff --git a/apps/gol.cpp b/apps/gol.cpp index 2957a615..2982fe05 100644 --- a/apps/gol.cpp +++ b/apps/gol.cpp @@ -108,10 +108,10 @@ static void update() draw_cells(); } -Result luna_main(int argc, char** argv) +Result luna_main(int, char**) { ui::App app; - TRY(app.init(argc, argv)); + TRY(app.init()); g_window = TRY(ui::Window::create(ui::Rect { 200, 200, 600, 400 })); g_window->set_title("Game of Life"); diff --git a/apps/startui.cpp b/apps/startui.cpp index 236157b0..13f60fb4 100644 --- a/apps/startui.cpp +++ b/apps/startui.cpp @@ -100,13 +100,16 @@ Result luna_main(int argc, char** argv) auto groups = TRY(read_supplementary_groups(username.chars())); + auto system_groups = TRY(groups.shallow_copy()); + TRY(system_groups.try_append(3)); + setsid(); // First of all, start the display server. StringView wind_command[] = { "/usr/bin/wind" }; TRY(os::Process::spawn(wind_command[0], Slice(wind_command, 1))); - TRY(wait_until_file_created("/tmp/wind.sock", 10000)); + TRY(wait_until_file_created("/tmp/wsys.sock", 10000)); clearenv(); chdir(pw->pw_dir); @@ -117,7 +120,9 @@ Result luna_main(int argc, char** argv) // Next, start the required UI components. StringView taskbar_command[] = { "/usr/bin/taskbar" }; - TRY(spawn_process_as_user(Slice(taskbar_command, 1), pw->pw_uid, pw->pw_gid, groups.slice())); + TRY(spawn_process_as_user(Slice(taskbar_command, 1), pw->pw_uid, pw->pw_gid, system_groups.slice())); + + TRY(wait_until_file_created("/tmp/wind.sock", 10000)); // Finally, start init in user mode to manage all configured optional services. StringView init_command[] = { "/usr/bin/init", "--user" }; diff --git a/apps/taskbar.cpp b/apps/taskbar.cpp index 5a7eff56..e99f4dea 100644 --- a/apps/taskbar.cpp +++ b/apps/taskbar.cpp @@ -35,10 +35,10 @@ Result create_widget_group_for_app(ui::HorizontalLayout& layout, Slice luna_main(int argc, char** argv) +Result luna_main(int, char**) { ui::App app; - TRY(app.init(argc, argv)); + TRY(app.init()); TRY(os::EventLoop::the().register_signal_handler(SIGCHLD, sigchld_handler)); diff --git a/libui/include/ui/App.h b/libui/include/ui/App.h index a20be946..be63caf9 100644 --- a/libui/include/ui/App.h +++ b/libui/include/ui/App.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include #include #include @@ -21,7 +22,7 @@ namespace ui App(); ~App(); - Result init(int, char**); + Result init(StringView socket_path = "/tmp/wind.sock"); Result run(); Rect screen_rect(); diff --git a/libui/src/App.cpp b/libui/src/App.cpp index da3c9fd8..fc8574c1 100644 --- a/libui/src/App.cpp +++ b/libui/src/App.cpp @@ -39,16 +39,8 @@ namespace ui s_app = nullptr; } - Result App::init(int argc, char** argv) + Result App::init(StringView socket_path) { - StringView socket_path = "/tmp/wind.sock"; - - os::ArgumentParser parser; - parser.add_description("A UI application."_sv); - parser.add_system_program_info(argv[0]); - parser.add_value_argument(socket_path, 's', "socket"_sv, "the path for the local IPC socket"_sv); - parser.parse(argc, argv); - m_client = TRY(os::LocalClient::connect(socket_path, true)); fcntl(m_client->fd(), F_SETFL, O_NONBLOCK); diff --git a/terminal/main.cpp b/terminal/main.cpp index d957565c..2006d9f5 100644 --- a/terminal/main.cpp +++ b/terminal/main.cpp @@ -3,10 +3,10 @@ #include #include -Result luna_main(int argc, char** argv) +Result luna_main(int, char**) { ui::App app; - TRY(app.init(argc, argv)); + TRY(app.init()); auto* window = TRY(ui::Window::create(ui::Rect { 150, 150, 640, 400 })); app.set_main_window(window);