I could see pushing this one.

Jay
diff --git a/X11/xf_types.h b/X11/xf_types.h
index 5deb76b..0d355e2 100644
--- a/X11/xf_types.h
+++ b/X11/xf_types.h
@@ -49,6 +49,7 @@ struct xf_info
 
 	/* UI settings */
 	int fullscreen;
+	int percentscreen;
 	int fs_toggle;
 	int keyboard_layout_id;
 	int decoration;
diff --git a/X11/xf_win.c b/X11/xf_win.c
index b3e3d49..1666437 100644
--- a/X11/xf_win.c
+++ b/X11/xf_win.c
@@ -998,6 +998,8 @@ xf_get_pixmap_info(xfInfo * xfi)
 int
 xf_pre_connect(xfInfo * xfi)
 {
+	int i1;
+
 	xf_assign_callbacks(xfi->inst);
 	xfi->display = XOpenDisplay(NULL);
 	if (xfi->display == NULL)
@@ -1011,13 +1013,27 @@ xf_pre_connect(xfInfo * xfi)
 	xfi->depth = DefaultDepthOfScreen(xfi->screen);
 	xfi->xserver_be = (ImageByteOrder(xfi->display) == MSBFirst);
 	xf_kb_inst_init(xfi);
-
+	if (xfi->percentscreen > 0)
+	{
+		i1 = (WidthOfScreen(xfi->screen) * xfi->percentscreen) / 100;
+		xfi->settings->width = i1;
+		i1 = (HeightOfScreen(xfi->screen) * xfi->percentscreen) / 100;
+		xfi->settings->height = i1;
+	}
 	if (xfi->fullscreen)
 	{
 		xfi->settings->width = WidthOfScreen(xfi->screen);
 		xfi->settings->height = HeightOfScreen(xfi->screen);
 	}
-
+	i1 = xfi->settings->width;
+	i1 = (i1 + 3) & (~3);
+	xfi->settings->width = i1;
+	if ((xfi->settings->width < 64) || (xfi->settings->height < 64) ||
+		(xfi->settings->width > 4096) || (xfi->settings->height > 4096))
+	{
+		printf("xf_init: invalid dimensions %d %d\n", xfi->settings->width, xfi->settings->height);
+		return 1;
+	}
 	return 0;
 }
 
diff --git a/X11/xfreerdp.c b/X11/xfreerdp.c
index 4ce2a9b..39133a7 100644
--- a/X11/xfreerdp.c
+++ b/X11/xfreerdp.c
@@ -94,7 +94,7 @@ out_args(void)
 		"\t--kbd-list: list all keyboard layout IDs\n"
 		"\t-s: shell\n"
 		"\t-c: directory\n"
-		"\t-g: geometry, using format WxH, default is 1024x768\n"
+		"\t-g: geometry, using format WxH or X%, default is 1024x768\n"
 		"\t-t: alternative port number, default is 3389\n"
 		"\t-n: hostname\n"
 		"\t-o: console audio\n"
@@ -269,11 +269,9 @@ process_params(xfInfo * xfi, int argc, char ** argv, int * pindex)
 			{
 				settings->height = strtol(p + 1, &p, 10);
 			}
-			if ((settings->width < 16) || (settings->height < 16) ||
-				(settings->width > 4096) || (settings->height > 4096))
+			if (*p == '%')
 			{
-				printf("invalid dimensions\n");
-				return 1;
+				xfi->percentscreen = settings->width;
 			}
 		}
 		else if (strcmp("-t", argv[*pindex]) == 0)
------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Freerdp-devel mailing list
Freerdp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freerdp-devel

Reply via email to