#DOCUMENTATION by stefan
authorStefan Vogel <sv@exept.de>
Wed, 26 Jun 2019 13:48:48 +0200
changeset 8707 fa5848c2b56c
parent 8706 92fd4a337e50
child 8708 b637a45bb4d1
#DOCUMENTATION by stefan class: WinWorkstation class definition Fix typo in error message
WinWorkstation.st
--- a/WinWorkstation.st	Sat Jun 22 15:09:12 2019 +0200
+++ b/WinWorkstation.st	Wed Jun 26 13:48:48 2019 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
 COPYRIGHT (c) 1996 by Claus Gittinger
 	      All Rights Reserved
@@ -1190,82 +1188,82 @@
 #ifdef DEBUGMASK
 static void
 printMask(int mask) {
-	if (mask & KeyPressMask)        console_printf("KeyPressMask\n");
-	if (mask & KeyReleaseMask)      console_printf("KeyReleaseMask\n");
-	if (mask & ButtonPressMask)     console_printf("ButtonPressMask\n");
-	if (mask & ButtonReleaseMask)   console_printf("ButtonReleaseMask\n");
-	if (mask & ButtonMotionMask)    console_printf("ButtonMotionMask\n");
-	if (mask & PointerMotionMask)   console_printf("PointerMotionMask\n");
-	if (mask & ExposureMask)        console_printf("ExposureMask\n");
-	if (mask & FocusChangeMask)     console_printf("FocusChangeMask\n");
-	if (mask & EnterWindowMask)     console_printf("EnterWindowMask\n");
-	if (mask & LeaveWindowMask)     console_printf("LeaveWindowMask\n");
-	if (mask & KeymapStateMask)     console_printf("KeymapStateMask\n");
-	if (mask & VisibilityChangeMask)console_printf("VisibilityChangeMask\n");
-	if (mask & StructureNotifyMask) console_printf("StructureNotifyMask\n");
-	if (mask & ResizeRedirectMask)  console_printf("ResizeRedirectMask\n");
-	if (mask & PropertyChangeMask)  console_printf("PropertyChangeMask\n");
-	if (mask & ColormapChangeMask)  console_printf("ColormapChangeMask\n");
+        if (mask & KeyPressMask)        console_printf("KeyPressMask\n");
+        if (mask & KeyReleaseMask)      console_printf("KeyReleaseMask\n");
+        if (mask & ButtonPressMask)     console_printf("ButtonPressMask\n");
+        if (mask & ButtonReleaseMask)   console_printf("ButtonReleaseMask\n");
+        if (mask & ButtonMotionMask)    console_printf("ButtonMotionMask\n");
+        if (mask & PointerMotionMask)   console_printf("PointerMotionMask\n");
+        if (mask & ExposureMask)        console_printf("ExposureMask\n");
+        if (mask & FocusChangeMask)     console_printf("FocusChangeMask\n");
+        if (mask & EnterWindowMask)     console_printf("EnterWindowMask\n");
+        if (mask & LeaveWindowMask)     console_printf("LeaveWindowMask\n");
+        if (mask & KeymapStateMask)     console_printf("KeymapStateMask\n");
+        if (mask & VisibilityChangeMask)console_printf("VisibilityChangeMask\n");
+        if (mask & StructureNotifyMask) console_printf("StructureNotifyMask\n");
+        if (mask & ResizeRedirectMask)  console_printf("ResizeRedirectMask\n");
+        if (mask & PropertyChangeMask)  console_printf("PropertyChangeMask\n");
+        if (mask & ColormapChangeMask)  console_printf("ColormapChangeMask\n");
 }
 #endif
 
 static int
 st2RGB(int color, struct gcData *gcData)
 {
-	if (gcData && gcData->bitmapColorBitCount == 1) {
-	    return (color ? WhitePixel : BlackPixel);
-	}
+        if (gcData && gcData->bitmapColorBitCount == 1) {
+            return (color ? WhitePixel : BlackPixel);
+        }
 #ifdef ALWAYSTRUECOLOR
-	return (color & 0xffffff);
-#else
-	if (__depth < 15) {
-	    return 0;
-	} else {
-	    if ((__depth == 16) || (__depth == 15)) {
-		int ib = (color & 0x1f) << 3;
-		int ig = ((color >> 5) & 0x3f) << 2;
-		int ir = ((color >> 11) & 0x1f) << 3;
-		ir |= 7;
-		ig |= 3;
-		ib |= 7;
-		return RGB(ir,ig,ib);
-	    }
-	    return (color & 0xffffff);
-	}
+        return (color & 0xffffff);
+#else
+        if (__depth < 15) {
+            return 0;
+        } else {
+            if ((__depth == 16) || (__depth == 15)) {
+                int ib = (color & 0x1f) << 3;
+                int ig = ((color >> 5) & 0x3f) << 2;
+                int ir = ((color >> 11) & 0x1f) << 3;
+                ir |= 7;
+                ig |= 3;
+                ib |= 7;
+                return RGB(ir,ig,ib);
+            }
+            return (color & 0xffffff);
+        }
 #endif
 }
 
 static int
 RGB2st(int r, int g, int b)
 {
-	int ir,ig,ib,id;
+        int ir,ig,ib,id;
 
 #ifdef ALWAYSTRUECOLOR
-	ir = (r >> 8) & 0xff;
-	ig = (g >> 8) & 0xff;
-	ib = (b >> 8) & 0xff;
-
-	id = RGB( ir, ig, ib);
-#else
-	if (__depth < 15) {
-	    id = 0;
-	} else {
-	    if ((__depth == 16) || (__depth == 15)) {
-		ir = (r >> 11) & 0x1f;
-		ig = (g >> 10) & 0x3f;
-		ib = (b >> 11) & 0x1f;
-
-		id = ( ir << 11 ) | ( ig << 5 ) | ib;
-	    } else {
-		ir = (r >> 8) & 0xff;
-		ig = (g >> 8) & 0xff;
-		ib = (b >> 8) & 0xff;
-
-		id = RGB( ir, ig, ib);
-	    }
-	}
-#endif
-	return id;
+        ir = (r >> 8) & 0xff;
+        ig = (g >> 8) & 0xff;
+        ib = (b >> 8) & 0xff;
+
+        id = RGB( ir, ig, ib);
+#else
+        if (__depth < 15) {
+            id = 0;
+        } else {
+            if ((__depth == 16) || (__depth == 15)) {
+                ir = (r >> 11) & 0x1f;
+                ig = (g >> 10) & 0x3f;
+                ib = (b >> 11) & 0x1f;
+
+                id = ( ir << 11 ) | ( ig << 5 ) | ib;
+            } else {
+                ir = (r >> 8) & 0xff;
+                ig = (g >> 8) & 0xff;
+                ib = (b >> 8) & 0xff;
+
+                id = RGB( ir, ig, ib);
+            }
+        }
+#endif
+        return id;
 }
 
 #if 0
@@ -1275,13 +1273,13 @@
 static HWND
 GetTopParent(HWND hwnd)
 {
-	HWND lastParent = hWnd;
-	HWND nextParent;
-
-	while (nextParent = GetParent(lastParent)) {
-	    lastParent = nextParent;
-	}
-	return lastParent;
+        HWND lastParent = hWnd;
+        HWND nextParent;
+
+        while (nextParent = GetParent(lastParent)) {
+            lastParent = nextParent;
+        }
+        return lastParent;
 }
 #endif
 
@@ -1293,7 +1291,7 @@
     int r = DeleteObject(o);
 
     if (r == 0)
-	console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeleteObject %x [%d]\n", o, lineNr);
+        console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeleteObject %x [%d]\n", o, lineNr);
     return r;
 }
 
@@ -1306,8 +1304,8 @@
 {
 #ifdef CACHE_LAST_TMP_FONT
     if (f == __tmpDC_hfont) {
-	SelectObject(__tmpDC, __tmpDC_prev_hfont);
-	__tmpDC_hfont = NULL;
+        SelectObject(__tmpDC, __tmpDC_prev_hfont);
+        __tmpDC_hfont = NULL;
     }
 #endif
     _DeleteObject(f, lineNr);
@@ -1317,11 +1315,11 @@
 _DeleteBrush(HBRUSH br, int lineNr)
 {
     if ((br != __whiteBrush) && (br != __blackBrush)) {
-	int r = DeleteObject(br);
-
-	if (r == 0)
-	    console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeleteBrush %x [%d]\n", br, lineNr);
-	return r;
+        int r = DeleteObject(br);
+
+        if (r == 0)
+            console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeleteBrush %x [%d]\n", br, lineNr);
+        return r;
     }
     return 1;
 }
@@ -1330,11 +1328,11 @@
 _DeletePen(HPEN p, int lineNr)
 {
     if ((p != __whitePen) && (p != __blackPen)) {
-	int r = DeleteObject(p);
-
-	if (r == 0)
-	    console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeletePen %x [%d]\n", p, lineNr);
-	return r;
+        int r = DeleteObject(p);
+
+        if (r == 0)
+            console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeletePen %x [%d]\n", p, lineNr);
+        return r;
     }
     return 1;
 }
@@ -1347,17 +1345,17 @@
     int i, r;
 
     if ((p == __whitePen) || (p == __blackPen)) {
-	return 1; /* not deleted, but OK */
+        return 1; /* not deleted, but OK */
     }
     for (i=0; i<NUM_PEN_CACHED;i++) {
-	if (__penCache[i].pen == p) {
-	    return 1; /* not deleted, but OK */
-	}
+        if (__penCache[i].pen == p) {
+            return 1; /* not deleted, but OK */
+        }
     }
     r = DeleteObject(p);
 
     if (r == 0)
-	console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeletePen2 %x [%d]\n", p, lineNr);
+        console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeletePen2 %x [%d]\n", p, lineNr);
     return r;
 }
 
@@ -1373,17 +1371,17 @@
     int i, r;
 
     for (i=0; i<NUM_BRUSH_CACHED;i++) {
-	if (__brushCache[i].brush == br) {
-	    return 1; /* not deleted, but OK */
-	}
+        if (__brushCache[i].brush == br) {
+            return 1; /* not deleted, but OK */
+        }
     }
     if ((br == __whiteBrush) || (br == __blackBrush)) {
-	return 1; /* not deleted, but OK */
+        return 1; /* not deleted, but OK */
     }
     r = DeleteObject(br);
 
     if (r == 0)
-	console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeleteBrush2 %x [%d]\n", br, lineNr);
+        console_fprintf(stderr, "WinWorkstation [warning]: ERROR in DeleteBrush2 %x [%d]\n", br, lineNr);
     return r;
 }
 
@@ -1397,15 +1395,15 @@
     struct gcData *gcData;
 
     if (gcDataFreeList) {
-	gcData = gcDataFreeList;
-	gcDataFreeList = gcData->u.__nextFree;
-	gcDataNumFree--;
-    } else {
-	gcData = (struct gcData *) malloc(sizeof(struct gcData));
-	if (! gcData) {
-	    console_fprintf(stderr, "WinWorkstat [warning]: failed to allocate gcData\n");
-	    return 0;
-	}
+        gcData = gcDataFreeList;
+        gcDataFreeList = gcData->u.__nextFree;
+        gcDataNumFree--;
+    } else {
+        gcData = (struct gcData *) malloc(sizeof(struct gcData));
+        if (! gcData) {
+            console_fprintf(stderr, "WinWorkstat [warning]: failed to allocate gcData\n");
+            return 0;
+        }
     }
 
     memset(gcData, 0, sizeof(struct gcData));
@@ -1426,18 +1424,18 @@
 freeGcData(struct gcData *gcData)
 {
     if (gcDataNumFree < NUM_FREE_GC) {
-	gcData->u.__nextFree = gcDataFreeList;
-	gcDataFreeList = gcData;
-	gcDataNumFree++;
-    } else {
-	free(gcData);
+        gcData->u.__nextFree = gcDataFreeList;
+        gcDataFreeList = gcData;
+        gcDataNumFree++;
+    } else {
+        free(gcData);
     }
 }
 
 #ifdef CACHE_LAST_DC
 # define FLUSH_CACHED_DC(__gcData__) \
     if (lastGcData == __gcData__) {  \
-	_releaseDC(lastGcData);      \
+        _releaseDC(lastGcData);      \
     }
 #else
 # define FLUSH_CACHED_DC(x)     /* */
@@ -1446,12 +1444,12 @@
 #ifdef CACHE_LAST_PEN
 # define FLUSH_CACHED_PEN(__gcData__) \
     if (__gcData__->hPen) {           \
-	if (__gcData__->save_hPen) {  \
-	    SelectObject(__gcData__->_hDC, __gcData__->save_hPen); \
-	    __gcData__->save_hPen = 0;   \
-	} \
-	_DeletePenIfNotInCache(__gcData__->hPen, __LINE__); \
-	__gcData__->hPen = 0; \
+        if (__gcData__->save_hPen) {  \
+            SelectObject(__gcData__->_hDC, __gcData__->save_hPen); \
+            __gcData__->save_hPen = 0;   \
+        } \
+        _DeletePenIfNotInCache(__gcData__->hPen, __LINE__); \
+        __gcData__->hPen = 0; \
     }
 #else
 # define FLUSH_CACHED_PEN(x)    /* */
@@ -1460,12 +1458,12 @@
 #ifdef CACHE_LAST_BRUSH
 # define FLUSH_CACHED_BRUSH(__gcData__) \
     if (__gcData__->hBrush) {           \
-	if (__gcData__->save_hBrush) {  \
-	    SelectObject(__gcData__->_hDC, __gcData__->save_hBrush); \
-	    __gcData__->save_hBrush = 0;   \
-	} \
-	_DeleteBrushIfNotInCache(__gcData__->hBrush, __LINE__); \
-	__gcData__->hBrush = 0; \
+        if (__gcData__->save_hBrush) {  \
+            SelectObject(__gcData__->_hDC, __gcData__->save_hBrush); \
+            __gcData__->save_hBrush = 0;   \
+        } \
+        _DeleteBrushIfNotInCache(__gcData__->hBrush, __LINE__); \
+        __gcData__->hBrush = 0; \
     }
 #else
 # define FLUSH_CACHED_BRUSH(x)    /* */
@@ -1477,55 +1475,55 @@
     HDC hDC = gcData->_hDC;
 
     if (gcData->doNotCacheOrRelease ) {
-	return;
+        return;
     }
 
     if (gcData->save_hPen) {
-	SelectObject(hDC, gcData->save_hPen);
-	gcData->save_hPen = 0;
+        SelectObject(hDC, gcData->save_hPen);
+        gcData->save_hPen = 0;
     }
     if (gcData->save_hBrush) {
-	SelectObject(hDC, gcData->save_hBrush);
-	gcData->save_hBrush = 0;
+        SelectObject(hDC, gcData->save_hBrush);
+        gcData->save_hBrush = 0;
     }
     if (gcData->save_hFont) {
-	SelectObject(hDC, gcData->save_hFont);
-	gcData->save_hFont = 0;
+        SelectObject(hDC, gcData->save_hFont);
+        gcData->save_hFont = 0;
     }
 
     if (gcData->hWnd) {
-	if (hDC) {
-	    ReleaseDC(gcData->hWnd, hDC);
+        if (hDC) {
+            ReleaseDC(gcData->hWnd, hDC);
 #ifdef CACHE_LAST_WM_PAINT_DC
-	    if (hDC == last_wm_paint_dc) {
-		last_wm_paint_dc = last_wm_paint_win = 0;
+            if (hDC == last_wm_paint_dc) {
+                last_wm_paint_dc = last_wm_paint_win = 0;
 # ifdef DEBUG_DC_REUSE
-		console_fprintf(stderr, "WinWorkstation [info]: Oops - releasing bg_paint-dc\n");
-# endif
-	    }
-#endif
-	}
+                console_fprintf(stderr, "WinWorkstation [info]: Oops - releasing bg_paint-dc\n");
+# endif
+            }
+#endif
+        }
     } else if (gcData->hBitmap) {
-	SelectObject(hDC, gcData->save_hBitmap);
-	DeleteDC(hDC);
+        SelectObject(hDC, gcData->save_hBitmap);
+        DeleteDC(hDC);
     }
     gcData->_hDC = 0;
 
 #ifdef CACHE_LAST_DC
     if (lastGcData == gcData) {
-	lastGcData = 0;
+        lastGcData = 0;
     }
 #endif
 #ifdef CACHE_LAST_PEN
     if (gcData->hPen) {
-	_DeletePenIfNotInCache(gcData->hPen, __LINE__);
-	gcData->hPen = 0;
+        _DeletePenIfNotInCache(gcData->hPen, __LINE__);
+        gcData->hPen = 0;
     }
 #endif
 #ifdef CACHE_LAST_BRUSH
     if (gcData->hBrush) {
-	_DeleteBrushIfNotInCache(gcData->hBrush, __LINE__);
-	gcData->hBrush = 0;
+        _DeleteBrushIfNotInCache(gcData->hBrush, __LINE__);
+        gcData->hBrush = 0;
     }
 #endif
 }
@@ -1537,82 +1535,82 @@
     int currThreadId;
 
     if (gcData->doNotCacheOrRelease ) {
-	return gcData->_hDC;
+        return gcData->_hDC;
     }
 
 #ifdef CACHE_LAST_DC
     currThreadId = GetCurrentThreadId();
 
     if (lastGcData) {
-	if ((lastGcData == gcData)
-	 && (lastGcHWIN == gcData->hWnd)
-	 && (lastGcHBITMAP == gcData->hBitmap)
-	 && (lastGcOwnerThreadID == currThreadId)
-	 && gcData->_hDC
-	) {
+        if ((lastGcData == gcData)
+         && (lastGcHWIN == gcData->hWnd)
+         && (lastGcHBITMAP == gcData->hBitmap)
+         && (lastGcOwnerThreadID == currThreadId)
+         && gcData->_hDC
+        ) {
 # ifdef CACHE_LAST_WM_PAINT_DC /* DDD */
-	    if (last_wm_paint_dc == gcData->_hDC) {
+            if (last_wm_paint_dc == gcData->_hDC) {
 #  ifdef DEBUG_DC_REUSE
-		console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc reuse [%d]\n", __LINE__);
+                console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc reuse [%d]\n", __LINE__);
 #  endif
-		last_wm_paint_dc = last_wm_paint_win = 0;
-	    }
-# endif
-	    return gcData->_hDC;
-	}
-
-	_releaseDC(lastGcData);
-	lastGcData = 0;
+                last_wm_paint_dc = last_wm_paint_win = 0;
+            }
+# endif
+            return gcData->_hDC;
+        }
+
+        _releaseDC(lastGcData);
+        lastGcData = 0;
     }
 #endif
 
     hDC = 0;
     if (gcData->hWnd != 0) {
-	if (gcData->hWnd == __rootWin) {
-	    hDC = gcData->_hDC = GetDCEx(gcData->hWnd, 0, DCX_WINDOW);
-	} else if (gcData->clipByChildren) {
-	    //gcData->_hDC = GetDCEx(gcData->hWnd, 0, DCX_CLIPCHILDREN);
-	    hDC = gcData->_hDC = GetDC(gcData->hWnd);
-	} else  {
-	    hDC = gcData->_hDC = GetDCEx(gcData->hWnd, 0, DCX_PARENTCLIP);
-	}
+        if (gcData->hWnd == __rootWin) {
+            hDC = gcData->_hDC = GetDCEx(gcData->hWnd, 0, DCX_WINDOW);
+        } else if (gcData->clipByChildren) {
+            //gcData->_hDC = GetDCEx(gcData->hWnd, 0, DCX_CLIPCHILDREN);
+            hDC = gcData->_hDC = GetDC(gcData->hWnd);
+        } else  {
+            hDC = gcData->_hDC = GetDCEx(gcData->hWnd, 0, DCX_PARENTCLIP);
+        }
     } else if (gcData->hBitmap) {
-	hDC = gcData->_hDC = CreateCompatibleDC(__tmpDC);
-	gcData->save_hBitmap = SelectObject(gcData->_hDC,gcData->hBitmap);
+        hDC = gcData->_hDC = CreateCompatibleDC(__tmpDC);
+        gcData->save_hBitmap = SelectObject(gcData->_hDC,gcData->hBitmap);
     }
     gcData->bkMode = BK_UNDEF;
 
     if (hDC) {
-	SetTextColor(hDC, gcData->fgColor);
-	SetBkColor(hDC, gcData->bgColor);
-
-	if (gcData->rop2)
-	    SetROP2(hDC, gcData->rop2);
-
-	if (gcData->clipping) {
-	    HRGN region = CreateRectRgn( gcData->clipX, gcData->clipY,
-					 gcData->clipX + gcData->clipW,
-					 gcData->clipY + gcData->clipH);
-	    if (region == NULL ) {
-		console_fprintf(stderr, "WinWorkstat [warning]: clipping region creation failed\n");
-	    } else {
-		if (SelectClipRgn(hDC, region) == ERROR ) {
-		    DPRINTF(("WinWorkstat [warning]: select clipping region failed\n" ));
-		}
-		_DeleteObject(region, __LINE__);
-	    }
-	} else {
-	    SelectClipRgn(hDC, NULL);
-	}
-
-	if (gcData->hFont) {
-	    HFONT prevFont;
-
-	    prevFont = SelectObject(hDC, gcData->hFont);
-	    if (! gcData->save_hFont) {
-		gcData->save_hFont = prevFont;
-	    }
-	}
+        SetTextColor(hDC, gcData->fgColor);
+        SetBkColor(hDC, gcData->bgColor);
+
+        if (gcData->rop2)
+            SetROP2(hDC, gcData->rop2);
+
+        if (gcData->clipping) {
+            HRGN region = CreateRectRgn( gcData->clipX, gcData->clipY,
+                                         gcData->clipX + gcData->clipW,
+                                         gcData->clipY + gcData->clipH);
+            if (region == NULL ) {
+                console_fprintf(stderr, "WinWorkstat [warning]: clipping region creation failed\n");
+            } else {
+                if (SelectClipRgn(hDC, region) == ERROR ) {
+                    DPRINTF(("WinWorkstat [warning]: select clipping region failed\n" ));
+                }
+                _DeleteObject(region, __LINE__);
+            }
+        } else {
+            SelectClipRgn(hDC, NULL);
+        }
+
+        if (gcData->hFont) {
+            HFONT prevFont;
+
+            prevFont = SelectObject(hDC, gcData->hFont);
+            if (! gcData->save_hFont) {
+                gcData->save_hFont = prevFont;
+            }
+        }
     }
 
 #ifdef CACHE_LAST_DC
@@ -1626,9 +1624,9 @@
 # ifdef CACHE_LAST_WM_PAINT_DC /* DDD */
     if (last_wm_paint_dc == hDC) {
 #  ifdef DEBUG_DC_REUSE
-	console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc reuse [%d]\n", __LINE__);
+        console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc reuse [%d]\n", __LINE__);
 #  endif
-	last_wm_paint_dc = last_wm_paint_win = 0;
+        last_wm_paint_dc = last_wm_paint_win = 0;
     }
 # endif
 #endif
@@ -1644,62 +1642,62 @@
 
 #ifdef CACHE_LAST_BRUSH
     if (hBrush = gcData->hBrush) {
-	if (! gcData->save_hBrush) {
-	    gcData->save_hBrush = SelectObject(gcData->_hDC, hBrush);
-	}
-	return hBrush;
+        if (! gcData->save_hBrush) {
+            gcData->save_hBrush = SelectObject(gcData->_hDC, hBrush);
+        }
+        return hBrush;
     }
 #endif
     if (gcData->hMask) {
-	hBrush = CreatePatternBrush(gcData->hMask);
-	SetBrushOrgEx(hDC, gcData->maskOrgX, gcData->maskOrgY, 0);
-	RESPRINTF(("CreatePatternBrush %x\n",gcData->hMask));
-    } else {
-	if (gcData->fgColor == BlackPixel) {
-	    hBrush = __blackBrush;
-	} else if (gcData->fgColor == WhitePixel) {
-	    hBrush = __whiteBrush;
-	} else {
+        hBrush = CreatePatternBrush(gcData->hMask);
+        SetBrushOrgEx(hDC, gcData->maskOrgX, gcData->maskOrgY, 0);
+        RESPRINTF(("CreatePatternBrush %x\n",gcData->hMask));
+    } else {
+        if (gcData->fgColor == BlackPixel) {
+            hBrush = __blackBrush;
+        } else if (gcData->fgColor == WhitePixel) {
+            hBrush = __whiteBrush;
+        } else {
 #ifdef CACHE_BRUSH
-	    {
-		int i;
-
-		for (i=0; i<NUM_BRUSH_CACHED; i++) {
-		    if (__brushCache[i].clr == gcData->fgColor) {
-			hBrush = __brushCache[i].brush;
-			/*
-			 * move it up in the cache
-			 */
-			if (i > 0) {
-			    HBRUSH t = __brushCache[i-1].brush;
-			    int c = __brushCache[i-1].clr;
-
-			    __brushCache[i-1].brush = hBrush;
-			    __brushCache[i-1].clr = gcData->fgColor;
-			    __brushCache[i].brush = t;
-			    __brushCache[i].clr = c;
-			}
+            {
+                int i;
+
+                for (i=0; i<NUM_BRUSH_CACHED; i++) {
+                    if (__brushCache[i].clr == gcData->fgColor) {
+                        hBrush = __brushCache[i].brush;
+                        /*
+                         * move it up in the cache
+                         */
+                        if (i > 0) {
+                            HBRUSH t = __brushCache[i-1].brush;
+                            int c = __brushCache[i-1].clr;
+
+                            __brushCache[i-1].brush = hBrush;
+                            __brushCache[i-1].clr = gcData->fgColor;
+                            __brushCache[i].brush = t;
+                            __brushCache[i].clr = c;
+                        }
 # ifdef CACHE_LAST_BRUSH
-			prevBrush = SelectObject(gcData->_hDC, hBrush);
-			if (! gcData->save_hBrush) {
-			    gcData->save_hBrush = prevBrush;
-			}
-			gcData->hBrush = hBrush;
-# endif
-			return hBrush;
-		    }
-		}
-	    }
+                        prevBrush = SelectObject(gcData->_hDC, hBrush);
+                        if (! gcData->save_hBrush) {
+                            gcData->save_hBrush = prevBrush;
+                        }
+                        gcData->hBrush = hBrush;
+# endif
+                        return hBrush;
+                    }
+                }
+            }
 #endif /* BRUSH_CACHE */
-	    hBrush = CreateSolidBrush(gcData->fgColor);
-	    RESPRINTF(("CreateSolidBrush %x\n",gcData->fgColor));
-	}
+            hBrush = CreateSolidBrush(gcData->fgColor);
+            RESPRINTF(("CreateSolidBrush %x\n",gcData->fgColor));
+        }
     }
     gcData->hBrush = hBrush;
 
     prevBrush = SelectObject(gcData->_hDC, hBrush);
     if (! gcData->save_hBrush) {
-	gcData->save_hBrush = prevBrush;
+        gcData->save_hBrush = prevBrush;
     }
     return hBrush;
 }
@@ -1713,8 +1711,8 @@
     HBRUSH hBrush = gcData->hBrush;
 
     if (gcData->save_hBrush) {
-	SelectObject(hDC, gcData->save_hBrush);
-	gcData->save_hBrush = NULL;
+        SelectObject(hDC, gcData->save_hBrush);
+        gcData->save_hBrush = NULL;
     }
     _DeleteBrushIfNotInCache(hBrush, __LINE__);
     gcData->hBrush = 0;
@@ -1731,69 +1729,69 @@
 
 #ifdef CACHE_LAST_PEN
     if (hPen = gcData->hPen) {
-	if (! gcData->save_hPen) {
-	    gcData->save_hPen = SelectObject(gcData->_hDC, hPen);
-	}
-	return hPen;
+        if (! gcData->save_hPen) {
+            gcData->save_hPen = SelectObject(gcData->_hDC, hPen);
+        }
+        return hPen;
     }
 #endif
 
     if (((gcData->lStyle & PS_STYLE_MASK) == PS_SOLID)
      && (gcData->hMask == 0)
      && (gcData->lineWidth <= 1)) {
-	if (gcData->fgColor == BlackPixel) {
-	    gcData->hPen = hPen = __blackPen;
-	    prevPen = SelectObject(hDC, hPen);
-	    if (! gcData->save_hPen) {
-		gcData->save_hPen = prevPen;
-	    }
-	    return hPen;
-	}
-	if (gcData->fgColor == WhitePixel) {
-	    gcData->hPen = hPen = __whitePen;
-	    prevPen = SelectObject(hDC, hPen);
-	    if (! gcData->save_hPen) {
-		gcData->save_hPen = prevPen;
-	    }
-	    return hPen;
-	}
+        if (gcData->fgColor == BlackPixel) {
+            gcData->hPen = hPen = __blackPen;
+            prevPen = SelectObject(hDC, hPen);
+            if (! gcData->save_hPen) {
+                gcData->save_hPen = prevPen;
+            }
+            return hPen;
+        }
+        if (gcData->fgColor == WhitePixel) {
+            gcData->hPen = hPen = __whitePen;
+            prevPen = SelectObject(hDC, hPen);
+            if (! gcData->save_hPen) {
+                gcData->save_hPen = prevPen;
+            }
+            return hPen;
+        }
 
 #ifdef CACHE_PEN
-	{
-	    int i;
-
-	    for (i=0; i<NUM_PEN_CACHED; i++) {
-		if (__penCache[i].clr == gcData->fgColor) {
-		    hPen = __penCache[i].pen;
-		    /*
-		     * move it up in the cache
-		     */
-		    if (i > 0) {
-			HPEN t = __penCache[i-1].pen;
-			int c = __penCache[i-1].clr;
-
-			__penCache[i-1].pen = hPen;
-			__penCache[i-1].clr = gcData->fgColor;
-			__penCache[i].pen = t;
-			__penCache[i].clr = c;
-		    }
-
-		    gcData->hPen = hPen;
-		    prevPen = SelectObject(hDC, hPen);
-		    if (! gcData->save_hPen) {
-			gcData->save_hPen = prevPen;
-		    }
-		    return hPen;
-		}
-	    }
-	}
+        {
+            int i;
+
+            for (i=0; i<NUM_PEN_CACHED; i++) {
+                if (__penCache[i].clr == gcData->fgColor) {
+                    hPen = __penCache[i].pen;
+                    /*
+                     * move it up in the cache
+                     */
+                    if (i > 0) {
+                        HPEN t = __penCache[i-1].pen;
+                        int c = __penCache[i-1].clr;
+
+                        __penCache[i-1].pen = hPen;
+                        __penCache[i-1].clr = gcData->fgColor;
+                        __penCache[i].pen = t;
+                        __penCache[i].clr = c;
+                    }
+
+                    gcData->hPen = hPen;
+                    prevPen = SelectObject(hDC, hPen);
+                    if (! gcData->save_hPen) {
+                        gcData->save_hPen = prevPen;
+                    }
+                    return hPen;
+                }
+            }
+        }
 #endif /* PEN_CACHE */
     }
 
     hPen = (HPEN) 0;
     lw = gcData->lineWidth;
     if (lw == 0) {
-	lw = 1;
+        lw = 1;
     }
 
     /*
@@ -1801,49 +1799,49 @@
      * and also non-solid lines with any lineWidth.
      */
     if (gcData->hMask) {
-	Brush.lbStyle = BS_PATTERN;
-	Brush.lbHatch = (ULONG_PTR)(gcData->hMask);
-	Brush.lbColor = gcData->fgColor;
-    } else {
-	Brush.lbStyle = BS_SOLID;
-	Brush.lbHatch = (ULONG_PTR)0;
-	Brush.lbColor = gcData->fgColor;
-
-	hPen = (HPEN) 0;
+        Brush.lbStyle = BS_PATTERN;
+        Brush.lbHatch = (ULONG_PTR)(gcData->hMask);
+        Brush.lbColor = gcData->fgColor;
+    } else {
+        Brush.lbStyle = BS_SOLID;
+        Brush.lbHatch = (ULONG_PTR)0;
+        Brush.lbColor = gcData->fgColor;
+
+        hPen = (HPEN) 0;
 
 #if USE_OLD_CREATE_PEN
-	hPen = CreatePen((gcData->lStyle & PS_STYLE_MASK), lw, gcData->fgColor);
-
-	RESPRINTF(("CreatePen %x %d(%d) %x %x\n",
-		    gcData->lStyle,
-		    lw, gcData->lineWidth,
-		    gcData->fgColor, gcData->hMask));
-#endif
-
-	SetBkMode(hDC, TRANSPARENT);
-	gcData->bkMode = BK_TRANSPARENT;
-
-	if (! hPen) {
-	    hPen = ExtCreatePen(PS_GEOMETRIC | gcData->lStyle,
-			    lw, /* gcData->lineWidth, */
-			    &Brush,
-			    0, 0);
-
-	    RESPRINTF(("ExtCreatePen1 %x %d(%d) %x %x\n",
-			gcData->lStyle,
-			lw, gcData->lineWidth,
-			gcData->fgColor, gcData->hMask));
-
-	    if (gcData->hMask) {
-		SetBrushOrgEx(hDC, gcData->maskOrgX, gcData->maskOrgY, 0);
-	    }
-	}
+        hPen = CreatePen((gcData->lStyle & PS_STYLE_MASK), lw, gcData->fgColor);
+
+        RESPRINTF(("CreatePen %x %d(%d) %x %x\n",
+                    gcData->lStyle,
+                    lw, gcData->lineWidth,
+                    gcData->fgColor, gcData->hMask));
+#endif
+
+        SetBkMode(hDC, TRANSPARENT);
+        gcData->bkMode = BK_TRANSPARENT;
+
+        if (! hPen) {
+            hPen = ExtCreatePen(PS_GEOMETRIC | gcData->lStyle,
+                            lw, /* gcData->lineWidth, */
+                            &Brush,
+                            0, 0);
+
+            RESPRINTF(("ExtCreatePen1 %x %d(%d) %x %x\n",
+                        gcData->lStyle,
+                        lw, gcData->lineWidth,
+                        gcData->fgColor, gcData->hMask));
+
+            if (gcData->hMask) {
+                SetBrushOrgEx(hDC, gcData->maskOrgX, gcData->maskOrgY, 0);
+            }
+        }
     }
 
     gcData->hPen = hPen;
     prevPen = SelectObject(hDC, hPen);
     if (! gcData->save_hPen) {
-	gcData->save_hPen = prevPen;
+        gcData->save_hPen = prevPen;
     }
 
 #ifdef CACHE_PEN
