diff options
author | myheroyuki <myheroyuki@outlook.com> | 2023-09-08 15:01:54 +0300 |
---|---|---|
committer | myheroyuki <myheroyuki@outlook.com> | 2023-09-08 15:01:54 +0300 |
commit | 78ab6e00de7ed6f7e885e2cfaca3bcf8a50ca92f (patch) | |
tree | ccdb0f6e9fdc96352cd91bcd9f9f0815f6c77b0a /plugins/rdp | |
parent | 4a8e216c4d58c084285bf23fefc79412dd02e2b8 (diff) |
[REM-1923] Fix handling of pause break key for RDP connections
Diffstat (limited to 'plugins/rdp')
-rw-r--r-- | plugins/rdp/rdp_event.c | 12 | ||||
-rw-r--r-- | plugins/rdp/rdp_plugin.c | 8 | ||||
-rw-r--r-- | plugins/rdp/rdp_plugin.h | 1 |
3 files changed, 18 insertions, 3 deletions
diff --git a/plugins/rdp/rdp_event.c b/plugins/rdp/rdp_event.c index 55c5d1399..b6ce5ebf9 100644 --- a/plugins/rdp/rdp_event.c +++ b/plugins/rdp/rdp_event.c @@ -210,7 +210,8 @@ static void remmina_rdp_event_release_key(RemminaProtocolWidget *gp, RemminaPlug if (rdp_event_2.key_event.key_code == rdp_event.key_event.key_code && rdp_event_2.key_event.unicode_code == rdp_event.key_event.unicode_code && - rdp_event_2.key_event.extended == rdp_event.key_event.extended) { + rdp_event_2.key_event.extended == rdp_event.key_event.extended && + rdp_event_2.key_event.extended1 == rdp_event.key_event.extended1) { g_array_remove_index_fast(rfi->pressed_keys, i); break; } @@ -793,6 +794,7 @@ static gboolean remmina_rdp_event_on_key(GtkWidget *widget, GdkEventKey *event, rdp_event.type = REMMINA_RDP_EVENT_TYPE_SCANCODE; rdp_event.key_event.up = (event->type == GDK_KEY_PRESS ? false : true); rdp_event.key_event.extended = false; + rdp_event.key_event.extended1 = false; switch (event->keyval) { case GDK_KEY_Pause: @@ -803,15 +805,19 @@ static gboolean remmina_rdp_event_on_key(GtkWidget *widget, GdkEventKey *event, */ rdp_event.key_event.key_code = 0x1D; rdp_event.key_event.up = false; + rdp_event.key_event.extended1 = TRUE; remmina_rdp_event_event_push(gp, &rdp_event); rdp_event.key_event.key_code = 0x45; rdp_event.key_event.up = false; + rdp_event.key_event.extended1 = FALSE; remmina_rdp_event_event_push(gp, &rdp_event); rdp_event.key_event.key_code = 0x1D; rdp_event.key_event.up = true; + rdp_event.key_event.extended1 = TRUE; remmina_rdp_event_event_push(gp, &rdp_event); rdp_event.key_event.key_code = 0x45; rdp_event.key_event.up = true; + rdp_event.key_event.extended1 = FALSE; remmina_rdp_event_event_push(gp, &rdp_event); break; @@ -831,6 +837,7 @@ static gboolean remmina_rdp_event_on_key(GtkWidget *widget, GdkEventKey *event, if (scancode) { rdp_event.key_event.key_code = scancode & 0xFF; rdp_event.key_event.extended = scancode & 0x100; + rdp_event.key_event.extended1 = FALSE; remmina_rdp_event_event_push(gp, &rdp_event); keypress_list_add(gp, rdp_event); } @@ -851,7 +858,7 @@ static gboolean remmina_rdp_event_on_key(GtkWidget *widget, GdkEventKey *event, ) { scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->hardware_keycode); rdp_event.key_event.key_code = scancode & 0xFF; - rdp_event.key_event.extended = scancode & 0x100; + rdp_event.key_event.extended1 = FALSE; if (rdp_event.key_event.key_code) { remmina_rdp_event_event_push(gp, &rdp_event); keypress_list_add(gp, rdp_event); @@ -860,6 +867,7 @@ static gboolean remmina_rdp_event_on_key(GtkWidget *widget, GdkEventKey *event, rdp_event.type = REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE; rdp_event.key_event.unicode_code = unicode_keyval; rdp_event.key_event.extended = false; + rdp_event.key_event.extended1 = FALSE; remmina_rdp_event_event_push(gp, &rdp_event); keypress_list_add(gp, rdp_event); } diff --git a/plugins/rdp/rdp_plugin.c b/plugins/rdp/rdp_plugin.c index af2eb00ce..416981718 100644 --- a/plugins/rdp/rdp_plugin.c +++ b/plugins/rdp/rdp_plugin.c @@ -232,7 +232,13 @@ static BOOL rf_process_event_queue(RemminaProtocolWidget *gp) time(&last_time); //update last user interaction time switch (event->type) { case REMMINA_RDP_EVENT_TYPE_SCANCODE: - flags = event->key_event.extended ? KBD_FLAGS_EXTENDED : 0; + + if (event->key_event.extended1){ + flags = KBD_FLAGS_EXTENDED1; + } + else{ + flags = event->key_event.extended ? KBD_FLAGS_EXTENDED : 0; + } flags |= event->key_event.up ? KBD_FLAGS_RELEASE : KBD_FLAGS_DOWN; input->KeyboardEvent(input, flags, event->key_event.key_code); break; diff --git a/plugins/rdp/rdp_plugin.h b/plugins/rdp/rdp_plugin.h index 9dfa56d87..edec7a752 100644 --- a/plugins/rdp/rdp_plugin.h +++ b/plugins/rdp/rdp_plugin.h @@ -195,6 +195,7 @@ struct remmina_plugin_rdp_event { BOOL extended; UINT8 key_code; UINT32 unicode_code; + BOOL extended1; } key_event; struct { UINT16 flags; |