Stefan Dirsch
e4bc356daa
Backport upstream patches to enable Xephyr window placement via new "-output" option or new "-screen WxH+X+Y" syntax. OBS-URL: https://build.opensuse.org/request/show/253132 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=545
109 lines
3.7 KiB
Diff
109 lines
3.7 KiB
Diff
From 376f4de8ae927748417046390c24afbda24b0583 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?La=C3=A9rcio=20de=20Sousa?=
|
|
<laerciosousa@sme-mogidascruzes.sp.gov.br>
|
|
Date: Mon, 18 Aug 2014 08:45:41 -0300
|
|
Subject: kdrive: add support to +X+Y syntax in -screen option parsing
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
This patch enhances current -screen option parsing for kdrive-based
|
|
applications. It can parse strings like
|
|
<WIDTH>x<HEIGHT>+<XOFFSET>+<YOFFSET>, storing X and Y offsets
|
|
in KdScreenInfo instances.
|
|
|
|
For negative values, this patch supports +-X+-Y (not -X-Y) syntax.
|
|
|
|
It will allow e.g. proper Xephyr window placement for multiseat
|
|
purposes.
|
|
|
|
Signed-off-by: Laércio de Sousa <laerciosousa@sme-mogidascruzes.sp.gov.br>
|
|
Reviewed-by: Keith Packard <keithp@keithp.com>
|
|
Signed-off-by: Keith Packard <keithp@keithp.com>
|
|
|
|
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
|
|
index b5b91c0..5dbff3f 100644
|
|
--- a/hw/kdrive/src/kdrive.c
|
|
+++ b/hw/kdrive/src/kdrive.c
|
|
@@ -300,6 +300,8 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
|
|
screen->softCursor = kdSoftCursor;
|
|
screen->origin = kdOrigin;
|
|
screen->randr = RR_Rotate_0;
|
|
+ screen->x = 0;
|
|
+ screen->y = 0;
|
|
screen->width = 0;
|
|
screen->height = 0;
|
|
screen->width_mm = 0;
|
|
@@ -313,7 +315,7 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
|
|
return;
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
- arg = KdParseFindNext(arg, "x/@XY", save, &delim);
|
|
+ arg = KdParseFindNext(arg, "x/+@XY", save, &delim);
|
|
if (!save[0])
|
|
return;
|
|
|
|
@@ -321,7 +323,7 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
|
|
mm = 0;
|
|
|
|
if (delim == '/') {
|
|
- arg = KdParseFindNext(arg, "x@XY", save, &delim);
|
|
+ arg = KdParseFindNext(arg, "x+@XY", save, &delim);
|
|
if (!save[0])
|
|
return;
|
|
mm = atoi(save);
|
|
@@ -335,7 +337,8 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
|
|
screen->height = pixels;
|
|
screen->height_mm = mm;
|
|
}
|
|
- if (delim != 'x' && delim != '@' && delim != 'X' && delim != 'Y' &&
|
|
+ if (delim != 'x' && delim != '+' && delim != '@' &&
|
|
+ delim != 'X' && delim != 'Y' &&
|
|
(delim != '\0' || i == 0))
|
|
return;
|
|
}
|
|
@@ -346,6 +349,18 @@ KdParseScreen(KdScreenInfo * screen, const char *arg)
|
|
kdSoftCursor = FALSE;
|
|
kdSubpixelOrder = SubPixelUnknown;
|
|
|
|
+ if (delim == '+') {
|
|
+ arg = KdParseFindNext(arg, "+@xXY", save, &delim);
|
|
+ if (save[0])
|
|
+ screen->x = atoi(save);
|
|
+ }
|
|
+
|
|
+ if (delim == '+') {
|
|
+ arg = KdParseFindNext(arg, "@xXY", save, &delim);
|
|
+ if (save[0])
|
|
+ screen->y = atoi(save);
|
|
+ }
|
|
+
|
|
if (delim == '@') {
|
|
arg = KdParseFindNext(arg, "xXY", save, &delim);
|
|
if (save[0]) {
|
|
@@ -425,7 +440,7 @@ KdUseMsg(void)
|
|
{
|
|
ErrorF("\nTinyX Device Dependent Usage:\n");
|
|
ErrorF
|
|
- ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][@ROTATION][X][Y][xDEPTH/BPP[xFREQ]] Specify screen characteristics\n");
|
|
+ ("-screen WIDTH[/WIDTHMM]xHEIGHT[/HEIGHTMM][+[-]XOFFSET][+[-]YOFFSET][@ROTATION][X][Y][xDEPTH/BPP[xFREQ]] Specify screen characteristics\n");
|
|
ErrorF
|
|
("-rgba rgb/bgr/vrgb/vbgr/none Specify subpixel ordering for LCD panels\n");
|
|
ErrorF
|
|
diff --git a/hw/kdrive/src/kdrive.h b/hw/kdrive/src/kdrive.h
|
|
index 08b1681..066a134 100644
|
|
--- a/hw/kdrive/src/kdrive.h
|
|
+++ b/hw/kdrive/src/kdrive.h
|
|
@@ -89,6 +89,8 @@ typedef struct _KdScreenInfo {
|
|
ScreenPtr pScreen;
|
|
void *driver;
|
|
Rotation randr; /* rotation and reflection */
|
|
+ int x;
|
|
+ int y;
|
|
int width;
|
|
int height;
|
|
int rate;
|
|
--
|
|
cgit v0.10.2
|
|
|