Launcher: Remove the Launcher app, and all hacks in support of it

The Launcher's functionality has been replaced by the app shortcuts in
the system menu.

There were various window management hacks to ensure that the launcher
stayed below all other windows while also being movable, etc.
This commit is contained in:
Andreas Kling 2019-11-11 13:11:31 +01:00
parent 26f41c7ecb
commit dd2900eda0
Notes: sideshowbarker 2024-07-19 11:15:50 +09:00
12 changed files with 2 additions and 164 deletions

View file

@ -1,8 +0,0 @@
include ../../Makefile.common
OBJS = \
main.o
APP = Launcher
include ../Makefile.common

View file

@ -1,94 +0,0 @@
#include <LibCore/CConfigFile.h>
#include <LibCore/CUserInfo.h>
#include <LibGUI/GApplication.h>
#include <LibGUI/GBoxLayout.h>
#include <LibGUI/GButton.h>
#include <LibGUI/GWidget.h>
#include <LibGUI/GWindow.h>
#include <LibDraw/GraphicsBitmap.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
static RefPtr<GWindow> make_launcher_window();
void handle_sigchld(int)
{
dbgprintf("Launcher(%d) Got SIGCHLD\n", getpid());
int pid = waitpid(-1, nullptr, 0);
dbgprintf("Launcher(%d) waitpid() returned %d\n", getpid(), pid);
ASSERT(pid > 0);
}
int main(int argc, char** argv)
{
if (chdir(get_current_user_home_path().characters()) < 0)
perror("chdir");
GApplication app(argc, argv);
signal(SIGCHLD, handle_sigchld);
auto launcher_window = make_launcher_window();
launcher_window->show();
return app.exec();
}
class LauncherButton final : public GButton {
public:
LauncherButton(const String& name, const String& icon_path, const String& exec_path, GWidget* parent)
: GButton(parent)
, m_executable_path(exec_path)
{
set_tooltip(name);
set_button_style(ButtonStyle::CoolBar);
set_icon(GraphicsBitmap::load_from_file(icon_path));
set_preferred_size(50, 50);
set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed);
on_click = [this](GButton&) {
pid_t child_pid = fork();
if (!child_pid) {
int rc = execl(m_executable_path.characters(), m_executable_path.characters(), nullptr);
if (rc < 0)
perror("execl");
}
};
}
virtual ~LauncherButton() {}
private:
String m_executable_path;
};
RefPtr<GWindow> make_launcher_window()
{
auto config = CConfigFile::get_for_app("Launcher");
auto vertical = config->read_bool_entry("Launcher", "Vertical", true);
auto window = GWindow::construct();
window->set_title("Launcher");
int launcher_size = (config->groups().size() - 1) * 50;
window->set_rect(50, 50, vertical ? 50 : launcher_size, vertical ? launcher_size : 50);
window->set_show_titlebar(false);
window->set_window_type(GWindowType::Launcher);
auto widget = GWidget::construct();
widget->set_fill_with_background_color(true);
widget->set_layout(make<GBoxLayout>(vertical ? Orientation::Vertical : Orientation::Horizontal));
widget->layout()->set_spacing(0);
widget->layout()->set_margins({ 5, 0, 5, 0 });
window->set_main_widget(widget);
for (auto& group : config->groups()) {
if (group != "Launcher")
new LauncherButton(config->read_entry(group, "Name", group),
config->read_entry(group, "Icon", ""),
config->read_entry(group, "Path", ""),
widget);
}
return window;
}

View file

@ -1,46 +0,0 @@
[Launcher]
Vertical=1
[Terminal]
Path=/bin/Terminal
Icon=/res/icons/32x32/app-terminal.png
[TextEditor]
Path=/bin/TextEditor
Icon=/res/icons/32x32/app-texteditor.png
[VisualBuilder]
Path=/bin/VisualBuilder
Icon=/res/icons/32x32/app-visual-builder.png
[IRCClient]
Path=/bin/IRCClient
Icon=/res/icons/32x32/app-irc-client.png
[FileManager]
Path=/bin/FileManager
Icon=/res/icons/32x32/filetype-folder.png
[Minesweeper]
Path=/bin/Minesweeper
Icon=/res/icons/32x32/app-minesweeper.png
[Snake]
Path=/bin/Snake
Icon=/res/icons/32x32/app-snake.png
[SystemMonitor]
Path=/bin/SystemMonitor
Icon=/res/icons/32x32/app-system-monitor.png
[PaintBrush]
Path=/bin/PaintBrush
Icon=/res/icons/32x32/app-paintbrush.png
[Piano]
Path=/bin/Piano
Icon=/res/icons/32x32/app-piano.png
[ChanViewer]
Path=/bin/ChanViewer
Icon=/res/icons/32x32/app-chanviewer.png

View file

@ -76,7 +76,6 @@ cp ../Applications/Downloader/Downloader mnt/bin/Downloader
cp ../Applications/FileManager/FileManager mnt/bin/FileManager cp ../Applications/FileManager/FileManager mnt/bin/FileManager
cp ../Applications/FontEditor/FontEditor mnt/bin/FontEditor cp ../Applications/FontEditor/FontEditor mnt/bin/FontEditor
cp ../Applications/IRCClient/IRCClient mnt/bin/IRCClient cp ../Applications/IRCClient/IRCClient mnt/bin/IRCClient
cp ../Applications/Launcher/Launcher mnt/bin/Launcher
cp ../Applications/SystemMonitor/SystemMonitor mnt/bin/SystemMonitor cp ../Applications/SystemMonitor/SystemMonitor mnt/bin/SystemMonitor
cp ../Applications/Taskbar/Taskbar mnt/bin/Taskbar cp ../Applications/Taskbar/Taskbar mnt/bin/Taskbar
cp ../Applications/Terminal/Terminal mnt/bin/Terminal cp ../Applications/Terminal/Terminal mnt/bin/Terminal

