summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-09-28 14:18:45 +1000
committerKeith Packard <keithp@keithp.com>2009-10-11 21:21:42 -0700
commit7f2f71da5125ae01a8279a4886090a711100d671 (patch)
treee6e89932474c2282f600da0a34091fb710f1d6ed
parentc07b2368a7dedb66455eea313c06859afa2e1a9c (diff)
ephyr: if -parent is given, check for a trailing -screen. (#24144)
If -parent is given, don't open up a new window if -screen is given as well. The commandline option -screen allows to set the depth of the embedded Xephry instance, even though width and height are autoscaled on -parent. This patch checks for a -screen parameter after -parent and - if one is found - delays initializing the screen. The parent window id is stored temporarily but re-set after a -screen argument. The following command is thus valid: Xephyr -parent 1234 -screen 640x480@8 -screen 1024x768 It embeds the first 8-bit screen into window 1234 and opens up a new window for the second screen. Multiple parent arguments are possible, the screens are embedded in-order. X.Org Bug 24144 <http://bugs.freedesktop.org/show_bug.cgi?id=24144> Tested-by: Vic Lee Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 19be992d9dc542b61fa3f4fd32a09071c9e64880) Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--hw/kdrive/ephyr/Xephyr.man.pre5
-rw-r--r--hw/kdrive/ephyr/ephyrinit.c16
2 files changed, 20 insertions, 1 deletions
diff --git a/hw/kdrive/ephyr/Xephyr.man.pre b/hw/kdrive/ephyr/Xephyr.man.pre
index 7f0e811a2..34a2971b2 100644
--- a/hw/kdrive/ephyr/Xephyr.man.pre
+++ b/hw/kdrive/ephyr/Xephyr.man.pre
@@ -46,6 +46,11 @@ sets the screen size.
.BI -parent " id"
uses exiting window
.I id .
+If a
+.BI -screen
+argument follows a
+.BI -parent
+argument, this screen is embedded into the given window.
.TP 8
.B -host-cursor
set 'cursor acceleration':
diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c
index 1399d7aaa..d20f9b662 100644
--- a/hw/kdrive/ephyr/ephyrinit.c
+++ b/hw/kdrive/ephyr/ephyrinit.c
@@ -147,6 +147,7 @@ processScreenArg (char *screen_size, char *parent_id)
int
ddxProcessArgument (int argc, char **argv, int i)
{
+ static char* parent = NULL;
EPHYR_DBG("mark argv[%d]='%s'", i, argv[i] );
if (i == 1)
@@ -158,6 +159,18 @@ ddxProcessArgument (int argc, char **argv, int i)
{
if(i+1 < argc)
{
+ int j;
+ /* If parent is specified and a screen argument follows, don't do
+ * anything, let the -screen handling init the rest */
+ for (j = i; j < argc; j++)
+ {
+ if (!strcmp(argv[j], "-screen"))
+ {
+ parent = argv[i + 1];
+ return 2;
+ }
+ }
+
processScreenArg ("100x100", argv[i+1]);
return 2;
}
@@ -169,7 +182,8 @@ ddxProcessArgument (int argc, char **argv, int i)
{
if ((i+1) < argc)
{
- processScreenArg (argv[i+1], NULL);
+ processScreenArg (argv[i+1], parent);
+ parent = NULL;
return 2;
}