@@ -1853,28 +1851,28 @@
     if (((gcData->lStyle & PS_STYLE_MASK) == PS_SOLID)
      && (gcData->hMask == 0)
      && (gcData->lineWidth <= 1)) {
-	int i;
-
-	/*
-	 * search for an empty slot
-	 */
-	for (i=0; i<NUM_PEN_CACHED; i++) {
-	    if (__penCache[i].pen == 0) {
-		__penCache[i].clr = gcData->fgColor;
-		__penCache[i].pen = hPen;
-		break;
-	    }
-	}
-	if (i == NUM_PEN_CACHED) {
-	    /*
-	     * replace last in penCache
-	     */
-	    HPEN t = __penCache[NUM_PEN_CACHED - 1].pen;
-
-	    __penCache[NUM_PEN_CACHED - 1].pen = hPen;
-	    __penCache[NUM_PEN_CACHED - 1].clr = gcData->fgColor;
-	    _DeletePen(t, __LINE__);
-	}
+        int i;
+
+        /*
+         * search for an empty slot
+         */
+        for (i=0; i<NUM_PEN_CACHED; i++) {
+            if (__penCache[i].pen == 0) {
+                __penCache[i].clr = gcData->fgColor;
+                __penCache[i].pen = hPen;
+                break;
+            }
+        }
+        if (i == NUM_PEN_CACHED) {
+            /*
+             * replace last in penCache
+             */
+            HPEN t = __penCache[NUM_PEN_CACHED - 1].pen;
+
+            __penCache[NUM_PEN_CACHED - 1].pen = hPen;
+            __penCache[NUM_PEN_CACHED - 1].clr = gcData->fgColor;
+            _DeletePen(t, __LINE__);
+        }
     }
 #endif
 
@@ -1890,8 +1888,8 @@
     HPEN hPen;
 
     if (gcData->save_hPen) {
-	SelectObject(hDC, gcData->save_hPen);
-	gcData->save_hPen = NULL;
+        SelectObject(hDC, gcData->save_hPen);
+        gcData->save_hPen = NULL;
     }
     hPen = gcData->hPen;
     _DeletePenIfNotInCache(hPen, __LINE__);
@@ -1909,36 +1907,36 @@
 #ifdef LOCK_DEBUG
     lockCountEvents++;
     if (lockCountEvents != 1) {
-	console_fprintf(stderr, "WinWorkstation [warning]: lockCountEvents (%d) != 1 in lock\n", lockCountEvents);
-	lockCountEvents = 1;
+        console_fprintf(stderr, "WinWorkstation [warning]: lockCountEvents (%d) != 1 in lock\n", lockCountEvents);
+        lockCountEvents = 1;
     }
 #endif
 
     switch (dwWaitResult) {
-	case WAIT_OBJECT_0:
-	    hEventsMutexOwner = whoIsLocking;
-	    return (TRUE);
-
-	case WAIT_ABANDONED:
-	    console_fprintf(stderr, "WinWorkstation [warning]: lockEvent abandoned (was owned by %s)\n",
-			(hEventsMutexOwner ? hEventsMutexOwner : "NONE"));
-	    hEventsMutexOwner = whoIsLocking;
-	    return (TRUE);
-
-	case WAIT_TIMEOUT:
-	    console_fprintf(stderr, "WinWorkstation [warning]: lockEvent timeout (owned by %s)\n",
-			(hEventsMutexOwner ? hEventsMutexOwner : "NONE") );
-	    break;
-
-	default:
-	    {
-		unsigned errCode = GetLastError();
-
-		console_fprintf(stderr, "WinWorkstation [error]: lockEvent error (owned by %s) rslt=0x%x err=0x%x\n",
-			    (hEventsMutexOwner ? hEventsMutexOwner : "NONE"),
-			    dwWaitResult, errCode );
-	    }
-	    break;
+        case WAIT_OBJECT_0:
+            hEventsMutexOwner = whoIsLocking;
+            return (TRUE);
+
+        case WAIT_ABANDONED:
+            console_fprintf(stderr, "WinWorkstation [warning]: lockEvent abandoned (was owned by %s)\n",
+                        (hEventsMutexOwner ? hEventsMutexOwner : "NONE"));
+            hEventsMutexOwner = whoIsLocking;
+            return (TRUE);
+
+        case WAIT_TIMEOUT:
+            console_fprintf(stderr, "WinWorkstation [warning]: lockEvent timeout (owned by %s)\n",
+                        (hEventsMutexOwner ? hEventsMutexOwner : "NONE") );
+            break;
+
+        default:
+            {
+                unsigned errCode = GetLastError();
+
+                console_fprintf(stderr, "WinWorkstation [error]: lockEvent error (owned by %s) rslt=0x%x err=0x%x\n",
+                            (hEventsMutexOwner ? hEventsMutexOwner : "NONE"),
+                            dwWaitResult, errCode );
+            }
+            break;
     }
     return (FALSE);
 }
@@ -1948,8 +1946,8 @@
 #ifdef LOCK_DEBUG
     lockCountEvents--;
     if (lockCountEvents != 0) {
-	console_fprintf(stderr, "WinWorkstation [warning]: lockCountEvents (%d) != 0 in unlock\n", lockCountEvents);
-	lockCountEvents = 0;
+        console_fprintf(stderr, "WinWorkstation [warning]: lockCountEvents (%d) != 0 in unlock\n", lockCountEvents);
+        lockCountEvents = 0;
     }
 #endif
     if (! ReleaseMutex(hEventsMutex)) {
@@ -1969,11 +1967,11 @@
 
     bulk = (struct queuedEvent *) malloc(EV_CHUNK_SZ);
     if (bulk == 0) {
-	console_fprintf(stderr, "WinWorkstation [warning]: no memory for dispatchqueue\n");
-	return 0;
+        console_fprintf(stderr, "WinWorkstation [warning]: no memory for dispatchqueue\n");
+        return 0;
     }
     for (i=1; i<EV_CHUNK_CNT; i++) {
-	bulk[i-1].ev_next = &(bulk[i]);
+        bulk[i-1].ev_next = &(bulk[i]);
     }
     bulk[EV_CHUNK_CNT-1].ev_next = (struct queuedEvent *)0;
     eventFreeList = bulk;
@@ -1995,25 +1993,25 @@
     /* get an event struct
     */
     while (! eventFreeList) {
-	if (repeatCount++ >= 5) {
-	    /* throw away sorry */
-	    console_fprintf(stderr, "WinWorkstation [error]: event throw away (memory problem)\n");
-	    return;
-	}
-	console_fprintf(stderr, "WinWorkstation [warning]: wait for event memory (%d)\n", repeatCount);
-	WaitForSingleObject( hNeverTriggered, 100L );
+        if (repeatCount++ >= 5) {
+            /* throw away sorry */
+            console_fprintf(stderr, "WinWorkstation [error]: event throw away (memory problem)\n");
+            return;
+        }
+        console_fprintf(stderr, "WinWorkstation [warning]: wait for event memory (%d)\n", repeatCount);
+        WaitForSingleObject( hNeverTriggered, 100L );
     }
     if (! lockEvents("enqEvent")) {
-	console_fprintf(stderr, "WinWorkstation [error]: event throw away (lock problem)\n");
-	return;
+        console_fprintf(stderr, "WinWorkstation [error]: event throw away (lock problem)\n");
+        return;
     }
 
     ev = eventFreeList;
 
     if (! ev) {
-	console_fprintf(stderr, "WinWorkstation [error]: event throw away (memory problem)\n");
-	unlockEvents();
-	return;
+        console_fprintf(stderr, "WinWorkstation [error]: event throw away (memory problem)\n");
+        unlockEvents();
+        return;
     }
     eventFreeList  = ev->ev_next;
     ev->ev_flag    = flag;
@@ -2029,16 +2027,16 @@
     ev->ev_next    = (struct queuedEvent *) 0;
 
     if (eventQueueTail) {
-	eventQueueTail->ev_next = ev;
-    } else {
-	eventQueueHead = ev;
+        eventQueueTail->ev_next = ev;
+    } else {
+        eventQueueHead = ev;
     }
     eventQueueTail = ev;
 
     unlockEvents();
 
     if (eventQueueHead == ev) {
-	SetEvent(hInputEvent);
+        SetEvent(hInputEvent);
     }
 
 #if 0
@@ -2053,104 +2051,104 @@
     char * freeArg2 = NULL;
 
     if (mask != ~0) {
-	PRINTF(("deqEvent mask:%x\n",mask));
+        PRINTF(("deqEvent mask:%x\n",mask));
     }
     if (hWnd) {
-	PRINTF(("deqEvent hWnd:%x\n",hWnd));
+        PRINTF(("deqEvent hWnd:%x\n",hWnd));
     }
 
   again:
 
     if (! eventQueueHead)
-	return (0);
+        return (0);
 
     if (! lockEvents("deqEvent")) {
-	return (0);
+        return (0);
     }
 
     TH_DPRINTF(("TDEQ\n"));
     ev = eventQueueHead;
 
     if (! ev) {
-	unlockEvents();
-	return (0);
+        unlockEvents();
+        return (0);
     }
     eventQueueHead = ev->ev_next;
 
     if (! eventQueueHead) {
-	eventQueueTail = (struct queuedEvent *) 0;
+        eventQueueTail = (struct queuedEvent *) 0;
     }
 
     if (ev->count != -1) {
-	static int anyGoodEventReceived = 1;
-
-	if (eventempfcount != ev->count) {
-	    if (anyGoodEventReceived) {
-		console_fprintf(stderr, "WinWorkstation [warning]: lost event (eventcount error %d <-> %d)\n",
-				 eventempfcount, ev->count);
-	    }
-	    eventempfcount = ev->count;
-	    anyGoodEventReceived = 0;
-	} else {
-	    anyGoodEventReceived = 1;
-	}
-	eventempfcount++;
+        static int anyGoodEventReceived = 1;
+
+        if (eventempfcount != ev->count) {
+            if (anyGoodEventReceived) {
+                console_fprintf(stderr, "WinWorkstation [warning]: lost event (eventcount error %d <-> %d)\n",
+                                 eventempfcount, ev->count);
+            }
+            eventempfcount = ev->count;
+            anyGoodEventReceived = 0;
+        } else {
+            anyGoodEventReceived = 1;
+        }
+        eventempfcount++;
     }
 
     if (ev->ev_message == WM_DESTROY) {
-	/*
-	 * arg2 is the localInfoPtr
-	 * (which is already cleared in the wind-structure)
-	 * it must be freed by the stx-process ('cause it was malloc'd by it)
-	 */
-	if (ev->ev_arg2) {
-	    freeArg2 = (char *) ev->ev_arg2;
-	    ev->ev_arg2 = 0;
-	}
+        /*
+         * arg2 is the localInfoPtr
+         * (which is already cleared in the wind-structure)
+         * it must be freed by the stx-process ('cause it was malloc'd by it)
+         */
+        if (ev->ev_arg2) {
+            freeArg2 = (char *) ev->ev_arg2;
+            ev->ev_arg2 = 0;
+        }
 
 #ifdef TOPWINDOWCLASS
 
 FALSCH: nochmals in QUEUE -> (ev_arg2 != 0) arg2 freed !!!
 
-	if (ev->ev_arg1) {
-	    if (UnregisterClass((char*)ev->ev_arg1,(HANDLE) __getHInstance())) {
-		/*console_printf("UnregisterClass %s ok.\n",(char*)ev->ev_arg1);*/
-
-	    } else {
-		/* noch einmal in die queue
-		*/
-		if (ev->ev_arg2++ < 100) {
-		    ev->ev_next = (struct queuedEvent *)0;
-		    ev->count   = eventsendcount++;
-
-		    if (eventQueueTail) {
-			eventQueueTail->ev_next = ev;
-		    } else {
-			eventQueueHead = ev;
-		    }
-		    eventQueueTail = ev;
-		    unlockEvents();
-
-		    if (freeArg2) {
-			free (freeArg2);
-			freeArg2 = NULL;
-		    }
-
-		    if (ev->ev_arg2 > 98) {
-			console_fprintf(stderr, "WinWorkstation [info]: UnregisterClass %s failed. Wait 1 sec.\n",(char*)ev->ev_arg1);
-			sleep(1);
-		    } else {
-			sleep(0);
-		    }
-		    goto again;
-		}
-		/* fail evtl. später ändern und in st verzögert aufrufen
-		*/
-		console_fprintf(stderr, "WinWorkstation [info]: UnregisterClass %s failed.\n",(char*)ev->ev_arg1);
-	    }
-	    free((char*)ev->ev_arg1);
-	    ev->ev_arg1 = 0;
-	}
+        if (ev->ev_arg1) {
+            if (UnregisterClass((char*)ev->ev_arg1,(HANDLE) __getHInstance())) {
+                /*console_printf("UnregisterClass %s ok.\n",(char*)ev->ev_arg1);*/
+
+            } else {
+                /* noch einmal in die queue
+                */
+                if (ev->ev_arg2++ < 100) {
+                    ev->ev_next = (struct queuedEvent *)0;
+                    ev->count   = eventsendcount++;
+
+                    if (eventQueueTail) {
+                        eventQueueTail->ev_next = ev;
+                    } else {
+                        eventQueueHead = ev;
+                    }
+                    eventQueueTail = ev;
+                    unlockEvents();
+
+                    if (freeArg2) {
+                        free (freeArg2);
+                        freeArg2 = NULL;
+                    }
+
+                    if (ev->ev_arg2 > 98) {
+                        console_fprintf(stderr, "WinWorkstation [info]: UnregisterClass %s failed. Wait 1 sec.\n",(char*)ev->ev_arg1);
+                        sleep(1);
+                    } else {
+                        sleep(0);
+                    }
+                    goto again;
+                }
+                /* fail evtl. später ändern und in st verzögert aufrufen
+                */
+                console_fprintf(stderr, "WinWorkstation [info]: UnregisterClass %s failed.\n",(char*)ev->ev_arg1);
+            }
+            free((char*)ev->ev_arg1);
+            ev->ev_arg1 = 0;
+        }
 #endif
     }
 
@@ -2161,7 +2159,7 @@
     unlockEvents();
 
     if (freeArg2) {
-	free (freeArg2);
+        free (freeArg2);
     }
     return (1);
 }
@@ -2169,122 +2167,122 @@
 static void
 __clearRectangles(HWND hWnd, int numRects, RECT *pRect)
 {
-	HDC dc;
-	HBRUSH br;
-	int bgClr;
-	int isPrivateBrush = 0;
+        HDC dc;
+        HBRUSH br;
+        int bgClr;
+        int isPrivateBrush = 0;
 
 # ifdef CACHE_LAST_WM_PAINT_DC
-	AQUIRE_PAINT_MUTEX;
-
-	if (last_wm_paint_dc && (last_wm_paint_win == hWnd)) {
-	    dc = last_wm_paint_dc;
-	} else {
-	    if (last_wm_paint_dc) {
+        AQUIRE_PAINT_MUTEX;
+
+        if (last_wm_paint_dc && (last_wm_paint_win == hWnd)) {
+            dc = last_wm_paint_dc;
+        } else {
+            if (last_wm_paint_dc) {
 #  ifdef CACHE_LAST_DC
-		if (lastGcData && (lastGcData->_hDC == last_wm_paint_dc)) {
+                if (lastGcData && (lastGcData->_hDC == last_wm_paint_dc)) {
 #   ifdef DEBUG_DC_REUSE
-		    console_fprintf(stderr, "WinWorkstation [info]: Oops - release lastGcData [%d]\n", __LINE__);
+                    console_fprintf(stderr, "WinWorkstation [info]: Oops - release lastGcData [%d]\n", __LINE__);
 #   endif
-		    _releaseDC(lastGcData);
-		} else {
-		    ReleaseDC(last_wm_paint_win, last_wm_paint_dc);
-		}
+                    _releaseDC(lastGcData);
+                } else {
+                    ReleaseDC(last_wm_paint_win, last_wm_paint_dc);
+                }
 #  else
-		ReleaseDC(last_wm_paint_win, last_wm_paint_dc);
+                ReleaseDC(last_wm_paint_win, last_wm_paint_dc);
 #  endif /* CACHE_LAST_DC */
-	    }
-	    dc = GetDC(hWnd);
-	    last_wm_paint_dc = dc;
-	    last_wm_paint_win = hWnd;
-	}
+            }
+            dc = GetDC(hWnd);
+            last_wm_paint_dc = dc;
+            last_wm_paint_win = hWnd;
+        }
 # else
-	dc = (HDC)GetDC(hWnd);
+        dc = (HDC)GetDC(hWnd);
 # endif /* CACHE_LAST_WM_PAINT_DC */
 
 # ifdef CACHE_LAST_DC
-	if (lastGcData && (lastGcData->_hDC == dc)) {
+        if (lastGcData && (lastGcData->_hDC == dc)) {
 #  ifdef DEBUG_DC_REUSE
-	    console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc reuse [%d]\n", __LINE__);
+            console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc reuse [%d]\n", __LINE__);
 #  endif
-	    if ((lastGcData->rop2 != R2_COPYPEN)
-	     || (lastGcData->bitbltrop2 != BITBLT_COPY)) {
-		console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc not in Copy mode\n");
-	    }
-	    lastGcData = 0;
-	}
-# endif
-
-	br = GetWindow_viewBgBrush(hWnd);
-	if (! br) {
-	    bgClr = GetWindow_viewBgColor(hWnd);
+            if ((lastGcData->rop2 != R2_COPYPEN)
+             || (lastGcData->bitbltrop2 != BITBLT_COPY)) {
+                console_fprintf(stderr, "WinWorkstation [info]: Oops wm_paint_dc not in Copy mode\n");
+            }
+            lastGcData = 0;
+        }
+# endif
+
+        br = GetWindow_viewBgBrush(hWnd);
+        if (! br) {
+            bgClr = GetWindow_viewBgColor(hWnd);
 
 # ifdef CACHE_LAST_WM_PAINT_BRUSH
-	    if (last_wm_paint_brush
-	     && (last_wm_paint_brush_clr == bgClr)) {
-		br = last_wm_paint_brush;
-	    } else {
-		if (bgClr == WhitePixel) {
-		    br = __whiteBrush;
-		} else if (bgClr == BlackPixel) {
-		    br = __blackBrush;
-		} else {
-		    if (last_wm_paint_brush) {
-			_DeleteBrush(last_wm_paint_brush, __LINE__);
-		    }
-		    last_wm_paint_brush = br = CreateSolidBrush(bgClr);
-		    last_wm_paint_brush_clr = bgClr;
-		    isPrivateBrush = 1;
-		}
-	    }
+            if (last_wm_paint_brush
+             && (last_wm_paint_brush_clr == bgClr)) {
+                br = last_wm_paint_brush;
+            } else {
+                if (bgClr == WhitePixel) {
+                    br = __whiteBrush;
+                } else if (bgClr == BlackPixel) {
+                    br = __blackBrush;
+                } else {
+                    if (last_wm_paint_brush) {
+                        _DeleteBrush(last_wm_paint_brush, __LINE__);
+                    }
+                    last_wm_paint_brush = br = CreateSolidBrush(bgClr);
+                    last_wm_paint_brush_clr = bgClr;
+                    isPrivateBrush = 1;
+                }
+            }
 # else
-	    br = CreateSolidBrush(bgClr);
-	    isPrivateBrush = 1;
-# endif
-	}
-
-	if (! br) {
-	    console_fprintf(stderr, "WinWorkstation [info]: no brush\n");
-	}
-
-	if (br) {
-	    int i;
-
-	    SelectClipRgn(dc, NULL);
-
-	    for (i=0; i<numRects; i++) {
-		/*
-		 * always clear - even if not interested in exposes
-		 */
-		FillRect(dc, &(pRect[i]), br);
-	    }
-	}
+            br = CreateSolidBrush(bgClr);
+            isPrivateBrush = 1;
+# endif
+        }
+
+        if (! br) {
+            console_fprintf(stderr, "WinWorkstation [info]: no brush\n");
+        }
+
+        if (br) {
+            int i;
+
+            SelectClipRgn(dc, NULL);
+
+            for (i=0; i<numRects; i++) {
+                /*
+                 * always clear - even if not interested in exposes
+                 */
+                FillRect(dc, &(pRect[i]), br);
+            }
+        }
 
 # ifndef CACHE_LAST_WM_PAINT_BRUSH
-	if (isPrivateBrush) {
-	    _DeleteBrush(br, __LINE__);
-	}
+        if (isPrivateBrush) {
+            _DeleteBrush(br, __LINE__);
+        }
 # endif
 
 # ifndef CACHE_LAST_WM_PAINT_DC
-	ReleaseDC(hWnd, dc);
+        ReleaseDC(hWnd, dc);
 # endif
 
 # if defined(CACHE_LAST_WM_PAINT_DC)
-	RELEASE_PAINT_MUTEX
+        RELEASE_PAINT_MUTEX
 # endif
 }
 
 static void
 __clearWindow(HWND hWnd, int x, int y, int w, int h)
 {
-	RECT rect;
-
-	rect.left = x;
-	rect.top = y;
-	rect.right = x + w;
-	rect.bottom = y + h;
-	__clearRectangles(hWnd, 1, &rect);
+        RECT rect;
+
+        rect.left = x;
+        rect.top = y;
+        rect.right = x + w;
+        rect.bottom = y + h;
+        __clearRectangles(hWnd, 1, &rect);
 }
 
 
@@ -2298,128 +2296,128 @@
 static int
 __generateExposes(HWND hWnd, HRGN hRgnInOrNull, int msgType, int doClear)
 {
-	RECT updRect;
-	HRGN updRgn = 0;
-	int numRects, ret, n, i;
-	int wantExpose;
-	RECT *pRect;
-	union {
-	    RGNDATA rgnData;
-	    char    bytes[512];
-	} data;
-
-	wantExpose = 0;
-
-	if( msgType >= 0 )
-	    wantExpose = (GetWindow_eventMask(hWnd) & ExposureMask);
-
-	if (hRgnInOrNull) {
-	    updRgn = hRgnInOrNull;
-	} else {
-	    PAINTSTRUCT ps;
-
-	    /*
-	     * fetch the update region, even if ExposureMask is empty.
-	     */
-	    updRgn = CreateRectRgn(0, 0, 0, 0);
-	    ret = GetUpdateRgn(hWnd, updRgn, FALSE);
-
-#if 0
-	    BeginPaint(hWnd, &ps);
-	    /* store the rectangle required for image bit reversal */
-	    /* updateRect = ps.rcPaint;   */
-	    EndPaint(hWnd, &ps);
-#endif
-	    switch (ret) {
-		case ERROR:
-		    console_fprintf(stderr, "WinWorkstation [info]: errregion\n");
-		    return -1;
-		case NULLREGION:
-		    DDDDPRINTF(("nullregion\n"));
-		    _DeleteObject(updRgn, __LINE__);
-		    return 0;
-		case SIMPLEREGION:
-		case COMPLEXREGION:
-		    break;
-	    }
-	}
-	n = GetRegionData(updRgn, sizeof(data), &(data.rgnData));
-
-	/*
-	 * the MS-doc states: n==1
-	 * but this is not true
-	 */
-	if ((n >= sizeof(RGNDATA))
-	 && (n <= sizeof(data))
-	 && (data.rgnData.rdh.iType == RDH_RECTANGLES))  {
-	    /* ok, got the region */
-	    numRects = data.rgnData.rdh.nCount;
-	    pRect = (RECT *)(data.rgnData.Buffer);
-	    DDDDPRINTF(("region numRects=%d\n", numRects));
-	} else {
-	    /* a big region ... */
-	    GetRgnBox(updRgn, &updRect);
-	    numRects = 1;
-	    pRect = &updRect;
-	    DPRINTF(("very complex region (need:%d have:%d) bounds=%d,%d -> %d,%d\n",
-		     n, sizeof(data),
-		     updRect.left, updRect.top,
-		     updRect.right, updRect.bottom));
-	    if (((updRect.right - updRect.left) <= 0)
-	     || ((updRect.bottom - updRect.top) <= 0)) {
-		numRects = 0;
-	    }
-	}
-
-	if (numRects) {
-	    if (doClear) {
-		__clearRectangles(hWnd, numRects, pRect);
-	    }
+        RECT updRect;
+        HRGN updRgn = 0;
+        int numRects, ret, n, i;
+        int wantExpose;
+        RECT *pRect;
+        union {
+            RGNDATA rgnData;
+            char    bytes[512];
+        } data;
+
+        wantExpose = 0;
+
+        if( msgType >= 0 )
+            wantExpose = (GetWindow_eventMask(hWnd) & ExposureMask);
+
+        if (hRgnInOrNull) {
+            updRgn = hRgnInOrNull;
+        } else {
+            PAINTSTRUCT ps;
+
+            /*
+             * fetch the update region, even if ExposureMask is empty.
+             */
+            updRgn = CreateRectRgn(0, 0, 0, 0);
+            ret = GetUpdateRgn(hWnd, updRgn, FALSE);
+
+#if 0
+            BeginPaint(hWnd, &ps);
+            /* store the rectangle required for image bit reversal */
+            /* updateRect = ps.rcPaint;   */
+            EndPaint(hWnd, &ps);
+#endif
+            switch (ret) {
+                case ERROR:
+                    console_fprintf(stderr, "WinWorkstation [info]: errregion\n");
+                    return -1;
+                case NULLREGION:
+                    DDDDPRINTF(("nullregion\n"));
+                    _DeleteObject(updRgn, __LINE__);
+                    return 0;
+                case SIMPLEREGION:
+                case COMPLEXREGION:
+                    break;
+            }
+        }
+        n = GetRegionData(updRgn, sizeof(data), &(data.rgnData));
+
+        /*
+         * the MS-doc states: n==1
+         * but this is not true
+         */
+        if ((n >= sizeof(RGNDATA))
+         && (n <= sizeof(data))
+         && (data.rgnData.rdh.iType == RDH_RECTANGLES))  {
+            /* ok, got the region */
+            numRects = data.rgnData.rdh.nCount;
+            pRect = (RECT *)(data.rgnData.Buffer);
+            DDDDPRINTF(("region numRects=%d\n", numRects));
+        } else {
+            /* a big region ... */
+            GetRgnBox(updRgn, &updRect);
+            numRects = 1;
+            pRect = &updRect;
+            DPRINTF(("very complex region (need:%d have:%d) bounds=%d,%d -> %d,%d\n",
+                     n, sizeof(data),
+                     updRect.left, updRect.top,
+                     updRect.right, updRect.bottom));
+            if (((updRect.right - updRect.left) <= 0)
+             || ((updRect.bottom - updRect.top) <= 0)) {
+                numRects = 0;
+            }
+        }
+
+        if (numRects) {
+            if (doClear) {
+                __clearRectangles(hWnd, numRects, pRect);
+            }
 
 #ifndef PRE_21_NOV
-	for (i=0; i < numRects; i++) {
-	    ValidateRect( hWnd, &pRect[i] );
-	}
+        for (i=0; i < numRects; i++) {
+            ValidateRect( hWnd, &pRect[i] );
+        }
 #endif
 
 #ifdef DEBUG_COLORIZE_WM_PAINT_RECTS1
-	    {
-		HDC hDC;
-		HBRUSH hBrush;
-
-		hBrush = CreateSolidBrush(BlackPixel);
-		hDC = GetWindowDC(hWnd);
-		SelectClipRgn(hDC, NULL);
-		for (i=0; i<numRects; i++) {
-		    FillRect(hDC, &(pRect[i]), hBrush);
-		}
-		_DeleteBrush(hBrush, __LINE__);
-		ReleaseDC(hWnd, hDC);
-	    }
-#endif
-
-	    if (wantExpose) {
-		for (i=0; i<numRects; i++) {
-		    int final = 0;
-
-		    if ((msgType == __WM_GEXPOSE)
-		     && (i == (numRects - 1))) {
-			final = 1;
-		    }
-		    enqEvent(ExposureMask, hWnd, msgType, final,
-			     (pRect[i].left), (pRect[i].top),
-			     (pRect[i].right - pRect[i].left),
-			     (pRect[i].bottom - pRect[i].top),
-			     EV_NOTIME);
-		}
-	    }
-	}
-
-	if (updRgn && (updRgn != hRgnInOrNull)) {
-	    _DeleteObject(updRgn, __LINE__);
-	}
-
-	return numRects;
+            {
+                HDC hDC;
+                HBRUSH hBrush;
+
+                hBrush = CreateSolidBrush(BlackPixel);
+                hDC = GetWindowDC(hWnd);
+                SelectClipRgn(hDC, NULL);
+                for (i=0; i<numRects; i++) {
+                    FillRect(hDC, &(pRect[i]), hBrush);
+                }
+                _DeleteBrush(hBrush, __LINE__);
+                ReleaseDC(hWnd, hDC);
+            }
+#endif
+
+            if (wantExpose) {
+                for (i=0; i<numRects; i++) {
+                    int final = 0;
+
+                    if ((msgType == __WM_GEXPOSE)
+                     && (i == (numRects - 1))) {
+                        final = 1;
+                    }
+                    enqEvent(ExposureMask, hWnd, msgType, final,
+                             (pRect[i].left), (pRect[i].top),
+                             (pRect[i].right - pRect[i].left),
+                             (pRect[i].bottom - pRect[i].top),
+                             EV_NOTIME);
+                }
+            }
+        }
+
+        if (updRgn && (updRgn != hRgnInOrNull)) {
+            _DeleteObject(updRgn, __LINE__);
+        }
+
+        return numRects;
 }
 
 #ifdef THIS_DOES_NOT_AVOID_DOUBLE_REPAINTS
@@ -2427,14 +2425,14 @@
 BOOL CALLBACK
 recursiveExposeGenerator(HWND hChild, LPARAM param)
 {
-	__generateExposes(hChild, NULL, param, 0);
-	return TRUE;
+        __generateExposes(hChild, NULL, param, 0);
+        return TRUE;
 }
 
 static void
 __generateRecursiveExposes(HWND hWnd, int msgType)
 {
-	EnumChildWindows(hWnd, recursiveExposeGenerator, msgType);
+        EnumChildWindows(hWnd, recursiveExposeGenerator, msgType);
 }
 
 #endif /* sigh */
@@ -2446,27 +2444,27 @@
     int modifiers = 0;
 
     if (GetKeyState(VK_SHIFT) & 0x8000)
-	modifiers |= ShiftMask;
+        modifiers |= ShiftMask;
     if (GetKeyState(VK_CONTROL) & 0x8000)
-	modifiers |= ControlMask;
+        modifiers |= ControlMask;
 #if 0
     if (GetKeyState(VK_RMENU) & 0x8000)
-	modifiers |= RightAltMask;
+        modifiers |= RightAltMask;
     if (GetKeyState(VK_LMENU) & 0x8000)
-	modifiers |= LeftAltMask;
+        modifiers |= LeftAltMask;
 #else
     if (GetKeyState(VK_MENU) & 0x8000)
-	modifiers |= LeftAltMask;
+        modifiers |= LeftAltMask;
 #endif
     if (GetKeyState(VK_LBUTTON) & 0x8000)
-	modifiers |= Button1Mask;
+        modifiers |= Button1Mask;
     if (GetKeyState(VK_MBUTTON) & 0x8000)
-	modifiers |= Button2Mask;
+        modifiers |= Button2Mask;
     if (GetKeyState(VK_RBUTTON) & 0x8000)
-	modifiers |= Button3Mask;
+        modifiers |= Button3Mask;
 
     if ((modifiers & AnyButtonMask) == 0) {
-	__eatingMouseEvents = 0;
+        __eatingMouseEvents = 0;
     }
     return modifiers;
 }
@@ -2480,9 +2478,9 @@
 # define MustHandleButtonEvent()\
     (((__currentCapture == CAPTURE_NONE)       \
      && (   (GetKeyState(VK_LBUTTON) & 0x8000) \
-	 || (GetKeyState(VK_MBUTTON) & 0x8000) \
-	 || (GetKeyState(VK_RBUTTON) & 0x8000) \
-	)                                      \
+         || (GetKeyState(VK_MBUTTON) & 0x8000) \
+         || (GetKeyState(VK_RBUTTON) & 0x8000) \
+        )                                      \
     ) ? 0 : 1)
 
 #else
