xfreerdp: added wm-class option to set WM_CLASS hint

based on 96290efd76

fixes #1138
This commit is contained in:
Bernhard Miklautz 2013-04-03 10:57:08 +02:00
parent 20fbecee2d
commit 3db32e8e8e
3 changed files with 27 additions and 7 deletions

View File

@ -288,7 +288,10 @@ xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height,
if (class_hints != NULL) if (class_hints != NULL)
{ {
class_hints->res_name = "xfreerdp"; class_hints->res_name = "xfreerdp";
class_hints->res_class = "xfreerdp"; if (xfi->instance->settings->wm_class != NULL)
class_hints->res_class = xfi->instance->settings->wm_class;
else
class_hints->res_class = "xfreerdp";
XSetClassHint(xfi->display, window->handle, class_hints); XSetClassHint(xfi->display, window->handle, class_hints);
XFree(class_hints); XFree(class_hints);
} }
@ -423,14 +426,19 @@ xfWindow* xf_CreateWindow(xfInfo* xfi, rdpWindow* wnd, int x, int y, int width,
if (class_hints != NULL) if (class_hints != NULL)
{ {
char* class; char* class = NULL;
class = xmalloc(sizeof(rail_window_class)); if (xfi->instance->settings->wm_class != NULL)
snprintf(class, sizeof(rail_window_class), "RAIL:%08X", id); class_hints->res_class = xfi->instance->settings->wm_class;
else {
class = malloc(sizeof(rail_window_class));
snprintf(class, sizeof(rail_window_class), "RAIL:%08X", id);
class_hints->res_class = class;
}
class_hints->res_name = "RAIL"; class_hints->res_name = "RAIL";
class_hints->res_class = class;
XSetClassHint(xfi->display, window->handle, class_hints); XSetClassHint(xfi->display, window->handle, class_hints);
XFree(class_hints); XFree(class_hints);
xfree(class); if (class)
free(class);
} }
XSetWMProtocols(xfi->display, window->handle, &(xfi->WM_DELETE_WINDOW), 1); XSetWMProtocols(xfi->display, window->handle, &(xfi->WM_DELETE_WINDOW), 1);

View File

@ -291,7 +291,8 @@ struct rdp_settings
boolean mouse_motion; /* 86 */ boolean mouse_motion; /* 86 */
char* window_title; /* 87 */ char* window_title; /* 87 */
uint64 parent_window_xid; /* 88 */ uint64 parent_window_xid; /* 88 */
uint32 paddingD[112 - 89]; /* 89 */ char* wm_class; /* 89 */
uint32 paddingD[112 - 90]; /* 90 */
/* Internal Parameters */ /* Internal Parameters */
char* home_path; /* 112 */ char* home_path; /* 112 */

View File

@ -133,6 +133,7 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
" --ignore-certificate: ignore verification of logon certificate\n" " --ignore-certificate: ignore verification of logon certificate\n"
" --sec: force protocol security (rdp, tls or nla)\n" " --sec: force protocol security (rdp, tls or nla)\n"
" --secure-checksum: use salted checksums with Standard RDP encryption\n" " --secure-checksum: use salted checksums with Standard RDP encryption\n"
" --wm-class: set window WM_CLASS hint\n"
" --version: print version information\n" " --version: print version information\n"
"\n", argv[0]); "\n", argv[0]);
return FREERDP_ARGS_PARSE_HELP; //TODO: What is the correct return return FREERDP_ARGS_PARSE_HELP; //TODO: What is the correct return
@ -665,6 +666,16 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv,
{ {
settings->secure_checksum = true; settings->secure_checksum = true;
} }
else if (strcmp("--wm-class", argv[index]) == 0)
{
index++;
if (index == argc)
{
printf("missing WM_CLASS value\n");
return -1;
}
settings->wm_class = xstrdup(argv[index]);
}
else if (strcmp("--version", argv[index]) == 0) else if (strcmp("--version", argv[index]) == 0)
{ {
if (strlen(FREERDP_VERSION_SUFFIX)) if (strlen(FREERDP_VERSION_SUFFIX))