diff options
-rw-r--r-- | Base/res/apps/Browser.af | 8 | ||||
-rw-r--r-- | Base/res/apps/Calculator.af | 8 | ||||
-rw-r--r-- | Base/res/apps/ChanViewer.af | 8 | ||||
-rw-r--r-- | Base/res/apps/DisplayProperties.af | 8 | ||||
-rw-r--r-- | Base/res/apps/FileManager.af | 8 | ||||
-rw-r--r-- | Base/res/apps/FontEditor.af | 8 | ||||
-rw-r--r-- | Base/res/apps/HackStudio.af | 8 | ||||
-rw-r--r-- | Base/res/apps/HexEditor.af | 8 | ||||
-rw-r--r-- | Base/res/apps/IRCClient.af | 8 | ||||
-rw-r--r-- | Base/res/apps/PaintBrush.af | 7 | ||||
-rw-r--r-- | Base/res/apps/SystemMonitor.af | 8 | ||||
-rw-r--r-- | Base/res/apps/Terminal.af | 8 | ||||
-rw-r--r-- | Servers/WindowServer/WSWindowManager.cpp | 28 |
13 files changed, 114 insertions, 9 deletions
diff --git a/Base/res/apps/Browser.af b/Base/res/apps/Browser.af new file mode 100644 index 0000000000..038649468f --- /dev/null +++ b/Base/res/apps/Browser.af @@ -0,0 +1,8 @@ +[App] +Name=Browser +Executable=/bin/Browser +Category=Internet + +[Icons] +16x16=/res/icons/16x16/filetype-html.png +32x32=/res/icons/32x32/filetype-html.png diff --git a/Base/res/apps/Calculator.af b/Base/res/apps/Calculator.af new file mode 100644 index 0000000000..3e346eb20b --- /dev/null +++ b/Base/res/apps/Calculator.af @@ -0,0 +1,8 @@ +[App] +Name=Calculator +Executable=/bin/Calculator +Category=Utilities + +[Icons] +16x16= +32x32= diff --git a/Base/res/apps/ChanViewer.af b/Base/res/apps/ChanViewer.af new file mode 100644 index 0000000000..604b1d2458 --- /dev/null +++ b/Base/res/apps/ChanViewer.af @@ -0,0 +1,8 @@ +[App] +Name=ChanViewer +Executable=/bin/ChanViewer +Category=Internet + +[Icons] +16x16=/res/icons/16x16/app-chanviewer.png +32x32=/res/icons/32x32/app-chanviewer.png diff --git a/Base/res/apps/DisplayProperties.af b/Base/res/apps/DisplayProperties.af new file mode 100644 index 0000000000..3845b8ea24 --- /dev/null +++ b/Base/res/apps/DisplayProperties.af @@ -0,0 +1,8 @@ +[App] +Name=DisplayProperties +Executable=/bin/DisplayProperties +Category=Utilities + +[Icons] +16x16=/res/icons/16x16/app-display-properties.png +32x32=/res/icons/32x32/app-display-properties.png diff --git a/Base/res/apps/FileManager.af b/Base/res/apps/FileManager.af new file mode 100644 index 0000000000..08d0d21676 --- /dev/null +++ b/Base/res/apps/FileManager.af @@ -0,0 +1,8 @@ +[App] +Name=FileManager +Executable=/bin/FileManager +Category=Utilities + +[Icons] +16x16=/res/icons/16x16/filetype-folder.png +32x32=/res/icons/32x32/filetype-folder.png diff --git a/Base/res/apps/FontEditor.af b/Base/res/apps/FontEditor.af new file mode 100644 index 0000000000..50fab625e5 --- /dev/null +++ b/Base/res/apps/FontEditor.af @@ -0,0 +1,8 @@ +[App] +Name=FontEditor +Executable=/bin/FontEditor +Category=FontEditor + +[Icons] +16x16=/res/icons/16x16/app-font-editor.png +32x32=/res/icons/FontEditor.png diff --git a/Base/res/apps/HackStudio.af b/Base/res/apps/HackStudio.af new file mode 100644 index 0000000000..a70b0c29fd --- /dev/null +++ b/Base/res/apps/HackStudio.af @@ -0,0 +1,8 @@ +[App] +Name=HackStudio +Executable=/bin/HackStudio +Category=Development + +[Icons] +16x16=/res/icons/16x16/app-hack-studio.png +32x32=/res/icons/32x32/app-hack-studio.png diff --git a/Base/res/apps/HexEditor.af b/Base/res/apps/HexEditor.af new file mode 100644 index 0000000000..176d6ba40a --- /dev/null +++ b/Base/res/apps/HexEditor.af @@ -0,0 +1,8 @@ +[App] +Name=HexEditor +Executable=/bin/HexEditor +Category=Development + +[Icons] +16x16=/res/icons/16x16/app-hexeditor.png +32x32=/res/icons/32x32/app-hexeditor.png diff --git a/Base/res/apps/IRCClient.af b/Base/res/apps/IRCClient.af new file mode 100644 index 0000000000..7b642ea508 --- /dev/null +++ b/Base/res/apps/IRCClient.af @@ -0,0 +1,8 @@ +[App] +Name=IRCClient +Executable=/bin/IRCClient +Category=Internet + +[Icons] +16x16=/res/icons/16x16/app-irc-client.png +32x32=/res/icons/32x32/app-irc-client.png diff --git a/Base/res/apps/PaintBrush.af b/Base/res/apps/PaintBrush.af new file mode 100644 index 0000000000..7650e50ad9 --- /dev/null +++ b/Base/res/apps/PaintBrush.af @@ -0,0 +1,7 @@ +[App] +Name=PaintBrush +Executable=/bin/PaintBrush + +[Icons] +16x16=/res/icons/16x16/app-paintbrush.png +32x32=/res/icons/32x32/app-paintbrush.png diff --git a/Base/res/apps/SystemMonitor.af b/Base/res/apps/SystemMonitor.af new file mode 100644 index 0000000000..eaec265596 --- /dev/null +++ b/Base/res/apps/SystemMonitor.af @@ -0,0 +1,8 @@ +[App] +Name=SystemMonitor +Executable=/bin/SystemMonitor +Category=Utilities + +[Icons] +16x16=/res/icons/16x16/app-system-monitor.png +32x32=/res/icons/32x32/app-system-monitor.png diff --git a/Base/res/apps/Terminal.af b/Base/res/apps/Terminal.af new file mode 100644 index 0000000000..8adfc16340 --- /dev/null +++ b/Base/res/apps/Terminal.af @@ -0,0 +1,8 @@ +[App] +Name=Terminal +Executable=/bin/Terminal +Category=Utilities + +[Icons] +16x16=/res/icons/16x16/app-terminal.png +32x32=/res/icons/32x32/app-terminal.png diff --git a/Servers/WindowServer/WSWindowManager.cpp b/Servers/WindowServer/WSWindowManager.cpp index 420277b5bb..672bef66db 100644 --- a/Servers/WindowServer/WSWindowManager.cpp +++ b/Servers/WindowServer/WSWindowManager.cpp @@ -10,6 +10,7 @@ #include <AK/StdLibExtras.h> #include <AK/Vector.h> #include <LibCore/CTimer.h> +#include <LibCore/CDirIterator.h> #include <LibDraw/CharacterBitmap.h> #include <LibDraw/Font.h> #include <LibDraw/PNGLoader.h> @@ -45,16 +46,25 @@ WSWindowManager::WSWindowManager() reload_config(false); struct AppMenuItem { - const char* binary_name; - const char* description; - const char* icon_path; + String binary_name; + String description; + String icon_path; }; - Vector<AppMenuItem> apps = { - { "/bin/Terminal", "Open Terminal...", "/res/icons/16x16/app-terminal.png" }, - { "/bin/FileManager", "Open FileManager...", "/res/icons/16x16/filetype-folder.png" }, - { "/bin/SystemMonitor", "Open SystemMonitor...", "/res/icons/16x16/app-system-monitor.png" } - }; + Vector<AppMenuItem> apps; + + CDirIterator dt("/res/apps", CDirIterator::SkipDots); + while (dt.has_next()) { + auto af_name = dt.next_path(); + auto af_path = String::format("/res/apps/%s", af_name.characters()); + auto af = CConfigFile::open(af_path); + if (!af->has_key("App", "Name") || !af->has_key("App", "Executable")) + continue; + auto app_name = af->read_entry("App", "Name"); + auto app_executable = af->read_entry("App", "Executable"); + auto app_icon_path = af->read_entry("Icons", "16x16"); + apps.append({ app_executable, app_name, app_icon_path }); + } u8 system_menu_name[] = { 0xc3, 0xb8, 0 }; m_system_menu = WSMenu::construct(nullptr, -1, String((const char*)system_menu_name)); @@ -74,7 +84,7 @@ WSWindowManager::WSWindowManager() if (item.identifier() >= 1 && item.identifier() <= 1u + apps.size() - 1) { if (fork() == 0) { const auto& bin = apps[item.identifier() - 1].binary_name; - execl(bin, bin, nullptr); + execl(bin.characters(), bin.characters(), nullptr); ASSERT_NOT_REACHED(); } } |