View file

@ -48,7 +48,6 @@ build_targets="$build_targets ../Applications/Downloader"
build_targets="$build_targets ../Applications/FileManager" build_targets="$build_targets ../Applications/FileManager"
build_targets="$build_targets ../Applications/FontEditor" build_targets="$build_targets ../Applications/FontEditor"
build_targets="$build_targets ../Applications/IRCClient" build_targets="$build_targets ../Applications/IRCClient"
build_targets="$build_targets ../Applications/Launcher"
build_targets="$build_targets ../Applications/PaintBrush" build_targets="$build_targets ../Applications/PaintBrush"
build_targets="$build_targets ../Applications/Piano" build_targets="$build_targets ../Applications/Piano"
build_targets="$build_targets ../Applications/QuickShow" build_targets="$build_targets ../Applications/QuickShow"

View file

@ -9,5 +9,4 @@ enum class GWindowType {
Taskbar, Taskbar,
Tooltip, Tooltip,
Menubar, Menubar,
Launcher,
}; };

View file

@ -28,7 +28,6 @@ enum WSAPI_WindowType {
Taskbar, Taskbar,
Tooltip, Tooltip,
Menubar, Menubar,
Launcher,
}; };
struct WSAPI_WindowBackingStoreInfo { struct WSAPI_WindowBackingStoreInfo {

View file

@ -215,9 +215,6 @@ bool WSClientConnection::handle_message(const WSAPI_ClientMessage& message, cons
case WSAPI_WindowType::Menubar: case WSAPI_WindowType::Menubar:
ws_window_type = WSWindowType::Menubar; ws_window_type = WSWindowType::Menubar;
break; break;
case WSAPI_WindowType::Launcher:
ws_window_type = WSWindowType::Launcher;
break;
case WSAPI_WindowType::Invalid: case WSAPI_WindowType::Invalid:
default: default:
dbgprintf("Unknown WSAPI_WindowType: %d\n", message.window.type); dbgprintf("Unknown WSAPI_WindowType: %d\n", message.window.type);

View file

@ -140,8 +140,6 @@ static WSAPI_WindowType to_api(WSWindowType ws_type)
return WSAPI_WindowType::Tooltip; return WSAPI_WindowType::Tooltip;
case WSWindowType::Menubar: case WSWindowType::Menubar:
return WSAPI_WindowType::Menubar; return WSAPI_WindowType::Menubar;
case WSWindowType::Launcher:
return WSAPI_WindowType::Launcher;
default: default:
ASSERT_NOT_REACHED(); ASSERT_NOT_REACHED();
} }

View file

@ -45,7 +45,7 @@ public:
bool is_movable() const bool is_movable() const
{ {
return m_type == WSWindowType::Normal || m_type == WSWindowType::Launcher; return m_type == WSWindowType::Normal;
} }
WSWindowFrame& frame() { return m_frame; } WSWindowFrame& frame() { return m_frame; }

View file

@ -299,8 +299,6 @@ IterationDecision WSWindowManager::for_each_visible_window_of_type_from_back_to_
template<typename Callback> template<typename Callback>
IterationDecision WSWindowManager::for_each_visible_window_from_back_to_front(Callback callback) IterationDecision WSWindowManager::for_each_visible_window_from_back_to_front(Callback callback)
{ {
if (for_each_visible_window_of_type_from_back_to_front(WSWindowType::Launcher, callback) == IterationDecision::Break)
return IterationDecision::Break;
if (for_each_visible_window_of_type_from_back_to_front(WSWindowType::Normal, callback) == IterationDecision::Break) if (for_each_visible_window_of_type_from_back_to_front(WSWindowType::Normal, callback) == IterationDecision::Break)
return IterationDecision::Break; return IterationDecision::Break;
if (for_each_visible_window_of_type_from_back_to_front(WSWindowType::Taskbar, callback) == IterationDecision::Break) if (for_each_visible_window_of_type_from_back_to_front(WSWindowType::Taskbar, callback) == IterationDecision::Break)
@ -350,9 +348,7 @@ IterationDecision WSWindowManager::for_each_visible_window_from_front_to_back(Ca
return IterationDecision::Break; return IterationDecision::Break;
if (for_each_visible_window_of_type_from_front_to_back(WSWindowType::Tooltip, callback) == IterationDecision::Break) if (for_each_visible_window_of_type_from_front_to_back(WSWindowType::Tooltip, callback) == IterationDecision::Break)
return IterationDecision::Break; return IterationDecision::Break;
if (for_each_visible_window_of_type_from_front_to_back(WSWindowType::Normal, callback) == IterationDecision::Break) return for_each_visible_window_of_type_from_front_to_back(WSWindowType::Normal, callback);
return IterationDecision::Break;
return for_each_visible_window_of_type_from_front_to_back(WSWindowType::Launcher, callback);
} }
template<typename Callback> template<typename Callback>

View file

@ -9,5 +9,4 @@ enum class WSWindowType {
Taskbar, Taskbar,
Tooltip, Tooltip,
Menubar, Menubar,
Launcher,
}; };