[gnome-remote-desktop] rdp-event-queue: Add implementation for NotifyKeyboardKeycode()



commit 39de38a004d2da69d59d2f8ef76f75c0dfc4df43
Author: Pascal Nowack <Pascal Nowack gmx de>
Date:   Sun Feb 14 14:51:47 2021 +0100

    rdp-event-queue: Add implementation for NotifyKeyboardKeycode()

 src/grd-rdp-event-queue.c | 28 ++++++++++++++++++++++++++++
 src/grd-rdp-event-queue.h |  4 ++++
 2 files changed, 32 insertions(+)
---
diff --git a/src/grd-rdp-event-queue.c b/src/grd-rdp-event-queue.c
index 74d82c8..b3fb18b 100644
--- a/src/grd-rdp-event-queue.c
+++ b/src/grd-rdp-event-queue.c
@@ -24,6 +24,7 @@
 typedef enum _RdpEventType
 {
   RDP_EVENT_TYPE_NONE,
+  RDP_EVENT_TYPE_INPUT_KBD_KEYCODE,
   RDP_EVENT_TYPE_INPUT_KBD_KEYSYM,
   RDP_EVENT_TYPE_INPUT_PTR_MOTION_ABS,
   RDP_EVENT_TYPE_INPUT_PTR_BUTTON,
@@ -34,6 +35,13 @@ typedef struct _RdpEvent
 {
   RdpEventType type;
 
+  /* RDP_EVENT_TYPE_INPUT_KBD_KEYCODE */
+  struct
+  {
+    uint32_t keycode;
+    GrdKeyState state;
+  } input_kbd_keycode;
+
   /* RDP_EVENT_TYPE_INPUT_KBD_KEYSYM */
   struct
   {
@@ -88,6 +96,21 @@ queue_rdp_event (GrdRdpEventQueue *rdp_event_queue,
   g_source_set_ready_time (rdp_event_queue->flush_source, 0);
 }
 
+void
+grd_rdp_event_queue_add_input_event_keyboard_keycode (GrdRdpEventQueue *rdp_event_queue,
+                                                      uint32_t          keycode,
+                                                      GrdKeyState       state)
+{
+  RdpEvent *rdp_event;
+
+  rdp_event = g_malloc0 (sizeof (RdpEvent));
+  rdp_event->type = RDP_EVENT_TYPE_INPUT_KBD_KEYCODE;
+  rdp_event->input_kbd_keycode.keycode = keycode;
+  rdp_event->input_kbd_keycode.state = state;
+
+  queue_rdp_event (rdp_event_queue, rdp_event);
+}
+
 void
 grd_rdp_event_queue_add_input_event_keyboard_keysym (GrdRdpEventQueue *rdp_event_queue,
                                                      uint32_t          keysym,
@@ -162,6 +185,11 @@ process_rdp_events (GrdRdpEventQueue *rdp_event_queue)
         {
         case RDP_EVENT_TYPE_NONE:
           break;
+        case RDP_EVENT_TYPE_INPUT_KBD_KEYCODE:
+          grd_session_notify_keyboard_keycode (
+            session, rdp_event->input_kbd_keycode.keycode,
+            rdp_event->input_kbd_keycode.state);
+          break;
         case RDP_EVENT_TYPE_INPUT_KBD_KEYSYM:
           grd_session_notify_keyboard_keysym (session,
                                               rdp_event->input_kbd_keysym.keysym,
diff --git a/src/grd-rdp-event-queue.h b/src/grd-rdp-event-queue.h
index 1c8d091..41f6497 100644
--- a/src/grd-rdp-event-queue.h
+++ b/src/grd-rdp-event-queue.h
@@ -32,6 +32,10 @@ G_DECLARE_FINAL_TYPE (GrdRdpEventQueue, grd_rdp_event_queue,
 
 GrdRdpEventQueue *grd_rdp_event_queue_new (GrdSessionRdp *session_rdp);
 
+void grd_rdp_event_queue_add_input_event_keyboard_keycode (GrdRdpEventQueue *rdp_event_queue,
+                                                           uint32_t          keycode,
+                                                           GrdKeyState       state);
+
 void grd_rdp_event_queue_add_input_event_keyboard_keysym (GrdRdpEventQueue *rdp_event_queue,
                                                           uint32_t          keysym,
                                                           GrdKeyState       state);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]