diff --git a/.github/workflows/abi-checker.yml b/.github/workflows/abi-checker.yml index 43ac4e98d..0b77d613b 100644 --- a/.github/workflows/abi-checker.yml +++ b/.github/workflows/abi-checker.yml @@ -48,9 +48,12 @@ jobs: apt source libabigail cd libabigail-2.6 dpkg-buildpackage - cd .. - mkdir -p deb - mv *.deb deb/ + + - name: "Prepare abigail-tools debs" + if: always() && steps.cache-abigail-tools-restore.outputs.cache-hit != 'true' + run: | + mkdir deb + find . -name "*.deb" -print -exec mv {} deb \; - name: Save abigail tools id: cache-abigail-tools-save @@ -62,14 +65,15 @@ jobs: deb - name: "Install abigail-tools" + continue-on-error: true run: | cd deb - ls sudo dpkg -i *.deb - name: "Prepare environment" run: | sudo apt-get update -q -y + sudo apt-get --fix-broken install -q -y sudo apt-get install -q -y devscripts equivs \ clang \ pylint \ diff --git a/client/SDL/SDL3/sdl_freerdp.cpp b/client/SDL/SDL3/sdl_freerdp.cpp index 1c6e8365d..8443eeba1 100644 --- a/client/SDL/SDL3/sdl_freerdp.cpp +++ b/client/SDL/SDL3/sdl_freerdp.cpp @@ -644,6 +644,9 @@ static BOOL sdl_pre_connect(freerdp* instance) WLog_Print(sdl->log, WLOG_INFO, "Authentication only. Don't connect SDL."); } + if (!sdl->input.initialize()) + return FALSE; + /* TODO: Any code your client requires */ return TRUE; } diff --git a/client/SDL/SDL3/sdl_kbd.cpp b/client/SDL/SDL3/sdl_kbd.cpp index 8a756731a..39360d351 100644 --- a/client/SDL/SDL3/sdl_kbd.cpp +++ b/client/SDL/SDL3/sdl_kbd.cpp @@ -30,6 +30,8 @@ #include #include +#include +#include #include @@ -590,13 +592,6 @@ BOOL sdlInput::keyboard_handle_event(const SDL_KeyboardEvent* ev) } } - if (!_remapTable) - { - auto list = - freerdp_settings_get_string(_sdl->context()->settings, FreeRDP_KeyboardRemappingList); - _remapTable = freerdp_keyboard_remap_string_to_list(list); - assert(_remapTable); - } auto scancode = freerdp_keyboard_remap_key(_remapTable, rdp_scancode); return freerdp_input_send_keyboard_event_ex( _sdl->context()->input, ev->type == SDL_EVENT_KEY_DOWN, ev->repeat, scancode); @@ -652,3 +647,30 @@ sdlInput::~sdlInput() { freerdp_keyboard_remap_free(_remapTable); } + +BOOL sdlInput::initialize() +{ + auto settings = _sdl->context()->settings; + WINPR_ASSERT(settings); + WINPR_ASSERT(!_remapTable); + + { + auto list = freerdp_settings_get_string(settings, FreeRDP_KeyboardRemappingList); + _remapTable = freerdp_keyboard_remap_string_to_list(list); + if (!_remapTable) + return FALSE; + } + + if (freerdp_settings_get_uint32(settings, FreeRDP_KeyboardLayout) == 0) + { + uint32_t KeyboardLayout = 0; + + freerdp_detect_keyboard_layout_from_system_locale(&KeyboardLayout); + if (KeyboardLayout == 0) + KeyboardLayout = ENGLISH_UNITED_STATES; + + if (!freerdp_settings_set_uint32(settings, FreeRDP_KeyboardLayout, KeyboardLayout)) + return FALSE; + } + return TRUE; +} diff --git a/client/SDL/SDL3/sdl_kbd.hpp b/client/SDL/SDL3/sdl_kbd.hpp index 66e334535..d767462b8 100644 --- a/client/SDL/SDL3/sdl_kbd.hpp +++ b/client/SDL/SDL3/sdl_kbd.hpp @@ -42,6 +42,8 @@ class sdlInput sdlInput& operator=(const sdlInput& other) = delete; sdlInput& operator=(sdlInput&& other) = delete; + BOOL initialize(); + BOOL keyboard_sync_state(); BOOL keyboard_focus_in();