File freerdp_branch-1.0.x_extend-geom-argument-with-position.patch of Package freerdp1
From: Hans-Peter Jansen <hpj@urpla.net>
Subject: accommodate position in geometry argument
This patch extends the geometry argument (-g) for an optional position,
in the same way, as it is usually given a X -geometry option:
WidthxHeight+X+Y
This is useful to handle complex setups, when a fixed desktop location
is needed.
Signed-off-by: Hans-Peter Jansen <hpj@urpla.net>
Index: b/client/X11/xf_window.c
===================================================================
--- a/client/X11/xf_window.c
+++ b/client/X11/xf_window.c
@@ -323,6 +323,10 @@ xfWindow* xf_CreateDesktopWindow(xfInfo*
XMaskEvent(xfi->display, VisibilityChangeMask, &xevent);
}
while (xevent.type != VisibilityNotify);
+
+ if (xfi->instance->settings->desktop_x_pos || xfi->instance->settings->desktop_y_pos)
+ XMoveWindow(xfi->display, window->handle, xfi->instance->settings->desktop_x_pos,
+ xfi->instance->settings->desktop_y_pos);
}
XStoreName(xfi->display, window->handle, name);
Index: b/include/freerdp/settings.h
===================================================================
--- a/include/freerdp/settings.h
+++ b/include/freerdp/settings.h
@@ -292,7 +292,9 @@ struct rdp_settings
char* window_title; /* 87 */
uint64 parent_window_xid; /* 88 */
char* wm_class; /* 89 */
- uint32 paddingD[112 - 90]; /* 90 */
+ uint32 desktop_x_pos; /* 90 */
+ uint32 desktop_y_pos; /* 91 */
+ uint32 paddingD[112 - 92]; /* 92 */
/* Internal Parameters */
char* home_path; /* 112 */
Index: b/libfreerdp-core/settings.c
===================================================================
--- a/libfreerdp-core/settings.c
+++ b/libfreerdp-core/settings.c
@@ -40,6 +40,8 @@ rdpSettings* settings_new(void* instance
{
settings->instance = instance;
+ settings->desktop_x_pos = 0;
+ settings->desktop_y_pos = 0;
settings->width = 1024;
settings->height = 768;
settings->workarea = false;
Index: b/libfreerdp-utils/args.c
===================================================================
--- a/libfreerdp-utils/args.c
+++ b/libfreerdp-utils/args.c
@@ -91,7 +91,7 @@ int freerdp_parse_args(rdpSettings* sett
" -T: window title\n"
" -d: domain\n"
" -f: fullscreen mode\n"
- " -g: set geometry, using format WxH or X%% or 'workarea', default is 1024x768\n"
+ " -g: set geometry, using format WxH[+X+Y] or X%% or 'workarea', default is 1024x768\n"
" -h: print this help\n"
" -k: set keyboard layout ID\n"
" -K: do not interfere with window manager bindings (don't grab keyboard)\n"
@@ -226,6 +226,23 @@ int freerdp_parse_args(rdpSettings* sett
if (*p == 'x')
{
settings->height = (uint16) strtol(p + 1, &p, 10);
+ if (*p == '+')
+ {
+ settings->desktop_x_pos = (uint32) strtol(p + 1, &p, 10);
+ if (*p == '+')
+ settings->desktop_y_pos = (uint32) strtol(p + 1, &p, 10);
+ else
+ {
+ printf("missing +y value\n");
+ return FREERDP_ARGS_PARSE_FAILURE;
+
+ }
+ }
+ else if (*p != '\0')
+ {
+ printf("invalid geometry value: %s\n", argv[index]);
+ return FREERDP_ARGS_PARSE_FAILURE;
+ }
}
if (*p == '%')
{
Index: b/client/X11/xfreerdp.1.xml
===================================================================
--- a/client/X11/xfreerdp.1.xml
+++ b/client/X11/xfreerdp.1.xml
@@ -108,9 +108,12 @@
<itemizedlist>
<listitem>
<para>
- <replaceable class="parameter">W</replaceable>x<replaceable class="parameter">H</replaceable> -
+ <replaceable class="parameter">W</replaceable>x<replaceable class="parameter">H</replaceable>[+<replaceable
+ class="parameter">X</replaceable>+<replaceable class="parameter">Y</replaceable>] -
in this case the resulting window will be of
- <replaceable class="parameter">W</replaceable>x<replaceable class="parameter">H</replaceable> pixels.
+ <replaceable class="parameter">W</replaceable>x<replaceable class="parameter">H</replaceable> pixels
+ with optional location at +<replaceable class="parameter">X</replaceable>+<replaceable
+ class="parameter">Y</replaceable>.
</para>
</listitem>
<listitem>