Sync numlock, capslock state in Wayland
author0140454 <s1994928@yahoo.com.tw>
Thu, 4 Feb 2021 12:24:49 +0000 (20:24 +0800)
committerakallabeth <akallabeth@users.noreply.github.com>
Thu, 25 Feb 2021 08:51:41 +0000 (09:51 +0100)
(cherry picked from commit b56a3691ca35a7f55e31998c55a40a9da9d0d745)

client/Wayland/wlf_input.c
client/Wayland/wlf_input.h
client/Wayland/wlfreerdp.c
client/Wayland/wlfreerdp.h

index 6a9b017..b18ec42 100644 (file)
@@ -205,13 +205,34 @@ BOOL wlf_handle_key(freerdp* instance, const UwacKeyEvent* ev)
 
 BOOL wlf_keyboard_enter(freerdp* instance, const UwacKeyboardEnterLeaveEvent* ev)
 {
+       if (!instance || !ev || !instance->input)
+               return FALSE;
+
+       ((wlfContext*)instance->context)->focusing = TRUE;
+       return TRUE;
+}
+
+BOOL wlf_keyboard_modifiers(freerdp* instance, const UwacKeyboardModifiersEvent* ev)
+{
        rdpInput* input;
+       uint32_t syncFlags;
 
        if (!instance || !ev || !instance->input)
                return FALSE;
 
        input = instance->input;
-       return freerdp_input_send_focus_in_event(input, 0) &&
+       syncFlags = 0;
+
+       if (ev->modifiers & UWAC_MOD_CAPS_MASK)
+               syncFlags |= KBD_SYNC_CAPS_LOCK;
+       if (ev->modifiers & UWAC_MOD_NUM_MASK)
+               syncFlags |= KBD_SYNC_NUM_LOCK;
+
+       if (!((wlfContext*)instance->context)->focusing)
+               return TRUE;
+
+       ((wlfContext*)instance->context)->focusing = FALSE;
+       return freerdp_input_send_focus_in_event(input, syncFlags) &&
               freerdp_input_send_mouse_event(input, PTR_FLAGS_MOVE, 0, 0);
 }
 
index 32c981a..2382dd8 100644 (file)
@@ -36,5 +36,6 @@ BOOL wlf_handle_touch_motion(freerdp* instance, const UwacTouchMotion* ev);
 
 BOOL wlf_handle_key(freerdp* instance, const UwacKeyEvent* ev);
 BOOL wlf_keyboard_enter(freerdp* instance, const UwacKeyboardEnterLeaveEvent* ev);
+BOOL wlf_keyboard_modifiers(freerdp* instance, const UwacKeyboardModifiersEvent* ev);
 
 #endif /* FREERDP_CLIENT_WAYLAND_INPUT_H */
index d6eb7f8..96764ee 100644 (file)
@@ -397,6 +397,12 @@ static BOOL handle_uwac_events(freerdp* instance, UwacDisplay* display)
 
                                break;
 
+                       case UWAC_EVENT_KEYBOARD_MODIFIERS:
+                               if (!wlf_keyboard_modifiers(instance, &event.keyboard_modifiers))
+                                       return FALSE;
+
+                               break;
+
                        case UWAC_EVENT_CONFIGURE:
                                if (!wlf_disp_handle_configure(context->disp, event.configure.width,
                                                               event.configure.height))
index 3b34331..d84f91c 100644 (file)
@@ -43,6 +43,7 @@ struct wlf_context
 
        BOOL fullscreen;
        BOOL closed;
+       BOOL focusing;
 
        /* Channels */
        RdpeiClientContext* rdpei;