@@ -2506,109 +2504,109 @@
     int gravity;
 
     if (lI = GETLOCALWINDOWINFOPTR(hChild)) {
-	if ((gravity = lI->viewGravity) != GRAVITY_NONE) {
-	    RECT oldChildRct, oldChildWinRct;
-	    RECT newChildRct;
-	    int deltaW, deltaH;
-	    int anyChange = 0;
-
-	    /*
-	     * get its current bounds ...
-	     */
-	    GetClientRect(hChild, &oldChildRct);
-	    deltaW = iP->newW - iP->currW;
-	    deltaH = iP->newH - iP->currH;
-
-	    GetWindowRect(hChild, &oldChildWinRct);
-	    oldChildRct.left = oldChildWinRct.left - iP->parentWinX;
-	    oldChildRct.top =  oldChildWinRct.top - iP->parentWinY;
-
-	    newChildRct = oldChildRct;
-	    switch (gravity) {
-#if 0
-		case GRAVITY_N:
-		    console_fprintf(stderr, "WinWorkstation [info]: Child %x: North gravity\n", hChild);
-		    /*
-		     * shift to the bottom, for a constant
-		     * distance from the bottom edge;
-		     */
-		    newChildRct.bottom += deltaH;
-		    anyChange = 1;
-		    break;
-
-		case GRAVITY_W:
-		    console_fprintf(stderr, "WinWorkstation [info]: Child %x: West gravity\n", hChild);
-		    /*
-		     * shift to the right, for a constant
-		     * distance from the right edge;
-		     */
-		    newChildRct.right += deltaW;
-		    anyChange = 1;
-		    break;
-#endif
-		case GRAVITY_S:
-		    console_fprintf(stderr, "WinWorkstation [info]: Child %x: South gravity\n", hChild);
-		    /*
-		     * shift to the bottom, for a constant
-		     * distance from the bottom edge;
-		     */
-		    newChildRct.top += deltaH;
-		    newChildRct.bottom  += deltaH;
-		    anyChange = 1;
-		    break;
-
-		case GRAVITY_E:
-		    console_fprintf(stderr, "WinWorkstation [info]: Child %x: East gravity\n", hChild);
-		    /*
-		     * shift to the right, for a constant
-		     * distance from the right edge;
-		     */
-		    newChildRct.right += deltaW;
-		    newChildRct.left  += deltaW;
-		    anyChange = 1;
-		    break;
-
-		case GRAVITY_SE:
-		    console_fprintf(stderr, "WinWorkstation [info]: Child %x: SouthEast gravity\n", hChild);
-		    /*
-		     * shift to the bottom-right, for a constant
-		     * distance from the bottom-right edge;
-		     */
-		    newChildRct.right += deltaW;
-		    newChildRct.left  += deltaW;
-		    newChildRct.top += deltaH;
-		    newChildRct.bottom  += deltaH;
-		    anyChange = 1;
-		    break;
-
-		default:
-		    DPRINTF(("Child %x: other gravity\n", hChild));
-		    break;
-	    }
-
-	    if (anyChange) {
-		if ((newChildRct.left < 0)
-		 || (newChildRct.top < 0)
-		 || (newChildRct.right >= iP->newW)
-		 || (newChildRct.bottom >= iP->newH)) {
-		    console_fprintf(stderr, "WinWorkstation [info]: dont move child to: %d/%d -> %d/%d\n",
-				    newChildRct.left, newChildRct.top,
-				    newChildRct.right, newChildRct.bottom);
-		} else {
-		    console_fprintf(stderr, "WinWorkstation [info]: move child from %d/%d->%d/%d to: %d/%d->%d/%d\n",
-				    oldChildRct.left, oldChildRct.top,
-				    oldChildRct.right, oldChildRct.bottom,
-				    newChildRct.left, newChildRct.top,
-				    newChildRct.right, newChildRct.bottom);
-
-		    SetWindowPos(hChild, (HWND)0,
-				 newChildRct.left, newChildRct.top,
-				 0, 0,
-				 /* SWP_NOSENDCHANGING | */
-				 SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
-		}
-	    }
-	}
+        if ((gravity = lI->viewGravity) != GRAVITY_NONE) {
+            RECT oldChildRct, oldChildWinRct;
+            RECT newChildRct;
+            int deltaW, deltaH;
+            int anyChange = 0;
+
+            /*
+             * get its current bounds ...
+             */
+            GetClientRect(hChild, &oldChildRct);
+            deltaW = iP->newW - iP->currW;
+            deltaH = iP->newH - iP->currH;
+
+            GetWindowRect(hChild, &oldChildWinRct);
+            oldChildRct.left = oldChildWinRct.left - iP->parentWinX;
+            oldChildRct.top =  oldChildWinRct.top - iP->parentWinY;
+
+            newChildRct = oldChildRct;
+            switch (gravity) {
+#if 0
+                case GRAVITY_N:
+                    console_fprintf(stderr, "WinWorkstation [info]: Child %x: North gravity\n", hChild);
+                    /*
+                     * shift to the bottom, for a constant
+                     * distance from the bottom edge;
+                     */
+                    newChildRct.bottom += deltaH;
+                    anyChange = 1;
+                    break;
+
+                case GRAVITY_W:
+                    console_fprintf(stderr, "WinWorkstation [info]: Child %x: West gravity\n", hChild);
+                    /*
+                     * shift to the right, for a constant
+                     * distance from the right edge;
+                     */
+                    newChildRct.right += deltaW;
+                    anyChange = 1;
+                    break;
+#endif
+                case GRAVITY_S:
+                    console_fprintf(stderr, "WinWorkstation [info]: Child %x: South gravity\n", hChild);
+                    /*
+                     * shift to the bottom, for a constant
+                     * distance from the bottom edge;
+                     */
+                    newChildRct.top += deltaH;
+                    newChildRct.bottom  += deltaH;
+                    anyChange = 1;
+                    break;
+
+                case GRAVITY_E:
+                    console_fprintf(stderr, "WinWorkstation [info]: Child %x: East gravity\n", hChild);
+                    /*
+                     * shift to the right, for a constant
+                     * distance from the right edge;
+                     */
+                    newChildRct.right += deltaW;
+                    newChildRct.left  += deltaW;
+                    anyChange = 1;
+                    break;
+
+                case GRAVITY_SE:
+                    console_fprintf(stderr, "WinWorkstation [info]: Child %x: SouthEast gravity\n", hChild);
+                    /*
+                     * shift to the bottom-right, for a constant
+                     * distance from the bottom-right edge;
+                     */
+                    newChildRct.right += deltaW;
+                    newChildRct.left  += deltaW;
+                    newChildRct.top += deltaH;
+                    newChildRct.bottom  += deltaH;
+                    anyChange = 1;
+                    break;
+
+                default:
+                    DPRINTF(("Child %x: other gravity\n", hChild));
+                    break;
+            }
+
+            if (anyChange) {
+                if ((newChildRct.left < 0)
+                 || (newChildRct.top < 0)
+                 || (newChildRct.right >= iP->newW)
+                 || (newChildRct.bottom >= iP->newH)) {
+                    console_fprintf(stderr, "WinWorkstation [info]: dont move child to: %d/%d -> %d/%d\n",
+                                    newChildRct.left, newChildRct.top,
+                                    newChildRct.right, newChildRct.bottom);
+                } else {
+                    console_fprintf(stderr, "WinWorkstation [info]: move child from %d/%d->%d/%d to: %d/%d->%d/%d\n",
+                                    oldChildRct.left, oldChildRct.top,
+                                    oldChildRct.right, oldChildRct.bottom,
+                                    newChildRct.left, newChildRct.top,
+                                    newChildRct.right, newChildRct.bottom);
+
+                    SetWindowPos(hChild, (HWND)0,
+                                 newChildRct.left, newChildRct.top,
+                                 0, 0,
+                                 /* SWP_NOSENDCHANGING | */
+                                 SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
+                }
+            }
+        }
     }
     return TRUE;
 }
@@ -2621,19 +2619,19 @@
     wchar_t *wcp = out;
 
     while ((nMax > 1) && cp && *cp) {
-	*wcp++ = *cp++;
-	nMax--;
+        *wcp++ = *cp++;
+        nMax--;
     }
     *wcp = 0;
 }
 
 static int
 winEventProcessing(
-	HWND hWnd,         /* window handle                   */
-	UINT message,      /* type of message                 */
-	UINT wParam,       /* additional information          */
-	INT lParam,        /* additional information          */
-	int *pDefault
+        HWND hWnd,         /* window handle                   */
+        UINT message,      /* type of message                 */
+        UINT wParam,       /* additional information          */
+        INT lParam,        /* additional information          */
+        int *pDefault
     ) {
     int curButton;
     int x, y, w, h;
@@ -2646,1993 +2644,1993 @@
     evTime = lastMSGTime;
     lastMSGTime = 0;
     if (evTime == 0) {
-	lastMSGTime = GetTickCount();
+        lastMSGTime = GetTickCount();
     }
 
 /*
     EVENT_PRINTF(("winEvent hWin=0x%x message=0x%x wP=0x%x lP=0x%x\n",
-			hWnd, message, wParam, lParam));
+                        hWnd, message, wParam, lParam));
 */
 
     if (hWnd) {
-	if (message != WM_MOUSEMOVE) {
-	    lastMotionWnd = 0;
-	}
-
-	isNative = (GetWindow_flag(hWnd) & LI_NATIVEWIN);
-	if (isNative) {
-	    NDPRINTF(("event %d (0x%x) for nativeWindow\n", message, message));
-	}
+        if (message != WM_MOUSEMOVE) {
+            lastMotionWnd = 0;
+        }
+
+        isNative = (GetWindow_flag(hWnd) & LI_NATIVEWIN);
+        if (isNative) {
+            NDPRINTF(("event %d (0x%x) for nativeWindow\n", message, message));
+        }
     }
 
     /*
-		sr: HACK since a specific Windows 10 Update
-		STX views have been freezed on resize
-		see http://doc.expecco.de/wiki2.x/Probleme_%26_Fehler
-		there is also an expecco ALM defect,
-		but sadly I could not find it ;(
-	*/
+                sr: HACK since a specific Windows 10 Update
+                STX views have been freezed on resize
+                see http://doc.expecco.de/wiki2.x/Probleme_%26_Fehler
+                there is also an expecco ALM defect,
+                but sadly I could not find it ;(
+        */
     switch (message) {
-	    // case WM_PAINT:
-	    case WM_NCCALCSIZE:
-	    case WM_SIZE:
-	    case WM_MOVE:
-	    case WM_WINDOWPOSCHANGED:
-			Sleep(0);
-		break;
-
-	    default: break;
+            // case WM_PAINT:
+            case WM_NCCALCSIZE:
+            case WM_SIZE:
+            case WM_MOVE:
+            case WM_WINDOWPOSCHANGED:
+                        Sleep(0);
+                break;
+
+            default: break;
     }
 
     /*
      * messages which are enqueued to be handled by the view thread
      */
     switch (message) {
-	case WM_THREAD_CREATEWINDOW:
-	    EVENT_PRINTF(("*WM_THREAD_CREATEWINDOW\n"));
-
-	    {
-		createWindowInfo *cwi = (createWindowInfo *)(lParam);
-
-		if ((cwi->sequenceNr == wParam)
-		 && (cwi->sequenceNr != INVALIDATED_CWI)) {
-		    cwi->sequenceNr = INVALIDATED_CWI;
-		    cwi->infoWasRead = 1;
-		    if (cwi->newWinHandle == NULL) {
-			HANDLE ev;
-			HANDLE hwnd;
-
-			cwi->newWinHandle = hwnd = CreateWindowExW(
-					    cwi->winStyleBitsEx,
-					    cwi->className,
-					    cwi->windowName,
-					    cwi->winStyleBits,
-					    cwi->x, cwi->y,
-					    cwi->dx, cwi->dy,
-					    cwi->parentHandle,
-					    NULL,           /* menu */
-					    (HANDLE) __getHInstance(),
-					    cwi->localWindowInfo
-					   );
-
-			if (hwnd == NULL) {
-			    cwi->errCode = GetLastError();
-			    console_fprintf(stderr, "WinWorkstation [info]: CreateWindow failed: %d (0x%x) [%d]\n",
-						cwi->errCode, cwi->errCode, __LINE__);
-			} else {
-			    SETLOCALWINDOWINFOPTR(hwnd, cwi->localWindowInfo);
+        case WM_THREAD_CREATEWINDOW:
+            EVENT_PRINTF(("*WM_THREAD_CREATEWINDOW\n"));
+
+            {
+                createWindowInfo *cwi = (createWindowInfo *)(lParam);
+
+                if ((cwi->sequenceNr == wParam)
+                 && (cwi->sequenceNr != INVALIDATED_CWI)) {
+                    cwi->sequenceNr = INVALIDATED_CWI;
+                    cwi->infoWasRead = 1;
+                    if (cwi->newWinHandle == NULL) {
+                        HANDLE ev;
+                        HANDLE hwnd;
+
+                        cwi->newWinHandle = hwnd = CreateWindowExW(
+                                            cwi->winStyleBitsEx,
+                                            cwi->className,
+                                            cwi->windowName,
+                                            cwi->winStyleBits,
+                                            cwi->x, cwi->y,
+                                            cwi->dx, cwi->dy,
+                                            cwi->parentHandle,
+                                            NULL,           /* menu */
+                                            (HANDLE) __getHInstance(),
+                                            cwi->localWindowInfo
+                                           );
+
+                        if (hwnd == NULL) {
+                            cwi->errCode = GetLastError();
+                            console_fprintf(stderr, "WinWorkstation [info]: CreateWindow failed: %d (0x%x) [%d]\n",
+                                                cwi->errCode, cwi->errCode, __LINE__);
+                        } else {
+                            SETLOCALWINDOWINFOPTR(hwnd, cwi->localWindowInfo);
 #ifdef DEBUG /* PARANOIA */
-			    if (GETLOCALWINDOWINFOPTR(hwnd) != cwi->localWindowInfo) {
-			       console_fprintf(stderr, "lI-Error\n");
-			    }
-#endif
-			    SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0,
-					/* SWP_NOOWNERZORDER |*/
-					SWP_NOSENDCHANGING | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
-			}
-
-			ev = cwi->hCreateEvent;
-			if (ev) {
-			    SetEvent(ev);
-			}
-		    }
-		} else {
-		    DPRINTF(("obsolete createWindow message %x ignored\n", cwi->sequenceNr));
-		}
-	    }
-	    *pDefault = 0;
-	    return 0;
-
-	case WM_THREAD_DESTROYWINDOW:
-	    {
-		HBRUSH br;
-
-		br = GetWindow_viewBgBrush(hWnd);
-		if (br) {
-		    SetWindow_viewBgBrush(hWnd, 0);
-		    _DeleteBrushIfNotInCache(br, __LINE__);
-		}
-	    }
+                            if (GETLOCALWINDOWINFOPTR(hwnd) != cwi->localWindowInfo) {
+                               console_fprintf(stderr, "lI-Error\n");
+                            }
+#endif
+                            SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0,
+                                        /* SWP_NOOWNERZORDER |*/
+                                        SWP_NOSENDCHANGING | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                        }
+
+                        ev = cwi->hCreateEvent;
+                        if (ev) {
+                            SetEvent(ev);
+                        }
+                    }
+                } else {
+                    DPRINTF(("obsolete createWindow message %x ignored\n", cwi->sequenceNr));
+                }
+            }
+            *pDefault = 0;
+            return 0;
+
+        case WM_THREAD_DESTROYWINDOW:
+            {
+                HBRUSH br;
+
+                br = GetWindow_viewBgBrush(hWnd);
+                if (br) {
+                    SetWindow_viewBgBrush(hWnd, 0);
+                    _DeleteBrushIfNotInCache(br, __LINE__);
+                }
+            }
 
 #ifdef CACHE_LAST_DC
-	    if (lastGcData && (lastGcHWIN == hWnd)) {
-		_releaseDC(lastGcData);
-	    }
+            if (lastGcData && (lastGcHWIN == hWnd)) {
+                _releaseDC(lastGcData);
+            }
 #endif
 #ifdef CACHE_LAST_WM_PAINT_DC
-	    if (last_wm_paint_dc && (last_wm_paint_win == hWnd)) {
-		ReleaseDC(hWnd, last_wm_paint_dc);
-		last_wm_paint_win = last_wm_paint_dc = 0;
-	    }
-#endif
-	    if (! DestroyWindow(hWnd)) {
-		DPRINTF(("DestroyWindow ERROR\n"));
-	    } else {
+            if (last_wm_paint_dc && (last_wm_paint_win == hWnd)) {
+                ReleaseDC(hWnd, last_wm_paint_dc);
+                last_wm_paint_win = last_wm_paint_dc = 0;
+            }
+#endif
+            if (! DestroyWindow(hWnd)) {
+                DPRINTF(("DestroyWindow ERROR\n"));
+            } else {
 #ifdef COUNT_RESOURCES
-		__cnt_createWindows--;
-		RESPRINTF(("DestroyWindow -> %d\n", __cnt_createWindows));
-#endif
-	    }
-	    *pDefault = 0;
-	    return 0;
-
-	case WM_CREATE:
-	    {
+                __cnt_createWindows--;
+                RESPRINTF(("DestroyWindow -> %d\n", __cnt_createWindows));
+#endif
+            }
+            *pDefault = 0;
+            return 0;
+
+        case WM_CREATE:
+            {
 #ifdef SETLOCALINFO_IN_CREATE /* no longer */
-		localWindowInfo *lI;
-
-		CREATESTRUCT *lpcs = (LPCREATESTRUCT) lParam; // structure with creation data
-
-		lI = lpcs->lpCreateParams;
-		EVENT_PRINTF(("WM_CREATE lI=%x\n", lI));
-
-		SETLOCALWINDOWINFOPTR(hWnd, lI);
+                localWindowInfo *lI;
+
+                CREATESTRUCT *lpcs = (LPCREATESTRUCT) lParam; // structure with creation data
+
+                lI = lpcs->lpCreateParams;
+                EVENT_PRINTF(("WM_CREATE lI=%x\n", lI));
+
+                SETLOCALWINDOWINFOPTR(hWnd, lI);
 # ifdef SUPERDEBUG
-		if (GETLOCALWINDOWINFOPTR(hWnd) != lpcs->lpCreateParams) {
-		    PRINTF(("SETLOCALWINDOWINFOPTR ERROR\n"));
-		}
+                if (GETLOCALWINDOWINFOPTR(hWnd) != lpcs->lpCreateParams) {
+                    PRINTF(("SETLOCALWINDOWINFOPTR ERROR\n"));
+                }
 # endif /* SUPERDEBUG */
 #endif
 
-		*pDefault = 0;
+                *pDefault = 0;
 #ifdef COUNT_RESOURCES
-		__cnt_createWindows++;
-		RESPRINTF(("CreateWindows %d\n",__cnt_createWindows));
-#endif
-	    }
-	    break;
-
-	case WM_CLOSE:
-	    EVENT_PRINTF(("WM_CLOSE\n"));
-	    if (! destroyWin) {
-		// (flag, hWnd, message, wParam, arg1, arg2, arg3, arg4, evTime)
-		enqEvent(0, hWnd, WM_CLOSE, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    } else {
-		destroyWin = 0;
-		{
-		    HBRUSH br;
-
-		    br = GetWindow_viewBgBrush(hWnd);
-		    if (br) {
-			SetWindow_viewBgBrush(hWnd, 0);
-			_DeleteBrushIfNotInCache(br, __LINE__);
-		    }
-		}
+                __cnt_createWindows++;
+                RESPRINTF(("CreateWindows %d\n",__cnt_createWindows));
+#endif
+            }
+            break;
+
+        case WM_CLOSE:
+            EVENT_PRINTF(("WM_CLOSE\n"));
+            if (! destroyWin) {
+                // (flag, hWnd, message, wParam, arg1, arg2, arg3, arg4, evTime)
+                enqEvent(0, hWnd, WM_CLOSE, wParam, 0, 0, 0, 0, EV_NOTIME);
+            } else {
+                destroyWin = 0;
+                {
+                    HBRUSH br;
+
+                    br = GetWindow_viewBgBrush(hWnd);
+                    if (br) {
+                        SetWindow_viewBgBrush(hWnd, 0);
+                        _DeleteBrushIfNotInCache(br, __LINE__);
+                    }
+                }
 #ifdef CACHE_LAST_DC
-		if (lastGcData && (lastGcHWIN == hWnd)) {
-		    _releaseDC(lastGcData);
-		}
+                if (lastGcData && (lastGcHWIN == hWnd)) {
+                    _releaseDC(lastGcData);
+                }
 #endif
 #ifdef CACHE_LAST_WM_PAINT_DC
-		if (last_wm_paint_dc && (last_wm_paint_win == hWnd)) {
-		    ReleaseDC(hWnd, last_wm_paint_dc);
-		    last_wm_paint_win = last_wm_paint_dc = 0;
-		}
-#endif
-		if (! DestroyWindow(hWnd)) {
-		    DPRINTF(("DestroyWindow ERROR\n"));
-		} else {
+                if (last_wm_paint_dc && (last_wm_paint_win == hWnd)) {
+                    ReleaseDC(hWnd, last_wm_paint_dc);
+                    last_wm_paint_win = last_wm_paint_dc = 0;
+                }
+#endif
+                if (! DestroyWindow(hWnd)) {
+                    DPRINTF(("DestroyWindow ERROR\n"));
+                } else {
 #ifdef COUNT_RESOURCES
-		    __cnt_createWindows--;
-		    RESPRINTF(("DestroyWindow -> %d\n", __cnt_createWindows));
-#endif
-		}
-	    }
-	    *pDefault = 0;
-	    return 0;
-	    break;
-
-	case WM_DESTROY:
-	    {
-		char *nm = 0;
-		localWindowInfo *lI;
-
-		lI = GETLOCALWINDOWINFOPTR(hWnd);
-		EVENT_PRINTF(("WM_DESTROY %x li=%x\n", hWnd, lI));
+                    __cnt_createWindows--;
+                    RESPRINTF(("DestroyWindow -> %d\n", __cnt_createWindows));
+#endif
+                }
+            }
+            *pDefault = 0;
+            return 0;
+            break;
+
+        case WM_DESTROY:
+            {
+                char *nm = 0;
+                localWindowInfo *lI;
+
+                lI = GETLOCALWINDOWINFOPTR(hWnd);
+                EVENT_PRINTF(("WM_DESTROY %x li=%x\n", hWnd, lI));
 
 #ifdef TOPWINDOWCLASS
-		if (lI) {
-		    if (lI->flag & LI_TOPWIN) {
-			nm = (char*) malloc(300);
-			GetClassName(hWnd, nm, 300);
-		    }
-		    /* freeing now done in other thread */
-		}
-#endif
-		SETLOCALWINDOWINFOPTR(hWnd, 0);
+                if (lI) {
+                    if (lI->flag & LI_TOPWIN) {
+                        nm = (char*) malloc(300);
+                        GetClassName(hWnd, nm, 300);
+                    }
+                    /* freeing now done in other thread */
+                }
+#endif
+                SETLOCALWINDOWINFOPTR(hWnd, 0);
 
 #ifdef FREE_LI_IN_STX_PROCESS
-		enqEvent(0, hWnd, WM_DESTROY, wParam, (INT)nm, lI, 0, 0, EV_NOTIME);
-#else
-		if (lI) {
-		    free(lI);
-		}
-		enqEvent(0, hWnd, WM_DESTROY, wParam, (INT)nm, 0, 0, 0, EV_NOTIME);
-#endif
-		*pDefault = 0;
-		return 0;
-	    }
-	    break;
-
-	case WM_GETMINMAXINFO:
+                enqEvent(0, hWnd, WM_DESTROY, wParam, (INT)nm, lI, 0, 0, EV_NOTIME);
+#else
+                if (lI) {
+                    free(lI);
+                }
+                enqEvent(0, hWnd, WM_DESTROY, wParam, (INT)nm, 0, 0, 0, EV_NOTIME);
+#endif
+                *pDefault = 0;
+                return 0;
+            }
+            break;
+
+        case WM_GETMINMAXINFO:
 
 #ifndef PRE_13_APR_04_POSCHANGED_IN_EXITSIZEMOVE
-	    if (inMove) {
-		*pDefault = 0;
-		return 0;
-	    }
-#endif
-
-	    {
-		int minW, maxW;
-		localWindowInfo *lI;
-		LPMINMAXINFO lpmmi = (LPMINMAXINFO) lParam;
-
-		EVENT_PRINTF2(("WM_GETMINMAXINFO handle=%x got min: %d/%d\n",
-			    hWnd,
-			    lpmmi->ptMinTrackSize.x,
-			    lpmmi->ptMinTrackSize.y));
-
-		lI = GETLOCALWINDOWINFOPTR(hWnd);
-		if (lI && (lI->minWidth) && (lI->maxWidth)) {
-		  lpmmi->ptMaxPosition.x = 0;
-		  lpmmi->ptMaxPosition.y = 0;
-		  lpmmi->ptMaxSize.x = lI->currentMonitorWidth;
-		  lpmmi->ptMaxSize.y = lI->currentMonitorHeight;
+            if (inMove) {
+                *pDefault = 0;
+                return 0;
+            }
+#endif
+
+            {
+                int minW, maxW;
+                localWindowInfo *lI;
+                LPMINMAXINFO lpmmi = (LPMINMAXINFO) lParam;
+
+                EVENT_PRINTF2(("WM_GETMINMAXINFO handle=%x got min: %d/%d\n",
+                            hWnd,
+                            lpmmi->ptMinTrackSize.x,
+                            lpmmi->ptMinTrackSize.y));
+
+                lI = GETLOCALWINDOWINFOPTR(hWnd);
+                if (lI && (lI->minWidth) && (lI->maxWidth)) {
+                  lpmmi->ptMaxPosition.x = 0;
+                  lpmmi->ptMaxPosition.y = 0;
+                  lpmmi->ptMaxSize.x = lI->currentMonitorWidth;
+                  lpmmi->ptMaxSize.y = lI->currentMonitorHeight;
 #define MIN(a, b) (a < b ? a : b)
-		  lpmmi->ptMaxSize.x = MIN(GetSystemMetrics(SM_CXMAXIMIZED), lI->maxWidth);
-		  lpmmi->ptMaxSize.y = MIN(GetSystemMetrics(SM_CYMAXIMIZED), lI->maxHeight);
-
-		  lpmmi->ptMaxTrackSize.x = lI->maxWidth == 0 ? GetSystemMetrics(SM_CXMAXTRACK) : lI->maxWidth;
-		  lpmmi->ptMaxTrackSize.y = lI->maxHeight == 0 ? GetSystemMetrics(SM_CYMAXTRACK) : lI->maxHeight;
-		  lpmmi->ptMinTrackSize.x = lI->minWidth;
-		  lpmmi->ptMinTrackSize.y = lI->minHeight;
-
-		  EVENT_PRINTF3(("WM_GETMINMAXINFO handle=%x return min: %d/%d max: %d/%d\n",
-				  hWnd,
-				  lI->minWidth, lI->minHeight,
-				  lI->maxWidth, lI->maxHeight));
-		  *pDefault = 0;
-		}
-	    }
-	    break;
-
-	case WM_SETCURSOR:
-	    {
-		HCURSOR curs;
-		int hitCode;
-
-		hitCode = LOWORD(lParam);
-		if (hitCode != HTCLIENT) {
-		    /*
-		     * not in client area ...
-		     */
-		    return 0;
-		}
-		DPRINTFIF(__debug_WM_SETCURSOR__ , ("WM_SETCURSOR\n"));
-		curs = GetWindow_Cursor(hWnd);
-		if (curs) {
-		    SetCursor(curs);
-		    *pDefault = 0;
-		    return 1;
-		}
-	    }
-	    return 0;
-
-	case WM_WINDOWPOSCHANGED:
+                  lpmmi->ptMaxSize.x = MIN(GetSystemMetrics(SM_CXMAXIMIZED), lI->maxWidth);
+                  lpmmi->ptMaxSize.y = MIN(GetSystemMetrics(SM_CYMAXIMIZED), lI->maxHeight);
+
+                  lpmmi->ptMaxTrackSize.x = lI->maxWidth == 0 ? GetSystemMetrics(SM_CXMAXTRACK) : lI->maxWidth;
+                  lpmmi->ptMaxTrackSize.y = lI->maxHeight == 0 ? GetSystemMetrics(SM_CYMAXTRACK) : lI->maxHeight;
+                  lpmmi->ptMinTrackSize.x = lI->minWidth;
+                  lpmmi->ptMinTrackSize.y = lI->minHeight;
+
+                  EVENT_PRINTF3(("WM_GETMINMAXINFO handle=%x return min: %d/%d max: %d/%d\n",
+                                  hWnd,
+                                  lI->minWidth, lI->minHeight,
+                                  lI->maxWidth, lI->maxHeight));
+                  *pDefault = 0;
+                }
+            }
+            break;
+
+        case WM_SETCURSOR:
+            {
+                HCURSOR curs;
+                int hitCode;
+
+                hitCode = LOWORD(lParam);
+                if (hitCode != HTCLIENT) {
+                    /*
+                     * not in client area ...
+                     */
+                    return 0;
+                }
+                DPRINTFIF(__debug_WM_SETCURSOR__ , ("WM_SETCURSOR\n"));
+                curs = GetWindow_Cursor(hWnd);
+                if (curs) {
+                    SetCursor(curs);
+                    *pDefault = 0;
+                    return 1;
+                }
+            }
+            return 0;
+
+        case WM_WINDOWPOSCHANGED:
 
 #ifndef PRE_13_APR_04_POSCHANGED_IN_EXITSIZEMOVE
-	    if (inMove) {
-		*pDefault = 0;
-		return 0;
-	    }
-#endif
-	    if (hWnd == __rootWinSpezial) {
-		/* can this happen ? */
-		*pDefault = 1;
-		return 0;
-	    }
-
-	    if (! inMove && (__currentCapture == CAPTURE_NONE)) {
-		POINT p;
-		HWND hWndChild,hWndTemp;
-
-		p.x = evRootX;
-		p.y = evRootY;
-		ScreenToClient(hWnd, &p);
-		hWndChild = hWnd; //hWndChild = ChildWindowFromPoint(hWnd,p);
-		do {
-		    hWndTemp = hWndChild;
-		    hWndChild = ChildWindowFromPointEx(hWndTemp,p,CWP_SKIPINVISIBLE|CWP_SKIPDISABLED|CWP_SKIPTRANSPARENT);
-		} while ((hWndChild) && (hWndChild != hWndTemp));
-
-		if (hWndChild /*&& (hWndChild != hWnd)*/) {
-		    if (hWndChild != __currentPointerView) {
-			int modifiers = getModifiers();
-
-			if (__currentPointerView) {
-			    if (inSizeMove) {
-				if (needDelayedMouseLeaveWindow == NULL) {
-				    needDelayedMouseLeaveWindow = __currentPointerView;
-				}
-			    } else {
-				if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
-				    enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
-				    SetWindow_mouseXY(__currentPointerView, -9999, -9999);
-				}
-			    }
-			    __currentPointerView = 0;
-			}
-			if (inSizeMove) {
-			    needDelayedMouseEnterWindow = hWndChild;
-			    delayedMouseEnterX = evRootX;
-			    delayedMouseEnterY = evRootY;
-			} else {
-			    if (GetWindow_eventMask(hWndChild) & EnterWindowMask) {
-				enqEvent(EnterWindowMask, hWndChild, __WM_MOUSEENTER, 0, evRootX, evRootY, 0, modifiers, EV_NOTIME);
-				SetWindow_mouseXY(hWndChild, evRootX, evRootY);
-			    }
-			    // SetFocus(hWndChild);
-			}
-			__currentPointerView = hWndChild;
-		    }
-		}
-	    }
-
-	    /*
-	     * ignore child window messages ...
-	     */
-	    if (GetParent(hWnd) != NULL) {
-		break;
-	    }
-
-	    {
-		WINDOWPOS *wp = (WINDOWPOS *)lParam;
-		RECT rct, dRect;
-		int x, y, w, h;
-		int dW, dH;
-
-#if 0
-		dRect.left = 0;
-		dRect.top = 0;
-		dRect.right = 100;
-		dRect.bottom = 100;
-		winStyleBits = GetWindowLong(hWnd, GWL_STYLE);
-		winExStyleBits = GetWindowLong(hWnd, GWL_EXSTYLE);
-		AdjustWindowRectEx(&dRect, winStyleBits, 0, winExStyleBits);
-		dW = dRect.right - dRect.left;
-		dH = dRect.bottom - dRect.top;
-#endif
-		GetClientRect(hWnd, &rct);
-
-		x = rct.left;
-		y = rct.top;
-		w = rct.right - rct.left;
-		h = rct.bottom - rct.top;
-
-		if (__debug__) {
-		    EVENT_PRINTF(("WM_WINDOWPOSCHANGED ["));
-
-		    if (wp->flags & SWP_NOSIZE) {
-			EVENT_PRINTF(("NOSIZE "));
-		    }
-		    if (wp->flags & SWP_NOMOVE) {
-			EVENT_PRINTF(("NOMOVE "));
-		    }
-		    if (wp->flags & SWP_NOZORDER) {
-			EVENT_PRINTF(("NOZORDER "));
-		    }
-		    if (wp->flags & SWP_NOREDRAW) {
-			EVENT_PRINTF(("NOREDRAW "));
-		    }
-		    if (wp->flags & SWP_NOACTIVATE) {
-			EVENT_PRINTF(("NOACTIVATE "));
-		    }
-		    if (wp->flags & SWP_FRAMECHANGED) {
-			EVENT_PRINTF(("FRAMECHANGED "));
-		    }
-		    if (wp->flags & SWP_NOCOPYBITS) {
-			EVENT_PRINTF(("NOCOPYBITS "));
-		    }
-		    if (wp->flags & SWP_NOOWNERZORDER) {
-			EVENT_PRINTF(("NOOWNERZORDER "));
-		    }
-		    if (wp->flags & SWP_NOSENDCHANGING) {
-			EVENT_PRINTF(("NOSENDCHANGING "));
-		    }
-		    if (wp->flags & SWP_DEFERERASE) {
-			EVENT_PRINTF(("DEFERERASE "));
-		    }
-		    if (wp->flags & SWP_ASYNCWINDOWPOS) {
-			EVENT_PRINTF(("ASYNCWINDOWPOS "));
-		    }
-		    if (wp->flags & SWP_HIDEWINDOW) {
-			EVENT_PRINTF(("HIDEWINDOW "));
-		    }
-		    if (wp->flags & SWP_SHOWWINDOW) {
-			EVENT_PRINTF(("SHOWWINDOW "));
-		    }
-
-		    EVENT_PRINTF(("] %d/%d %d/%d flags:%d (0x%x) ->",
-				wp->x, wp->y, wp->cx, wp->cy, wp->flags, wp->flags));
-		    EVENT_PRINTF(("  client rect now: %d/%d %d/%d\n",x, y, w, h));
-
-		} /* __debug__ */
+            if (inMove) {
+                *pDefault = 0;
+                return 0;
+            }
+#endif
+            if (hWnd == __rootWinSpezial) {
+                /* can this happen ? */
+                *pDefault = 1;
+                return 0;
+            }
+
+            if (! inMove && (__currentCapture == CAPTURE_NONE)) {
+                POINT p;
+                HWND hWndChild,hWndTemp;
+
+                p.x = evRootX;
+                p.y = evRootY;
+                ScreenToClient(hWnd, &p);
+                hWndChild = hWnd; //hWndChild = ChildWindowFromPoint(hWnd,p);
+                do {
+                    hWndTemp = hWndChild;
+                    hWndChild = ChildWindowFromPointEx(hWndTemp,p,CWP_SKIPINVISIBLE|CWP_SKIPDISABLED|CWP_SKIPTRANSPARENT);
+                } while ((hWndChild) && (hWndChild != hWndTemp));
+
+                if (hWndChild /*&& (hWndChild != hWnd)*/) {
+                    if (hWndChild != __currentPointerView) {
+                        int modifiers = getModifiers();
+
+                        if (__currentPointerView) {
+                            if (inSizeMove) {
+                                if (needDelayedMouseLeaveWindow == NULL) {
+                                    needDelayedMouseLeaveWindow = __currentPointerView;
+                                }
+                            } else {
+                                if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
+                                    enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
+                                    SetWindow_mouseXY(__currentPointerView, -9999, -9999);
+                                }
+                            }
+                            __currentPointerView = 0;
+                        }
+                        if (inSizeMove) {
+                            needDelayedMouseEnterWindow = hWndChild;
+                            delayedMouseEnterX = evRootX;
+                            delayedMouseEnterY = evRootY;
+                        } else {
+                            if (GetWindow_eventMask(hWndChild) & EnterWindowMask) {
+                                enqEvent(EnterWindowMask, hWndChild, __WM_MOUSEENTER, 0, evRootX, evRootY, 0, modifiers, EV_NOTIME);
+                                SetWindow_mouseXY(hWndChild, evRootX, evRootY);
+                            }
+                            // SetFocus(hWndChild);
+                        }
+                        __currentPointerView = hWndChild;
+                    }
+                }
+            }
+
+            /*
+             * ignore child window messages ...
+             */
+            if (GetParent(hWnd) != NULL) {
+                break;
+            }
+
+            {
+                WINDOWPOS *wp = (WINDOWPOS *)lParam;
+                RECT rct, dRect;
+                int x, y, w, h;
+                int dW, dH;
+
+#if 0
+                dRect.left = 0;
+                dRect.top = 0;
+                dRect.right = 100;
+                dRect.bottom = 100;
+                winStyleBits = GetWindowLong(hWnd, GWL_STYLE);
+                winExStyleBits = GetWindowLong(hWnd, GWL_EXSTYLE);
+                AdjustWindowRectEx(&dRect, winStyleBits, 0, winExStyleBits);
+                dW = dRect.right - dRect.left;
+                dH = dRect.bottom - dRect.top;
+#endif
+                GetClientRect(hWnd, &rct);
+
+                x = rct.left;
+                y = rct.top;
+                w = rct.right - rct.left;
+                h = rct.bottom - rct.top;
+
+                if (__debug__) {
+                    EVENT_PRINTF(("WM_WINDOWPOSCHANGED ["));
+
+                    if (wp->flags & SWP_NOSIZE) {
+                        EVENT_PRINTF(("NOSIZE "));
+                    }
+                    if (wp->flags & SWP_NOMOVE) {
+                        EVENT_PRINTF(("NOMOVE "));
+                    }
+                    if (wp->flags & SWP_NOZORDER) {
+                        EVENT_PRINTF(("NOZORDER "));
+                    }
+                    if (wp->flags & SWP_NOREDRAW) {
+                        EVENT_PRINTF(("NOREDRAW "));
+                    }
+                    if (wp->flags & SWP_NOACTIVATE) {
+                        EVENT_PRINTF(("NOACTIVATE "));
+                    }
+                    if (wp->flags & SWP_FRAMECHANGED) {
+                        EVENT_PRINTF(("FRAMECHANGED "));
+                    }
+                    if (wp->flags & SWP_NOCOPYBITS) {
+                        EVENT_PRINTF(("NOCOPYBITS "));
+                    }
+                    if (wp->flags & SWP_NOOWNERZORDER) {
+                        EVENT_PRINTF(("NOOWNERZORDER "));
+                    }
+                    if (wp->flags & SWP_NOSENDCHANGING) {
+                        EVENT_PRINTF(("NOSENDCHANGING "));
+                    }
+                    if (wp->flags & SWP_DEFERERASE) {
+                        EVENT_PRINTF(("DEFERERASE "));
+                    }
+                    if (wp->flags & SWP_ASYNCWINDOWPOS) {
+                        EVENT_PRINTF(("ASYNCWINDOWPOS "));
+                    }
+                    if (wp->flags & SWP_HIDEWINDOW) {
+                        EVENT_PRINTF(("HIDEWINDOW "));
+                    }
+                    if (wp->flags & SWP_SHOWWINDOW) {
+                        EVENT_PRINTF(("SHOWWINDOW "));
+                    }
+
+                    EVENT_PRINTF(("] %d/%d %d/%d flags:%d (0x%x) ->",
+                                wp->x, wp->y, wp->cx, wp->cy, wp->flags, wp->flags));
+                    EVENT_PRINTF(("  client rect now: %d/%d %d/%d\n",x, y, w, h));
+
+                } /* __debug__ */
 #ifdef THIS_IS_WRONG
-		if (!(wp->flags & SWP_NOSIZE)) {
-		    EVENT_PRINTF(("w,h: %d/%d vs. %d/%d\n", wp->cx, wp->cy, w, h));
-		    w = wp->cx;
-		    h = wp->cy;
-		}
-		if (!(wp->flags & SWP_NOMOVE)) {
-		    EVENT_PRINTF(("x,y: %d/%d vs. %d/%d\n", wp->x, wp->y, x, y));
-		    x = wp->x;
-		    y = wp->y;
-		}
-#endif
-		lastPos_win = 0;
-
-		if ((w == 0) && (h == 0)) {
-		    EVENT_PRINTF(("w,h = 0.\n"));
-		    if (! GetWindow_iconified(hWnd)) {
-			EVENT_PRINTF(("iconified.\n"));
-			SetWindow_iconified(hWnd, 1);
-			DPRINTF(("WM_WINDOWPOSCHANGED to iconified (flags:0x%x)\n", wp->flags));
-			enqEvent(0, hWnd, __WM_ICONIFIED, 1, 0, 0, 0, 0, EV_NOTIME);
-		    }
-		} else {
-		    if (GetWindow_iconified(hWnd)) {
-			EVENT_PRINTF(("deiconified.\n"));
-			SetWindow_iconified(hWnd, 0);
-			DPRINTF(("WM_WINDOWPOSCHANGED to deiconified (flags:0x%x)\n", wp->flags));
-			enqEvent(0, hWnd, __WM_ICONIFIED, 0, 0, 0, 0, 0, EV_NOTIME);
-		    }
-		    if (!(wp->flags & SWP_NOSIZE)
-		     || !(wp->flags & SWP_NOMOVE)) {
-			EVENT_PRINTF(("enq event %x: %d, %d, %d, %d\n", hWnd, x, y, w, h));
+                if (!(wp->flags & SWP_NOSIZE)) {
+                    EVENT_PRINTF(("w,h: %d/%d vs. %d/%d\n", wp->cx, wp->cy, w, h));
+                    w = wp->cx;
+                    h = wp->cy;
+                }
+                if (!(wp->flags & SWP_NOMOVE)) {
+                    EVENT_PRINTF(("x,y: %d/%d vs. %d/%d\n", wp->x, wp->y, x, y));
+                    x = wp->x;
+                    y = wp->y;
+                }
+#endif
+                lastPos_win = 0;
+
+                if ((w == 0) && (h == 0)) {
+                    EVENT_PRINTF(("w,h = 0.\n"));
+                    if (! GetWindow_iconified(hWnd)) {
+                        EVENT_PRINTF(("iconified.\n"));
+                        SetWindow_iconified(hWnd, 1);
+                        DPRINTF(("WM_WINDOWPOSCHANGED to iconified (flags:0x%x)\n", wp->flags));
+                        enqEvent(0, hWnd, __WM_ICONIFIED, 1, 0, 0, 0, 0, EV_NOTIME);
+                    }
+                } else {
+                    if (GetWindow_iconified(hWnd)) {
+                        EVENT_PRINTF(("deiconified.\n"));
+                        SetWindow_iconified(hWnd, 0);
+                        DPRINTF(("WM_WINDOWPOSCHANGED to deiconified (flags:0x%x)\n", wp->flags));
+                        enqEvent(0, hWnd, __WM_ICONIFIED, 0, 0, 0, 0, 0, EV_NOTIME);
+                    }
+                    if (!(wp->flags & SWP_NOSIZE)
+                     || !(wp->flags & SWP_NOMOVE)) {
+                        EVENT_PRINTF(("enq event %x: %d, %d, %d, %d\n", hWnd, x, y, w, h));
 #ifdef COMPRESS_WINDOWPOSCHANGED
-			/*
-			 * remember the current
-			 * window and size;
-			 * This allows the backend to ignore
-			 * intermediate events.
-			 */
-			lastPos_w = w;
-			lastPos_h = h;
-			lastPos_x = x;
-			lastPos_y = y;
-			lastPos_win = hWnd;
-#endif
-			enqEvent(0, hWnd, WM_WINDOWPOSCHANGED, 0, x, y, w, h, EV_NOTIME);
-		    } else {
-			EVENT_PRINTF(("no event due to SWP_NOSIZE/SWP_NOMOVE.\n"));
-		    }
-		}
-	    }
-	    *pDefault = 0;
-	    return 0;
-
-	case WM_ERASEBKGND:
-	    DPRINTFIF(__debug_WM_ERASEBKGND__ , ("WM_ERASEBKGND\n"));
-	    if (isNative) {
-		NDPRINTF(("WM_ERASEBKGND for native - default handling\n"));
-		return 0;
-	    }
+                        /*
+                         * remember the current
+                         * window and size;
+                         * This allows the backend to ignore
+                         * intermediate events.
+                         */
+                        lastPos_w = w;
+                        lastPos_h = h;
+                        lastPos_x = x;
+                        lastPos_y = y;
+                        lastPos_win = hWnd;
+#endif
+                        enqEvent(0, hWnd, WM_WINDOWPOSCHANGED, 0, x, y, w, h, EV_NOTIME);
+                    } else {
+                        EVENT_PRINTF(("no event due to SWP_NOSIZE/SWP_NOMOVE.\n"));
+                    }
+                }
+            }
+            *pDefault = 0;
+            return 0;
+
+        case WM_ERASEBKGND:
+            DPRINTFIF(__debug_WM_ERASEBKGND__ , ("WM_ERASEBKGND\n"));
+            if (isNative) {
+                NDPRINTF(("WM_ERASEBKGND for native - default handling\n"));
+                return 0;
+            }
 
 #ifndef PRE_21_NOV
-	    *pDefault = 0;
-	    return 0;
-#else
-
-	    if (GetWindow_flag(hWnd) & LI_INPUTWIN) {
-		*pDefault = 0;
-		return 0;
-	    }
-	    if (hWnd == __rootWinSpezial) {
-		*pDefault = 0;
-		return 0;
-	    }
-
-	    /* THIS_WORKS */
-	    *pDefault = 0;
-	    return 0;
+            *pDefault = 0;
+            return 0;
+#else
+
+            if (GetWindow_flag(hWnd) & LI_INPUTWIN) {
+                *pDefault = 0;
+                return 0;
+            }
+            if (hWnd == __rootWinSpezial) {
+                *pDefault = 0;
+                return 0;
+            }
+
+            /* THIS_WORKS */
+            *pDefault = 0;
+            return 0;
 
 #endif  /* ! PRE_21_NOV */
 
-	case WM_PAINT:
-	    DPRINTFIF(__debug_WM_PAINT__ , ("WM_PAINT ********************* "));
-
-	    if (isNative) {
-		NDPRINTF(("WM_PAINT for native - default handling\n"));
-		return 0;
-	    }
+        case WM_PAINT:
+            DPRINTFIF(__debug_WM_PAINT__ , ("WM_PAINT ********************* "));
+
+            if (isNative) {
+                NDPRINTF(("WM_PAINT for native - default handling\n"));
+                return 0;
+            }
 
 #ifndef PRE_21_NOV
-	    {   int n;
-
-		n = __generateExposes( hWnd, NULL, WM_PAINT, 0 );
-
-		if( n <= 0 ) {
-		    * pDefault = 1;
-		    return 0;
-		}
-		* pDefault = 0;
-		return n;
-	    }
-#else
-
-
-
-	    if (GetWindow_flag(hWnd) & LI_INPUTWIN) {
-		*pDefault = 0;
-		return 0;
-	    }
-
-	    if (hWnd == __rootWinSpezial) {
+            {   int n;
+
+                n = __generateExposes( hWnd, NULL, WM_PAINT, 0 );
+
+                if( n <= 0 ) {
+                    * pDefault = 1;
+                    return 0;
+                }
+                * pDefault = 0;
+                return n;
+            }
+#else
+
+
+
+            if (GetWindow_flag(hWnd) & LI_INPUTWIN) {
+                *pDefault = 0;
+                return 0;
+            }
+
+            if (hWnd == __rootWinSpezial) {
 # ifdef THIS_MAKES_GUI_PAINTER_START_SLOW
-		*pDefault = 0;
-# endif
-		return 0;
-	    }
-
-	    {
-		int retVal;
+                *pDefault = 0;
+# endif
+                return 0;
+            }
+
+            {
+                int retVal;
 
 # ifdef LATE_GENERATE_EXPOSE
-		enqEvent(0, hWnd, __WM_PAINT, 0, 0, 0, 0, 0, EV_NOTIME);
+                enqEvent(0, hWnd, __WM_PAINT, 0, 0, 0, 0, 0, EV_NOTIME);
 # else
-		AQUIRE_DRAW_MUTEX
-		retVal = __generateExposes(hWnd, NULL, WM_PAINT, WM_PAINT_CLEAR_EARLY);
-		RELEASE_DRAW_MUTEX
-# endif
-		switch (retVal) {
-		    case -1:  /* error */
-			*pDefault = 0;
-			break;
-		    case 0:   /* nothing generated */
-		    default:  /* generated events */
-			break;
-		}
+                AQUIRE_DRAW_MUTEX
+                retVal = __generateExposes(hWnd, NULL, WM_PAINT, WM_PAINT_CLEAR_EARLY);
+                RELEASE_DRAW_MUTEX
+# endif
+                switch (retVal) {
+                    case -1:  /* error */
+                        *pDefault = 0;
+                        break;
+                    case 0:   /* nothing generated */
+                    default:  /* generated events */
+                        break;
+                }
 # ifdef THIS_IS_BAD
-		*pDefault = 0;
-		return 1;
-# endif
-	    }
-	    return 0;
+                *pDefault = 0;
+                return 1;
+# endif
+            }
+            return 0;
 
 #endif  /* ! PRE_21_NOV */
 
-	case WM_SIZE:
-	    DPRINTFIF(__debug_WM_SIZE__ , ("WM_SIZE\n"));
-
-	    lastPos_win = 0;
-	    /*
-	     * ignore child window messages ...
-	     */
-	    if (GetParent(hWnd) != NULL) {
-		*pDefault = 0;
-		return 0;
-	    }
-
-	    switch (wParam) {
-		case SIZE_MAXIMIZED:     /* default handling */
-		case SIZE_MINIMIZED:     /* default handling */
-		case SIZE_RESTORED:      /* default handling */
-		    {
-			RECT rct;
-			int x, y, w, h;
-
-			GetClientRect(hWnd, &rct);
-
-			x = rct.left;
-			y = rct.top;
-			w = rct.right - rct.left;
-			h = rct.bottom - rct.top;
-
-			EVENT_PRINTF(("WM_MIN/MAX/RESTORED\n"));
-
-			if ((w == 0) && (h == 0)) {
-			    /*
-			     * iconified ...
-			     */
-			    if (! GetWindow_iconified(hWnd)) {
-				SetWindow_iconified(hWnd, 1);
-				enqEvent(0, hWnd, __WM_ICONIFIED, 1, 0, 0, 0, 0, EV_NOTIME);
-			    }
-			} else {
-			    if (GetWindow_iconified(hWnd)) {
-				SetWindow_iconified(hWnd, 0);
-				enqEvent(0, hWnd, __WM_ICONIFIED, 0, 0, 0, 0, 0, EV_NOTIME);
-			    }
-			    EVENT_PRINTF(("enq event2 %x: %d, %d, %d, %d\n", hWnd, x, y, w, h));
+        case WM_SIZE:
+            DPRINTFIF(__debug_WM_SIZE__ , ("WM_SIZE\n"));
+
+            lastPos_win = 0;
+            /*
+             * ignore child window messages ...
+             */
+            if (GetParent(hWnd) != NULL) {
+                *pDefault = 0;
+                return 0;
+            }
+
+            switch (wParam) {
+                case SIZE_MAXIMIZED:     /* default handling */
+                case SIZE_MINIMIZED:     /* default handling */
+                case SIZE_RESTORED:      /* default handling */
+                    {
+                        RECT rct;
+                        int x, y, w, h;
+
+                        GetClientRect(hWnd, &rct);
+
+                        x = rct.left;
+                        y = rct.top;
+                        w = rct.right - rct.left;
+                        h = rct.bottom - rct.top;
+
+                        EVENT_PRINTF(("WM_MIN/MAX/RESTORED\n"));
+
+                        if ((w == 0) && (h == 0)) {
+                            /*
+                             * iconified ...
+                             */
+                            if (! GetWindow_iconified(hWnd)) {
+                                SetWindow_iconified(hWnd, 1);
+                                enqEvent(0, hWnd, __WM_ICONIFIED, 1, 0, 0, 0, 0, EV_NOTIME);
+                            }
+                        } else {
+                            if (GetWindow_iconified(hWnd)) {
+                                SetWindow_iconified(hWnd, 0);
+                                enqEvent(0, hWnd, __WM_ICONIFIED, 0, 0, 0, 0, 0, EV_NOTIME);
+                            }
+                            EVENT_PRINTF(("enq event2 %x: %d, %d, %d, %d\n", hWnd, x, y, w, h));
 #ifdef COMPRESS_WINDOWPOSCHANGED
-			    /*
-			     * remember the current
-			     * window and size;
-			     * This allows the backend to ignore
-			     * intermediate events.
-			     */
-			    lastPos_w = w;
-			    lastPos_h = h;
-			    lastPos_x = x;
-			    lastPos_y = y;
-			    lastPos_win = hWnd;
-#endif
-			    enqEvent(0, hWnd, WM_WINDOWPOSCHANGED, 0, x, y, w, h, EV_NOTIME);
-			}
-		   }
-		   break;
-
-		default:                 /* ignore */
-		    *pDefault = 0;
-		    return 0;
-	    }
-	    break;
-
-	case WM_DROPFILES:
-	    DPRINTFIF(__debug_WM_DROPFILES__ , ("WM_DROPFILES\n"));
-	    enqEvent(0, hWnd, message, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_SHOWWINDOW:
-	    DPRINTFIF(__debug_WM_SHOWWINDOW__ , ("WM_SHOWWINDOW h=%x\n", hWnd));
-	    enqEvent(0, hWnd, message, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    if (isNative) {
-		NDPRINTF(("WM_SHOWWINDOW for native - default handling\n"));
-		return 0;
-	    }
-	    *pDefault = 0;
-	    break;
-
-	case WM_MOUSEACTIVATE :
-	    DPRINTFIF(__debug_WM_MOUSEACTIVATE__ , ("WM_MOUSEACTIVATE h=%x parent=%x\n", hWnd, GetParent(hWnd)));
-
-	    /*
-	     * ignore child window messages ...
-	     */
-	    if (GetParent(hWnd)) {
-		return 0;
-	    }
-
-	    *pDefault = 0;
-	    if ((hWnd == __rootWinSpezial) || (hWnd == GetActiveWindow())) {
-		DDPRINTF(("NOACTIVATE (root or already)\n"));
-		return MA_NOACTIVATE;
-	    }
-	    if (LOWORD(lParam) != HTCLIENT) {
-		DDPRINTF(("ACTIVATE (not client)\n"));
-		return MA_ACTIVATE;
-	    }
-	    if (__activateOnClick) {
-		if (__ignoreButtonPressOnActivate) {
-		    DDPRINTF(("ACTIVATE_EAT\n"));
-		    /*
-		     * windows is sooo stupid:
-		     * it will send me a MOTION soon after, with the
-		     * to the click location, with the buttonState down.
-		     * The app will interpret that as a pressed motion and
-		     * do a selection (if in a textview).
-		     * To prevent this, we set a flag here, that the following
-		     * motion is to be suppressed.
-		     * Until the mouse is released.
-		     */
-		    __eatingMouseEvents = 1;
-		    return MA_ACTIVATEANDEAT;
-		}
-		DDPRINTF(("ACTIVATE\n"));
-		return MA_ACTIVATE;
-	    }
-	    DDPRINTF(("NO_ACTIVATE\n"));
-	    return MA_NOACTIVATE;
-
-	case WM_NCHITTEST:
-	    EVENT_PRINTF2(("WM_NCHITTEST\n"));
-	    if (hWnd == __rootWinSpezial) {
-		*pDefault = 0;
-		return HTCLIENT;
-	    }
-	    break;
-
-	case WM_NCACTIVATE:
-	    EVENT_PRINTF(("WM_NCACTIVATE\n"));
-	    break;
-
-	case WM_ACTIVATE:
-	    CPRINTF(("WM_ACTIVATE %s h=%x\n", LOWORD(wParam) ? "active" : "inactive", hWnd));
-
-	    switch (LOWORD(wParam)) {
-		case WA_INACTIVE:
-		    EVENT_PRINTF2(("WM_ACTIVATE inactive h=%x\n", hWnd));
-		    break;
-
-		case WA_ACTIVE:
-		    EVENT_PRINTF2(("WM_ACTIVATE active h=%x\n", hWnd));
+                            /*
+                             * remember the current
+                             * window and size;
+                             * This allows the backend to ignore
+                             * intermediate events.
+                             */
+                            lastPos_w = w;
+                            lastPos_h = h;
+                            lastPos_x = x;
+                            lastPos_y = y;
+                            lastPos_win = hWnd;
+#endif
+                            enqEvent(0, hWnd, WM_WINDOWPOSCHANGED, 0, x, y, w, h, EV_NOTIME);
+                        }
+                   }
+                   break;
+
+                default:                 /* ignore */
+                    *pDefault = 0;
+                    return 0;
+            }
+            break;
+
+        case WM_DROPFILES:
+            DPRINTFIF(__debug_WM_DROPFILES__ , ("WM_DROPFILES\n"));
+            enqEvent(0, hWnd, message, wParam, 0, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_SHOWWINDOW:
+            DPRINTFIF(__debug_WM_SHOWWINDOW__ , ("WM_SHOWWINDOW h=%x\n", hWnd));
+            enqEvent(0, hWnd, message, wParam, 0, 0, 0, 0, EV_NOTIME);
+            if (isNative) {
+                NDPRINTF(("WM_SHOWWINDOW for native - default handling\n"));
+                return 0;
+            }
+            *pDefault = 0;
+            break;
+
+        case WM_MOUSEACTIVATE :
+            DPRINTFIF(__debug_WM_MOUSEACTIVATE__ , ("WM_MOUSEACTIVATE h=%x parent=%x\n", hWnd, GetParent(hWnd)));
+
+            /*
+             * ignore child window messages ...
+             */
+            if (GetParent(hWnd)) {
+                return 0;
+            }
+
+            *pDefault = 0;
+            if ((hWnd == __rootWinSpezial) || (hWnd == GetActiveWindow())) {
+                DDPRINTF(("NOACTIVATE (root or already)\n"));
+                return MA_NOACTIVATE;
+            }
+            if (LOWORD(lParam) != HTCLIENT) {
+                DDPRINTF(("ACTIVATE (not client)\n"));
+                return MA_ACTIVATE;
+            }
+            if (__activateOnClick) {
+                if (__ignoreButtonPressOnActivate) {
+                    DDPRINTF(("ACTIVATE_EAT\n"));
+                    /*
+                     * windows is sooo stupid:
+                     * it will send me a MOTION soon after, with the
+                     * to the click location, with the buttonState down.
+                     * The app will interpret that as a pressed motion and
+                     * do a selection (if in a textview).
+                     * To prevent this, we set a flag here, that the following
+                     * motion is to be suppressed.
+                     * Until the mouse is released.
+                     */
+                    __eatingMouseEvents = 1;
+                    return MA_ACTIVATEANDEAT;
+                }
+                DDPRINTF(("ACTIVATE\n"));
+                return MA_ACTIVATE;
+            }
+            DDPRINTF(("NO_ACTIVATE\n"));
+            return MA_NOACTIVATE;
+
+        case WM_NCHITTEST:
+            EVENT_PRINTF2(("WM_NCHITTEST\n"));
+            if (hWnd == __rootWinSpezial) {
+                *pDefault = 0;
+                return HTCLIENT;
+            }
+            break;
+
+        case WM_NCACTIVATE:
+            EVENT_PRINTF(("WM_NCACTIVATE\n"));
+            break;
+
+        case WM_ACTIVATE:
+            CPRINTF(("WM_ACTIVATE %s h=%x\n", LOWORD(wParam) ? "active" : "inactive", hWnd));
+
+            switch (LOWORD(wParam)) {
+                case WA_INACTIVE:
+                    EVENT_PRINTF2(("WM_ACTIVATE inactive h=%x\n", hWnd));
+                    break;
+
+                case WA_ACTIVE:
+                    EVENT_PRINTF2(("WM_ACTIVATE active h=%x\n", hWnd));
 
 #ifdef THIS_DOES_NOT_AVOID_DOUBLE_REPAINTS
-		    __generateRecursiveExposes(hWnd, WM_PAINT);
+                    __generateRecursiveExposes(hWnd, WM_PAINT);
 #endif /* sigh */
-		    break;
-
-		case WA_CLICKACTIVE:
-		    EVENT_PRINTF2(("++ WM_ACTIVATE clkactive h=%x\n", hWnd));
-		    break;
-
-		default:
-		    EVENT_PRINTF2(("WM_ACTIVATE ? h=%x\n", hWnd));
-		    break;
-	    }
+                    break;
+
+                case WA_CLICKACTIVE:
+                    EVENT_PRINTF2(("++ WM_ACTIVATE clkactive h=%x\n", hWnd));
+                    break;
+
+                default:
+                    EVENT_PRINTF2(("WM_ACTIVATE ? h=%x\n", hWnd));
+                    break;
+            }
 
 #ifndef PRE_25_NOV_03
-	    if (__currentCapture == CAPTURE_NONE) {
-		HWND  newHWnd = 0;
-		POINT newPoint;
-
-		if (LOWORD(wParam) != WA_INACTIVE) {
-		    if (MustHandleButtonEvent()) {
-			newPoint.x = evRootX;
-			newPoint.y = evRootY;
-
-			newHWnd = WindowFromPoint (newPoint);
-
-			if (newHWnd) {
-			    if ( (newHWnd == hWnd) || IsChild(hWnd, newHWnd) ) {
-				ScreenToClient (newHWnd, & newPoint);
-
-				if ((newPoint.x < 0) || (newPoint.y < 0)) {
-				    newHWnd = 0;
-				}
-			    } else {
-				newHWnd = 0;
-			    }
-			}
-		    }
-		}
-		CPRINTF(( "Old Handle: %x New Handle: %x  x:%d y:%d\n", __currentPointerView, newHWnd, newPoint.x, newPoint.y));
-
-		if (newHWnd != __currentPointerView) {
-		    int modifiers = getModifiers();
-
-		    if (__currentPointerView) {
-			if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
-			    enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
-			    SetWindow_mouseXY(__currentPointerView, -9999, -9999);
-			}
-		    }
-		    __currentPointerView = newHWnd;
-
-		    if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
-			enqEvent(EnterWindowMask, __currentPointerView, __WM_MOUSEENTER, 0, newPoint.x, newPoint.y, 0, modifiers, EV_NOTIME);
-			SetWindow_mouseXY(__currentPointerView, newPoint.x, newPoint.y);
-		    }
-		}
-	    }
-#endif
-	    enqEvent(0, hWnd, WM_ACTIVATE, wParam, 0, 0, 0, 0, EV_NOTIME);
-
-	    if (isNative) {
-		return 0;
-	    }
-	    break;
-
-	case WM_HOTKEY:
-	    // console_fprintf(stderr, "winEventProcessing [info]: receive hotkey %x\n",wParam);
-	    DPRINTFIF(__debug_WM_KEYUP__ , ("WM_HOTKEY %x\n", wParam));
-	    {
-		enqEvent(0, hWnd, WM_HOTKEY, wParam, lParam, 0, 0, 0, evTime);
-	    }
-	    break;
-
-	case WM_SYSCHAR:
-	    EVENT_PRINTF2(("WM_SYSCHAR h=%x %x\n", hWnd, wParam));
-	    goto commonChar;
+            if (__currentCapture == CAPTURE_NONE) {
+                HWND  newHWnd = 0;
+                POINT newPoint;
+
+                if (LOWORD(wParam) != WA_INACTIVE) {
+                    if (MustHandleButtonEvent()) {
+                        newPoint.x = evRootX;
+                        newPoint.y = evRootY;
+
+                        newHWnd = WindowFromPoint (newPoint);
+
+                        if (newHWnd) {
+                            if ( (newHWnd == hWnd) || IsChild(hWnd, newHWnd) ) {
+                                ScreenToClient (newHWnd, & newPoint);
+
+                                if ((newPoint.x < 0) || (newPoint.y < 0)) {
+                                    newHWnd = 0;
+                                }
+                            } else {
+                                newHWnd = 0;
+                            }
+                        }
+                    }
+                }
+                CPRINTF(( "Old Handle: %x New Handle: %x  x:%d y:%d\n", __currentPointerView, newHWnd, newPoint.x, newPoint.y));
+
+                if (newHWnd != __currentPointerView) {
+                    int modifiers = getModifiers();
+
+                    if (__currentPointerView) {
+                        if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
+                            enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
+                            SetWindow_mouseXY(__currentPointerView, -9999, -9999);
+                        }
+                    }
+                    __currentPointerView = newHWnd;
+
+                    if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
+                        enqEvent(EnterWindowMask, __currentPointerView, __WM_MOUSEENTER, 0, newPoint.x, newPoint.y, 0, modifiers, EV_NOTIME);
+                        SetWindow_mouseXY(__currentPointerView, newPoint.x, newPoint.y);
+                    }
+                }
+            }
+#endif
+            enqEvent(0, hWnd, WM_ACTIVATE, wParam, 0, 0, 0, 0, EV_NOTIME);
+
+            if (isNative) {
+                return 0;
+            }
+            break;
+
+        case WM_HOTKEY:
+            // console_fprintf(stderr, "winEventProcessing [info]: receive hotkey %x\n",wParam);
+            DPRINTFIF(__debug_WM_KEYUP__ , ("WM_HOTKEY %x\n", wParam));
+            {
+                enqEvent(0, hWnd, WM_HOTKEY, wParam, lParam, 0, 0, 0, evTime);
+            }
+            break;
+
+        case WM_SYSCHAR:
+            EVENT_PRINTF2(("WM_SYSCHAR h=%x %x\n", hWnd, wParam));
+            goto commonChar;
 
 #ifdef WM_UNICHAR
-	/* does not work, anyway */
-	case WM_UNICHAR:
-	    DPRINTFIF(__debug_WM_CHAR__ , ("WM_UNICHAR h=%x %x\n", hWnd, wParam));
-	    if (wParam == UNICODE_NOCHAR) {
-		/* this is a query from windows to see if I am able to receive unicode... */
-		*pDefault = 0;
-		return 1;
-	    }
-	    goto commonChar;
-#endif
-
-	case WM_CHAR:
-	    DPRINTFIF(__debug_WM_CHAR__ , ("WM_CHAR h=%x %x\n", hWnd, wParam));
-#if 0
-	    EVENT_PRINTF2(("WM_CHAR h=%x %x\n", hWnd, wParam));
-#endif
-	commonChar:
-	    if (isNative) {
-		NDPRINTF(("WM_CHAR for native - default handling\n"));
-		return 0;
-	    }
-
-	    {
-		HWND destWindow;
-		int evMask;
-
-		if (__focusFollowsMouse) {
-		    destWindow = __currentPointerView;
-		    if (destWindow == 0) {
-			destWindow = hWnd;
-		    }
-		} else {
-		    destWindow = hWnd;
-		}
-
-		evMask = GetWindow_eventMask(destWindow);
-		if (evMask & (KeyPressMask | KeyReleaseMask)) {
-		    POINT p;
-		    int modifiers = getModifiers();
-
-		    p.x = evRootX;
-		    p.y = evRootY;
-		    ScreenToClient(destWindow, &p);
-		    x = p.x;
-		    y = p.y;
-
-		    DPRINTFIF(__debug_WM_CHAR__ , ("key:%x modifiers: %x\n", wParam, modifiers));
-		    if (evMask & KeyPressMask)
-			enqEvent(KeyPressMask, destWindow, WM_KEYDOWN, wParam, x, y, lParam, (modifiers | TRANSLATED_KEY), evTime);
-		    if (evMask & KeyReleaseMask)
-			enqEvent(KeyReleaseMask, destWindow, WM_KEYUP, wParam, x, y, lParam, (modifiers | TRANSLATED_KEY), evTime);
-		}
-	    }
-	    *pDefault = 0;
-	    return 0;
-
-
-	case WM_KEYUP:
-	    DPRINTFIF(__debug_WM_KEYUP__ , ("WM_KEYUP h=%x %x\n", hWnd, wParam));
-	    goto commonKeyUp;
-
-	case WM_SYSKEYUP:
-	    DPRINTFIF(__debug_WM_KEYUP__ , ("WM_SYSKEYUP %x\n, wParam"));
-	commonKeyUp:
-	    if (isNative) {
-		NDPRINTF(("WM_KEYUP/WM_SYSKEYUP for native - default handling\n"));
-		return 0;
-	    }
-	    {
-		HWND destWindow;
-
-		if (__focusFollowsMouse) {
-		    destWindow = __currentPointerView;
-		    if (destWindow == 0) {
-			destWindow = hWnd;
-		    }
-		} else {
-		    destWindow = hWnd;
-		}
-
-		if (GetWindow_eventMask(destWindow) & KeyReleaseMask) {
-		    POINT p;
-
-		    p.x = evRootX;
-		    p.y = evRootY;
-		    ScreenToClient(destWindow, &p);
-		    x = p.x;
-		    y = p.y;
-
-		    enqEvent(KeyReleaseMask, destWindow, message, wParam, x, y, lParam, getModifiers(), evTime);
-		}
-	    }
-	    *pDefault = 0;
-	    return 0;
-
-	case WM_SYSKEYDOWN:
-	    DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_SYSKEYDOWN %x\n, wParam"));
-	    goto commonKey;
-
-	case WM_KEYDOWN:
-	    DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_KEYDOWN h=%x %x\n", hWnd, wParam));
-	commonKey:
-	    if (isNative) {
-		NDPRINTF(("WM_KEYDOWN/WM_SYSKEYDOWN for native - default handling\n"));
-		return 0;
-	    }
+        /* does not work, anyway */
+        case WM_UNICHAR:
+            DPRINTFIF(__debug_WM_CHAR__ , ("WM_UNICHAR h=%x %x\n", hWnd, wParam));
+            if (wParam == UNICODE_NOCHAR) {
+                /* this is a query from windows to see if I am able to receive unicode... */
+                *pDefault = 0;
+                return 1;
+            }
+            goto commonChar;
+#endif
+
+        case WM_CHAR:
+            DPRINTFIF(__debug_WM_CHAR__ , ("WM_CHAR h=%x %x\n", hWnd, wParam));
+#if 0
+            EVENT_PRINTF2(("WM_CHAR h=%x %x\n", hWnd, wParam));
+#endif
+        commonChar:
+            if (isNative) {
+                NDPRINTF(("WM_CHAR for native - default handling\n"));
+                return 0;
+            }
+
+            {
+                HWND destWindow;
+                int evMask;
+
+                if (__focusFollowsMouse) {
+                    destWindow = __currentPointerView;
+                    if (destWindow == 0) {
+                        destWindow = hWnd;
+                    }
+                } else {
+                    destWindow = hWnd;
+                }
+
+                evMask = GetWindow_eventMask(destWindow);
+                if (evMask & (KeyPressMask | KeyReleaseMask)) {
+                    POINT p;
+                    int modifiers = getModifiers();
+
+                    p.x = evRootX;
+                    p.y = evRootY;
+                    ScreenToClient(destWindow, &p);
+                    x = p.x;
+                    y = p.y;
+
+                    DPRINTFIF(__debug_WM_CHAR__ , ("key:%x modifiers: %x\n", wParam, modifiers));
+                    if (evMask & KeyPressMask)
+                        enqEvent(KeyPressMask, destWindow, WM_KEYDOWN, wParam, x, y, lParam, (modifiers | TRANSLATED_KEY), evTime);
+                    if (evMask & KeyReleaseMask)
+                        enqEvent(KeyReleaseMask, destWindow, WM_KEYUP, wParam, x, y, lParam, (modifiers | TRANSLATED_KEY), evTime);
+                }
+            }
+            *pDefault = 0;
+            return 0;
+
+
+        case WM_KEYUP:
+            DPRINTFIF(__debug_WM_KEYUP__ , ("WM_KEYUP h=%x %x\n", hWnd, wParam));
+            goto commonKeyUp;
+
+        case WM_SYSKEYUP:
+            DPRINTFIF(__debug_WM_KEYUP__ , ("WM_SYSKEYUP %x\n, wParam"));
+        commonKeyUp:
+            if (isNative) {
+                NDPRINTF(("WM_KEYUP/WM_SYSKEYUP for native - default handling\n"));
+                return 0;
+            }
+            {
+                HWND destWindow;
+
+                if (__focusFollowsMouse) {
+                    destWindow = __currentPointerView;
+                    if (destWindow == 0) {
+                        destWindow = hWnd;
+                    }
+                } else {
+                    destWindow = hWnd;
+                }
+
+                if (GetWindow_eventMask(destWindow) & KeyReleaseMask) {
+                    POINT p;
+
+                    p.x = evRootX;
+                    p.y = evRootY;
+                    ScreenToClient(destWindow, &p);
+                    x = p.x;
+                    y = p.y;
+
+                    enqEvent(KeyReleaseMask, destWindow, message, wParam, x, y, lParam, getModifiers(), evTime);
+                }
+            }
+            *pDefault = 0;
+            return 0;
+
+        case WM_SYSKEYDOWN:
+            DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_SYSKEYDOWN %x\n, wParam"));
+            goto commonKey;
+
+        case WM_KEYDOWN:
+            DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_KEYDOWN h=%x %x\n", hWnd, wParam));
+        commonKey:
+            if (isNative) {
+                NDPRINTF(("WM_KEYDOWN/WM_SYSKEYDOWN for native - default handling\n"));
+                return 0;
+            }
 
 #ifdef EXIT_WITH_3_CTRL_Cs
-	    if ((msg.wParam == 'c')
-	     && (GetKeyState(VK_CONTROL) & 0x8000)) {
-		/* CTRL-C */
-		if (ctrl_c_count++ > 3)  /* for debugging */
-		    exit(1);
-	    } else {
-		if (msg.wParam != VK_CONTROL)
-		    ctrl_c_count = 0;
-	    }
+            if ((msg.wParam == 'c')
+             && (GetKeyState(VK_CONTROL) & 0x8000)) {
+                /* CTRL-C */
+                if (ctrl_c_count++ > 3)  /* for debugging */
+                    exit(1);
+            } else {
+                if (msg.wParam != VK_CONTROL)
+                    ctrl_c_count = 0;
+            }
 #endif
 #ifdef RELEASE_CAPTURE_WITH_3_ESCAPEs
-	    if (msg.wParam == VK_ESCAPE)) {
-		/* ESCAPE */
-		if (escape_count++ > 3) {
-		    __currentCapture = CAPTURE_NONE;
-		    ReleaseCapture();
-		    CPRINTF(("ReleaseCapture <ESC>\n"));
-		}
-	    } else {
-		escape_count = 0;
-	    }
-#endif
-	    /* FALL INTO */
-
-	    {
-		HWND destWindow;
-
-		if (__focusFollowsMouse) {
-		    destWindow = __currentPointerView;
-		    if (destWindow == 0) {
-			destWindow = hWnd;
-		    }
-		} else {
-		    destWindow = hWnd;
-		}
-
-		if (GetWindow_eventMask(destWindow) & KeyPressMask) {
-		    POINT p;
-
-		    p.x = evRootX;
-		    p.y = evRootY;
-		    ScreenToClient(destWindow, &p);
-		    x = p.x;
-		    y = p.y;
-
-		    enqEvent(KeyPressMask, destWindow, message, wParam, x, y, lParam, getModifiers(), evTime);
-		}
-	    }
-	    *pDefault = 0;
-	    return 0;
+            if (msg.wParam == VK_ESCAPE)) {
+                /* ESCAPE */
+                if (escape_count++ > 3) {
+                    __currentCapture = CAPTURE_NONE;
+                    ReleaseCapture();
+                    CPRINTF(("ReleaseCapture <ESC>\n"));
+                }
+            } else {
+                escape_count = 0;
+            }
+#endif
+            /* FALL INTO */
+
+            {
+                HWND destWindow;
+
+                if (__focusFollowsMouse) {
+                    destWindow = __currentPointerView;
+                    if (destWindow == 0) {
+                        destWindow = hWnd;
+                    }
+                } else {
+                    destWindow = hWnd;
+                }
+
+                if (GetWindow_eventMask(destWindow) & KeyPressMask) {
+                    POINT p;
+
+                    p.x = evRootX;
+                    p.y = evRootY;
+                    ScreenToClient(destWindow, &p);
+                    x = p.x;
+                    y = p.y;
+
+                    enqEvent(KeyPressMask, destWindow, message, wParam, x, y, lParam, getModifiers(), evTime);
+                }
+            }
+            *pDefault = 0;
+            return 0;
 
 #ifdef WM_MOUSEWHEEL
-	case WM_MOUSEWHEEL:
-	    {
-		HWND destWindow;
-
-		if (__focusFollowsMouse) {
-		    destWindow = __currentPointerView;
-		    if (destWindow == 0) {
-			destWindow = hWnd;
-		    }
-		} else {
-		    destWindow = hWnd;
-		}
-
-
-		EVENT_PRINTF(("WM_MOUSEWHEEL h=%x wP=%x lP=%x\n", hWnd, wParam, lParam));
-		if (GetWindow_eventMask(destWindow) & KeyPressMask) {
-		    POINT p;
-		    int delta;
-
-		    p.x = evRootX;
-		    p.y = evRootY;
-		    ScreenToClient(destWindow, &p);
-		    x = p.x;
-		    y = p.y;
-		    delta = evTime - lastMouseWheelTime;
-		    if (evTime < lastMouseWheelTime) {
-			delta = (0xFFFFFFFF - lastMouseWheelTime) + evTime;
-		    }
-		    enqEvent(0, destWindow, message, wParam, x, y, lParam, getModifiers(), delta);
-		}
-		lastMouseWheelTime = evTime;
-	    }
-	    *pDefault = 0;
-	    return 0;
-#endif
-
-	case WM_MOUSEMOVE:
-	    DPRINTFIF(__debug_WM_MOUSEMOVE__ , ("WM_MOUSEMOVE h=%x\n", hWnd));
-	    if (isNative) {
-		NDPRINTF(("WM_MOUSEMOVE for native - default handling\n"));
-		return 0;
-	    }
-
-	    if (hWnd != __currentPointerView) {
-		if (! MustHandleButtonEvent()) {
-		    *pDefault = 0;
-		    return 0;
-		}
-	    }
-
-	    {
-		short x, y;
-		int modifiers = getModifiers();
-
-		x = (int)(short)LOWORD(lParam);
-		y = (int)(short)HIWORD(lParam);
-
-		if (__currentCapture == CAPTURE_NONE) {
-		    if (hWnd != __currentPointerView) {
-			HWND prevPointerView;
-
-			prevPointerView = __currentPointerView;
-			if (prevPointerView) {
-			    if (inSizeMove) {
-				if (needDelayedMouseLeaveWindow == NULL) {
-				    needDelayedMouseLeaveWindow = __currentPointerView;
-				}
-			    } else {
-				if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
-				    enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, evTime);
-				    SetWindow_mouseXY(__currentPointerView, -9999, -9999);
-				}
-			    }
-			    __currentPointerView = 0;
-			}
-
-#if 0
-			if (__activateOnClick) {
-			    /*
-			     * only send mouseEnter if the window belongs to the current
-			     * active window
-			     */
-			    if (GetTopParent(prevPointerView) == GetTopParent(hWnd)) {
-			    }
-			}
-#endif
-			if (inSizeMove) {
-			    needDelayedMouseEnterWindow = hWnd;
-			    delayedMouseEnterX = x;
-			    delayedMouseEnterY = y;
-			} else {
-			    if (GetWindow_eventMask(hWnd) & EnterWindowMask) {
-				enqEvent(EnterWindowMask, hWnd, __WM_MOUSEENTER, 0, x, y, 0, modifiers, evTime);
-				SetWindow_mouseXY(hWnd, x, y);
-			    }
-			}
-			__currentPointerView = hWnd;
-		    }
-		    DPRINTFIF(__debug_WM_MOUSEMOVE__ , ("MouseMove %x\n", __currentPointerView));
-		} else {
-		    CPRINTF(("MouseMove Capture %x\n", __currentPointerView));
-		}
-
-		if ((GetWindow_eventMask(__currentPointerView) & PointerMotionMask)
-		 || (modifiers & AnyButtonMask)) {
-		    if (! __eatingMouseEvents) {
-			if ((x == lastMotionX)
-			 && (y == lastMotionY)
-			 && (__currentPointerView == lastMotionWnd)) {
-			    /* ignore */
-			} else {
-			    lastMotionX = x;
-			    lastMotionY = y;
-			    lastMotionWnd = __currentPointerView;
-
-			    if ((GetWindow_mouseX(__currentPointerView) == x)
-			     && (GetWindow_mouseY(__currentPointerView) == y)) {
-			    } else {
-				enqEvent(PointerMotionMask, __currentPointerView, WM_MOUSEMOVE, wParam, x, y, 0, modifiers, evTime);
-				SetWindow_mouseXY(__currentPointerView, x, y);
-			    }
-			}
-		    }
-		}
-	    }
-	    *pDefault = 0;
-	    return 0;
-
-	case WM_LBUTTONUP:
-	    DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_LBUTTONUP h=%x\n", hWnd));
-	    curButton = Button1;
-	    goto commonButtonUp;
-	case WM_MBUTTONUP:
-	    DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_MBUTTONUP h=%x\n", hWnd));
-	    curButton = Button2;
-	    goto commonButtonUp;
-	case WM_RBUTTONUP:
-	    DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_RBUTTONUP h=%x\n", hWnd));
-	    curButton = Button3;
+        case WM_MOUSEWHEEL:
+            {
+                HWND destWindow;
+
+                if (__focusFollowsMouse) {
+                    destWindow = __currentPointerView;
+                    if (destWindow == 0) {
+                        destWindow = hWnd;
+                    }
+                } else {
+                    destWindow = hWnd;
+                }
+
+
+                EVENT_PRINTF(("WM_MOUSEWHEEL h=%x wP=%x lP=%x\n", hWnd, wParam, lParam));
+                if (GetWindow_eventMask(destWindow) & KeyPressMask) {
+                    POINT p;
+                    int delta;
+
+                    p.x = evRootX;
+                    p.y = evRootY;
+                    ScreenToClient(destWindow, &p);
+                    x = p.x;
+                    y = p.y;
+                    delta = evTime - lastMouseWheelTime;
+                    if (evTime < lastMouseWheelTime) {
+                        delta = (0xFFFFFFFF - lastMouseWheelTime) + evTime;
+                    }
+                    enqEvent(0, destWindow, message, wParam, x, y, lParam, getModifiers(), delta);
+                }
+                lastMouseWheelTime = evTime;
+            }
+            *pDefault = 0;
+            return 0;
+#endif
+
+        case WM_MOUSEMOVE:
+            DPRINTFIF(__debug_WM_MOUSEMOVE__ , ("WM_MOUSEMOVE h=%x\n", hWnd));
+            if (isNative) {
+                NDPRINTF(("WM_MOUSEMOVE for native - default handling\n"));
+                return 0;
+            }
+
+            if (hWnd != __currentPointerView) {
+                if (! MustHandleButtonEvent()) {
+                    *pDefault = 0;
+                    return 0;
+                }
+            }
+
+            {
+                short x, y;
+                int modifiers = getModifiers();
+
+                x = (int)(short)LOWORD(lParam);
+                y = (int)(short)HIWORD(lParam);
+
+                if (__currentCapture == CAPTURE_NONE) {
+                    if (hWnd != __currentPointerView) {
+                        HWND prevPointerView;
+
+                        prevPointerView = __currentPointerView;
+                        if (prevPointerView) {
+                            if (inSizeMove) {
+                                if (needDelayedMouseLeaveWindow == NULL) {
+                                    needDelayedMouseLeaveWindow = __currentPointerView;
+                                }
+                            } else {
+                                if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
+                                    enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, evTime);
+                                    SetWindow_mouseXY(__currentPointerView, -9999, -9999);
+                                }
+                            }
+                            __currentPointerView = 0;
+                        }
+
+#if 0
+                        if (__activateOnClick) {
+                            /*
+                             * only send mouseEnter if the window belongs to the current
+                             * active window
+                             */
+                            if (GetTopParent(prevPointerView) == GetTopParent(hWnd)) {
+                            }
+                        }
+#endif
+                        if (inSizeMove) {
+                            needDelayedMouseEnterWindow = hWnd;
+                            delayedMouseEnterX = x;
+                            delayedMouseEnterY = y;
+                        } else {
+                            if (GetWindow_eventMask(hWnd) & EnterWindowMask) {
+                                enqEvent(EnterWindowMask, hWnd, __WM_MOUSEENTER, 0, x, y, 0, modifiers, evTime);
+                                SetWindow_mouseXY(hWnd, x, y);
+                            }
+                        }
+                        __currentPointerView = hWnd;
+                    }
+                    DPRINTFIF(__debug_WM_MOUSEMOVE__ , ("MouseMove %x\n", __currentPointerView));
+                } else {
+                    CPRINTF(("MouseMove Capture %x\n", __currentPointerView));
+                }
+
+                if ((GetWindow_eventMask(__currentPointerView) & PointerMotionMask)
+                 || (modifiers & AnyButtonMask)) {
+                    if (! __eatingMouseEvents) {
+                        if ((x == lastMotionX)
+                         && (y == lastMotionY)
+                         && (__currentPointerView == lastMotionWnd)) {
+                            /* ignore */
+                        } else {
+                            lastMotionX = x;
+                            lastMotionY = y;
+                            lastMotionWnd = __currentPointerView;
+
+                            if ((GetWindow_mouseX(__currentPointerView) == x)
+                             && (GetWindow_mouseY(__currentPointerView) == y)) {
+                            } else {
+                                enqEvent(PointerMotionMask, __currentPointerView, WM_MOUSEMOVE, wParam, x, y, 0, modifiers, evTime);
+                                SetWindow_mouseXY(__currentPointerView, x, y);
+                            }
+                        }
+                    }
+                }
+            }
+            *pDefault = 0;
+            return 0;
+
+        case WM_LBUTTONUP:
+            DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_LBUTTONUP h=%x\n", hWnd));
+            curButton = Button1;
+            goto commonButtonUp;
+        case WM_MBUTTONUP:
+            DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_MBUTTONUP h=%x\n", hWnd));
+            curButton = Button2;
+            goto commonButtonUp;
+        case WM_RBUTTONUP:
+            DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_RBUTTONUP h=%x\n", hWnd));
+            curButton = Button3;
 commonButtonUp:
-	    if (isNative) {
-		NDPRINTF(("WM_*BUTTONUP for native - default handling\n"));
-		return 0;
-	    }
+            if (isNative) {
+                NDPRINTF(("WM_*BUTTONUP for native - default handling\n"));
+                return 0;
+            }
 
 #ifndef PRE_01_APR_04
-	    if ((__currentPointerView != hWnd) && (__currentPointerView == (HANDLE)0)) {
-		__currentPointerView = hWnd;
-
-		if (GetWindow_eventMask(hWnd) & EnterWindowMask) {
-		    POINT p;
-
-		    p.x = evRootX;
-		    p.y = evRootY;
-
-		    ScreenToClient (hWnd, & p);
-
-		    if ((p.x >= 0) && (p.y >= 0)) {
-			enqEvent(EnterWindowMask, hWnd, __WM_MOUSEENTER, 0, p.x, p.y, 0, getModifiers(), EV_NOTIME);
-			SetWindow_mouseXY(hWnd, p.x, p.y);
-		    } else {
-			__currentPointerView = (HANDLE) 0;
-		    }
-		}
-	    }
-#endif
-
-	    if (__currentCapture == curButton /* CAPTURE_IMPLICIT*/) {
-		__currentCapture = CAPTURE_NONE;
-		ReleaseCapture();
-		CPRINTF(("ReleaseCapture <BUTTONUP>\n"));
-	    }
-	    EVENT_PRINTF3(("WM_BUTTONUP h=%x pos=%d/%d\n",
-			   hWnd, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)));
-
-
-	    if (GetWindow_eventMask(hWnd) & ButtonReleaseMask) {
-		if (__eatingMouseEvents) {
-		    __eatingMouseEvents = 0;
-		} else {
-		    enqEvent(ButtonReleaseMask, hWnd,
-			     message, wParam, (UINT)(short)LOWORD(lParam), (INT)(short)HIWORD(lParam),
-			     wParam, getModifiers(), evTime);
-		}
-	    }
-	    *pDefault = 0;
-	    break;
-
-	case WM_LBUTTONDBLCLK:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_LBUTTONDBLCLK h=%x\n", hWnd));
-	    curButton = Button1;
-	    goto commonButtonDown;
-	case WM_MBUTTONDBLCLK:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_MBUTTONDBLCLK h=%x\n", hWnd));
-	    curButton = Button2;
-	    goto commonButtonDown;
-	case WM_RBUTTONDBLCLK:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_RBUTTONDBLCLK h=%x\n", hWnd));
-	    curButton = Button3;
+            if ((__currentPointerView != hWnd) && (__currentPointerView == (HANDLE)0)) {
+                __currentPointerView = hWnd;
+
+                if (GetWindow_eventMask(hWnd) & EnterWindowMask) {
+                    POINT p;
+
+                    p.x = evRootX;
+                    p.y = evRootY;
+
+                    ScreenToClient (hWnd, & p);
+
+                    if ((p.x >= 0) && (p.y >= 0)) {
+                        enqEvent(EnterWindowMask, hWnd, __WM_MOUSEENTER, 0, p.x, p.y, 0, getModifiers(), EV_NOTIME);
+                        SetWindow_mouseXY(hWnd, p.x, p.y);
+                    } else {
+                        __currentPointerView = (HANDLE) 0;
+                    }
+                }
+            }
+#endif
+
+            if (__currentCapture == curButton /* CAPTURE_IMPLICIT*/) {
+                __currentCapture = CAPTURE_NONE;
+                ReleaseCapture();
+                CPRINTF(("ReleaseCapture <BUTTONUP>\n"));
+            }
+            EVENT_PRINTF3(("WM_BUTTONUP h=%x pos=%d/%d\n",
+                           hWnd, (int)(short)LOWORD(lParam), (int)(short)HIWORD(lParam)));
+
+
+            if (GetWindow_eventMask(hWnd) & ButtonReleaseMask) {
+                if (__eatingMouseEvents) {
+                    __eatingMouseEvents = 0;
+                } else {
+                    enqEvent(ButtonReleaseMask, hWnd,
+                             message, wParam, (UINT)(short)LOWORD(lParam), (INT)(short)HIWORD(lParam),
+                             wParam, getModifiers(), evTime);
+                }
+            }
+            *pDefault = 0;
+            break;
+
+        case WM_LBUTTONDBLCLK:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_LBUTTONDBLCLK h=%x\n", hWnd));
+            curButton = Button1;
+            goto commonButtonDown;
+        case WM_MBUTTONDBLCLK:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_MBUTTONDBLCLK h=%x\n", hWnd));
+            curButton = Button2;
+            goto commonButtonDown;
+        case WM_RBUTTONDBLCLK:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_RBUTTONDBLCLK h=%x\n", hWnd));
+            curButton = Button3;
 #ifdef PRE_25_AUG_2010
-	    if (isNative) {
-		 NDPRINTF(("WM_*BUTTONDBLCLK for native - default handling\n"));
-		 return 0;
-	    }
-	    goto commonButton;
-#else
-	    goto commonButtonDown;
+            if (isNative) {
+                 NDPRINTF(("WM_*BUTTONDBLCLK for native - default handling\n"));
+                 return 0;
+            }
+            goto commonButton;
+#else
+            goto commonButtonDown;
 #endif /* PRE_25_AUG_2010 */
 
-	case WM_LBUTTONDOWN:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_LBUTTONDOWN h=%x\n", hWnd));
-	    curButton = Button1;
-	    goto commonButtonDown;
-	case WM_MBUTTONDOWN:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_MBUTTONDOWN h=%x\n", hWnd));
-	    curButton = Button2;
-	    goto commonButtonDown;
-	case WM_RBUTTONDOWN:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_RBUTTONDOWN h=%x\n", hWnd));
-	    curButton = Button3;
-
-	commonButtonDown:
-	    if (isNative) {
-		NDPRINTF(("WM_*BUTTONDOWN for native - default handling\n"));
-		return 0;
-	    }
-
-	commonButtonWithCapture:
-	    if (__currentCapture == CAPTURE_NONE) {
-		__currentCapture = curButton /*CAPTURE_IMPLICIT*/;
-		//SetFocus(hWnd);
-		SetCapture(hWnd);
-		CPRINTF(("SetCapture <BUTTONDOWN>%x\n",hWnd));
-	    }
-	    goto commonButton;
-
-	commonButton:
-	    EVENT_PRINTF3(("WM_BUTTONDOWN h=%x pos=%d/%d\n",
-			   hWnd, LOWORD(lParam), HIWORD(lParam)));
-
-	    if (GetWindow_eventMask(hWnd) & ButtonPressMask) {
-		if (__eatingMouseEvents) {
-		    __eatingMouseEvents = 0;
-		} else {
-		    enqEvent(ButtonPressMask, hWnd,
-			     message, wParam, (UINT)(short)LOWORD(lParam), (INT)(short)HIWORD(lParam),
-			     wParam, getModifiers(), evTime);
-		}
-	    }
-	    *pDefault = 0;
-	    break;
-
-	case WM_CAPTURECHANGED:
-	    DPRINTFIF(__debug_WM_FOCUS__ , ("WM_CAPTURECHANGED h=%x to %x\n", hWnd, lParam));
-#if 0
-	    if ((__currentCapture != CAPTURE_NONE) && (__currentCapture != CAPTURE_EXPLICIT))
-	    {
-	    }
-#endif
-	    break;
-
-	case WM_KILLFOCUS:
-	    DPRINTFIF(__debug_WM_FOCUS__ , ("WM_KILLFOCUS h=%x\n", hWnd));
-	    // enqEvent(0, hWnd, WM_KILLFOCUS, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    if (isNative) {
-		NDPRINTF(("WM_KILLFOCUS for native - default handling\n"));
-		return 0;
-	    }
-	    *pDefault = 0;
-	    break;
-
-	case WM_SETFOCUS:
-	    DPRINTFIF(__debug_WM_FOCUS__ , ("WM_SETFOCUS h=%x\n", hWnd));
-#if 0
-	    // enqEvent(0,hWnd, WM_SETFOCUS, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    {
-		POINT p;
-		HWND hWndChild,hWndTemp;
-
-		p.x = evRootX;
-		p.y = evRootY;
-		ScreenToClient(hWnd, &p);
-		hWndChild = hWnd; //hWndChild = ChildWindowFromPoint(hWnd,p);
-		do {
-		    hWndTemp = hWndChild;
-		    hWndChild = ChildWindowFromPointEx(hWndTemp,p,CWP_SKIPINVISIBLE|CWP_SKIPDISABLED|CWP_SKIPTRANSPARENT);
-		} while ((hWndChild) && (hWndChild != hWndTemp));
-
-		/*console_printf("WM_ACTIVATE active h=%x p=%d.%d in %x\n", hWnd,p.x,p.y,hWndChild);*/
-		if (hWndChild /*&& (hWndChild != hWnd)*/) {
-		    if (hWndChild != __currentPointerView) {
-			int modifiers = getModifiers();
-
-			if (__currentPointerView) {
-			    if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask)
-				enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
-				SetWindow_mouseXY(__currentPointerView, -9999, -9999);
-
-			    __currentPointerView = 0;
-			}
-			if (GetWindow_eventMask(hWndChild) & EnterWindowMask) {
-			    enqEvent(EnterWindowMask, hWndChild, __WM_MOUSEENTER, 0, evRootX, evRootY, 0, modifiers, EV_NOTIME);
-			    SetWindow_mouseXY(hWndChild, evRootX, evRootY);
-			}
-			//SetFocus(hWndChild);
-			__currentPointerView = hWndChild;
-		    }
-		}
-	    }
-
-	    if (isNative) {
-		NDPRINTF(("WM_SETFOCUS for native - default handling\n"));
-		return 0;
-	    }
-	    *pDefault = 0;
-#endif
-	    break;
-
-	case WM_GETTEXT:
-	    /*EVENT_PRINTF(("WM_GETTEXT %x\n", message));*/
-	    break;
-
-	case WM_GETTEXTLENGTH:
-	    EVENT_PRINTF(("WM_GETTEXTLENGTH %x\n", message));
-	    break;
-
-	case WM_NCCREATE:
-	    EVENT_PRINTF(("WM_NCCREATE %x\n", message));
-	    break;
-
-	case WM_NCMOUSEMOVE:
-	    if (__currentCapture == CAPTURE_NONE) {
-		if (__currentPointerView && (hWnd != __currentPointerView)) {
-		    if (inSizeMove) {
-			if (needDelayedMouseLeaveWindow == NULL) {
-			    needDelayedMouseLeaveWindow = __currentPointerView;
-			}
-		    } else {
-			if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
-			    enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, getModifiers(), evTime);
-			    SetWindow_mouseXY(__currentPointerView, -9999, -9999);
-			}
-		    }
-		    __currentPointerView = 0;
-		}
-	    }
-	    *pDefault = 0;
-	    break;
-
-	case WM_PARENTNOTIFY:
-	    EVENT_PRINTF2(("WM_PARENTNOTIFY h=%x hChild=%x %d\n",
-				hWnd, lParam, LOWORD(wParam)));
-	    break;
-
-	case WM_NCLBUTTONDOWN:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_NCLBUTTONDOWN\n"));
-	    if (__shiftedLeftButtonIsLowerWindow) {
-		/*
-		 * with shift, this is a lower-operation
-		 */
-		if (GetKeyState(VK_SHIFT) & 0x8000) {
-		    SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0,
-				 SWP_NOSENDCHANGING |
-				 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
-		    *pDefault = 0;
-		}
-	    }
-	    break;
-
-	case WM_NCLBUTTONUP:
-	    DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_NCLBUTTONUP\n"));
-	    break;
-
-	case WM_NCRBUTTONDOWN:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_NCRBUTTONDOWN\n"));
-	    if (__rightButtonIsLowerWindow) {
-		/*
-		 * this is a lower-operation
-		 */
-		SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0,
-			     SWP_NOSENDCHANGING |
-			     SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
-		*pDefault = 0;
-	    }
-	    break;
-
-	case WM_NCRBUTTONUP:
-	    DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_NCRBUTTONUP\n"));
-	    break;
-
-	case WM_NCMBUTTONDOWN:
-	    DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_NCMBUTTONDOWN\n"));
-	    break;
-
-	case WM_NCMBUTTONUP:
-	    DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_NCMBUTTONUP\n"));
-	    break;
-
-	case WM_NCLBUTTONDBLCLK:
-	    EVENT_PRINTF(("WM_NCLBUTTONDBLCLK\n"));
-	    break;
-
-	case WM_NCRBUTTONDBLCLK:
-	    EVENT_PRINTF(("WM_NCRBUTTONDBLCLK\n"));
-	    break;
-
-	case WM_NCMBUTTONDBLCLK:
-	    EVENT_PRINTF(("WM_NCMBUTTONDBLCLK\n"));
-	    break;
-
-	case WM_SETTEXT:
-	    DPRINTFIF(__debug_WM_SETTEXT__ , ("WM_SETTEXT\n"));
-	    break;
+        case WM_LBUTTONDOWN:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_LBUTTONDOWN h=%x\n", hWnd));
+            curButton = Button1;
+            goto commonButtonDown;
+        case WM_MBUTTONDOWN:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_MBUTTONDOWN h=%x\n", hWnd));
+            curButton = Button2;
+            goto commonButtonDown;
+        case WM_RBUTTONDOWN:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_RBUTTONDOWN h=%x\n", hWnd));
+            curButton = Button3;
+
+        commonButtonDown:
+            if (isNative) {
+                NDPRINTF(("WM_*BUTTONDOWN for native - default handling\n"));
+                return 0;
+            }
+
+        commonButtonWithCapture:
+            if (__currentCapture == CAPTURE_NONE) {
+                __currentCapture = curButton /*CAPTURE_IMPLICIT*/;
+                //SetFocus(hWnd);
+                SetCapture(hWnd);
+                CPRINTF(("SetCapture <BUTTONDOWN>%x\n",hWnd));
+            }
+            goto commonButton;
+
+        commonButton:
+            EVENT_PRINTF3(("WM_BUTTONDOWN h=%x pos=%d/%d\n",
+                           hWnd, LOWORD(lParam), HIWORD(lParam)));
+
+            if (GetWindow_eventMask(hWnd) & ButtonPressMask) {
+                if (__eatingMouseEvents) {
+                    __eatingMouseEvents = 0;
+                } else {
+                    enqEvent(ButtonPressMask, hWnd,
+                             message, wParam, (UINT)(short)LOWORD(lParam), (INT)(short)HIWORD(lParam),
+                             wParam, getModifiers(), evTime);
+                }
+            }
+            *pDefault = 0;
+            break;
+
+        case WM_CAPTURECHANGED:
+            DPRINTFIF(__debug_WM_FOCUS__ , ("WM_CAPTURECHANGED h=%x to %x\n", hWnd, lParam));
+#if 0
+            if ((__currentCapture != CAPTURE_NONE) && (__currentCapture != CAPTURE_EXPLICIT))
+            {
+            }
+#endif
+            break;
+
+        case WM_KILLFOCUS:
+            DPRINTFIF(__debug_WM_FOCUS__ , ("WM_KILLFOCUS h=%x\n", hWnd));
+            // enqEvent(0, hWnd, WM_KILLFOCUS, wParam, 0, 0, 0, 0, EV_NOTIME);
+            if (isNative) {
+                NDPRINTF(("WM_KILLFOCUS for native - default handling\n"));
+                return 0;
+            }
+            *pDefault = 0;
+            break;
+
+        case WM_SETFOCUS:
+            DPRINTFIF(__debug_WM_FOCUS__ , ("WM_SETFOCUS h=%x\n", hWnd));
+#if 0
+            // enqEvent(0,hWnd, WM_SETFOCUS, wParam, 0, 0, 0, 0, EV_NOTIME);
+            {
+                POINT p;
+                HWND hWndChild,hWndTemp;
+
+                p.x = evRootX;
+                p.y = evRootY;
+                ScreenToClient(hWnd, &p);
+                hWndChild = hWnd; //hWndChild = ChildWindowFromPoint(hWnd,p);
+                do {
+                    hWndTemp = hWndChild;
+                    hWndChild = ChildWindowFromPointEx(hWndTemp,p,CWP_SKIPINVISIBLE|CWP_SKIPDISABLED|CWP_SKIPTRANSPARENT);
+                } while ((hWndChild) && (hWndChild != hWndTemp));
+
+                /*console_printf("WM_ACTIVATE active h=%x p=%d.%d in %x\n", hWnd,p.x,p.y,hWndChild);*/
+                if (hWndChild /*&& (hWndChild != hWnd)*/) {
+                    if (hWndChild != __currentPointerView) {
+                        int modifiers = getModifiers();
+
+                        if (__currentPointerView) {
+                            if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask)
+                                enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
+                                SetWindow_mouseXY(__currentPointerView, -9999, -9999);
+
+                            __currentPointerView = 0;
+                        }
+                        if (GetWindow_eventMask(hWndChild) & EnterWindowMask) {
+                            enqEvent(EnterWindowMask, hWndChild, __WM_MOUSEENTER, 0, evRootX, evRootY, 0, modifiers, EV_NOTIME);
+                            SetWindow_mouseXY(hWndChild, evRootX, evRootY);
+                        }
+                        //SetFocus(hWndChild);
+                        __currentPointerView = hWndChild;
+                    }
+                }
+            }
+
+            if (isNative) {
+                NDPRINTF(("WM_SETFOCUS for native - default handling\n"));
+                return 0;
+            }
+            *pDefault = 0;
+#endif
+            break;
+
+        case WM_GETTEXT:
+            /*EVENT_PRINTF(("WM_GETTEXT %x\n", message));*/
+            break;
+
+        case WM_GETTEXTLENGTH:
+            EVENT_PRINTF(("WM_GETTEXTLENGTH %x\n", message));
+            break;
+
+        case WM_NCCREATE:
+            EVENT_PRINTF(("WM_NCCREATE %x\n", message));
+            break;
+
+        case WM_NCMOUSEMOVE:
+            if (__currentCapture == CAPTURE_NONE) {
+                if (__currentPointerView && (hWnd != __currentPointerView)) {
+                    if (inSizeMove) {
+                        if (needDelayedMouseLeaveWindow == NULL) {
+                            needDelayedMouseLeaveWindow = __currentPointerView;
+                        }
+                    } else {
+                        if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
+                            enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, getModifiers(), evTime);
+                            SetWindow_mouseXY(__currentPointerView, -9999, -9999);
+                        }
+                    }
+                    __currentPointerView = 0;
+                }
+            }
+            *pDefault = 0;
+            break;
+
+        case WM_PARENTNOTIFY:
+            EVENT_PRINTF2(("WM_PARENTNOTIFY h=%x hChild=%x %d\n",
+                                hWnd, lParam, LOWORD(wParam)));
+            break;
+
+        case WM_NCLBUTTONDOWN:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_NCLBUTTONDOWN\n"));
+            if (__shiftedLeftButtonIsLowerWindow) {
+                /*
+                 * with shift, this is a lower-operation
+                 */
+                if (GetKeyState(VK_SHIFT) & 0x8000) {
+                    SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0,
+                                 SWP_NOSENDCHANGING |
+                                 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                    *pDefault = 0;
+                }
+            }
+            break;
+
+        case WM_NCLBUTTONUP:
+            DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_NCLBUTTONUP\n"));
+            break;
+
+        case WM_NCRBUTTONDOWN:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_NCRBUTTONDOWN\n"));
+            if (__rightButtonIsLowerWindow) {
+                /*
+                 * this is a lower-operation
+                 */
+                SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0,
+                             SWP_NOSENDCHANGING |
+                             SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                *pDefault = 0;
+            }
+            break;
+
+        case WM_NCRBUTTONUP:
+            DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_NCRBUTTONUP\n"));
+            break;
+
+        case WM_NCMBUTTONDOWN:
+            DPRINTFIF(__debug_WM_BUTTONDOWN__ , ("WM_NCMBUTTONDOWN\n"));
+            break;
+
+        case WM_NCMBUTTONUP:
+            DPRINTFIF(__debug_WM_BUTTONUP__ , ("WM_NCMBUTTONUP\n"));
+            break;
+
+        case WM_NCLBUTTONDBLCLK:
+            EVENT_PRINTF(("WM_NCLBUTTONDBLCLK\n"));
+            break;
+
+        case WM_NCRBUTTONDBLCLK:
+            EVENT_PRINTF(("WM_NCRBUTTONDBLCLK\n"));
+            break;
+
+        case WM_NCMBUTTONDBLCLK:
+            EVENT_PRINTF(("WM_NCMBUTTONDBLCLK\n"));
+            break;
+
+        case WM_SETTEXT:
+            DPRINTFIF(__debug_WM_SETTEXT__ , ("WM_SETTEXT\n"));
+            break;
 
 #ifdef WM_SYNCPAINT
-	case WM_SYNCPAINT:
-	    EVENT_PRINTF(("WM_SYNCPAINT\n"));
-	    break;
-#else
-	case 0x88:
-	    EVENT_PRINTF(("0x88 (undoc)\n"));
-	    break;
-#endif
-
-	case WM_NCCALCSIZE:
-	    EVENT_PRINTF(("WM_NCCALCSIZE\n"));
-	    break;
-
-	case WM_NCPAINT:
-	    EVENT_PRINTF3(("WM_NCPAINT\n"));
+        case WM_SYNCPAINT:
+            EVENT_PRINTF(("WM_SYNCPAINT\n"));
+            break;
+#else
+        case 0x88:
+            EVENT_PRINTF(("0x88 (undoc)\n"));
+            break;
+#endif
+
+        case WM_NCCALCSIZE:
+            EVENT_PRINTF(("WM_NCCALCSIZE\n"));
+            break;
+
+        case WM_NCPAINT:
+            EVENT_PRINTF3(("WM_NCPAINT\n"));
 
 #ifdef THIS_DOES_NOT_WORK
-	    /* mhmh - something is drawn, but clipped wrong
-	     * and with wrong colors ....
-	     */
-
-	    /*
-	     * child windows only ...
-	     */
-	    if (GetParent(hWnd)) {
-		int clr;
-
-		clr = GetWindow_bdColor(hWnd);
-		if (clr != BlackPixel) {
-		    /*
-		     * draw it here
-		     */
-		    HBRUSH br;
-		    RECT rect, lineRect;
-		    HDC hDC;
-
-		    if (clr == WhitePixel) {
-			br = __whiteBrush;
-		    } else {
-			br = CreateSolidBrush(clr);
-		    }
-
-		    GetWindowRect(hWnd, &rect);
-		    hDC = GetWindowDC(hWnd);
-		    SelectClipRgn(hDC, NULL);
-
-		    lineRect.left = rect.left;
-		    lineRect.right = rect.right;
-		    lineRect.top = rect.top;
-		    lineRect.bottom = rect.top + 1;
-		    FillRect(hDC, &lineRect, br);
-
-		    lineRect.bottom = rect.bottom - 1;
-		    lineRect.bottom = rect.bottom;
-		    FillRect(hDC, &lineRect, br);
-
-		    lineRect.top = rect.top;
-		    lineRect.bottom = rect.bottom;
-		    lineRect.left = rect.left;
-		    lineRect.right = rect.left + 1;
-		    FillRect(hDC, &lineRect, br);
-
-		    lineRect.left = rect.right - 1;
-		    lineRect.right = rect.right;
-		    FillRect(hDC, &lineRect, br);
-
-		    _DeleteBrush(br, __LINE__);
-		    ReleaseDC(hWnd, hDC);
-		    *pDefault = 0;
-		    return 0;
-		}
-	    }
+            /* mhmh - something is drawn, but clipped wrong
+             * and with wrong colors ....
+             */
+
+            /*
+             * child windows only ...
+             */
+            if (GetParent(hWnd)) {
+                int clr;
+
+                clr = GetWindow_bdColor(hWnd);
+                if (clr != BlackPixel) {
+                    /*
+                     * draw it here
+                     */
+                    HBRUSH br;
+                    RECT rect, lineRect;
+                    HDC hDC;
+
+                    if (clr == WhitePixel) {
+                        br = __whiteBrush;
+                    } else {
+                        br = CreateSolidBrush(clr);
+                    }
+
+                    GetWindowRect(hWnd, &rect);
+                    hDC = GetWindowDC(hWnd);
+                    SelectClipRgn(hDC, NULL);
+
+                    lineRect.left = rect.left;
+                    lineRect.right = rect.right;
+                    lineRect.top = rect.top;
+                    lineRect.bottom = rect.top + 1;
+                    FillRect(hDC, &lineRect, br);
+
+                    lineRect.bottom = rect.bottom - 1;
+                    lineRect.bottom = rect.bottom;
+                    FillRect(hDC, &lineRect, br);
+
+                    lineRect.top = rect.top;
+                    lineRect.bottom = rect.bottom;
+                    lineRect.left = rect.left;
+                    lineRect.right = rect.left + 1;
+                    FillRect(hDC, &lineRect, br);
+
+                    lineRect.left = rect.right - 1;
+                    lineRect.right = rect.right;
+                    FillRect(hDC, &lineRect, br);
+
+                    _DeleteBrush(br, __LINE__);
+                    ReleaseDC(hWnd, hDC);
+                    *pDefault = 0;
+                    return 0;
+                }
+            }
 #endif /* THIS_DOES_NOT_WORK */
-	    break;
-
-	case WM_SYSCOMMAND:
-	    switch (wParam & ~0x000F) {
-		case SC_CLOSE:
-		    EVENT_PRINTF2(("WM_SYSCOMMAND SC_CLOSE\n"));
-		    break;
-
-		case SC_MOVE:
-		    EVENT_PRINTF2(("WM_SYSCOMMAND SC_MOVE\n"));
-		    break;
-
-		case SC_RESTORE:
-		    EVENT_PRINTF2(("WM_SYSCOMMAND SC_RESTORE\n"));
-		    break;
-
-		case SC_SIZE:
-		    EVENT_PRINTF2(("WM_SYSCOMMAND SC_SIZE\n"));
-		    break;
-
-		default:
-		    EVENT_PRINTF2(("WM_SYSCOMMAND %x\n", wParam));
-		    break;
-	    }
-	    break;
-
-	case WM_INITMENU:
-	    EVENT_PRINTF(("WM_INITMENU\n"));
-	    break;
-
-	case WM_INITMENUPOPUP:
-	    EVENT_PRINTF(("WM_INITMENUPOPUP\n"));
-	    break;
-
-	case WM_ENTERIDLE:
-	    EVENT_PRINTF(("WM_ENTERIDLE\n"));
-	    break;
-
-	case WM_ENTERMENULOOP:
-	    EVENT_PRINTF(("WM_ENTERMENULOOP\n"));
-	    break;
-
-	case WM_EXITMENULOOP:
-	    EVENT_PRINTF(("WM_EXITMENULOOP\n"));
-	    break;
-
-	case WM_MENUSELECT:
-	    EVENT_PRINTF(("WM_MENUSELECT\n"));
-	    break;
-
-	case WM_QUIT:
-	    DPRINTF(("quit message hWnd=0x%x lP=0x%x wP=0x%x\n", hWnd, lParam, wParam));
-	    enqEvent(0, 0, WM_QUIT, wParam, lParam, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_NCDESTROY:
-	    EVENT_PRINTF(("WM_NCDESTROY\n"));
-	    break;
-
-	case WM_QUERYNEWPALETTE:
-	    EVENT_PRINTF(("WM_QUERYNEWPALETTE\n"));
-	    break;
-
-	case WM_PALETTECHANGED:
-	    EVENT_PRINTF(("WM_PALETTECHANGED\n"));
-	    break;
-
-	case WM_ACTIVATEAPP:
-	    EVENT_PRINTF2(("WM_ACTIVATEAPP %s\n", wParam ? "active" : "inactive"));
-	    break;
-
-	case WM_SYSDEADCHAR:
-	    EVENT_PRINTF2(("WM_SYSDEADCHAR %x\n, wParam"));
-	    break;
-
-	case WM_DEADCHAR:
-	    EVENT_PRINTF2(("WM_DEADCHAR %x\n, wParam"));
-	    break;
-
-	case WM_PAINTICON:
-	    EVENT_PRINTF(("WM_PAINTICON\n"));
-	    break;
-
-	case WM_ICONERASEBKGND:
-	    EVENT_PRINTF(("WM_ICONERASEBKGND\n"));
-	    break;
-
-	case WM_WINDOWPOSCHANGING:
-	    DPRINTFIF(__debug_WM_WINDOWPOSCHANGING__ , ("WM_WINDOWPOSCHANGING\n"));
+            break;
+
+        case WM_SYSCOMMAND:
+            switch (wParam & ~0x000F) {
+                case SC_CLOSE:
+                    EVENT_PRINTF2(("WM_SYSCOMMAND SC_CLOSE\n"));
+                    break;
+
+                case SC_MOVE:
+                    EVENT_PRINTF2(("WM_SYSCOMMAND SC_MOVE\n"));
+                    break;
+
+                case SC_RESTORE:
+                    EVENT_PRINTF2(("WM_SYSCOMMAND SC_RESTORE\n"));
+                    break;
+
+                case SC_SIZE:
+                    EVENT_PRINTF2(("WM_SYSCOMMAND SC_SIZE\n"));
+                    break;
+
+                default:
+                    EVENT_PRINTF2(("WM_SYSCOMMAND %x\n", wParam));
+                    break;
+            }
+            break;
+
+        case WM_INITMENU:
+            EVENT_PRINTF(("WM_INITMENU\n"));
+            break;
+
+        case WM_INITMENUPOPUP:
+            EVENT_PRINTF(("WM_INITMENUPOPUP\n"));
+            break;
+
+        case WM_ENTERIDLE:
+            EVENT_PRINTF(("WM_ENTERIDLE\n"));
+            break;
+
+        case WM_ENTERMENULOOP:
+            EVENT_PRINTF(("WM_ENTERMENULOOP\n"));
+            break;
+
+        case WM_EXITMENULOOP:
+            EVENT_PRINTF(("WM_EXITMENULOOP\n"));
+            break;
+
+        case WM_MENUSELECT:
+            EVENT_PRINTF(("WM_MENUSELECT\n"));
+            break;
+
+        case WM_QUIT:
+            DPRINTF(("quit message hWnd=0x%x lP=0x%x wP=0x%x\n", hWnd, lParam, wParam));
+            enqEvent(0, 0, WM_QUIT, wParam, lParam, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_NCDESTROY:
+            EVENT_PRINTF(("WM_NCDESTROY\n"));
+            break;
+
+        case WM_QUERYNEWPALETTE:
+            EVENT_PRINTF(("WM_QUERYNEWPALETTE\n"));
+            break;
+
+        case WM_PALETTECHANGED:
+            EVENT_PRINTF(("WM_PALETTECHANGED\n"));
+            break;
+
+        case WM_ACTIVATEAPP:
+            EVENT_PRINTF2(("WM_ACTIVATEAPP %s\n", wParam ? "active" : "inactive"));
+            break;
+
+        case WM_SYSDEADCHAR:
+            EVENT_PRINTF2(("WM_SYSDEADCHAR %x\n, wParam"));
+            break;
+
+        case WM_DEADCHAR:
+            EVENT_PRINTF2(("WM_DEADCHAR %x\n, wParam"));
+            break;
+
+        case WM_PAINTICON:
+            EVENT_PRINTF(("WM_PAINTICON\n"));
+            break;
+
+        case WM_ICONERASEBKGND:
+            EVENT_PRINTF(("WM_ICONERASEBKGND\n"));
+            break;
+
+        case WM_WINDOWPOSCHANGING:
+            DPRINTFIF(__debug_WM_WINDOWPOSCHANGING__ , ("WM_WINDOWPOSCHANGING\n"));
 
 #ifdef HANDLE_VIEWGRAVITY
-	    /*
-	     * any child with a viewGravity ?
-	     * (only care for topViews here;
-	     *  child views do it on the smalltalk level ...)
-	     */
-	    if (GetParent(hWnd) == 0) {
-		if (GetParent(hWnd) == 0) {
-		    struct gravityCallBackInfo i;
-		    RECT rct, dRect;
-		    int dW, dH;
-		    WINDOWPOS *wp = (WINDOWPOS *)lParam;
-		    int winStyleBits, winExStyleBits;
-
-		    if (! (wp->flags & SWP_NOSIZE)) {
-			dRect.left = 0;
-			dRect.top = 0;
-			dRect.right = 100;
-			dRect.bottom = 100;
-			winStyleBits = GetWindowLong(hWnd, GWL_STYLE);
-			winExStyleBits = GetWindowLong(hWnd, GWL_EXSTYLE);
-			AdjustWindowRectEx(&dRect, winStyleBits, 0, winExStyleBits);
-			dW = dRect.right - dRect.left;
-			dH = dRect.bottom - dRect.top;
-
-			GetClientRect(hWnd, &rct);
-
-			i.parent = hWnd;
-
-			i.currW = rct.right - rct.left;
-			i.currH = rct.bottom - rct.top;
-
-			/* wp gives us the new outer (frame) bounds */
-			i.newW = wp->cx - (dW - 100);
-			i.newH = wp->cy - (dH - 100);
-
-			if ((i.currW != i.newW)
-			 || (i.currH != i.newH)) {
-			    DPRINTF((stderr, "about to sizeChange old: %d/%d new: %d/%d\n",
-				    i.currW, i.currH, i.newW, i.newH));
-
-			    GetWindowRect(hWnd, &rct);
-			    i.parentWinX = rct.left - dRect.left;
-			    i.parentWinY = rct.top - dRect.top;
-			    EnumChildWindows(hWnd, gravityEnumeratorCallBack, (int)(&i));
-			}
-		    }
-		}
-	    }
+            /*
+             * any child with a viewGravity ?
+             * (only care for topViews here;
+             *  child views do it on the smalltalk level ...)
+             */
+            if (GetParent(hWnd) == 0) {
+                if (GetParent(hWnd) == 0) {
+                    struct gravityCallBackInfo i;
+                    RECT rct, dRect;
+                    int dW, dH;
+                    WINDOWPOS *wp = (WINDOWPOS *)lParam;
+                    int winStyleBits, winExStyleBits;
+
+                    if (! (wp->flags & SWP_NOSIZE)) {
+                        dRect.left = 0;
+                        dRect.top = 0;
+                        dRect.right = 100;
+                        dRect.bottom = 100;
+                        winStyleBits = GetWindowLong(hWnd, GWL_STYLE);
+                        winExStyleBits = GetWindowLong(hWnd, GWL_EXSTYLE);
+                        AdjustWindowRectEx(&dRect, winStyleBits, 0, winExStyleBits);
+                        dW = dRect.right - dRect.left;
+                        dH = dRect.bottom - dRect.top;
+
+                        GetClientRect(hWnd, &rct);
+
+                        i.parent = hWnd;
+
+                        i.currW = rct.right - rct.left;
+                        i.currH = rct.bottom - rct.top;
+
+                        /* wp gives us the new outer (frame) bounds */
+                        i.newW = wp->cx - (dW - 100);
+                        i.newH = wp->cy - (dH - 100);
+
+                        if ((i.currW != i.newW)
+                         || (i.currH != i.newH)) {
+                            DPRINTF((stderr, "about to sizeChange old: %d/%d new: %d/%d\n",
+                                    i.currW, i.currH, i.newW, i.newH));
+
+                            GetWindowRect(hWnd, &rct);
+                            i.parentWinX = rct.left - dRect.left;
+                            i.parentWinY = rct.top - dRect.top;
+                            EnumChildWindows(hWnd, gravityEnumeratorCallBack, (int)(&i));
+                        }
+                    }
+                }
+            }
 #endif /* HANDLE_VIEWGRAVITY */
 
-	    break;
-
-	case WM_QUERYOPEN:
-	    EVENT_PRINTF(("WM_QUERYOPEN\n"));
-	    break;
-
-	case WM_QUERYENDSESSION:
-	    EVENT_PRINTF(("WM_QUERYENDSESSION\n"));
-	    *pDefault = 0;
-	    if (@global(CanEndSession) == false) {
-		enqEvent(0, hWnd, WM_QUERYENDSESSION, wParam, 0, 0, 0, 0, EV_NOTIME);
-
-		// TODO: enter new event loop
-		// which is left when an endSessionConfirmation
-		// arrives from smalltalk
-		// (either positive or negative).
-		// for now, do not allow leaving
-		// windows as long as ST/X is open.
-
-		return(0);
-	    }
-	    return(TRUE);  // allow leaving windows
-	    break;
-
-	case WM_ENDSESSION:
-	    EVENT_PRINTF(("WM_ENDSESSION\n"));
-	    enqEvent(0, hWnd, WM_ENDSESSION, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_DISPLAYCHANGE:
-	    EVENT_PRINTF(("WM_DISPLAYCHANGE\n"));
-	    enqEvent(0, hWnd, WM_DISPLAYCHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_FONTCHANGE:
-	    EVENT_PRINTF(("WM_FONTCHANGE\n"));
-	    enqEvent(0, hWnd, WM_FONTCHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_WININICHANGE:
-	    EVENT_PRINTF(("WM_WININICHANGE\n"));
-	    enqEvent(0, hWnd, WM_WININICHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_SYSCOLORCHANGE:
-	    EVENT_PRINTF(("WM_SYSCOLORCHANGE\n"));
-	    enqEvent(0, hWnd, WM_SYSCOLORCHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_MOVING:
-	    DPRINTFIF(__debug_WM_MOVING__ , ("WM_MOVING\n"));
+            break;
+
+        case WM_QUERYOPEN:
+            EVENT_PRINTF(("WM_QUERYOPEN\n"));
+            break;
+
+        case WM_QUERYENDSESSION:
+            EVENT_PRINTF(("WM_QUERYENDSESSION\n"));
+            *pDefault = 0;
+            if (@global(CanEndSession) == false) {
+                enqEvent(0, hWnd, WM_QUERYENDSESSION, wParam, 0, 0, 0, 0, EV_NOTIME);
+
+                // TODO: enter new event loop
+                // which is left when an endSessionConfirmation
+                // arrives from smalltalk
+                // (either positive or negative).
+                // for now, do not allow leaving
+                // windows as long as ST/X is open.
+
+                return(0);
+            }
+            return(TRUE);  // allow leaving windows
+            break;
+
+        case WM_ENDSESSION:
+            EVENT_PRINTF(("WM_ENDSESSION\n"));
+            enqEvent(0, hWnd, WM_ENDSESSION, wParam, 0, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_DISPLAYCHANGE:
+            EVENT_PRINTF(("WM_DISPLAYCHANGE\n"));
+            enqEvent(0, hWnd, WM_DISPLAYCHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_FONTCHANGE:
+            EVENT_PRINTF(("WM_FONTCHANGE\n"));
+            enqEvent(0, hWnd, WM_FONTCHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_WININICHANGE:
+            EVENT_PRINTF(("WM_WININICHANGE\n"));
+            enqEvent(0, hWnd, WM_WININICHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_SYSCOLORCHANGE:
+            EVENT_PRINTF(("WM_SYSCOLORCHANGE\n"));
+            enqEvent(0, hWnd, WM_SYSCOLORCHANGE, wParam, 0, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_MOVING:
+            DPRINTFIF(__debug_WM_MOVING__ , ("WM_MOVING\n"));
 #ifdef DELAY_ENTER_LEAVE_WHILE_IN_SIZE_MOVE
-	    inMove = 1;
-#endif
-	    break;
-
-	case WM_SIZING:
-	    EVENT_PRINTF(("WM_SIZING\n"));
+            inMove = 1;
+#endif
+            break;
+
+        case WM_SIZING:
+            EVENT_PRINTF(("WM_SIZING\n"));
 #ifdef DELAY_ENTER_LEAVE_WHILE_IN_SIZE_MOVE
-	    inSize = 1;
-#endif
-	    break;
-
-	case WM_ENTERSIZEMOVE:
-	    EVENT_PRINTF(("WM_ENTERSIZEMOVE\n"));
+            inSize = 1;
+#endif
+            break;
+
+        case WM_ENTERSIZEMOVE:
+            EVENT_PRINTF(("WM_ENTERSIZEMOVE\n"));
 #ifdef DELAY_ENTER_LEAVE_WHILE_IN_SIZE_MOVE
-	    inSizeMove = 1;
-#endif
-	    break;
-
-	case WM_EXITSIZEMOVE:
-	    EVENT_PRINTF(("WM_EXITSIZEMOVE\n"));
+            inSizeMove = 1;
+#endif
+            break;
+
+        case WM_EXITSIZEMOVE:
+            EVENT_PRINTF(("WM_EXITSIZEMOVE\n"));
 
 #ifndef PRE_13_APR_04_POSCHANGED_IN_EXITSIZEMOVE
-	    if (inMove) {
-		/* generate WM_WINDOWPOSCHANGED
-		*/
-		RECT rct;
-		int x, y, w, h;
-
-		GetClientRect(hWnd, &rct);
-
-		x = rct.left;
-		y = rct.top;
-		w = rct.right - rct.left;
-		h = rct.bottom - rct.top;
-
-		if ((w == 0) && (h == 0)) {
-		    if (! GetWindow_iconified(hWnd)) {
-			SetWindow_iconified(hWnd, 1);
-		    }
-		    enqEvent(0, hWnd, __WM_ICONIFIED, 1, 0, 0, 0, 0, EV_NOTIME);
-		} else {
-		    if (GetWindow_iconified(hWnd)) {
-			SetWindow_iconified(hWnd, 0);
-			enqEvent(0, hWnd, __WM_ICONIFIED, 0, 0, 0, 0, 0, EV_NOTIME);
-		    } else {
-			enqEvent(0, hWnd, WM_WINDOWPOSCHANGED, 0, x, y, w, h, EV_NOTIME);
-		    }
-		}
-	    }
-#endif
-
-	    inSizeMove = inMove = inSize = 0;
-
-	    if (needDelayedMouseLeaveWindow || needDelayedMouseEnterWindow) {
-		int modifiers = getModifiers();
-
-		if (needDelayedMouseLeaveWindow) {
-		    if (GetWindow_eventMask(needDelayedMouseLeaveWindow) & LeaveWindowMask) {
-			enqEvent(LeaveWindowMask, needDelayedMouseLeaveWindow, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
-			SetWindow_mouseXY(needDelayedMouseLeaveWindow, -9999, -9999);
-		    }
-		    needDelayedMouseLeaveWindow = NULL;
-		}
-		if (needDelayedMouseEnterWindow) {
-		    if (GetWindow_eventMask(needDelayedMouseEnterWindow) & EnterWindowMask) {
-			enqEvent(EnterWindowMask, needDelayedMouseEnterWindow, __WM_MOUSEENTER, 0, delayedMouseEnterX, delayedMouseEnterY, 0, modifiers, EV_NOTIME);
-			SetWindow_mouseXY(needDelayedMouseEnterWindow, delayedMouseEnterX, delayedMouseEnterY);
-		    }
-		    needDelayedMouseEnterWindow = NULL;
-		}
-	    }
-
-	    break;
-
-	case WM_MOVE:
-	    EVENT_PRINTF(("WM_MOVE\n"));
-	    break;
-
-	case WM_POWER:
-	    EVENT_PRINTF(("WM_POWER\n"));
-	    enqEvent(0, hWnd, WM_POWER, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	/* native widget actions */
-	case WM_COMMAND:
-	    if (lParam) {
-		NDPRINTF(("COMMAND for widget\n"));
-		enqEvent(0, (HWND)(lParam), WM_COMMAND, wParam, lParam, 0, 0, 0, EV_NOTIME);
-	    } else {
-		NDPRINTF(("COMMAND for owner\n"));
-		enqEvent(0, hWnd, WM_COMMAND, wParam, lParam, 0, 0, 0, EV_NOTIME);
-	    }
-	    break;
-
-	/* tray action */
-	case WM_TRAY_MESSAGE:
-	    DPRINTF(("tray message hWnd=0x%x lP=0x%x wP=0x%x\n", hWnd, lParam, wParam));
-	    enqEvent(0, hWnd, WM_TRAY_MESSAGE, wParam, lParam, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_COPYDATA:
-	    DPRINTFIF(__debug_WM_COPYDATA__ , ("WM_COPYDATA\n"));
-	    {
-		PCOPYDATASTRUCT pCDs = (PCOPYDATASTRUCT) lParam;
-		int dwData = pCDs->dwData;
-		int nBytes = pCDs->cbData;
-		void *pData = pCDs->lpData;
-		void *pCopiedData;
-
-		DPRINTFIF(__debug_WM_COPYDATA__ , ("WM_COPYDATA %d %lx\n", nBytes, pData));
-
-		/*
-		 * because pData is only valid here, copy it out to a malloc'd
-		 * area. This MUST be free'd by someone else !
-		 */
-		if (nBytes) {
-		    pCopiedData = malloc(nBytes);
-		    memcpy(pCopiedData, pData, nBytes);
-		} else {
-		    pCopiedData = NULL;
-		}
-		//     (flag, hWnd, message, wParam, arg1, arg2, arg3, arg4, evTime)
-		enqEvent(0, hWnd, WM_COPYDATA, wParam, (INT)pCopiedData, nBytes, dwData, 0, EV_NOTIME);
-	    }
-	    *pDefault = 0;
-	    break;
-
-	case WM_HSCROLL:
-	case WM_VSCROLL:
-	    NDPRINTF(("VM_*SCROLL\n"));
-	    enqEvent(0, hWnd, message, wParam, lParam, 0, 0, 0, EV_NOTIME);
-	    break;
-
-	case WM_DRAWITEM:
-	    EVENT_PRINTF(("WM_DRAWITEM\n"));
-#if 0
-	    {
-		DRAWITEMSTRUCT *pItemStruct;
-
-		pItemStruct = (DRAWITEMSTRUCT *)lParam;
-		enqEvent(0, pItemStruct->hwndItem, WM_DRAWITEM, wParam, 0, 0, 0, 0, EV_NOTIME);
-	    }
-#endif
-	    break;
+            if (inMove) {
+                /* generate WM_WINDOWPOSCHANGED
+                */
+                RECT rct;
+                int x, y, w, h;
+
+                GetClientRect(hWnd, &rct);
+
+                x = rct.left;
+                y = rct.top;
+                w = rct.right - rct.left;
+                h = rct.bottom - rct.top;
+
+                if ((w == 0) && (h == 0)) {
+                    if (! GetWindow_iconified(hWnd)) {
+                        SetWindow_iconified(hWnd, 1);
+                    }
+                    enqEvent(0, hWnd, __WM_ICONIFIED, 1, 0, 0, 0, 0, EV_NOTIME);
+                } else {
+                    if (GetWindow_iconified(hWnd)) {
+                        SetWindow_iconified(hWnd, 0);
+                        enqEvent(0, hWnd, __WM_ICONIFIED, 0, 0, 0, 0, 0, EV_NOTIME);
+                    } else {
+                        enqEvent(0, hWnd, WM_WINDOWPOSCHANGED, 0, x, y, w, h, EV_NOTIME);
+                    }
+                }
+            }
+#endif
+
+            inSizeMove = inMove = inSize = 0;
+
+            if (needDelayedMouseLeaveWindow || needDelayedMouseEnterWindow) {
+                int modifiers = getModifiers();
+
+                if (needDelayedMouseLeaveWindow) {
+                    if (GetWindow_eventMask(needDelayedMouseLeaveWindow) & LeaveWindowMask) {
+                        enqEvent(LeaveWindowMask, needDelayedMouseLeaveWindow, __WM_MOUSELEAVE, 0, -1, -1, 0, modifiers, EV_NOTIME);
+                        SetWindow_mouseXY(needDelayedMouseLeaveWindow, -9999, -9999);
+                    }
+                    needDelayedMouseLeaveWindow = NULL;
+                }
+                if (needDelayedMouseEnterWindow) {
+                    if (GetWindow_eventMask(needDelayedMouseEnterWindow) & EnterWindowMask) {
+                        enqEvent(EnterWindowMask, needDelayedMouseEnterWindow, __WM_MOUSEENTER, 0, delayedMouseEnterX, delayedMouseEnterY, 0, modifiers, EV_NOTIME);
+                        SetWindow_mouseXY(needDelayedMouseEnterWindow, delayedMouseEnterX, delayedMouseEnterY);
+                    }
+                    needDelayedMouseEnterWindow = NULL;
+                }
+            }
+
+            break;
+
+        case WM_MOVE:
+            EVENT_PRINTF(("WM_MOVE\n"));
+            break;
+
+        case WM_POWER:
+            EVENT_PRINTF(("WM_POWER\n"));
+            enqEvent(0, hWnd, WM_POWER, wParam, 0, 0, 0, 0, EV_NOTIME);
+            break;
+
+        /* native widget actions */
+        case WM_COMMAND:
+            if (lParam) {
+                NDPRINTF(("COMMAND for widget\n"));
+                enqEvent(0, (HWND)(lParam), WM_COMMAND, wParam, lParam, 0, 0, 0, EV_NOTIME);
+            } else {
+                NDPRINTF(("COMMAND for owner\n"));
+                enqEvent(0, hWnd, WM_COMMAND, wParam, lParam, 0, 0, 0, EV_NOTIME);
+            }
+            break;
+
+        /* tray action */
+        case WM_TRAY_MESSAGE:
+            DPRINTF(("tray message hWnd=0x%x lP=0x%x wP=0x%x\n", hWnd, lParam, wParam));
+            enqEvent(0, hWnd, WM_TRAY_MESSAGE, wParam, lParam, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_COPYDATA:
+            DPRINTFIF(__debug_WM_COPYDATA__ , ("WM_COPYDATA\n"));
+            {
+                PCOPYDATASTRUCT pCDs = (PCOPYDATASTRUCT) lParam;
+                int dwData = pCDs->dwData;
+                int nBytes = pCDs->cbData;
+                void *pData = pCDs->lpData;
+                void *pCopiedData;
+
+                DPRINTFIF(__debug_WM_COPYDATA__ , ("WM_COPYDATA %d %lx\n", nBytes, pData));
+
+                /*
+                 * because pData is only valid here, copy it out to a malloc'd
+                 * area. This MUST be free'd by someone else !
+                 */
+                if (nBytes) {
+                    pCopiedData = malloc(nBytes);
+                    memcpy(pCopiedData, pData, nBytes);
+                } else {
+                    pCopiedData = NULL;
+                }
+                //     (flag, hWnd, message, wParam, arg1, arg2, arg3, arg4, evTime)
+                enqEvent(0, hWnd, WM_COPYDATA, wParam, (INT)pCopiedData, nBytes, dwData, 0, EV_NOTIME);
+            }
+            *pDefault = 0;
+            break;
+
+        case WM_HSCROLL:
+        case WM_VSCROLL:
+            NDPRINTF(("VM_*SCROLL\n"));
+            enqEvent(0, hWnd, message, wParam, lParam, 0, 0, 0, EV_NOTIME);
+            break;
+
+        case WM_DRAWITEM:
+            EVENT_PRINTF(("WM_DRAWITEM\n"));
+#if 0
+            {
+                DRAWITEMSTRUCT *pItemStruct;
+
+                pItemStruct = (DRAWITEMSTRUCT *)lParam;
+                enqEvent(0, pItemStruct->hwndItem, WM_DRAWITEM, wParam, 0, 0, 0, 0, EV_NOTIME);
+            }
+#endif
+            break;
 
 #ifdef TRACE_ALL_EVENTS
-	case WM_CTLCOLORMSGBOX:
-	    UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORMSGBOX\n"));
-	    break;
-	case WM_CTLCOLOREDIT:
-	    UNHANDLED_EVENT_PRINTF(("WM_CTLCOLOREDIT\n"));
-	    break;
-	case WM_CTLCOLORLISTBOX:
-	    UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORLISTBOX\n"));
-	    break;
-	case WM_CTLCOLORBTN:
-	    UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORBTN\n"));
-	    break;
-	case WM_CTLCOLORDLG:
-	    UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORDLG\n"));
-	    break;
-	case WM_CTLCOLORSTATIC:
-	    UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORSTATIC\n"));
-	    break;
-	case WM_CTLCOLORSCROLLBAR:
-	    UNHANDLED_EVENT_PRINTFIF(__debug_WM_CTLCOLORSCROLLBAR__, ("WM_CTLCOLORSCROLLBAR\n"));
-	    break;
-
-	case WM_STYLECHANGING:
-	    UNHANDLED_EVENT_PRINTF(("WM_STYLECHANGING\n"));
-	    break;
-	case WM_STYLECHANGED:
-	    UNHANDLED_EVENT_PRINTF(("WM_STYLECHANGED\n"));
-	    break;
-
-	case WM_GETICON:
-	    UNHANDLED_EVENT_PRINTFIF(__debug_WM_GETICON__, ("WM_GETICON\n"));
-	    break;
-	case WM_SETICON:
-	    UNHANDLED_EVENT_PRINTF(("WM_SETICON\n"));
-	    break;
-
-	case WM_PRINT:
-	    UNHANDLED_EVENT_PRINTF(("WM_PRINT(lParam=%d)\n", lParam));
-	    break;
-	case WM_PRINTCLIENT:
-	    UNHANDLED_EVENT_PRINTF(("WM_PRINTCLIENT(lParam=%d)\n", lParam));
-	    break;
-
-	case WM_NULL:
-	    UNHANDLED_EVENT_PRINTF(("WM_NULL\n"));
-	    break;
-
-	case WM_ENABLE:
-	    UNHANDLED_EVENT_PRINTF(("WM_ENABLE\n"));
-	    break;
-
-	case WM_SETREDRAW:
-	    UNHANDLED_EVENT_PRINTF(("WM_SETREDRAW\n"));
-	    break;
-
-	case WM_DEVMODECHANGE:
-	    UNHANDLED_EVENT_PRINTF(("WM_DEVMODECHANGE\n"));
-	    break;
-
-	case WM_TIMECHANGE:
-	    UNHANDLED_EVENT_PRINTF(("WM_TIMECHANGE\n"));
-	    break;
-
-	case WM_CANCELMODE:
-	    UNHANDLED_EVENT_PRINTF(("WM_CANCELMODE\n"));
-	    break;
-
-	case WM_CHILDACTIVATE:
-	    UNHANDLED_EVENT_PRINTF(("WM_CHILDACTIVATE\n"));
-	    break;
-
-	case WM_QUEUESYNC:
-	    UNHANDLED_EVENT_PRINTF(("WM_QUEUESYNC\n"));
-	    break;
-
-	case WM_NEXTDLGCTL:
-	    UNHANDLED_EVENT_PRINTF(("WM_NEXTDLGCTL\n"));
-	    break;
-
-	case WM_SPOOLERSTATUS:
-	    UNHANDLED_EVENT_PRINTF(("WM_SPOOLERSTATUS\n"));
-	    break;
-
-	case WM_MEASUREITEM:
-	    UNHANDLED_EVENT_PRINTF(("WM_MEASUREITEM\n"));
-	    break;
-
-	case WM_DELETEITEM:
-	    UNHANDLED_EVENT_PRINTF(("WM_DELETEITEM\n"));
-	    break;
-
-	case WM_VKEYTOITEM:
-	    UNHANDLED_EVENT_PRINTF(("WM_VKEYTOITEM\n"));
-	    break;
-
-	case WM_CHARTOITEM:
-	    UNHANDLED_EVENT_PRINTF(("WM_CHARTOITEM\n"));
-	    break;
-
-	case WM_SETFONT:
-	    UNHANDLED_EVENT_PRINTF(("WM_SETFONT\n"));
-	    break;
-
-	case WM_GETFONT:
-	    UNHANDLED_EVENT_PRINTF(("WM_GETFONT\n"));
-	    break;
-
-	case WM_SETHOTKEY:
-	    UNHANDLED_EVENT_PRINTF(("WM_SETHOTKEY\n"));
-	    break;
-
-	case WM_GETHOTKEY:
-	    UNHANDLED_EVENT_PRINTF(("WM_GETHOTKEY\n"));
-	    break;
-
-	case WM_QUERYDRAGICON:
-	    UNHANDLED_EVENT_PRINTF(("WM_QUERYDRAGICON\n"));
-	    break;
-
-	case WM_COMPAREITEM:
-	    UNHANDLED_EVENT_PRINTF(("WM_COMPAREITEM\n"));
-	    break;
-
-	case WM_GETOBJECT:
-	    UNHANDLED_EVENT_PRINTF(("WM_GETOBJECT\n"));
-	    break;
-
-	case WM_COMPACTING:
-	    UNHANDLED_EVENT_PRINTF(("WM_COMPACTING\n"));
-	    break;
-
-	case WM_COMMNOTIFY:
-	    UNHANDLED_EVENT_PRINTF(("WM_COMMNOTIFY\n"));
-	    break;
-
-	case WM_CANCELJOURNAL:
-	    UNHANDLED_EVENT_PRINTF(("WM_CANCELJOURNAL\n"));
-	    break;
-
-	case WM_INPUTLANGCHANGEREQUEST:
-	    UNHANDLED_EVENT_PRINTF(("WM_INPUTLANGCHANGEREQUEST\n"));
-	    break;
-
-	case WM_INPUTLANGCHANGE:
-	    UNHANDLED_EVENT_PRINTF(("WM_INPUTLANGCHANGE\n"));
-	    break;
-
-	case WM_TCARD:
-	    UNHANDLED_EVENT_PRINTF(("WM_TCARD\n"));
-	    break;
-
-	case WM_HELP:
-	    UNHANDLED_EVENT_PRINTF(("WM_HELP\n"));
-	    break;
-
-	case WM_USERCHANGED:
-	    UNHANDLED_EVENT_PRINTF(("WM_USERCHANGED\n"));
-	    break;
-
-	case WM_NOTIFY:
-	    UNHANDLED_EVENT_PRINTF(("WM_NOTIFY\n"));
-	    break;
-
-	case WM_NOTIFYFORMAT:
-	    UNHANDLED_EVENT_PRINTF(("WM_NOTIFYFORMAT\n"));
-	    break;
-
-	case WM_CONTEXTMENU:
-	    UNHANDLED_EVENT_PRINTF(("WM_CONTEXTMENU\n"));
-	    break;
-
-	case WM_NCXBUTTONDOWN:
-	    UNHANDLED_EVENT_PRINTF(("WM_NCXBUTTONDOWN\n"));
-	    break;
-
-	case WM_NCXBUTTONUP:
-	    UNHANDLED_EVENT_PRINTF(("WM_NCXBUTTONUP\n"));
-	    break;
-
-	case WM_NCXBUTTONDBLCLK:
-	    UNHANDLED_EVENT_PRINTF(("WM_NCXBUTTONDBLCLK\n"));
-	    break;
-
-	case WM_DEVICECHANGE:
-	    UNHANDLED_EVENT_PRINTF(("WM_DEVICECHANGE\n"));
-	    break;
-
-	case DBT_DEVICEARRIVAL:
-	    UNHANDLED_EVENT_PRINTF(("DBT_DEVICEARRIVAL\n"));
-	    break;
-
-	case DBT_DEVICEREMOVECOMPLETE:
-	    UNHANDLED_EVENT_PRINTF(("DBT_DEVICEREMOVECOMPLETE\n"));
-	    break;
-#endif
-
-	default:
-	    EVENT_PRINTF(( "WinWorkstat [info] unhandled msg = %d 0x%x [%d]\n", message, message, __LINE__));
-	    break;
+        case WM_CTLCOLORMSGBOX:
+            UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORMSGBOX\n"));
+            break;
+        case WM_CTLCOLOREDIT:
+            UNHANDLED_EVENT_PRINTF(("WM_CTLCOLOREDIT\n"));
+            break;
+        case WM_CTLCOLORLISTBOX:
+            UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORLISTBOX\n"));
+            break;
+        case WM_CTLCOLORBTN:
+            UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORBTN\n"));
+            break;
+        case WM_CTLCOLORDLG:
+            UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORDLG\n"));
+            break;
+        case WM_CTLCOLORSTATIC:
+            UNHANDLED_EVENT_PRINTF(("WM_CTLCOLORSTATIC\n"));
+            break;
+        case WM_CTLCOLORSCROLLBAR:
+            UNHANDLED_EVENT_PRINTFIF(__debug_WM_CTLCOLORSCROLLBAR__, ("WM_CTLCOLORSCROLLBAR\n"));
+            break;
+
+        case WM_STYLECHANGING:
+            UNHANDLED_EVENT_PRINTF(("WM_STYLECHANGING\n"));
+            break;
+        case WM_STYLECHANGED:
+            UNHANDLED_EVENT_PRINTF(("WM_STYLECHANGED\n"));
+            break;
+
+        case WM_GETICON:
+            UNHANDLED_EVENT_PRINTFIF(__debug_WM_GETICON__, ("WM_GETICON\n"));
+            break;
+        case WM_SETICON:
+            UNHANDLED_EVENT_PRINTF(("WM_SETICON\n"));
+            break;
+
+        case WM_PRINT:
+            UNHANDLED_EVENT_PRINTF(("WM_PRINT(lParam=%d)\n", lParam));
+            break;
+        case WM_PRINTCLIENT:
+            UNHANDLED_EVENT_PRINTF(("WM_PRINTCLIENT(lParam=%d)\n", lParam));
+            break;
+
+        case WM_NULL:
+            UNHANDLED_EVENT_PRINTF(("WM_NULL\n"));
+            break;
+
+        case WM_ENABLE:
+            UNHANDLED_EVENT_PRINTF(("WM_ENABLE\n"));
+            break;
+
+        case WM_SETREDRAW:
+            UNHANDLED_EVENT_PRINTF(("WM_SETREDRAW\n"));
+            break;
+
+        case WM_DEVMODECHANGE:
+            UNHANDLED_EVENT_PRINTF(("WM_DEVMODECHANGE\n"));
+            break;
+
+        case WM_TIMECHANGE:
+            UNHANDLED_EVENT_PRINTF(("WM_TIMECHANGE\n"));
+            break;
+
+        case WM_CANCELMODE:
+            UNHANDLED_EVENT_PRINTF(("WM_CANCELMODE\n"));
+            break;
+
+        case WM_CHILDACTIVATE:
+            UNHANDLED_EVENT_PRINTF(("WM_CHILDACTIVATE\n"));
+            break;
+
+        case WM_QUEUESYNC:
+            UNHANDLED_EVENT_PRINTF(("WM_QUEUESYNC\n"));
+            break;
+
+        case WM_NEXTDLGCTL:
+            UNHANDLED_EVENT_PRINTF(("WM_NEXTDLGCTL\n"));
+            break;
+
+        case WM_SPOOLERSTATUS:
+            UNHANDLED_EVENT_PRINTF(("WM_SPOOLERSTATUS\n"));
+            break;
+
+        case WM_MEASUREITEM:
+            UNHANDLED_EVENT_PRINTF(("WM_MEASUREITEM\n"));
+            break;
+
+        case WM_DELETEITEM:
+            UNHANDLED_EVENT_PRINTF(("WM_DELETEITEM\n"));
+            break;
+
+        case WM_VKEYTOITEM:
+            UNHANDLED_EVENT_PRINTF(("WM_VKEYTOITEM\n"));
+            break;
+
+        case WM_CHARTOITEM:
+            UNHANDLED_EVENT_PRINTF(("WM_CHARTOITEM\n"));
+            break;
+
+        case WM_SETFONT:
+            UNHANDLED_EVENT_PRINTF(("WM_SETFONT\n"));
+            break;
+
+        case WM_GETFONT:
+            UNHANDLED_EVENT_PRINTF(("WM_GETFONT\n"));
+            break;
+
+        case WM_SETHOTKEY:
+            UNHANDLED_EVENT_PRINTF(("WM_SETHOTKEY\n"));
+            break;
+
+        case WM_GETHOTKEY:
+            UNHANDLED_EVENT_PRINTF(("WM_GETHOTKEY\n"));
+            break;
+
+        case WM_QUERYDRAGICON:
+            UNHANDLED_EVENT_PRINTF(("WM_QUERYDRAGICON\n"));
+            break;
+
+        case WM_COMPAREITEM:
+            UNHANDLED_EVENT_PRINTF(("WM_COMPAREITEM\n"));
+            break;
+
+        case WM_GETOBJECT:
+            UNHANDLED_EVENT_PRINTF(("WM_GETOBJECT\n"));
+            break;
+
+        case WM_COMPACTING:
+            UNHANDLED_EVENT_PRINTF(("WM_COMPACTING\n"));
+            break;
+
+        case WM_COMMNOTIFY:
+            UNHANDLED_EVENT_PRINTF(("WM_COMMNOTIFY\n"));
+            break;
+
+        case WM_CANCELJOURNAL:
+            UNHANDLED_EVENT_PRINTF(("WM_CANCELJOURNAL\n"));
+            break;
+
+        case WM_INPUTLANGCHANGEREQUEST:
+            UNHANDLED_EVENT_PRINTF(("WM_INPUTLANGCHANGEREQUEST\n"));
+            break;
+
+        case WM_INPUTLANGCHANGE:
+            UNHANDLED_EVENT_PRINTF(("WM_INPUTLANGCHANGE\n"));
+            break;
+
+        case WM_TCARD:
+            UNHANDLED_EVENT_PRINTF(("WM_TCARD\n"));
+            break;
+
+        case WM_HELP:
+            UNHANDLED_EVENT_PRINTF(("WM_HELP\n"));
+            break;
+
+        case WM_USERCHANGED:
+            UNHANDLED_EVENT_PRINTF(("WM_USERCHANGED\n"));
+            break;
+
+        case WM_NOTIFY:
+            UNHANDLED_EVENT_PRINTF(("WM_NOTIFY\n"));
+            break;
+
+        case WM_NOTIFYFORMAT:
+            UNHANDLED_EVENT_PRINTF(("WM_NOTIFYFORMAT\n"));
+            break;
+
+        case WM_CONTEXTMENU:
+            UNHANDLED_EVENT_PRINTF(("WM_CONTEXTMENU\n"));
+            break;
+
+        case WM_NCXBUTTONDOWN:
+            UNHANDLED_EVENT_PRINTF(("WM_NCXBUTTONDOWN\n"));
+            break;
+
+        case WM_NCXBUTTONUP:
+            UNHANDLED_EVENT_PRINTF(("WM_NCXBUTTONUP\n"));
+            break;
+
+        case WM_NCXBUTTONDBLCLK:
+            UNHANDLED_EVENT_PRINTF(("WM_NCXBUTTONDBLCLK\n"));
+            break;
+
+        case WM_DEVICECHANGE:
+            UNHANDLED_EVENT_PRINTF(("WM_DEVICECHANGE\n"));
+            break;
+
+        case DBT_DEVICEARRIVAL:
+            UNHANDLED_EVENT_PRINTF(("DBT_DEVICEARRIVAL\n"));
+            break;
+
+        case DBT_DEVICEREMOVECOMPLETE:
+            UNHANDLED_EVENT_PRINTF(("DBT_DEVICEREMOVECOMPLETE\n"));
+            break;
+#endif
+
+        default:
+            EVENT_PRINTF(( "WinWorkstat [info] unhandled msg = %d 0x%x [%d]\n", message, message, __LINE__));
+            break;
     }
     return 0;
 }
@@ -4655,7 +4653,7 @@
 
 #if 0
     if (AttachThreadInput(_masterThreadId, _dispatchThreadId2, TRUE) != TRUE) {
-	console_fprintf(stderr, "WinWorkstation [warning]: AttachThreadInput failed\n");
+        console_fprintf(stderr, "WinWorkstation [warning]: AttachThreadInput failed\n");
     };
 #endif
 #ifndef WIN32THREADS
@@ -4669,20 +4667,20 @@
     /* allocate localMemory for Window */
     lI = (localWindowInfo *)malloc(sizeof(localWindowInfo));
     if (lI) {
-	memset(lI, 0, sizeof(*lI));
+        memset(lI, 0, sizeof(*lI));
     }
 
     __rootWinSpezial = CreateWindowExW(WS_EX_TOOLWINDOW | WS_EX_TRANSPARENT,
-				      wapp_nameRoot, wapp_nameRoot,
-				      WS_POPUP | WS_DISABLED,
-				      0, 0,
-				      rect.right - rect.left, rect.bottom - rect.top,
-				      0, 0, (HANDLE) __getHInstance(), lI);
+                                      wapp_nameRoot, wapp_nameRoot,
+                                      WS_POPUP | WS_DISABLED,
+                                      0, 0,
+                                      rect.right - rect.left, rect.bottom - rect.top,
+                                      0, 0, (HANDLE) __getHInstance(), lI);
 
     //ShowWindow(__rootWinSpezial,SW_SHOWNOACTIVATE);
     SetWindowPos(__rootWinSpezial, HWND_BOTTOM, 0, 0, 0, 0,
-		 SWP_NOSENDCHANGING |
-		 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
+                 SWP_NOSENDCHANGING |
+                 SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
 
 #ifdef STARTUP_DISPATCHTHREAD_DEBUG
     console_fprintf(stderr, "WinWorkstation [info]: setting ThreadRunningEvent\n");
@@ -4690,305 +4688,305 @@
     SetEvent(hDispatchThreadRunningEvent);
 
     for (;;) {
-	HANDLE dummy;
-
-	TH_DPRINTF(("TG %d\n", th_calls++));
-
-	/*
-	 * if there is no current capture (pointer-grab),
-	 * make certain that we do not get stuck in the GetMessage
-	 * but instead poll the mouse in 200ms intervals.
-	 * This is required to synthesize the MOUSELEAVE message,
-	 */
+        HANDLE dummy;
+
+        TH_DPRINTF(("TG %d\n", th_calls++));
+
+        /*
+         * if there is no current capture (pointer-grab),
+         * make certain that we do not get stuck in the GetMessage
+         * but instead poll the mouse in 200ms intervals.
+         * This is required to synthesize the MOUSELEAVE message,
+         */
 // DPRINTF(("X1\n"));
-	if (__currentPointerView && (__currentCapture == CAPTURE_NONE)) {
+        if (__currentPointerView && (__currentCapture == CAPTURE_NONE)) {
 // DPRINTF(("X2\n"));
-	    while (PeekMessageW(&msg, 0, 0, 0, PM_NOREMOVE) == 0) {
+            while (PeekMessageW(&msg, 0, 0, 0, PM_NOREMOVE) == 0) {
 // DPRINTF(("PeekMessage -> 0\n"));
-		/*
-		 * wait for an event; timeout after 200 millis
-		 */
-		if (MsgWaitForMultipleObjects(0,&dummy,FALSE,200,QS_ALLINPUT) == WAIT_TIMEOUT) {
-		    if (! inSizeMove) {
-			/*
-			 * timeout - see where mouse pointer is
-			 * for synthetic leave events.
-			 */
-			POINT point;
-
-			if (GetCursorPos(&point)) {
-			    HWND hWnd = WindowFromPoint(point);
-
-			    if (hWnd) {
-				if (GetWindowThreadProcessId(hWnd,0) != GetCurrentThreadId()) {
-				    if (inSizeMove) {
-					if (needDelayedMouseLeaveWindow == NULL) {
-					    needDelayedMouseLeaveWindow = __currentPointerView;
-					}
-				    } else {
-					if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
-					    enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, getModifiers(), EV_NOTIME);
-					    SetWindow_mouseXY(__currentPointerView, -9999, -9999);
-					}
-				    }
-				    __currentPointerView = 0;
-				    break;
-				}
-			    }
-			}
-		    }
-		}
-	    }
-	}
-
-	GetMessageW(&msg, NULL, 0, 0);
+                /*
+                 * wait for an event; timeout after 200 millis
+                 */
+                if (MsgWaitForMultipleObjects(0,&dummy,FALSE,200,QS_ALLINPUT) == WAIT_TIMEOUT) {
+                    if (! inSizeMove) {
+                        /*
+                         * timeout - see where mouse pointer is
+                         * for synthetic leave events.
+                         */
+                        POINT point;
+
+                        if (GetCursorPos(&point)) {
+                            HWND hWnd = WindowFromPoint(point);
+
+                            if (hWnd) {
+                                if (GetWindowThreadProcessId(hWnd,0) != GetCurrentThreadId()) {
+                                    if (inSizeMove) {
+                                        if (needDelayedMouseLeaveWindow == NULL) {
+                                            needDelayedMouseLeaveWindow = __currentPointerView;
+                                        }
+                                    } else {
+                                        if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
+                                            enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, getModifiers(), EV_NOTIME);
+                                            SetWindow_mouseXY(__currentPointerView, -9999, -9999);
+                                        }
+                                    }
+                                    __currentPointerView = 0;
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        GetMessageW(&msg, NULL, 0, 0);
 // DPRINTF(("GetMessage -> %d\n", msg.message));
-	TH_DPRINTF(("TD %d\n", th_calls++));
-	destroyWin = 0;
-
-	switch (msg.message) {
-#if 0
-	    case WM_THREAD_DESTROYWINDOW:
-		destroyWin = TRUE;
-		msg.message = WM_CLOSE;
-		EVENT_PRINTF(("thread WM_THREAD_DESTROYWINDOW %x\n",msg.hwnd));
-		break;
+        TH_DPRINTF(("TD %d\n", th_calls++));
+        destroyWin = 0;
+
+        switch (msg.message) {
+#if 0
+            case WM_THREAD_DESTROYWINDOW:
+                destroyWin = TRUE;
+                msg.message = WM_CLOSE;
+                EVENT_PRINTF(("thread WM_THREAD_DESTROYWINDOW %x\n",msg.hwnd));
+                break;
 #endif
 
 #ifdef SET_FOCUS_IN_WINTHREAD
-	    case WM_THREAD_SETFOCUS:
-		DPRINTFIF(__debug_WM_FOCUS__ , ("WM_THREAD_SETFOCUS h=%x\n", msg.wParam));
+            case WM_THREAD_SETFOCUS:
+                DPRINTFIF(__debug_WM_FOCUS__ , ("WM_THREAD_SETFOCUS h=%x\n", msg.wParam));
 # ifdef xxWIN32THREADS
-		if (msg.lParam) {
-		    if (AttachThreadInput(_dispatchThreadId2,msg.lParam,TRUE) == FALSE)
-			PRINTF(("SetFocus AttachThreadInput error %d\n", GetLastError()));
-		}
-# endif
-		EVENT_PRINTF(("threadSetfocus %x\n",msg.wParam));
-		if (SetFocus((HWND)msg.wParam) == 0) {
-		    DDPRINTF(("SetFocus to %x failed.\n",msg.wParam));
-		}
-		continue;
+                if (msg.lParam) {
+                    if (AttachThreadInput(_dispatchThreadId2,msg.lParam,TRUE) == FALSE)
+                        PRINTF(("SetFocus AttachThreadInput error %d\n", GetLastError()));
+                }
+# endif
+                EVENT_PRINTF(("threadSetfocus %x\n",msg.wParam));
+                if (SetFocus((HWND)msg.wParam) == 0) {
+                    DDPRINTF(("SetFocus to %x failed.\n",msg.wParam));
+                }
+                continue;
 #endif
 
 #ifdef SET_CURSOR_IN_WINTHREAD
-	    case WM_THREAD_SETCURSOR:
-		if (msg.lParam) {
+            case WM_THREAD_SETCURSOR:
+                if (msg.lParam) {
 #if 1
-		    SetCursor((HCURSOR)msg.lParam);
-#else
-		    /* this check is done by our sender */
-		    {
-			POINT p;
-			GetCursorPos(&p);
-			if (WindowFromPoint(p) == msg.hwnd) {
-			    EVENT_PRINTF(("threadSetCursor %x\n",msg.lParam));
-			    SetCursor((HCURSOR)msg.lParam);
-			}
-		    }
-#endif
-		}
-		continue;
+                    SetCursor((HCURSOR)msg.lParam);
+#else
+                    /* this check is done by our sender */
+                    {
+                        POINT p;
+                        GetCursorPos(&p);
+                        if (WindowFromPoint(p) == msg.hwnd) {
+                            EVENT_PRINTF(("threadSetCursor %x\n",msg.lParam));
+                            SetCursor((HCURSOR)msg.lParam);
+                        }
+                    }
+#endif
+                }
+                continue;
 #endif
 
 #ifdef BEEP_IN_WINTHREAD
-	    case WM_THREAD_BEEP:
-		MessageBeep( MB_ICONEXCLAMATION);
-		continue;
-#endif
-
-	    case WM_THREAD_SETCAPTURE:
-		if (msg.wParam) {
-		    if (__currentPointerView) {
-			if (inSizeMove) {
-			    if (needDelayedMouseLeaveWindow == NULL) {
-				needDelayedMouseLeaveWindow = __currentPointerView;
-			    }
-			} else {
-			    if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
-				enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, getModifiers(), EV_NOTIME);
-				SetWindow_mouseXY(__currentPointerView, -9999, -9999);
-			    }
-			}
-		    }
-
-		    __currentPointerView = (HWND)msg.wParam;
-		    __currentCapture = CAPTURE_EXPLICIT;
-		    EVENT_PRINTF(("threadSetCapture %x\n",msg.wParam));
-		    SetCapture(__currentPointerView);
-		} else {
-		    if (__currentPointerView  == __rootWinSpezial) {
-			//ShowWindow(__rootWinSpezial, SW_HIDE);
-			SetWindowPos(__rootWinSpezial, HWND_BOTTOM, 0, 0, 0, 0,
-				     SWP_NOREDRAW | SWP_NOSENDCHANGING | SWP_NOCOPYBITS
-				     | SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE
-				   /*| SWP_NOZORDER | SWP_NOOWNERZORDER */);
-		    }
-		    __currentPointerView = 0;
-		    __currentCapture = CAPTURE_NONE;
-		    EVENT_PRINTF(("threadReleaseCapture\n"));
-		    ReleaseCapture();
-		}
-		if (msg.lParam) {
-		    DDDDPRINTF(("threadSetCursor %x\n",msg.lParam));
-		    SetCursor((HCURSOR)msg.lParam);
-		}
-		continue;
-
-	    case WM_THREAD_CREATEWINDOW:
-		EVENT_PRINTF(("*WM_THREAD_CREATEWINDOW %d\n", th_calls));
-
-		{
-		    createWindowInfo *cwi = (createWindowInfo *)(msg.lParam);
-
-		    if ((cwi->sequenceNr == msg.wParam)
-		     && (cwi->sequenceNr != INVALIDATED_CWI)) {
-			cwi->sequenceNr = INVALIDATED_CWI;
-			cwi->infoWasRead = 1;
-			if (cwi->newWinHandle == NULL) {
-			    HANDLE ev;
-
-			    cwi->newWinHandle = CreateWindowExW(
-						cwi->winStyleBitsEx,
-						cwi->className,
-						cwi->windowName,
-						cwi->winStyleBits,
-						cwi->x, cwi->y,
-						cwi->dx, cwi->dy,
-						cwi->parentHandle,
-						NULL,           /* menu */
-						(HANDLE) __getHInstance(),
-						cwi->localWindowInfo
-					       );
-
-			    if (cwi->newWinHandle == NULL) {
-				cwi->errCode = GetLastError();
-				console_fprintf(stderr, "WinWorkstation [info]: CreateWindow %s failed: %d (0x%x) [%d]\n",
-						cwi->className, cwi->errCode, cwi->errCode, __LINE__);
-			    } else {
-				SETLOCALWINDOWINFOPTR(cwi->newWinHandle, cwi->localWindowInfo);
+            case WM_THREAD_BEEP:
+                MessageBeep( MB_ICONEXCLAMATION);
+                continue;
+#endif
+
+            case WM_THREAD_SETCAPTURE:
+                if (msg.wParam) {
+                    if (__currentPointerView) {
+                        if (inSizeMove) {
+                            if (needDelayedMouseLeaveWindow == NULL) {
+                                needDelayedMouseLeaveWindow = __currentPointerView;
+                            }
+                        } else {
+                            if (GetWindow_eventMask(__currentPointerView) & LeaveWindowMask) {
+                                enqEvent(LeaveWindowMask, __currentPointerView, __WM_MOUSELEAVE, 0, -1, -1, 0, getModifiers(), EV_NOTIME);
+                                SetWindow_mouseXY(__currentPointerView, -9999, -9999);
+                            }
+                        }
+                    }
+
+                    __currentPointerView = (HWND)msg.wParam;
+                    __currentCapture = CAPTURE_EXPLICIT;
+                    EVENT_PRINTF(("threadSetCapture %x\n",msg.wParam));
+                    SetCapture(__currentPointerView);
+                } else {
+                    if (__currentPointerView  == __rootWinSpezial) {
+                        //ShowWindow(__rootWinSpezial, SW_HIDE);
+                        SetWindowPos(__rootWinSpezial, HWND_BOTTOM, 0, 0, 0, 0,
+                                     SWP_NOREDRAW | SWP_NOSENDCHANGING | SWP_NOCOPYBITS
+                                     | SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE
+                                   /*| SWP_NOZORDER | SWP_NOOWNERZORDER */);
+                    }
+                    __currentPointerView = 0;
+                    __currentCapture = CAPTURE_NONE;
+                    EVENT_PRINTF(("threadReleaseCapture\n"));
+                    ReleaseCapture();
+                }
+                if (msg.lParam) {
+                    DDDDPRINTF(("threadSetCursor %x\n",msg.lParam));
+                    SetCursor((HCURSOR)msg.lParam);
+                }
+                continue;
+
+            case WM_THREAD_CREATEWINDOW:
+                EVENT_PRINTF(("*WM_THREAD_CREATEWINDOW %d\n", th_calls));
+
+                {
+                    createWindowInfo *cwi = (createWindowInfo *)(msg.lParam);
+
+                    if ((cwi->sequenceNr == msg.wParam)
+                     && (cwi->sequenceNr != INVALIDATED_CWI)) {
+                        cwi->sequenceNr = INVALIDATED_CWI;
+                        cwi->infoWasRead = 1;
+                        if (cwi->newWinHandle == NULL) {
+                            HANDLE ev;
+
+                            cwi->newWinHandle = CreateWindowExW(
+                                                cwi->winStyleBitsEx,
+                                                cwi->className,
+                                                cwi->windowName,
+                                                cwi->winStyleBits,
+                                                cwi->x, cwi->y,
+                                                cwi->dx, cwi->dy,
+                                                cwi->parentHandle,
+                                                NULL,           /* menu */
+                                                (HANDLE) __getHInstance(),
+                                                cwi->localWindowInfo
+                                               );
+
+                            if (cwi->newWinHandle == NULL) {
+                                cwi->errCode = GetLastError();
+                                console_fprintf(stderr, "WinWorkstation [info]: CreateWindow %s failed: %d (0x%x) [%d]\n",
+                                                cwi->className, cwi->errCode, cwi->errCode, __LINE__);
+                            } else {
+                                SETLOCALWINDOWINFOPTR(cwi->newWinHandle, cwi->localWindowInfo);
 #ifdef DEBUG /* PARANOIA */
-				if (GETLOCALWINDOWINFOPTR(cwi->newWinHandle) != cwi->localWindowInfo) {
-				   console_fprintf(stderr, "lI-Error\n");
-				}
-#endif
-			    }
-
-			    ev = cwi->hCreateEvent;
-			    if (ev) {
-				SetEvent(ev);
-			    }
-			}
-		    } else {
-			DPRINTF(("obsolete createWindow message %x ignored\n", cwi->sequenceNr));
-		    }
-		}
-		continue;
-
-	    case WM_THREAD_REGISTERHOTKEY:
-		EVENT_PRINTF(("*WM_THREAD_REGISTERHOTKEY\n"));
-		{
-		    registerHotKeyInfo *rhki = (registerHotKeyInfo *)(msg.lParam);
-		    rhki->errorCode = 0;
-		    if (!RegisterHotKey(rhki->hwnd,rhki->hotKeyId,rhki->modifier,rhki->virtualKey)){
-			rhki->errorCode = GetLastError();
-			console_fprintf(stderr, "WinWorkstation [error]: RegisterHotKey failed: err=%d\n", rhki->errorCode);
-		    }
-		    rhki->finished = 1;
-		}
-		continue;
-
-	    case WM_THREAD_UNREGISTERHOTKEY:
-		EVENT_PRINTF(("*WM_THREAD_UNREGISTERHOTKEY\n"));
-		{
-		    registerHotKeyInfo *rhki = (registerHotKeyInfo *)(msg.lParam);
-		    rhki->errorCode = 0;
-		    if (!UnregisterHotKey(rhki->hwnd,rhki->hotKeyId)){
-			rhki->errorCode = GetLastError();
-			console_fprintf(stderr, "WinWorkstation [error]: UnegisterHotKey failed: err=%d\n", rhki->errorCode);
-		    }
-		    rhki->finished = 1;
-		}
-		continue;
-
-	    case WM_KEYDOWN:
-		DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_KEYDOWN %x\n", msg.wParam));
-		goto commonKey;
-
-	    case WM_KEYUP:
-		DPRINTFIF(__debug_WM_KEYUP__  , ("WM_KEYUP %x\n", msg.wParam));
-		goto commonKey;
-
-	    case WM_SYSKEYDOWN:
-		DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_SYSKEYDOWN %x\n", msg.wParam));
-		goto commonKey;
-
-	    case WM_SYSKEYUP:
-		DPRINTFIF(__debug_WM_KEYUP__ , ("WM_SYSKEYUP %x\n", msg.wParam));
-		goto commonKey;
-
-	    case WM_HOTKEY:
-		// console_fprintf(stderr, "dispatchThread [info]: receive hotkey %x %x\n", msg.hwnd, msg.wParam);
-		DPRINTFIF(__debug_WM_KEYUP__ , ("WM_HOTKEY %x\n", msg.wParam));
-		break;
-
-	    commonKey:
+                                if (GETLOCALWINDOWINFOPTR(cwi->newWinHandle) != cwi->localWindowInfo) {
+                                   console_fprintf(stderr, "lI-Error\n");
+                                }
+#endif
+                            }
+
+                            ev = cwi->hCreateEvent;
+                            if (ev) {
+                                SetEvent(ev);
+                            }
+                        }
+                    } else {
+                        DPRINTF(("obsolete createWindow message %x ignored\n", cwi->sequenceNr));
+                    }
+                }
+                continue;
+
+            case WM_THREAD_REGISTERHOTKEY:
+                EVENT_PRINTF(("*WM_THREAD_REGISTERHOTKEY\n"));
+                {
+                    registerHotKeyInfo *rhki = (registerHotKeyInfo *)(msg.lParam);
+                    rhki->errorCode = 0;
+                    if (!RegisterHotKey(rhki->hwnd,rhki->hotKeyId,rhki->modifier,rhki->virtualKey)){
+                        rhki->errorCode = GetLastError();
+                        console_fprintf(stderr, "WinWorkstation [error]: RegisterHotKey failed: err=%d\n", rhki->errorCode);
+                    }
+                    rhki->finished = 1;
+                }
+                continue;
+
+            case WM_THREAD_UNREGISTERHOTKEY:
+                EVENT_PRINTF(("*WM_THREAD_UNREGISTERHOTKEY\n"));
+                {
+                    registerHotKeyInfo *rhki = (registerHotKeyInfo *)(msg.lParam);
+                    rhki->errorCode = 0;
+                    if (!UnregisterHotKey(rhki->hwnd,rhki->hotKeyId)){
+                        rhki->errorCode = GetLastError();
+                        console_fprintf(stderr, "WinWorkstation [error]: UnregisterHotKey failed: err=%d\n", rhki->errorCode);
+                    }
+                    rhki->finished = 1;
+                }
+                continue;
+
+            case WM_KEYDOWN:
+                DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_KEYDOWN %x\n", msg.wParam));
+                goto commonKey;
+
+            case WM_KEYUP:
+                DPRINTFIF(__debug_WM_KEYUP__  , ("WM_KEYUP %x\n", msg.wParam));
+                goto commonKey;
+
+            case WM_SYSKEYDOWN:
+                DPRINTFIF(__debug_WM_KEYDOWN__ , ("WM_SYSKEYDOWN %x\n", msg.wParam));
+                goto commonKey;
+
+            case WM_SYSKEYUP:
+                DPRINTFIF(__debug_WM_KEYUP__ , ("WM_SYSKEYUP %x\n", msg.wParam));
+                goto commonKey;
+
+            case WM_HOTKEY:
+                // console_fprintf(stderr, "dispatchThread [info]: receive hotkey %x %x\n", msg.hwnd, msg.wParam);
+                DPRINTFIF(__debug_WM_KEYUP__ , ("WM_HOTKEY %x\n", msg.wParam));
+                break;
+
+            commonKey:
 #if 1
-		if (((msg.wParam >= '0') && (msg.wParam <= 'Z'))
-		 || ((msg.wParam >= VK_MULTIPLY) && (msg.wParam <= VK_DIVIDE))
-		 || (msg.wParam == VK_SPACE)
-		 || (msg.wParam == VK_CAPITAL)
-		 /* || (msg.wParam == VK_SHIFT) */
-		 || (msg.wParam >= 0xB0))
-#endif
-		{
-		    /*
-		     * translate to a WM_CHAR message
-		     */
-		    if (TranslateMessage(&msg))
-			continue;
-		}
-		break;
-
-	    /* short cirquit some messages */
+                if (((msg.wParam >= '0') && (msg.wParam <= 'Z'))
+                 || ((msg.wParam >= VK_MULTIPLY) && (msg.wParam <= VK_DIVIDE))
+                 || (msg.wParam == VK_SPACE)
+                 || (msg.wParam == VK_CAPITAL)
+                 /* || (msg.wParam == VK_SHIFT) */
+                 || (msg.wParam >= 0xB0))
+#endif
+                {
+                    /*
+                     * translate to a WM_CHAR message
+                     */
+                    if (TranslateMessage(&msg))
+                        continue;
+                }
+                break;
+
+            /* short cirquit some messages */
 #if 0
 # ifndef SUPPORT_NATIVE_WINDOWS
-	    /*
-	     * some can simply be ignored ...
-	     */
-	    case WM_ERASEBKGND:
-		EVENT_PRINTF(("*WM_ERASEBKGND\n"));
-		continue;
-	    case WM_KILLFOCUS:
-		EVENT_PRINTF(("*WM_KILLFOCUS\n"));
-		continue;
-# endif
-#endif
-
-#if 0
-	    case WM_SIZE:
-		EVENT_PRINTF(("*WM_SIZE\n"));
-		continue;
-#endif
-	}
-
-	/*
-	 * common ...
-	 */
-	evRootX = msg.pt.x;
-	evRootY = msg.pt.y;
+            /*
+             * some can simply be ignored ...
+             */
+            case WM_ERASEBKGND:
+                EVENT_PRINTF(("*WM_ERASEBKGND\n"));
+                continue;
+            case WM_KILLFOCUS:
+                EVENT_PRINTF(("*WM_KILLFOCUS\n"));
+                continue;
+# endif
+#endif
+
+#if 0
+            case WM_SIZE:
+                EVENT_PRINTF(("*WM_SIZE\n"));
+                continue;
+#endif
+        }
+
+        /*
+         * common ...
+         */
+        evRootX = msg.pt.x;
+        evRootY = msg.pt.y;
 #if 1
-	{
-	    POINT p;
-
-	    if (GetCursorPos(&p)) {
-		evRootX = p.x;
-		evRootY = p.y;
-	    }
-	}
-#endif
-	lastMSGTime = msg.time;
-	DispatchMessageW(&msg);   /* Dispatches message to window */
+        {
+            POINT p;
+
+            if (GetCursorPos(&p)) {
+                evRootX = p.x;
+                evRootY = p.y;
+            }
+        }
+#endif
+        lastMSGTime = msg.time;
+        DispatchMessageW(&msg);   /* Dispatches message to window */
     }
 }
 
@@ -5009,20 +5007,20 @@
      */
     cwi = pendingCREATEWINDOWInfo;
     if (cwi) {
-	int dummyWantDefault;
-	int seqNr = pendingSequenceNr;
-
-	pendingCREATEWINDOWInfo = 0;
-	pendingSequenceNr = INVALIDATED_CWI;
-	DPRINTF(("### THREAD_CREATEWINDOW\n"));
-	winEventProcessing(0, WM_THREAD_CREATEWINDOW, seqNr, (INT)cwi, &dummyWantDefault);
+        int dummyWantDefault;
+        int seqNr = pendingSequenceNr;
+
+        pendingCREATEWINDOWInfo = 0;
+        pendingSequenceNr = INVALIDATED_CWI;
+        DPRINTF(("### THREAD_CREATEWINDOW\n"));
+        winEventProcessing(0, WM_THREAD_CREATEWINDOW, seqNr, (INT)cwi, &dummyWantDefault);
     }
 
     retVal = winEventProcessing(hWnd, message, wParam, lParam, &wantDefault);
     if (wantDefault) {
-	DDDPRINTF((">>DefWindowProc\n"));
-	retVal = DefWindowProcW(hWnd, message, wParam, lParam);
-	DDDPRINTF(("<<DefWindowProc\n"));
+        DDDPRINTF((">>DefWindowProc\n"));
+        retVal = DefWindowProcW(hWnd, message, wParam, lParam);
+        DDDPRINTF(("<<DefWindowProc\n"));
     }
     return retVal;
 }
@@ -5030,19 +5028,19 @@
 static int CALLBACK
 EnumWindowsProc(HWND hwnd, LPARAM lParam)
 {
-	volatile OBJ *refToCollection;
-	OBJ collection;
-	OBJ wHandle;
-
-	if (hwnd) {
-	    refToCollection = (OBJ*) lParam;
-	    __PROTECT__(*refToCollection);
-	    wHandle = __MKEXTERNALADDRESS(hwnd);
-	    __UNPROTECT__(*refToCollection);
-	    collection = *refToCollection;
-	    __SSEND1( collection, @symbol(add:), 0, wHandle );
-	}
-	return TRUE;
+        volatile OBJ *refToCollection;
+        OBJ collection;
+        OBJ wHandle;
+
+        if (hwnd) {
+            refToCollection = (OBJ*) lParam;
+            __PROTECT__(*refToCollection);
+            wHandle = __MKEXTERNALADDRESS(hwnd);
+            __UNPROTECT__(*refToCollection);
+            collection = *refToCollection;
+            __SSEND1( collection, @symbol(add:), 0, wHandle );
+        }
+        return TRUE;
 }
 
 #ifdef USE_EnumFontFamiliesEx
@@ -5058,26 +5056,26 @@
     DWORD dwType,              /* font type */
     LPARAM lpData              /* application supplied data */
 ) {
-	OBJ t;
-	volatile OBJ *refToList;
-	OBJ  typeFaceList;
-	char *faceNameString;
-
-	if (lplf) {
-	    refToList = (OBJ *) lpData;
-	    __PROTECT__(*refToList);
+        OBJ t;
+        volatile OBJ *refToList;
+        OBJ  typeFaceList;
+        char *faceNameString;
+
+        if (lplf) {
+            refToList = (OBJ *) lpData;
+            __PROTECT__(*refToList);
 
 #ifdef USE_EnumFontFamiliesEx
-	    faceNameString = lplf->elfLogFont.lfFaceName;
-#else
-	    faceNameString = lplf->lfFaceName;
-#endif
-	    t = __MKSTRING( faceNameString );
-	    __UNPROTECT__(*refToList);
-	    typeFaceList = *refToList;
-	    __SSEND1( typeFaceList, @symbol(add:), 0, t );
-	}
-	return 1;
+            faceNameString = lplf->elfLogFont.lfFaceName;
+#else
+            faceNameString = lplf->lfFaceName;
+#endif
+            t = __MKSTRING( faceNameString );
+            __UNPROTECT__(*refToList);
+            typeFaceList = *refToList;
+            __SSEND1( typeFaceList, @symbol(add:), 0, t );
+        }
+        return 1;
 }
 
 /*
@@ -5114,98 +5112,98 @@
     OBJ s;
 
     switch (charSet) {
-	case ANSI_CHARSET:
-	    s = @symbol('ms-ansi');
-	    break;
-	case DEFAULT_CHARSET:
-	    s = @symbol('ms-default');
-	    break;
-	case SYMBOL_CHARSET:
-	    s = @symbol('ms-symbol');
-	    break;
-	case SHIFTJIS_CHARSET:
-	    s = @symbol('ms-shiftjis');
-	    break;
-	case GB2312_CHARSET:
-	    s = @symbol('ms-gb2312');
-	    break;
-	case HANGEUL_CHARSET:
-	    s = @symbol('ms-hangeul');
-	    break;
+        case ANSI_CHARSET:
+            s = @symbol('ms-ansi');
+            break;
+        case DEFAULT_CHARSET:
+            s = @symbol('ms-default');
+            break;
+        case SYMBOL_CHARSET:
+            s = @symbol('ms-symbol');
+            break;
+        case SHIFTJIS_CHARSET:
+            s = @symbol('ms-shiftjis');
+            break;
+        case GB2312_CHARSET:
+            s = @symbol('ms-gb2312');
+            break;
+        case HANGEUL_CHARSET:
+            s = @symbol('ms-hangeul');
+            break;
 # if defined(HANGUL_CHARSET) && (HANGUL_CHARSET != HANGEUL_CHARSET)
-	case HANGUL_CHARSET:
-	    s = @symbol('ms-hangul');
-	    break;
-# endif
-	case CHINESEBIG5_CHARSET:
-	    s = @symbol('ms-chinesebig5');
-	    break;
-	case OEM_CHARSET:
-	    s = @symbol('ms-oem');
-	    break;
+        case HANGUL_CHARSET:
+            s = @symbol('ms-hangul');
+            break;
+# endif
+        case CHINESEBIG5_CHARSET:
+            s = @symbol('ms-chinesebig5');
+            break;
+        case OEM_CHARSET:
+            s = @symbol('ms-oem');
+            break;
 # ifdef JOHAB_CHARSET
-	case JOHAB_CHARSET:
-	    s = @symbol('ms-johab');
-	    break;
+        case JOHAB_CHARSET:
+            s = @symbol('ms-johab');
+            break;
 # endif
 # ifdef HEBREW_CHARSET
-	case HEBREW_CHARSET:
-	    s = @symbol('ms-hebrew');
-	    break;
+        case HEBREW_CHARSET:
+            s = @symbol('ms-hebrew');
+            break;
 # endif
 # ifdef ARABIC_CHARSET
-	case ARABIC_CHARSET:
-	    s = @symbol('ms-arabic');
-	    break;
+        case ARABIC_CHARSET:
+            s = @symbol('ms-arabic');
+            break;
 # endif
 # ifdef GREEK_CHARSET
-	case GREEK_CHARSET:
-	    s = @symbol('ms-greek');
-	    break;
+        case GREEK_CHARSET:
+            s = @symbol('ms-greek');
+            break;
 # endif
 # ifdef TURKISH_CHARSET
-	case TURKISH_CHARSET:
-	    s = @symbol('ms-turkish');
-	    break;
+        case TURKISH_CHARSET:
+            s = @symbol('ms-turkish');
+            break;
 # endif
 # ifdef RUSSIAN_CHARSET
-	case RUSSIAN_CHARSET:
-	    s = @symbol('ms-russian');
-	    break;
+        case RUSSIAN_CHARSET:
+            s = @symbol('ms-russian');
+            break;
 # endif
 # ifdef EASTEUROPE_CHARSET
-	case EASTEUROPE_CHARSET:
-	    s = @symbol('ms-easteurope');
-	    break;
+        case EASTEUROPE_CHARSET:
+            s = @symbol('ms-easteurope');
+            break;
 # endif
 # ifdef BALTIC_CHARSET
-	case BALTIC_CHARSET:
-	    s = @symbol('ms-baltic');
-	    break;
+        case BALTIC_CHARSET:
+            s = @symbol('ms-baltic');
+            break;
 # endif
 # ifdef VIETNAMESE_CHARSET
-	case VIETNAMESE_CHARSET:
-	    s = @symbol('ms-vietnamese');
-	    break;
+        case VIETNAMESE_CHARSET:
+            s = @symbol('ms-vietnamese');
+            break;
 # endif
 # ifdef THAI_CHARSET
-	case THAI_CHARSET:
-	    s = @symbol('ms-thai');
-	    break;
+        case THAI_CHARSET:
+            s = @symbol('ms-thai');
+            break;
 # endif
 # ifdef MAC_CHARSET
-	case MAC_CHARSET:
-	    s = @symbol('ms-mac');
-	    break;
+        case MAC_CHARSET:
+            s = @symbol('ms-mac');
+            break;
 # endif
 # ifdef UNICODE_CHARSET
-	case UNICODE_CHARSET:
-	    s = @symbol('ms-unicode');
-	    break;
-# endif
-	default:
-	    s = @symbol(unknown);
-	    break;
+        case UNICODE_CHARSET:
+            s = @symbol('ms-unicode');
+            break;
+# endif
+        default:
+            s = @symbol(unknown);
+            break;
     }
     return s;
 }
@@ -5213,106 +5211,106 @@
 OBJ
 __extractLogicalFontParameters(LOGFONT *lplf)
 {
-	OBJ newArray, t;
-	OBJ s;
-
-	DPRINTF((" lfHeight          %d\n", lplf->lfHeight ));
-	DPRINTF((" lfWidth           %d\n", lplf->lfWidth  ));
-	DPRINTF((" lfEscapement      %d\n", lplf->lfEscapement  ));
-	DPRINTF((" lfOrientation     %d\n", lplf->lfOrientation  ));
-	DPRINTF((" lfWeight          %d\n", lplf->lfWeight  ));
-	DPRINTF((" lfItalic          %d\n", lplf->lfItalic  ));
-	DPRINTF((" lfUnderline       %d\n", lplf->lfUnderline  ));
-	DPRINTF((" lfStrikeOut       %d\n", lplf->lfStrikeOut  ));
-	DPRINTF((" lfCharSet         %d\n", lplf->lfCharSet  ));
-	DPRINTF((" lfOutPrecision    %d\n", lplf->lfOutPrecision  ));
-	DPRINTF((" lfClipPrecision   %d\n", lplf->lfClipPrecision  ));
-	DPRINTF((" lfQuality         %d\n", lplf->lfQuality  ));
-	DPRINTF((" lfPitchAndFamily  %d\n", lplf->lfPitchAndFamily  ));
-	DPRINTF((" lfFaceName        %s\n\n", lplf->lfFaceName  ));
-
-	newArray = __ARRAY_NEW_INT(20);
-
-	__ArrayInstPtr(newArray)->a_element[0] = __MKSMALLINT(lplf->lfHeight);
-	__ArrayInstPtr(newArray)->a_element[1] = __MKSMALLINT(lplf->lfWidth);
-	__ArrayInstPtr(newArray)->a_element[2] = __MKSMALLINT(lplf->lfEscapement);
-	__ArrayInstPtr(newArray)->a_element[3] = __MKSMALLINT(lplf->lfOrientation);
-	__ArrayInstPtr(newArray)->a_element[4] = __MKSMALLINT(lplf->lfWeight);
-	switch (lplf->lfWeight) {
-	    case FW_HEAVY:
-	    case FW_EXTRABOLD:
-	    case FW_SEMIBOLD:
-	    case FW_BOLD:
-		s = @symbol(bold);
-		break;
-	    case FW_NORMAL:
-#if 0
-		s = @symbol(normal);
-		break;
-#endif
-	    case FW_MEDIUM:
-		s = @symbol(medium);
-		break;
-	    case FW_THIN:
-	    case FW_EXTRALIGHT:
-	    case FW_LIGHT:
-		s = @symbol(demi);
-		break;
-	    default:
-		s = @symbol(other);
-		break;
-	}
-	__ArrayInstPtr(newArray)->a_element[5] = s; __STORE(newArray, s);
-	__ArrayInstPtr(newArray)->a_element[6] = __MKSMALLINT(lplf->lfItalic);
-	__ArrayInstPtr(newArray)->a_element[7] = __MKSMALLINT(lplf->lfUnderline);
-	__ArrayInstPtr(newArray)->a_element[8] = __MKSMALLINT(lplf->lfStrikeOut);
-	__ArrayInstPtr(newArray)->a_element[9] = __MKSMALLINT(lplf->lfCharSet);
-	__ArrayInstPtr(newArray)->a_element[10] = __MKSMALLINT(lplf->lfOutPrecision);
-	__ArrayInstPtr(newArray)->a_element[11] = __MKSMALLINT(lplf->lfClipPrecision);
-	__ArrayInstPtr(newArray)->a_element[12] = __MKSMALLINT(lplf->lfQuality);
-	__ArrayInstPtr(newArray)->a_element[13] = __MKSMALLINT(lplf->lfPitchAndFamily);
-	/* ... */
-
-	if( lplf->lfItalic == TRUE ) {
-	    if( lplf->lfUnderline == TRUE ) {
-		if( lplf->lfStrikeOut == TRUE ) {
-		    s = @symbol('italic-underline-strikeOut');
-		} else {
-		    s = @symbol('italic-underline');
-		}
-	    } else {
-		if( lplf->lfStrikeOut == TRUE ) {
-		    s = @symbol('italic-strikeOut');
-		} else {
-		    s = @symbol('italic');
-		}
-	    }
-	} else {
-	    if( lplf->lfUnderline == TRUE ) {
-		if( lplf->lfStrikeOut == TRUE ) {
-		    s = @symbol('roman-underline-strikeOut');
-		} else {
-		    s = @symbol('roman-underline');
-		}
-	    } else {
-		if( lplf->lfStrikeOut == TRUE ) {
-		    s = @symbol('roman-strikeOut');
-		} else {
-		    s = @symbol('roman');
-		}
-	    }
-	}
-	__ArrayInstPtr(newArray)->a_element[14] = s; __STORE(newArray, s);
-
-	__PROTECT__(newArray);
-	t = __MKSTRING(lplf->lfFaceName);
-	__UNPROTECT__(newArray);
-	__ArrayInstPtr(newArray)->a_element[15] = t; __STORE(newArray, t);
-
-	t = __charSetSymbolFor(lplf->lfCharSet);
-	__ArrayInstPtr(newArray)->a_element[16] = t; __STORE(newArray, t);
-
-	return newArray;
+        OBJ newArray, t;
+        OBJ s;
+
+        DPRINTF((" lfHeight          %d\n", lplf->lfHeight ));
+        DPRINTF((" lfWidth           %d\n", lplf->lfWidth  ));
+        DPRINTF((" lfEscapement      %d\n", lplf->lfEscapement  ));
+        DPRINTF((" lfOrientation     %d\n", lplf->lfOrientation  ));
+        DPRINTF((" lfWeight          %d\n", lplf->lfWeight  ));
+        DPRINTF((" lfItalic          %d\n", lplf->lfItalic  ));
+        DPRINTF((" lfUnderline       %d\n", lplf->lfUnderline  ));
+        DPRINTF((" lfStrikeOut       %d\n", lplf->lfStrikeOut  ));
+        DPRINTF((" lfCharSet         %d\n", lplf->lfCharSet  ));
+        DPRINTF((" lfOutPrecision    %d\n", lplf->lfOutPrecision  ));
+        DPRINTF((" lfClipPrecision   %d\n", lplf->lfClipPrecision  ));
+        DPRINTF((" lfQuality         %d\n", lplf->lfQuality  ));
+        DPRINTF((" lfPitchAndFamily  %d\n", lplf->lfPitchAndFamily  ));
+        DPRINTF((" lfFaceName        %s\n\n", lplf->lfFaceName  ));
+
+        newArray = __ARRAY_NEW_INT(20);
+
+        __ArrayInstPtr(newArray)->a_element[0] = __MKSMALLINT(lplf->lfHeight);
+        __ArrayInstPtr(newArray)->a_element[1] = __MKSMALLINT(lplf->lfWidth);
+        __ArrayInstPtr(newArray)->a_element[2] = __MKSMALLINT(lplf->lfEscapement);
+        __ArrayInstPtr(newArray)->a_element[3] = __MKSMALLINT(lplf->lfOrientation);
+        __ArrayInstPtr(newArray)->a_element[4] = __MKSMALLINT(lplf->lfWeight);
+        switch (lplf->lfWeight) {
+            case FW_HEAVY:
+            case FW_EXTRABOLD:
+            case FW_SEMIBOLD:
+            case FW_BOLD:
+                s = @symbol(bold);
+                break;
+            case FW_NORMAL:
+#if 0
+                s = @symbol(normal);
+                break;
+#endif
+            case FW_MEDIUM:
+                s = @symbol(medium);
+                break;
+            case FW_THIN:
+            case FW_EXTRALIGHT:
+            case FW_LIGHT:
+                s = @symbol(demi);
+                break;
+            default:
+                s = @symbol(other);
+                break;
+        }
+        __ArrayInstPtr(newArray)->a_element[5] = s; __STORE(newArray, s);
+        __ArrayInstPtr(newArray)->a_element[6] = __MKSMALLINT(lplf->lfItalic);
+        __ArrayInstPtr(newArray)->a_element[7] = __MKSMALLINT(lplf->lfUnderline);
+        __ArrayInstPtr(newArray)->a_element[8] = __MKSMALLINT(lplf->lfStrikeOut);
+        __ArrayInstPtr(newArray)->a_element[9] = __MKSMALLINT(lplf->lfCharSet);
+        __ArrayInstPtr(newArray)->a_element[10] = __MKSMALLINT(lplf->lfOutPrecision);
+        __ArrayInstPtr(newArray)->a_element[11] = __MKSMALLINT(lplf->lfClipPrecision);
+        __ArrayInstPtr(newArray)->a_element[12] = __MKSMALLINT(lplf->lfQuality);
+        __ArrayInstPtr(newArray)->a_element[13] = __MKSMALLINT(lplf->lfPitchAndFamily);
+        /* ... */
+
+        if( lplf->lfItalic == TRUE ) {
+            if( lplf->lfUnderline == TRUE ) {
+                if( lplf->lfStrikeOut == TRUE ) {
+                    s = @symbol('italic-underline-strikeOut');
+                } else {
+                    s = @symbol('italic-underline');
+                }
+            } else {
+                if( lplf->lfStrikeOut == TRUE ) {
+                    s = @symbol('italic-strikeOut');
+                } else {
+                    s = @symbol('italic');
+                }
+            }
+        } else {
+            if( lplf->lfUnderline == TRUE ) {
+                if( lplf->lfStrikeOut == TRUE ) {
+                    s = @symbol('roman-underline-strikeOut');
+                } else {
+                    s = @symbol('roman-underline');
+                }
+            } else {
+                if( lplf->lfStrikeOut == TRUE ) {
+                    s = @symbol('roman-strikeOut');
+                } else {
+                    s = @symbol('roman');
+                }
+            }
+        }
+        __ArrayInstPtr(newArray)->a_element[14] = s; __STORE(newArray, s);
+
+        __PROTECT__(newArray);
+        t = __MKSTRING(lplf->lfFaceName);
+        __UNPROTECT__(newArray);
+        __ArrayInstPtr(newArray)->a_element[15] = t; __STORE(newArray, t);
+
+        t = __charSetSymbolFor(lplf->lfCharSet);
+        __ArrayInstPtr(newArray)->a_element[16] = t; __STORE(newArray, t);
+
+        return newArray;
 }
 
 
@@ -5323,37 +5321,37 @@
     DWORD dwType,              // font type
     LPARAM lpData              // application supplied data
 ) {
-	volatile OBJ *refToList;
-	OBJ list;
-	OBJ infoArray;
-	OBJ *fullName;
-
-	DPRINTF(("EnumFontsProc\n"));
-
-	if ( lplf ) {
-	    refToList = (OBJ *) lpData;
-
-	    __PROTECT__(*refToList);
+        volatile OBJ *refToList;
+        OBJ list;
+        OBJ infoArray;
+        OBJ *fullName;
+
+        DPRINTF(("EnumFontsProc\n"));
+
+        if ( lplf ) {
+            refToList = (OBJ *) lpData;
+
+            __PROTECT__(*refToList);
 #ifdef USE_EnumFontFamiliesEx
-	    infoArray = __extractLogicalFontParameters(lplf->elfLogFont);
-	    __PROTECT__(infoArray);
-	    fullName = __MKSTRING(lplf->elfFullName);
-	    __UNPROTECT__(infoArray);
-	    __ArrayInstPtr(infoArray)->a_element[17] = fullName; __STORE(infoArray, fullName);
-#else
-	    infoArray = __extractLogicalFontParameters(lplf);
-#endif
-
-	    __UNPROTECT__(*refToList);
-
-	    if ( dwType & TRUETYPE_FONTTYPE ) {
-		/* change height to 0 to mark variable fonts */
-		__ArrayInstPtr(infoArray)->a_element[0] = __MKSMALLINT(0);
-	    }
-	    list = *refToList;
-	    __SSEND1(list, @symbol(add:), 0, infoArray);
-	}
-	return 1;
+            infoArray = __extractLogicalFontParameters(lplf->elfLogFont);
+            __PROTECT__(infoArray);
+            fullName = __MKSTRING(lplf->elfFullName);
+            __UNPROTECT__(infoArray);
+            __ArrayInstPtr(infoArray)->a_element[17] = fullName; __STORE(infoArray, fullName);
+#else
+            infoArray = __extractLogicalFontParameters(lplf);
+#endif
+
+            __UNPROTECT__(*refToList);
+
+            if ( dwType & TRUETYPE_FONTTYPE ) {
+                /* change height to 0 to mark variable fonts */
+                __ArrayInstPtr(infoArray)->a_element[0] = __MKSMALLINT(0);
+            }
+            list = *refToList;
+            __SSEND1(list, @symbol(add:), 0, infoArray);
+        }
+        return 1;
 }
 
 struct EnumDisplayMonitorsProcData {
@@ -20033,7 +20031,7 @@
     }
 %}
     "
-     (StandardSystemView new label:'äöü') open
+     (StandardSystemView new label:'äöü') open
     "
 !