1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 06:07:34 +00:00

WindowServer: Support Alt+Character menu shortcuts :^)

This patch adds support for opening menus via keyboard shortcuts.
Use an ampersand in a menu name to automatically create a keyboard
shortcut (Alt + the character following the ampersand.)

Menus with an Alt shortcut have a small underline under the shortcut
character for discoverability.
This commit is contained in:
Andreas Kling 2021-04-05 23:03:55 +02:00
parent 89bc655765
commit d80fb6d9c0
6 changed files with 56 additions and 19 deletions

View file

@ -47,13 +47,15 @@ class Event;
class Menu final : public Core::Object {
C_OBJECT(Menu)
public:
Menu(ClientConnection*, int menu_id, const String& name);
Menu(ClientConnection*, int menu_id, String name);
virtual ~Menu() override;
ClientConnection* client() { return m_client; }
const ClientConnection* client() const { return m_client; }
int menu_id() const { return m_menu_id; }
u32 alt_shortcut_character() const { return m_alt_shortcut_character; }
bool is_empty() const { return m_items.is_empty(); }
int item_count() const { return m_items.size(); }
const MenuItem& item(int index) const { return m_items.at(index); }
@ -142,6 +144,7 @@ private:
ClientConnection* m_client { nullptr };
int m_menu_id { 0 };
String m_name;
u32 m_alt_shortcut_character { 0 };
Gfx::IntRect m_rect_in_window_menubar;
NonnullOwnPtrVector<MenuItem> m_items;
RefPtr<Window> m_menu_window;