From 805e87a21c3836095a751b869c53c1b30fa73ed7 Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Fri, 17 May 2019 13:24:31 +0200 Subject: [PATCH] WindowServer: Add a more dynamic app list This contains more stuff, and is easier to add to since it's just a vector :) --- Servers/WindowServer/WSWindowManager.cpp | 41 ++++++++++++++++-------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index c84434b78d..1dc166d217 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "WSMenu.h" #include "WSMenuBar.h" @@ -92,11 +93,32 @@ WSWindowManager::WSWindowManager() m_menu_selection_color = Color::from_rgb(0x84351a); + struct AppMenuItem { + const char *binary_name; + const char *description; + }; + + Vector apps; + apps.append({ "/bin/Terminal", "Open Terminal..." }); + apps.append({ "/bin/FontEditor", "Open FontEditor..." }); + apps.append({ "/bin/TextEditor", "Open TextEditor..." }); + apps.append({ "/bin/VisualBuilder", "Open VisualBuilder..." }); + apps.append({ "/bin/IRCClient", "Open IRCClient..." }); + apps.append({ "/bin/FileManager", "Open FileManager..." }); + apps.append({ "/bin/ProcessManager", "Open ProcessManager..." }); + apps.append({ "/bin/HelloWorld", "Open HelloWorld..." }); + apps.append({ "/bin/Minesweeper", "Play Minesweeper..." }); + apps.append({ "/bin/Snake", "Play Snake..." }); + { byte system_menu_name[] = { 0xf8, 0 }; m_system_menu = make(nullptr, -1, String((const char*)system_menu_name)); - m_system_menu->add_item(make(*m_system_menu, 1, "Open Terminal...")); - m_system_menu->add_item(make(*m_system_menu, 2, "Open ProcessManager...")); + + int appIndex = 1; + for (const auto& app : apps) { + m_system_menu->add_item(make(*m_system_menu, appIndex++, app.description)); + } + m_system_menu->add_item(make(*m_system_menu, WSMenuItem::Separator)); m_system_menu->add_item(make(*m_system_menu, 100, "640x480")); m_system_menu->add_item(make(*m_system_menu, 101, "800x600")); @@ -106,20 +128,13 @@ WSWindowManager::WSWindowManager() m_system_menu->add_item(make(*m_system_menu, 105, "1920x1080")); m_system_menu->add_item(make(*m_system_menu, WSMenuItem::Separator)); m_system_menu->add_item(make(*m_system_menu, 200, "About...")); - m_system_menu->on_item_activation = [this] (WSMenuItem& item) { - if (item.identifier() == 1) { + m_system_menu->on_item_activation = [this, apps] (WSMenuItem& item) { + if (item.identifier() >= 1 && item.identifier() <= 1 + apps.size() - 1) { if (fork() == 0) { - execl("/bin/Terminal", "/bin/Terminal", nullptr); + const auto& bin = apps[item.identifier() -1].binary_name; + execl(bin, bin, nullptr); ASSERT_NOT_REACHED(); } - return; - } - if (item.identifier() == 2) { - if (fork() == 0) { - execl("/bin/ProcessManager", "/bin/ProcessManager", nullptr); - ASSERT_NOT_REACHED(); - } - return; } switch (item.identifier()) { case 100: set_resolution(640, 480); break;