mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:27:45 +00:00
LibGUI+WindowServer: Add app-global keyboard shortcuts.
This patch adds a GShortcut class. Each GAction can have a GShortcut which will cause the event loop to listen for that key combination app-globally and activate the event in case it's pressed. The shortcut will also be displayed when the action is added to a menu. Use this to hook up Alt+Up with the "open parent directory" action in the FileManager app. :^)
This commit is contained in:
parent
5c0fca0a95
commit
596a5ce5a4
17 changed files with 263 additions and 17 deletions
42
LibGUI/GShortcut.h
Normal file
42
LibGUI/GShortcut.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
#pragma once
|
||||
|
||||
#include <Kernel/KeyCode.h>
|
||||
#include <AK/AKString.h>
|
||||
#include <AK/Traits.h>
|
||||
|
||||
class GShortcut {
|
||||
public:
|
||||
GShortcut() { }
|
||||
GShortcut(unsigned modifiers, KeyCode key)
|
||||
: m_modifiers(modifiers)
|
||||
, m_key(key)
|
||||
{
|
||||
}
|
||||
|
||||
bool is_valid() const { return m_key != KeyCode::Key_Invalid; }
|
||||
unsigned modifiers() const { return m_modifiers; }
|
||||
KeyCode key() const { return m_key; }
|
||||
String to_string() const;
|
||||
|
||||
bool operator==(const GShortcut& other) const
|
||||
{
|
||||
return m_modifiers == other.m_modifiers
|
||||
&& m_key == other.m_key;
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned m_modifiers { 0 };
|
||||
KeyCode m_key { KeyCode::Key_Invalid };
|
||||
};
|
||||
|
||||
namespace AK {
|
||||
|
||||
template<>
|
||||
struct Traits<GShortcut> {
|
||||
static unsigned hash(const GShortcut& shortcut)
|
||||
{
|
||||
return pair_int_hash(shortcut.modifiers(), shortcut.key());
|
||||
}
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue