[Vm-dev] [commit][3724] Add realWindowHandle() macro to conform
to image convention of treating window handle 1 as a reference
to the main display window .
Eliot Miranda
eliot.miranda at gmail.com
Fri May 20 23:59:42 UTC 2016
Thanks David!
_,,,^..^,,,_ (phone)
> On May 20, 2016, at 4:36 PM, commits at squeakvm.org wrote:
>
>
> Revision: 3724
> Author: lewis
> Date: 2016-05-20 16:36:03 -0700 (Fri, 20 May 2016)
> Log Message:
> -----------
> Add realWindowHandle() macro to conform to image convention of treating window handle 1 as a reference to the main display window. Note: For X11, handles for HostWindowPlugin are currently *Window, but a handle registry could be added such that the handles are 1, 2, 3, ... as per original design intent. This would eliminate the need for special handling of handle 1.
>
> Reformat additions to conform with README.Contributing guidelines (matches update r3723).
>
> Modified Paths:
> --------------
> branches/Cog/platforms/unix/vm-display-X11/sqUnixX11.c
>
> Modified: branches/Cog/platforms/unix/vm-display-X11/sqUnixX11.c
> ===================================================================
> --- branches/Cog/platforms/unix/vm-display-X11/sqUnixX11.c 2016-05-18 01:20:49 UTC (rev 3723)
> +++ branches/Cog/platforms/unix/vm-display-X11/sqUnixX11.c 2016-05-20 23:36:03 UTC (rev 3724)
> @@ -7048,14 +7048,18 @@
> int affectedL, int affectedR, int affectedT, int affectedB, int windowIndex)
> { return 0; }
>
> -#define isWindowHandle(winIdx) ((winIdx) >= 65536)
> +/* By convention for HostWindowPlugin, handle 1 refers to the display window */
> +#define realWindowHandle(handleFromImage) (handleFromImage == 1 ? stParent : handleFromImage)
>
> +/* Window struct addresses are not small integers */
> +#define isWindowHandle(winIdx) ((realWindowHandle(winIdx)) >= 65536)
> +
> static long display_ioSizeOfNativeWindow(void *windowHandle);
> static long display_hostWindowGetSize(long windowIndex)
> {
> - return isWindowHandle(windowIndex)
> - ? display_ioSizeOfNativeWindow((void *)windowIndex)
> - : -1;
> + return isWindowHandle(windowIndex)
> + ? display_ioSizeOfNativeWindow((void *)realWindowHandle(windowIndex))
> + : -1;
> }
>
> /* ioSizeOfWindowSetxy: args are int windowIndex, int w & h for the
> @@ -7063,31 +7067,31 @@
> * produced in (width<<16 | height) format or -1 for failure as above. */
> static long display_hostWindowSetSize(long windowIndex, long w, long h)
> {
> - XWindowAttributes attrs;
> - int real_border_width;
> + XWindowAttributes attrs;
> + int real_border_width;
>
> - if (!isWindowHandle(windowIndex)
> - || !XGetWindowAttributes(stDisplay, (Window)windowIndex, &attrs))
> - return -1;
> + if (!isWindowHandle(windowIndex)
> + || !XGetWindowAttributes(stDisplay, (Window)realWindowHandle(windowIndex), &attrs))
> + return -1;
>
> - /* At least under Gnome a window's border width in its attributes is zero
> - * but the relative position of the left-hand edge is the actual border
> - * width.
> - */
> - real_border_width = attrs.border_width ? attrs.border_width : attrs.x;
> - return XResizeWindow(stDisplay, (Window)windowIndex,
> - w - 2 * real_border_width,
> - h - attrs.y - real_border_width)
> - ? display_ioSizeOfNativeWindow((void *)windowIndex)
> - : -1;
> + /* At least under Gnome a window's border width in its attributes is zero
> + * but the relative position of the left-hand edge is the actual border
> + * width.
> + */
> + real_border_width= attrs.border_width ? attrs.border_width : attrs.x;
> + return XResizeWindow(stDisplay, (Window)realWindowHandle(windowIndex),
> + w - 2 * real_border_width,
> + h - attrs.y - real_border_width)
> + ? display_ioSizeOfNativeWindow((void *)realWindowHandle(windowIndex))
> + : -1;
> }
>
> static long display_ioPositionOfNativeWindow(void *windowHandle);
> static long display_hostWindowGetPosition(long windowIndex)
> {
> - return isWindowHandle(windowIndex)
> - ? display_ioPositionOfNativeWindow((void *)windowIndex)
> - : -1;
> + return isWindowHandle(windowIndex)
> + ? display_ioPositionOfNativeWindow((void *)realWindowHandle(windowIndex))
> + : -1;
> }
>
> /* ioPositionOfWindowSetxy: args are int windowIndex, int x & y for the
> @@ -7095,11 +7099,11 @@
> * produced in (left<<16 | top) format or -1 for failure, as above */
> static long display_hostWindowSetPosition(long windowIndex, long x, long y)
> {
> - if (!isWindowHandle(windowIndex))
> - return -1;
> - return XMoveWindow(stDisplay, (Window)windowIndex, x, y)
> - ? display_ioPositionOfNativeWindow((void *)windowIndex)
> - : -1;
> + if (!isWindowHandle(windowIndex))
> + return -1;
> + return XMoveWindow(stDisplay, (Window)realWindowHandle(windowIndex), x, y)
> + ? display_ioPositionOfNativeWindow((void *)windowIndex)
> + : -1;
> }
>
>
> @@ -7116,6 +7120,38 @@
> return 0;
> }
>
> +static long display_ioSizeOfNativeWindow(void *windowHandle)
> +{
> + XWindowAttributes attrs;
> + int real_border_width;
> +
> + if (!XGetWindowAttributes(stDisplay, (Window)windowHandle, &attrs))
> + return -1;
> +
> + /* At least under Gnome a window's border width in its attributes is zero
> + * but the relative position of the left-hand edge is the actual border
> + * width.
> + */
> + real_border_width= attrs.border_width ? attrs.border_width : attrs.x;
> + return (attrs.width + 2 * real_border_width << 16)
> + | (attrs.height + attrs.y + real_border_width);
> +}
> +
> +static long display_ioPositionOfNativeWindow(void *windowHandle)
> +{
> + XWindowAttributes attrs;
> + Window neglected_child;
> + int rootx, rooty;
> +
> + if (!XGetWindowAttributes(stDisplay, (Window)windowHandle, &attrs)
> + || !XTranslateCoordinates(stDisplay, (Window)windowHandle, attrs.root,
> + -attrs.border_width, -attrs.border_width,
> + &rootx, &rooty, &neglected_child))
> + return -1;
> +
> + return (rootx - attrs.x << 16) | (rooty - attrs.y);
> +}
> +
> #endif /* (SqDisplayVersionMajor >= 1 && SqDisplayVersionMinor >= 2) */
>
>
> @@ -7252,39 +7288,6 @@
> return (attrs.width << 16) | attrs.height;
> }
>
> -static long
> -display_ioPositionOfNativeWindow(void *windowHandle)
> -{
> - XWindowAttributes attrs;
> - Window neglected_child;
> - int rootx, rooty;
> -
> - if (!XGetWindowAttributes(stDisplay, (Window)windowHandle, &attrs)
> - || !XTranslateCoordinates(stDisplay, (Window)windowHandle, attrs.root,
> - -attrs.border_width, -attrs.border_width,
> - &rootx, &rooty, &neglected_child))
> - return -1;
> -
> - return (rootx - attrs.x << 16) | (rooty - attrs.y);
> -}
> -
> -static long
> -display_ioSizeOfNativeWindow(void *windowHandle)
> -{
> - XWindowAttributes attrs;
> - int real_border_width;
> -
> - if (!XGetWindowAttributes(stDisplay, (Window)windowHandle, &attrs))
> - return -1;
> -
> - /* At least under Gnome a window's border width in its attributes is zero
> - * but the relative position of the left-hand edge is the actual border
> - * width.
> - */
> - real_border_width = attrs.border_width ? attrs.border_width : attrs.x;
> - return (attrs.width + 2 * real_border_width << 16)
> - | (attrs.height + attrs.y + real_border_width);
> -}
> #endif /* SqDisplayVersionMajor >= 1 && SqDisplayVersionMinor >= 3 */
>
>
>
More information about the Vm-dev
mailing list