On Sat, Feb 18, 2017 at 12:22:34PM +0900, Takao Fujiwara wrote:
> Enables that client application sends its screen number to XIM server.
> In ZaphodHeads environment, XIM server needs to know the screen
> number to launch the lookup window in the right screen.
> I think this way keeps the back compatibility.


for the archives, Takao and I worked on this on IRC last week:
this patch isn't generic enough to really handle all possible use-cases (and
thus justify a protocol change) but it looks like it's not needed anyway.
XIM server and client communicate using a Window, based on that the XIM
server can get the screen the client is on, there's no need for an extra
channel here.

Cheers,
   Peter

> 
> Signed-off-by: Takao Fujiwara <[email protected]>
> ---
>  modules/im/ximcp/imDefIm.c | 32 ++++++++++++++++++++++++++++++++
>  src/xlibi18n/XimProto.h    |  2 +-
>  2 files changed, 33 insertions(+), 1 deletion(-)
> 
> diff --git a/modules/im/ximcp/imDefIm.c b/modules/im/ximcp/imDefIm.c
> index 9e877c0..d0b8368 100644
> --- a/modules/im/ximcp/imDefIm.c
> +++ b/modules/im/ximcp/imDefIm.c
> @@ -794,6 +794,35 @@ _XimOpenCheck(
>      return False;
>  }
>  
> +static INT16
> +_XimSetDisplayNumber(
> +    Xim               im,
> +    CARD8            *buf_b,
> +    INT16             len)
> +{
> +    const char *display_string =  DisplayString(im->core.display);
> +    buf_b[len] = 0;
> +    buf_b[len+1] = 0;
> +
> +    if (display_string && (display_string = strchr(display_string, ':')) != 
> NULL) {
> +     display_string++;
> +     if (*display_string != '\0') {
> +         int number = atoi(display_string);
> +         buf_b[len] = (number < 0) ? 0 : (number % 256);
> +         display_string++;
> +         if ((display_string = strchr(display_string, '.')) != NULL) {
> +             display_string++;
> +             if (*display_string != '\0') {
> +                 number = atoi(display_string);
> +                 buf_b[len+1] = (number < 0) ? 0 : (number % 256);
> +             }
> +         }
> +     }
> +    }
> +
> +    return sizeof(CARD8) * 2;
> +}
> +
>  static Bool
>  _XimOpen(
>      Xim                       im)
> @@ -803,6 +832,7 @@ _XimOpen(
>      CARD8            *buf_b = &buf[XIM_HEADER_SIZE];
>      CARD16           *buf_s;
>      INT16             len;
> +    INT16             version_len;
>      CARD32            reply32[BUFSIZE/4];
>      char             *reply = (char *)reply32;
>      XPointer          preply;
> @@ -816,6 +846,8 @@ _XimOpen(
>      (void)strcpy((char *)&buf_b[1], locale_name);  /* locale name */
>      len += sizeof(BYTE);                        /* sizeof length */
>      XIM_SET_PAD(buf_b, len);                    /* pad */
> +    version_len = _XimSetDisplayNumber(im, buf_b, len);
> +    len += (version_len + XIM_PAD(version_len));
>  
>      _XimSetHeader((XPointer)buf, XIM_OPEN, 0, &len);
>      if (!(_XimWrite(im, len, (XPointer)buf)))
> diff --git a/src/xlibi18n/XimProto.h b/src/xlibi18n/XimProto.h
> index 6b0096d..881f975 100644
> --- a/src/xlibi18n/XimProto.h
> +++ b/src/xlibi18n/XimProto.h
> @@ -47,7 +47,7 @@ PERFORMANCE OF THIS SOFTWARE.
>   * Xim implementation revision
>   */
>  #define PROTOCOLMAJORVERSION         1
> -#define PROTOCOLMINORVERSION         0
> +#define PROTOCOLMINORVERSION         1
>  
>  /*
>   * Major Protocol number
> -- 
> 70DC79EC
> 
> _______________________________________________
> [email protected]: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
> 
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to