mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 10:52:44 +00:00 
			
		
		
		
	 5e40aa4f1a
			
		
	
	
		5e40aa4f1a
		
	
	
	
	
		
			
			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.
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			864 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			864 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <Kernel/KeyCode.h>
 | |
| #include <AK/AKString.h>
 | |
| #include <AK/Traits.h>
 | |
| 
 | |
| class GShortcut {
 | |
| public:
 | |
|     GShortcut() { }
 | |
|     GShortcut(byte modifiers, KeyCode key)
 | |
|         : m_modifiers(modifiers)
 | |
|         , m_key(key)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     bool is_valid() const { return m_key != KeyCode::Key_Invalid; }
 | |
|     byte 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:
 | |
|     byte 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());
 | |
|     }
 | |
| };
 | |
| 
 | |
| }
 |