Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormyheroyuki <myheroyuki@outlook.com>2023-09-08 15:01:54 +0300
committermyheroyuki <myheroyuki@outlook.com>2023-09-08 15:01:54 +0300
commit78ab6e00de7ed6f7e885e2cfaca3bcf8a50ca92f (patch)
treeccdb0f6e9fdc96352cd91bcd9f9f0815f6c77b0a /plugins/rdp
parent4a8e216c4d58c084285bf23fefc79412dd02e2b8 (diff)
[REM-1923] Fix handling of pause break key for RDP connections
Diffstat (limited to 'plugins/rdp')
-rw-r--r--plugins/rdp/rdp_event.c12
-rw-r--r--plugins/rdp/rdp_plugin.c8
-rw-r--r--plugins/rdp/rdp_plugin.h1
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;