
I'm gonna want to have nested event loops sooner or later, so let's not pollute GEventLoop with things that are meant to work globally. This patch also changes key events to pass around their modifiers as a bitfield all the way around the system instead of breaking them up.
62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
#include <LibGUI/GApplication.h>
|
|
#include <LibGUI/GEventLoop.h>
|
|
#include <LibGUI/GMenuBar.h>
|
|
#include <LibGUI/GAction.h>
|
|
|
|
static GApplication* s_the;
|
|
|
|
GApplication& GApplication::the()
|
|
{
|
|
ASSERT(s_the);
|
|
return *s_the;
|
|
}
|
|
|
|
GApplication::GApplication(int argc, char** argv)
|
|
{
|
|
(void)argc;
|
|
(void)argv;
|
|
ASSERT(!s_the);
|
|
s_the = this;
|
|
m_event_loop = make<GEventLoop>();
|
|
}
|
|
|
|
GApplication::~GApplication()
|
|
{
|
|
}
|
|
|
|
int GApplication::exec()
|
|
{
|
|
return m_event_loop->exec();
|
|
}
|
|
|
|
void GApplication::quit(int exit_code)
|
|
{
|
|
m_event_loop->quit(exit_code);
|
|
}
|
|
|
|
void GApplication::set_menubar(OwnPtr<GMenuBar>&& menubar)
|
|
{
|
|
if (m_menubar)
|
|
m_menubar->notify_removed_from_application(Badge<GApplication>());
|
|
m_menubar = move(menubar);
|
|
if (m_menubar)
|
|
m_menubar->notify_added_to_application(Badge<GApplication>());
|
|
}
|
|
|
|
void GApplication::register_shortcut_action(Badge<GAction>, GAction& action)
|
|
{
|
|
m_shortcut_actions.set(action.shortcut(), &action);
|
|
}
|
|
|
|
void GApplication::unregister_shortcut_action(Badge<GAction>, GAction& action)
|
|
{
|
|
m_shortcut_actions.remove(action.shortcut());
|
|
}
|
|
|
|
GAction* GApplication::action_for_key_event(const GKeyEvent& event)
|
|
{
|
|
auto it = m_shortcut_actions.find(GShortcut(event.modifiers(), (KeyCode)event.key()));
|
|
if (it == m_shortcut_actions.end())
|
|
return nullptr;
|
|
return (*it).value;
|
|
}
|