From 1f7bc15bb18e9410dccbdb08aca82989bda924ce Mon Sep 17 00:00:00 2001 From: akallabeth Date: Thu, 12 Oct 2023 13:54:53 +0200 Subject: [PATCH] [settings] add HasQoeEvent --- include/freerdp/settings.h | 4 +++- libfreerdp/common/settings_getters.c | 7 +++++++ libfreerdp/common/settings_str.c | 1 + libfreerdp/core/capabilities.c | 18 +++++++++++++++++- libfreerdp/core/settings.c | 1 + libfreerdp/core/test/settings_property_lists.h | 1 + 6 files changed, 30 insertions(+), 2 deletions(-) diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index fa037b7e3..59fe00f97 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -859,6 +859,7 @@ extern "C" #define FreeRDP_SuspendInput (2636) #define FreeRDP_KeyboardPipeName (2637) #define FreeRDP_HasRelativeMouseEvent (2638) +#define FreeRDP_HasQoeEvent (2639) #define FreeRDP_BrushSupportLevel (2688) #define FreeRDP_GlyphSupportLevel (2752) #define FreeRDP_GlyphCache (2753) @@ -1490,7 +1491,8 @@ extern "C" ALIGN64 BOOL SuspendInput; /* 2636 */ ALIGN64 char* KeyboardPipeName; /* 2637 */ ALIGN64 BOOL HasRelativeMouseEvent; /* 2638 */ - UINT64 padding2688[2688 - 2639]; /* 2639 */ + ALIGN64 BOOL HasQoeEvent; /* 2639 */ + UINT64 padding2688[2688 - 2640]; /* 2640 */ /* Brush Capabilities */ ALIGN64 UINT32 BrushSupportLevel; /* 2688 */ diff --git a/libfreerdp/common/settings_getters.c b/libfreerdp/common/settings_getters.c index 689b0f14d..3246dc1b4 100644 --- a/libfreerdp/common/settings_getters.c +++ b/libfreerdp/common/settings_getters.c @@ -303,6 +303,9 @@ BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id) case FreeRDP_HasMonitorAttributes: return settings->HasMonitorAttributes; + case FreeRDP_HasQoeEvent: + return settings->HasQoeEvent; + case FreeRDP_HasRelativeMouseEvent: return settings->HasRelativeMouseEvent; @@ -963,6 +966,10 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL val) settings->HasMonitorAttributes = cnv.c; break; + case FreeRDP_HasQoeEvent: + settings->HasQoeEvent = cnv.c; + break; + case FreeRDP_HasRelativeMouseEvent: settings->HasRelativeMouseEvent = cnv.c; break; diff --git a/libfreerdp/common/settings_str.c b/libfreerdp/common/settings_str.c index ff4c51784..67ad6c939 100644 --- a/libfreerdp/common/settings_str.c +++ b/libfreerdp/common/settings_str.c @@ -129,6 +129,7 @@ static const struct settings_str_entry settings_map[] = { { FreeRDP_HasExtendedMouseEvent, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_HasExtendedMouseEvent" }, { FreeRDP_HasHorizontalWheel, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_HasHorizontalWheel" }, { FreeRDP_HasMonitorAttributes, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_HasMonitorAttributes" }, + { FreeRDP_HasQoeEvent, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_HasQoeEvent" }, { FreeRDP_HasRelativeMouseEvent, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_HasRelativeMouseEvent" }, { FreeRDP_HiDefRemoteApp, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_HiDefRemoteApp" }, { FreeRDP_IPv6Enabled, FREERDP_SETTINGS_TYPE_BOOL, "FreeRDP_IPv6Enabled" }, diff --git a/libfreerdp/core/capabilities.c b/libfreerdp/core/capabilities.c index 8086cdf37..3a885bb4e 100644 --- a/libfreerdp/core/capabilities.c +++ b/libfreerdp/core/capabilities.c @@ -1351,6 +1351,10 @@ static BOOL rdp_apply_input_capability_set(rdpSettings* settings, const rdpSetti } if (settings->HasExtendedMouseEvent) settings->HasExtendedMouseEvent = src->HasExtendedMouseEvent; + if (settings->HasRelativeMouseEvent) + settings->HasRelativeMouseEvent = src->HasRelativeMouseEvent; + if (freerdp_settings_get_bool(settings, FreeRDP_HasQoeEvent)) + settings->HasQoeEvent = freerdp_settings_get_bool(settings, FreeRDP_HasQoeEvent); } return TRUE; } @@ -1404,9 +1408,15 @@ static BOOL rdp_read_input_capability_set(wStream* s, rdpSettings* settings) if (!freerdp_settings_set_bool(settings, FreeRDP_UnicodeInput, (inputFlags & INPUT_FLAG_UNICODE) ? TRUE : FALSE)) return FALSE; + if (!freerdp_settings_set_bool(settings, FreeRDP_HasRelativeMouseEvent, + (inputFlags & INPUT_FLAG_MOUSE_RELATIVE) ? TRUE : FALSE)) + return FALSE; if (!freerdp_settings_set_bool(settings, FreeRDP_HasExtendedMouseEvent, (inputFlags & INPUT_FLAG_MOUSEX) ? TRUE : FALSE)) return FALSE; + if (!freerdp_settings_set_bool(settings, FreeRDP_HasQoeEvent, + (inputFlags & TS_INPUT_FLAG_QOE_TIMESTAMPS) ? TRUE : FALSE)) + return FALSE; return TRUE; } @@ -1431,12 +1441,18 @@ static BOOL rdp_write_input_capability_set(wStream* s, const rdpSettings* settin inputFlags |= INPUT_FLAG_FASTPATH_INPUT2; } - if (settings->HasHorizontalWheel) + if (freerdp_settings_get_bool(settings, FreeRDP_HasRelativeMouseEvent)) + inputFlags |= INPUT_FLAG_MOUSE_RELATIVE; + + if (freerdp_settings_get_bool(settings, FreeRDP_HasHorizontalWheel)) inputFlags |= TS_INPUT_FLAG_MOUSE_HWHEEL; if (freerdp_settings_get_bool(settings, FreeRDP_UnicodeInput)) inputFlags |= INPUT_FLAG_UNICODE; + if (freerdp_settings_get_bool(settings, FreeRDP_HasQoeEvent)) + inputFlags |= TS_INPUT_FLAG_QOE_TIMESTAMPS; + if (settings->HasExtendedMouseEvent) inputFlags |= INPUT_FLAG_MOUSEX; diff --git a/libfreerdp/core/settings.c b/libfreerdp/core/settings.c index 834500cf5..f8bfe6917 100644 --- a/libfreerdp/core/settings.c +++ b/libfreerdp/core/settings.c @@ -366,6 +366,7 @@ rdpSettings* freerdp_settings_new(DWORD flags) if (!freerdp_settings_set_bool(settings, FreeRDP_UnicodeInput, TRUE) || !freerdp_settings_set_bool(settings, FreeRDP_HasHorizontalWheel, TRUE) || !freerdp_settings_set_bool(settings, FreeRDP_HasExtendedMouseEvent, TRUE) || + !freerdp_settings_set_bool(settings, FreeRDP_HasQoeEvent, TRUE) || !freerdp_settings_set_bool(settings, FreeRDP_HasRelativeMouseEvent, TRUE) || !freerdp_settings_set_bool(settings, FreeRDP_HiDefRemoteApp, TRUE) || !freerdp_settings_set_uint32( diff --git a/libfreerdp/core/test/settings_property_lists.h b/libfreerdp/core/test/settings_property_lists.h index 34bb5b7e5..c0c0070fe 100644 --- a/libfreerdp/core/test/settings_property_lists.h +++ b/libfreerdp/core/test/settings_property_lists.h @@ -85,6 +85,7 @@ static const size_t bool_list_indices[] = { FreeRDP_HasExtendedMouseEvent, FreeRDP_HasHorizontalWheel, FreeRDP_HasMonitorAttributes, + FreeRDP_HasQoeEvent, FreeRDP_HasRelativeMouseEvent, FreeRDP_HiDefRemoteApp, FreeRDP_IPv6Enabled,