Merge pull request #43 from glyptodon/rdp-perf-flags
GUAC-835: Add support for all RDP performance flags.
This commit is contained in:
commit
f8c3271e0c
@ -116,6 +116,12 @@ const char* GUAC_CLIENT_ARGS[] = {
|
||||
"remote-app-args",
|
||||
"static-channels",
|
||||
"client-name",
|
||||
"enable-wallpaper",
|
||||
"enable-theming",
|
||||
"enable-font-smoothing",
|
||||
"enable-full-window-drag",
|
||||
"enable-desktop-composition",
|
||||
"enable-menu-animations",
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -146,6 +152,12 @@ enum RDP_ARGS_IDX {
|
||||
IDX_REMOTE_APP_ARGS,
|
||||
IDX_STATIC_CHANNELS,
|
||||
IDX_CLIENT_NAME,
|
||||
IDX_ENABLE_WALLPAPER,
|
||||
IDX_ENABLE_THEMING,
|
||||
IDX_ENABLE_FONT_SMOOTHING,
|
||||
IDX_ENABLE_FULL_WINDOW_DRAG,
|
||||
IDX_ENABLE_DESKTOP_COMPOSITION,
|
||||
IDX_ENABLE_MENU_ANIMATIONS,
|
||||
RDP_ARGS_COUNT
|
||||
};
|
||||
|
||||
@ -698,6 +710,14 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
|
||||
if (argv[IDX_STATIC_CHANNELS][0] != '\0')
|
||||
settings->svc_names = guac_split(argv[IDX_STATIC_CHANNELS], ',');
|
||||
|
||||
/* Performance flags */
|
||||
settings->wallpaper_enabled = (strcmp(argv[IDX_ENABLE_WALLPAPER], "true") == 0);
|
||||
settings->theming_enabled = (strcmp(argv[IDX_ENABLE_THEMING], "true") == 0);
|
||||
settings->font_smoothing_enabled = (strcmp(argv[IDX_ENABLE_FONT_SMOOTHING], "true") == 0);
|
||||
settings->full_window_drag_enabled = (strcmp(argv[IDX_ENABLE_FULL_WINDOW_DRAG], "true") == 0);
|
||||
settings->desktop_composition_enabled = (strcmp(argv[IDX_ENABLE_DESKTOP_COMPOSITION], "true") == 0);
|
||||
settings->menu_animations_enabled = (strcmp(argv[IDX_ENABLE_MENU_ANIMATIONS], "true") == 0);
|
||||
|
||||
/* Session color depth */
|
||||
settings->color_depth = RDP_DEFAULT_DEPTH;
|
||||
if (argv[IDX_COLOR_DEPTH][0] != '\0')
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "rdp_settings.h"
|
||||
|
||||
#include <freerdp/constants.h>
|
||||
#include <freerdp/settings.h>
|
||||
|
||||
#ifdef ENABLE_WINPR
|
||||
#include <winpr/wtypes.h>
|
||||
@ -59,6 +60,51 @@ int guac_rdp_get_depth(freerdp* rdp) {
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Given the settings structure of the Guacamole RDP client, calculates the
|
||||
* standard performance flag value to send to the RDP server. The value of
|
||||
* these flags is dictated by the RDP standard.
|
||||
*
|
||||
* @param guac_settings
|
||||
* The settings structure to read performance settings from.
|
||||
*
|
||||
* @returns
|
||||
* The standard RDP performance flag value representing the union of all
|
||||
* performance settings within the given settings structure.
|
||||
*/
|
||||
static int guac_rdp_get_performance_flags(guac_rdp_settings* guac_settings) {
|
||||
|
||||
/* No performance flags initially */
|
||||
int flags = PERF_FLAG_NONE;
|
||||
|
||||
/* Desktop wallpaper */
|
||||
if (!guac_settings->wallpaper_enabled)
|
||||
flags |= PERF_DISABLE_WALLPAPER;
|
||||
|
||||
/* Theming of desktop/windows */
|
||||
if (!guac_settings->theming_enabled)
|
||||
flags |= PERF_DISABLE_THEMING;
|
||||
|
||||
/* Font smoothing (ClearType) */
|
||||
if (guac_settings->font_smoothing_enabled)
|
||||
flags |= PERF_ENABLE_FONT_SMOOTHING;
|
||||
|
||||
/* Full-window drag */
|
||||
if (!guac_settings->full_window_drag_enabled)
|
||||
flags |= PERF_DISABLE_FULLWINDOWDRAG;
|
||||
|
||||
/* Desktop composition (Aero) */
|
||||
if (guac_settings->desktop_composition_enabled)
|
||||
flags |= PERF_ENABLE_DESKTOP_COMPOSITION;
|
||||
|
||||
/* Menu animations */
|
||||
if (!guac_settings->menu_animations_enabled)
|
||||
flags |= PERF_DISABLE_MENUANIMATIONS;
|
||||
|
||||
return flags;
|
||||
|
||||
}
|
||||
|
||||
void guac_rdp_push_settings(guac_rdp_settings* guac_settings, freerdp* rdp) {
|
||||
|
||||
BOOL bitmap_cache;
|
||||
@ -99,6 +145,13 @@ void guac_rdp_push_settings(guac_rdp_settings* guac_settings, freerdp* rdp) {
|
||||
rdp_settings->KeyboardLayout = guac_settings->server_layout->freerdp_keyboard_layout;
|
||||
#endif
|
||||
|
||||
/* Performance flags */
|
||||
#ifdef LEGACY_RDPSETTINGS
|
||||
rdp_settings->performance_flags = guac_rdp_get_performance_flags(guac_settings);
|
||||
#else
|
||||
rdp_settings->PerformanceFlags = guac_rdp_get_performance_flags(guac_settings);
|
||||
#endif
|
||||
|
||||
/* Client name */
|
||||
if (guac_settings->client_name != NULL) {
|
||||
#ifdef LEGACY_RDPSETTINGS
|
||||
|
@ -219,6 +219,47 @@ typedef struct guac_rdp_settings {
|
||||
*/
|
||||
char** svc_names;
|
||||
|
||||
/**
|
||||
* Whether the desktop wallpaper should be visible. If unset, the desktop
|
||||
* wallpaper will be hidden, reducing the amount of bandwidth required.
|
||||
*/
|
||||
int wallpaper_enabled;
|
||||
|
||||
/**
|
||||
* Whether desktop and window theming should be allowed. If unset, theming
|
||||
* is temporarily disabled on the desktop of the RDP server for the sake of
|
||||
* performance, reducing the amount of bandwidth required.
|
||||
*/
|
||||
int theming_enabled;
|
||||
|
||||
/**
|
||||
* Whether glyphs should be smoothed with antialiasing (ClearType). If
|
||||
* unset, glyphs will be rendered with sharp edges and using single colors,
|
||||
* effectively 1-bit images, reducing the amount of bandwidth required.
|
||||
*/
|
||||
int font_smoothing_enabled;
|
||||
|
||||
/**
|
||||
* Whether windows contents should be shown as they are moved. If unset,
|
||||
* only a window border will be shown during window move operations,
|
||||
* reducing the amount of bandwidth required.
|
||||
*/
|
||||
int full_window_drag_enabled;
|
||||
|
||||
/**
|
||||
* Whether desktop composition (Aero) should be enabled during the session.
|
||||
* As desktop composition provides alpha blending and other special
|
||||
* effects, this increases the amount of bandwidth used. If unset, desktop
|
||||
* composition will be disabled.
|
||||
*/
|
||||
int desktop_composition_enabled;
|
||||
|
||||
/**
|
||||
* Whether menu animations should be shown. If unset, menus will not be
|
||||
* animated, reducing the amount of bandwidth required.
|
||||
*/
|
||||
int menu_animations_enabled;
|
||||
|
||||
} guac_rdp_settings;
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user