FreeRDP
Loading...
Searching...
No Matches
SDL3/sdl_kbd.hpp
1
20#pragma once
21
22#include <string>
23#include <map>
24#include <list>
25#include <atomic>
26
27#include <winpr/wtypes.h>
28#include <freerdp/freerdp.h>
29#include <freerdp/locale/keyboard.h>
30#include <SDL3/SDL.h>
31
32#include "sdl_types.hpp"
33
34class sdlInput
35{
36 public:
37 explicit sdlInput(SdlContext* sdl);
38 sdlInput(const sdlInput& other) = delete;
39 sdlInput(sdlInput&& other) = delete;
40 ~sdlInput();
41
42 sdlInput& operator=(const sdlInput& other) = delete;
43 sdlInput& operator=(sdlInput&& other) = delete;
44
45 BOOL initialize();
46
47 BOOL keyboard_sync_state();
48 BOOL keyboard_focus_in();
49
50 BOOL keyboard_handle_event(const SDL_KeyboardEvent* ev);
51
52 BOOL keyboard_grab(Uint32 windowID, bool enable);
53 BOOL mouse_focus(Uint32 windowID);
54 BOOL mouse_grab(Uint32 windowID, bool enable);
55
56 static BOOL keyboard_set_indicators(rdpContext* context, UINT16 led_flags);
57 static BOOL keyboard_set_ime_status(rdpContext* context, UINT16 imeId, UINT32 imeState,
58 UINT32 imeConvMode);
59
60 static uint32_t prefToMask();
61 static uint32_t prefKeyValue(const std::string& key, uint32_t fallback = SDL_SCANCODE_UNKNOWN);
62
63 private:
64 static std::list<std::string> tokenize(const std::string& data,
65 const std::string& delimiter = ",");
66 static bool extract(const std::string& token, uint32_t& key, uint32_t& value);
67
68 UINT32 scancode_to_rdp(Uint32 scancode);
69
70 SdlContext* _sdl;
71 Uint32 _lastWindowID;
72
73 // hotkey handling
74 uint32_t _hotkeyModmask; // modifier keys mask
75 uint32_t _hotkeyFullscreen;
76 uint32_t _hotkeyResizable;
77 uint32_t _hotkeyGrab;
78 uint32_t _hotkeyDisconnect;
79 uint32_t _hotkeyMinimize;
80 FREERDP_REMAP_TABLE* _remapTable = nullptr;
81};