Changes the approach of how seamlessrdpshell is used and

breaks backward compabilities with old commandline arguments.

The -A argument does now require an string to seamlessrdp shell,
and argument -s has now a splitted meaning, in seamless mode it
does specify a application to start, and in standard mode it works
just like it worked before.



git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/rdesktop/trunk@1692 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
Henrik Andersson 2013-01-25 14:10:11 +00:00
parent 6715013377
commit c56a8c180c
2 changed files with 21 additions and 5 deletions

View File

@ -101,6 +101,8 @@ RD_BOOL g_lspci_enabled = False;
RD_BOOL g_owncolmap = False; RD_BOOL g_owncolmap = False;
RD_BOOL g_ownbackstore = True; /* We can't rely on external BackingStore */ RD_BOOL g_ownbackstore = True; /* We can't rely on external BackingStore */
RD_BOOL g_seamless_rdp = False; RD_BOOL g_seamless_rdp = False;
char g_seamless_shell[512];
char g_seamless_spawn_cmd[512];
RD_BOOL g_user_quit = False; RD_BOOL g_user_quit = False;
uint32 g_embed_wnd; uint32 g_embed_wnd;
uint32 g_rdp5_performanceflags = uint32 g_rdp5_performanceflags =
@ -155,7 +157,7 @@ usage(char *program)
#endif #endif
fprintf(stderr, " -u: user name\n"); fprintf(stderr, " -u: user name\n");
fprintf(stderr, " -d: domain\n"); fprintf(stderr, " -d: domain\n");
fprintf(stderr, " -s: shell\n"); fprintf(stderr, " -s: shell / seamless application to start remotly\n");
fprintf(stderr, " -c: working directory\n"); fprintf(stderr, " -c: working directory\n");
fprintf(stderr, " -p: password (- to prompt)\n"); fprintf(stderr, " -p: password (- to prompt)\n");
fprintf(stderr, " -n: client hostname\n"); fprintf(stderr, " -n: client hostname\n");
@ -169,7 +171,7 @@ usage(char *program)
#ifdef HAVE_ICONV #ifdef HAVE_ICONV
fprintf(stderr, " -L: local codepage\n"); fprintf(stderr, " -L: local codepage\n");
#endif #endif
fprintf(stderr, " -A: enable SeamlessRDP mode\n"); fprintf(stderr, " -A: path to SeamlessRDP shell, this enables SeamlessRDP mode\n");
fprintf(stderr, " -B: use BackingStore of X-server (if available)\n"); fprintf(stderr, " -B: use BackingStore of X-server (if available)\n");
fprintf(stderr, " -e: disable encryption (French TS)\n"); fprintf(stderr, " -e: disable encryption (French TS)\n");
fprintf(stderr, " -E: disable encryption from client to server\n"); fprintf(stderr, " -E: disable encryption from client to server\n");
@ -502,7 +504,7 @@ main(int argc, char *argv[])
flags = RDP_LOGON_NORMAL; flags = RDP_LOGON_NORMAL;
prompt_password = False; prompt_password = False;
domain[0] = password[0] = shell[0] = directory[0] = 0; g_seamless_spawn_cmd[0] = domain[0] = password[0] = shell[0] = directory[0] = 0;
g_embed_wnd = 0; g_embed_wnd = 0;
g_num_devices = 0; g_num_devices = 0;
@ -514,7 +516,7 @@ main(int argc, char *argv[])
#endif #endif
while ((c = getopt(argc, argv, while ((c = getopt(argc, argv,
VNCOPT "Au:L:d:s:c:p:n:k:g:fbBeEitmzCDKS:T:NX:a:x:Pr:045h?")) != -1) VNCOPT "A:u:L:d:s:c:p:n:k:g:fbBeEitmzCDKS:T:NX:a:x:Pr:045h?")) != -1)
{ {
switch (c) switch (c)
{ {
@ -534,6 +536,7 @@ main(int argc, char *argv[])
case 'A': case 'A':
g_seamless_rdp = True; g_seamless_rdp = True;
STRNCPY(g_seamless_shell, optarg, sizeof(g_seamless_shell));
break; break;
case 'u': case 'u':
@ -877,6 +880,11 @@ main(int argc, char *argv[])
if (g_seamless_rdp) if (g_seamless_rdp)
{ {
if (shell[0])
STRNCPY(g_seamless_spawn_cmd, shell, sizeof(g_seamless_spawn_cmd));
STRNCPY(shell, g_seamless_shell, sizeof(shell));
if (g_win_button_size) if (g_win_button_size)
{ {
error("You cannot use -S and -A at the same time\n"); error("You cannot use -S and -A at the same time\n");
@ -998,7 +1006,11 @@ main(int argc, char *argv[])
fprintf(stdout, fprintf(stdout,
"rdesktop in slave mode sending command to master process.\n"); "rdesktop in slave mode sending command to master process.\n");
return ctrl_send_command("seamless.spawn", shell); if (g_seamless_spawn_cmd[0])
return ctrl_send_command("seamless.spawn", g_seamless_spawn_cmd);
fprintf(stdout, "No command specified to be spawn in seamless mode.\n");
return EX_USAGE;
} }
} }

4
xwin.c
View File

@ -46,6 +46,7 @@ extern RD_BOOL g_grab_keyboard;
extern RD_BOOL g_hide_decorations; extern RD_BOOL g_hide_decorations;
extern RD_BOOL g_pending_resize; extern RD_BOOL g_pending_resize;
extern char g_title[]; extern char g_title[];
extern char g_seamless_spawn_cmd[];
/* Color depth of the RDP session. /* Color depth of the RDP session.
As of RDP 5.1, it may be 8, 15, 16 or 24. */ As of RDP 5.1, it may be 8, 15, 16 or 24. */
extern int g_server_depth; extern int g_server_depth;
@ -3805,6 +3806,9 @@ ui_seamless_begin(RD_BOOL hidden)
if (!hidden) if (!hidden)
ui_seamless_toggle(); ui_seamless_toggle();
if (g_seamless_spawn_cmd[0])
seamless_send_spawn(g_seamless_spawn_cmd);
} }