[PATCH v4 RESEND SIGNED 1/3] kdrive: add support to +X+Y syntax in -screen option parsing

walter harms wharms at bfs.de
Mon Aug 18 04:56:40 PDT 2014


Nice add-on

general question:
but is there any documentation that should be fix also ?

re,
 wh

Am 18.08.2014 13:45, schrieb Laércio de Sousa:
> 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 at sme-mogidascruzes.sp.gov.br>
> ---
>  hw/kdrive/src/kdrive.c | 23 +++++++++++++++++++----
>  hw/kdrive/src/kdrive.h |  2 ++
>  2 files changed, 21 insertions(+), 4 deletions(-)
> 
> 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/+ at 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 at XY", save, &delim);
> +            arg = KdParseFindNext(arg, "x+ at 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, "+ at 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;


More information about the xorg-devel mailing list