[ros-diffs] [fireball] 45081: [winetests] - Sync gdi32 and user32 winetests to Wine-1.1.36.

fireball at svn.reactos.org fireball at svn.reactos.org
Thu Jan 14 23:35:54 CET 2010


Author: fireball
Date: Thu Jan 14 23:35:53 2010
New Revision: 45081

URL: http://svn.reactos.org/svn/reactos?rev=45081&view=rev
Log:
[winetests]
- Sync gdi32 and user32 winetests to Wine-1.1.36.

Added:
    trunk/rostests/winetests/user32/uitools.c   (with props)
Modified:
    trunk/rostests/winetests/gdi32/font.c
    trunk/rostests/winetests/gdi32/metafile.c
    trunk/rostests/winetests/user32/clipboard.c
    trunk/rostests/winetests/user32/dialog.c
    trunk/rostests/winetests/user32/edit.c
    trunk/rostests/winetests/user32/listbox.c
    trunk/rostests/winetests/user32/menu.c
    trunk/rostests/winetests/user32/msg.c
    trunk/rostests/winetests/user32/sysparams.c
    trunk/rostests/winetests/user32/testlist.c
    trunk/rostests/winetests/user32/user32.rbuild
    trunk/rostests/winetests/user32/winstation.c

Modified: trunk/rostests/winetests/gdi32/font.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/font.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/gdi32/font.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/font.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -2848,6 +2848,29 @@
     DeleteDC(hdc);
 }
 
+static void test_oemcharset(void)
+{
+    HDC hdc;
+    LOGFONTA lf;
+    HFONT hfont, old_hfont;
+    int charset;
+
+    hdc = CreateCompatibleDC(0);
+    ZeroMemory(&lf, sizeof(lf));
+    lf.lfHeight = 12;
+    lf.lfCharSet = OEM_CHARSET;
+    lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
+    lstrcpyA(lf.lfFaceName, "Terminal");
+    hfont = CreateFontIndirectA(&lf);
+    old_hfont = SelectObject(hdc, hfont);
+    charset = GetTextCharset(hdc);
+todo_wine
+    ok(charset == OEM_CHARSET, "expected %d charset, got %d\n", OEM_CHARSET, charset);
+    SelectObject(hdc, old_hfont);
+    DeleteObject(hfont);
+    DeleteDC(hdc);
+}
+
 static void test_GetGlyphOutline(void)
 {
     MAT2 mat = { {0,1}, {0,0}, {0,0}, {0,1} };
@@ -2978,6 +3001,39 @@
           width, height, ratio, width, ave_width, scale);
 
     ok(ratio >= 90 && ratio <= 110, "expected width/height ratio 90-110, got %d\n", ratio);
+}
+
+static void test_CreateFontIndirect(void)
+{
+    LOGFONTA lf, getobj_lf;
+    int ret, i;
+    HFONT hfont;
+    char TestName[][16] = {"Arial", "Arial Bold", "Arial Italic", "Arial Baltic"};
+
+    memset(&lf, 0, sizeof(lf));
+    lf.lfCharSet = ANSI_CHARSET;
+    lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+    lf.lfHeight = 16;
+    lf.lfWidth = 16;
+    lf.lfQuality = DEFAULT_QUALITY;
+    lf.lfItalic = FALSE;
+    lf.lfWeight = FW_DONTCARE;
+
+    for (i = 0; i < sizeof(TestName)/sizeof(TestName[0]); i++)
+    {
+        lstrcpyA(lf.lfFaceName, TestName[i]);
+        hfont = CreateFontIndirectA(&lf);
+        ok(hfont != 0, "CreateFontIndirectA failed\n");
+        ret = GetObject(hfont, sizeof(getobj_lf), &getobj_lf);
+        ok(lf.lfItalic == getobj_lf.lfItalic, "lfItalic: expect %02x got %02x\n", lf.lfItalic, getobj_lf.lfItalic);
+        ok(lf.lfWeight == getobj_lf.lfWeight ||
+           broken((SHORT)lf.lfWeight == getobj_lf.lfWeight), /* win9x */
+           "lfWeight: expect %08x got %08x\n", lf.lfWeight, getobj_lf.lfWeight);
+        ok(!lstrcmpA(lf.lfFaceName, getobj_lf.lfFaceName) ||
+           broken(!memcmp(lf.lfFaceName, getobj_lf.lfFaceName, LF_FACESIZE-1)), /* win9x doesn't ensure '\0' termination */
+           "font names don't match: %s != %s\n", lf.lfFaceName, getobj_lf.lfFaceName);
+        DeleteObject(hfont);
+    }
 }
 
 START_TEST(font)
@@ -3023,4 +3079,6 @@
     test_GetTextMetrics2("Arial", -11);
     test_GetTextMetrics2("Arial", -55);
     test_GetTextMetrics2("Arial", -110);
-}
+    test_CreateFontIndirect();
+    test_oemcharset();
+}

Modified: trunk/rostests/winetests/gdi32/metafile.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/metafile.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/gdi32/metafile.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/metafile.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -1030,6 +1030,63 @@
     0x14, 0x00, 0x00, 0x00
 };
 
+static const unsigned char EMF_BITBLT[] =
+{
+    0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x6a, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00,
+    0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00,
+    0xa0, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x23, 0x04, 0x00, 0x00, 0x3b, 0x02, 0x00, 0x00,
+    0x75, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x08, 0xb1, 0x05, 0x00,
+    0x28, 0x11, 0x03, 0x00, 0x4c, 0x00, 0x00, 0x00,
+    0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+    0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+    0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0xcc, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x64, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+    0x8c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+    0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+    0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x4c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+    0x62, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+    0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00
+};
+
+
 /* For debugging or dumping the raw metafiles produced by
  * new test functions.
  */
@@ -1380,6 +1437,70 @@
 	offset2 += emr2->nSize;
     }
     return 0;
+}
+
+
+/* tests blitting to an EMF */
+static void test_emf_BitBlt(void)
+{
+    HDC hdcDisplay, hdcMetafile, hdcBitmap;
+    HBITMAP hBitmap, hOldBitmap;
+    HENHMETAFILE hMetafile;
+#define BMP_DIM 4
+    BITMAPINFOHEADER bmih =
+    {
+        sizeof(BITMAPINFOHEADER),
+        BMP_DIM,/* biWidth */
+        BMP_DIM,/* biHeight */
+        1,      /* biPlanes */
+        24,     /* biBitCount */
+        BI_RGB, /* biCompression */
+        0,      /* biXPelsPerMeter */
+        0,      /* biYPelsPerMeter */
+        0,      /* biClrUsed */
+        0,      /* biClrImportant */
+    };
+    void *bits;
+    BOOL ret;
+
+    hdcDisplay = CreateDCA("DISPLAY", NULL, NULL, NULL);
+    ok( hdcDisplay != 0, "CreateDCA error %d\n", GetLastError() );
+
+    hdcBitmap = CreateCompatibleDC(hdcDisplay);
+    ok( hdcBitmap != 0, "CreateCompatibleDC failed\n" );
+    bmih.biXPelsPerMeter = MulDiv(GetDeviceCaps(hdcDisplay, LOGPIXELSX), 100, 3937);
+    bmih.biYPelsPerMeter = MulDiv(GetDeviceCaps(hdcDisplay, LOGPIXELSY), 100, 3937);
+    hBitmap = CreateDIBSection(hdcDisplay, (const BITMAPINFO *)&bmih,
+                               DIB_RGB_COLORS, &bits, NULL, 0);
+    hOldBitmap = SelectObject(hdcBitmap, hBitmap);
+
+    hdcMetafile = CreateEnhMetaFileA(hdcBitmap, NULL, NULL, NULL);
+    ok( hdcMetafile != 0, "CreateEnhMetaFileA failed\n" );
+
+    /* First fill the bitmap DC with something recognizable, like BLACKNESS */
+    ret = BitBlt(hdcBitmap, 0, 0, BMP_DIM, BMP_DIM, 0, 0, 0, BLACKNESS);
+    ok( ret, "BitBlt(BLACKNESS) failed\n" );
+
+    ret = BitBlt(hdcMetafile, 0, 0, BMP_DIM, BMP_DIM, hdcBitmap, 0, 0, SRCCOPY);
+    ok( ret, "BitBlt(SRCCOPY) failed\n" );
+    ret = BitBlt(hdcMetafile, 0, 0, BMP_DIM, BMP_DIM, 0, 0, 0, WHITENESS);
+    ok( ret, "BitBlt(WHITENESS) failed\n" );
+
+    hMetafile = CloseEnhMetaFile(hdcMetafile);
+    ok( hMetafile != 0, "CloseEnhMetaFile failed\n" );
+
+    if(compare_emf_bits(hMetafile, EMF_BITBLT, sizeof(EMF_BITBLT),
+        "emf_BitBlt", FALSE) != 0)
+    {
+        dump_emf_bits(hMetafile, "emf_BitBlt");
+        dump_emf_records(hMetafile, "emf_BitBlt");
+    }
+
+    SelectObject(hdcBitmap, hOldBitmap);
+    DeleteObject(hBitmap);
+    DeleteDC(hdcBitmap);
+    DeleteDC(hdcDisplay);
+#undef BMP_DIM
 }
 
 /* Test a blank metafile.  May be used as a template for new tests. */
@@ -1953,8 +2074,11 @@
     SetRect(&rc_sclip, 100, 100, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
     hrgn = CreateRectRgn(rc_sclip.left, rc_sclip.top, rc_sclip.right, rc_sclip.bottom);
     SelectClipRgn(hdc, hrgn);
-    GetClipBox(hdc, &rc_res);
-    todo_wine ok(EqualRect(&rc_res, &rc_sclip),
+    ret = GetClipBox(hdc, &rc_res);
+todo_wine
+    ok(ret == SIMPLEREGION, "got %d\n", ret);
+    if(ret == SIMPLEREGION)
+        ok(EqualRect(&rc_res, &rc_sclip),
                  "expected rc_res (%d, %d) - (%d, %d), got (%d, %d) - (%d, %d)\n",
                  rc_sclip.left, rc_sclip.top, rc_sclip.right, rc_sclip.bottom,
                  rc_res.left, rc_res.top, rc_res.right, rc_res.bottom);
@@ -2625,6 +2749,7 @@
     /* For enhanced metafiles (enhmfdrv) */
     test_ExtTextOut();
     test_SaveDC();
+    test_emf_BitBlt();
 
     /* For win-format metafiles (mfdrv) */
     test_mf_SaveDC();

Modified: trunk/rostests/winetests/user32/clipboard.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/clipboard.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/clipboard.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/clipboard.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -56,7 +56,8 @@
 
     SetLastError(0xdeadbeef);
     ok(!CloseClipboard(), "CloseClipboard should fail if clipboard wasn't open\n");
-    test_last_error(ERROR_CLIPBOARD_NOT_OPEN);
+    ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN || broken(GetLastError() == 0xdeadbeef), /* wow64 */
+       "wrong error %u\n", GetLastError());
 
     ok(OpenClipboard(0), "OpenClipboard failed\n");
     ok(!GetClipboardOwner(), "clipboard should still be not owned\n");
@@ -188,7 +189,8 @@
 
     SetLastError(0xdeadbeef);
     ok(!EmptyClipboard(), "EmptyClipboard should fail if clipboard wasn't open\n");
-    test_last_error(ERROR_CLIPBOARD_NOT_OPEN);
+    ok(GetLastError() == ERROR_CLIPBOARD_NOT_OPEN || broken(GetLastError() == 0xdeadbeef), /* wow64 */
+       "Wrong error %u\n", GetLastError());
 }
 
 static HGLOBAL create_text(void)

Modified: trunk/rostests/winetests/user32/dialog.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/dialog.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/dialog.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/dialog.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -464,7 +464,6 @@
 static LRESULT CALLBACK main_window_procA (HWND hwnd, UINT uiMsg, WPARAM wParam,
         LPARAM lParam)
 {
-    LRESULT result;
     switch (uiMsg)
     {
         /* Add blank case statements for these to ensure we don't use them
@@ -485,20 +484,19 @@
             break;
     }
 
-    result=DefWindowProcA (hwnd, uiMsg, wParam, lParam);
-    return result;
+    return DefWindowProcA (hwnd, uiMsg, wParam, lParam);
 }
 
 static LRESULT CALLBACK disabled_test_proc (HWND hwnd, UINT uiMsg,
         WPARAM wParam, LPARAM lParam)
 {
-    LRESULT result;
-    DWORD dw;
-    HWND hwndOk;
-
     switch (uiMsg)
     {
         case WM_INITDIALOG:
+        {
+            DWORD dw;
+            HWND hwndOk;
+
             dw = SendMessage(hwnd, DM_GETDEFID, 0, 0);
             assert(DC_HASDEFID == HIWORD(dw));
             hwndOk = GetDlgItem(hwnd, LOWORD(dw));
@@ -508,6 +506,7 @@
             PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0);
             PostMessage(hwnd, WM_COMMAND, IDCANCEL, 0);
             break;
+        }
         case WM_COMMAND:
             if (wParam == IDOK)
             {
@@ -523,14 +522,12 @@
             break;
     }
 
-    result=DefWindowProcA (hwnd, uiMsg, wParam, lParam);
-    return result;
+    return DefWindowProcA (hwnd, uiMsg, wParam, lParam);
 }
 
 static LRESULT CALLBACK testDlgWinProc (HWND hwnd, UINT uiMsg, WPARAM wParam,
         LPARAM lParam)
 {
-    LRESULT result;
     switch (uiMsg)
     {
         /* Add blank case statements for these to ensure we don't use them
@@ -544,8 +541,7 @@
                     (LPCREATESTRUCTA) lParam) ? 0 : (LRESULT) -1);
     }
 
-    result=DefWindowProcA (hwnd, uiMsg, wParam, lParam);
-    return result;
+    return DefDlgProcA (hwnd, uiMsg, wParam, lParam);
 }
 
 static BOOL RegisterWindowClasses (void)

Modified: trunk/rostests/winetests/user32/edit.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/edit.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/edit.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/edit.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -1070,11 +1070,11 @@
     mid = lo + (hi - lo) / 2;
 
     for (i = lo; i < mid; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(0 == ret, "expected 0 got %d\n", ret);
     }
     for (i = mid; i <= hi; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(1 == ret, "expected 1 got %d\n", ret);
     }
     ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0);
@@ -1088,11 +1088,11 @@
     mid = lo + (hi - lo) / 2;
 
     for (i = lo; i < mid; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(0 == ret, "expected 0 got %d\n", ret);
     }
     for (i = mid; i <= hi; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(1 == ret, "expected 1 got %d\n", ret);
     }
     ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0);
@@ -1106,11 +1106,11 @@
     mid = lo + (hi - lo) / 2;
 
     for (i = lo; i < mid; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(0 == ret, "expected 0 got %d\n", ret);
     }
     for (i = mid; i <= hi; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(1 == ret, "expected 1 got %d\n", ret);
     }
     ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0);
@@ -1124,11 +1124,11 @@
     mid = lo + (hi - lo) / 2 +1;
 
     for (i = lo; i < mid; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret);
     }
     for (i = mid; i <= hi; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(1 == ret, "expected 1 got %d\n", ret);
     }
     ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0);
@@ -1142,11 +1142,11 @@
     mid = lo + (hi - lo) / 2 +1;
 
     for (i = lo; i < mid; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret);
     }
     for (i = mid; i <= hi; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(1 == ret, "expected 1 got %d\n", ret);
     }
     ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0);
@@ -1160,11 +1160,11 @@
     mid = lo + (hi - lo) / 2 +1;
 
     for (i = lo; i < mid; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok((0 == ret || 1 == ret /* Vista */), "expected 0 or 1 got %d\n", ret);
     }
     for (i = mid; i <= hi; i++) {
-       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, (LPARAM) i));
+       ret = LOWORD(SendMessage(hwEdit, EM_CHARFROMPOS, 0, i));
        ok(1 == ret, "expected 1 got %d\n", ret);
     }
     ret = SendMessage(hwEdit, EM_POSFROMCHAR, 2, 0);
@@ -1524,7 +1524,7 @@
     /* Edit controls that are in a parent window */
        
     hwEdit = create_child_editcontrol(style | WS_VISIBLE, 0);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, 0);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , 0);
@@ -1534,7 +1534,7 @@
     destroy_child_editcontrol(hwEdit);
 
     hwEdit = create_child_editcontrol(style | WS_BORDER | WS_VISIBLE, 0);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, b);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , b);
@@ -1545,7 +1545,7 @@
     destroy_child_editcontrol(hwEdit);
 
     hwEdit = create_child_editcontrol(style | WS_VISIBLE, WS_EX_CLIENTEDGE);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, 1);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , 1);
@@ -1555,7 +1555,7 @@
     destroy_child_editcontrol(hwEdit);
 
     hwEdit = create_child_editcontrol(style | WS_BORDER | WS_VISIBLE, WS_EX_CLIENTEDGE);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, 1);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , 1);
@@ -1568,7 +1568,7 @@
     /* Edit controls that are popup windows */
     
     hwEdit = create_editcontrol(style | WS_POPUP, 0);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, 0);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , 0);
@@ -1578,7 +1578,7 @@
     DestroyWindow(hwEdit);
 
     hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, 0);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, b);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , b);
@@ -1589,7 +1589,7 @@
     DestroyWindow(hwEdit);
 
     hwEdit = create_editcontrol(style | WS_POPUP, WS_EX_CLIENTEDGE);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, 1);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , 1);
@@ -1599,7 +1599,7 @@
     DestroyWindow(hwEdit);
 
     hwEdit = create_editcontrol(style | WS_POPUP | WS_BORDER, WS_EX_CLIENTEDGE);
-    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, (LPARAM) FALSE);
+    SendMessage(hwEdit, WM_SETFONT, (WPARAM) font, FALSE);
     if (single_line)
     check_pos(hwEdit, metrics.tmHeight -  1, 0, metrics.tmHeight - 1, 1);
     check_pos(hwEdit, metrics.tmHeight     , 0, metrics.tmHeight    , 1);
@@ -2179,7 +2179,7 @@
     len = SendMessage(hwEdit, WM_GETTEXTLENGTH, 0, 0);
     ok(11 == len, "expected 11, got %d\n", len);
 
-    r = SendMessage(hwEdit, WM_GETDLGCODE, (WPARAM)NULL, (LPARAM)NULL);
+    r = SendMessage(hwEdit, WM_GETDLGCODE, 0, 0);
     ok(0x8d == r, "expected 0x8d, got 0x%x\n", r);
 
     r = SendMessage(hwEdit, WM_CHAR, VK_RETURN, 0x1c0001);
@@ -2187,7 +2187,7 @@
     len = SendMessage(hwEdit, WM_GETTEXTLENGTH, 0, 0);
     ok(13 == len, "expected 13, got %d\n", len);
 
-    r = SendMessage(hwEdit, WM_GETDLGCODE, (WPARAM)NULL, (LPARAM)&msg);
+    r = SendMessage(hwEdit, WM_GETDLGCODE, 0, (LPARAM)&msg);
     ok(0x8d == r, "expected 0x8d, got 0x%x\n", r);
     r = SendMessage(hwEdit, WM_CHAR, VK_RETURN, 0x1c0001);
     ok(1 == r, "expected 1, got %d\n", r);

Modified: trunk/rostests/winetests/user32/listbox.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/listbox.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/listbox.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/listbox.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -146,7 +146,7 @@
   listbox_query (hLB, &answer);
   listbox_ok (test, init, answer);
 
-  SendMessage (hLB, LB_GETITEMRECT, (WPARAM) 1, (LPARAM) &second_item);
+  SendMessage (hLB, LB_GETITEMRECT, 1, (LPARAM) &second_item);
   buttonpress(hLB, (WORD)second_item.left, (WORD)second_item.top);
 
   listbox_query (hLB, &answer);
@@ -354,7 +354,7 @@
     listbox_query(hLB, &answer);
     listbox_test_query(test_1, answer);
 
-    SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1);
+    SendMessage(hLB, LB_SETSEL, FALSE, -1);
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
@@ -363,7 +363,7 @@
     listbox_query(hLB, &answer);
     listbox_test_query(test_3, answer);
 
-    SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1);
+    SendMessage(hLB, LB_SETSEL, FALSE, -1);
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
@@ -372,7 +372,7 @@
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
-    SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1);
+    SendMessage(hLB, LB_SETSEL, FALSE, -1);
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
@@ -381,7 +381,7 @@
     listbox_query(hLB, &answer);
     listbox_test_query(test_1, answer);
 
-    SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1);
+    SendMessage(hLB, LB_SETSEL, FALSE, -1);
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
@@ -390,7 +390,7 @@
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
-    SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1);
+    SendMessage(hLB, LB_SETSEL, FALSE, -1);
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
@@ -399,7 +399,7 @@
     listbox_query(hLB, &answer);
     listbox_test_query(test_2, answer);
 
-    SendMessage(hLB, LB_SETSEL, FALSE, (LPARAM)-1);
+    SendMessage(hLB, LB_SETSEL, FALSE, -1);
     listbox_query(hLB, &answer);
     listbox_test_query(test_nosel, answer);
 
@@ -1112,7 +1112,7 @@
         "expected conversion to uppercase, got %s\n", pathBuffer);
 
     /* Loaded path should have overwritten the label text */
-    SendMessage(g_label, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)pathBuffer);
+    SendMessage(g_label, WM_GETTEXT, MAX_PATH, (LPARAM)pathBuffer);
     trace("Static control after DlgDirList: %s\n", pathBuffer);
     ok (strcmp("default contents", pathBuffer), "DlgDirList() did not modify static control!\n");
 

Modified: trunk/rostests/winetests/user32/menu.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/menu.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/menu.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/menu.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -390,8 +390,9 @@
             ok( ret == itemid , "TrackPopupMenu returned %d error is %d\n", ret, gle);
         }
         ok( gle == 0 ||
-                broken( gle ==  ERROR_INVALID_PARAMETER), /* win2k0 */
-                "Last error is %d\n", gle);
+            broken(gle == 0xdeadbeef) || /* wow64 */
+            broken(gle == ERROR_INVALID_PARAMETER), /* win2k0 */
+            "Last error is %d\n", gle);
     }
     /* clean up */
     DestroyMenu( hmenu);

Modified: trunk/rostests/winetests/user32/msg.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/msg.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/msg.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/msg.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -161,7 +161,7 @@
     { WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
     { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* Win9x: SWP_NOSENDCHANGING */
     { WM_ACTIVATEAPP, sent|wparam, 1 },
-    { WM_NCACTIVATE, sent|wparam, 1 },
+    { WM_NCACTIVATE, sent },
     { WM_GETTEXT, sent|defwinproc|optional },
     { WM_ACTIVATE, sent|wparam, 1 },
     { HCBT_SETFOCUS, hook },
@@ -268,7 +268,7 @@
     { WM_NCPAINT, sent|optional },
     { WM_GETTEXT, sent|defwinproc|optional },
     { WM_ERASEBKGND, sent|optional },
-    { WM_WINDOWPOSCHANGED, sent|wparam, /*SWP_NOZORDER|*/SWP_NOACTIVATE, 0,
+    { WM_WINDOWPOSCHANGED, sent|wparam|optional, /*SWP_NOZORDER|*/SWP_NOACTIVATE, 0,
       SWP_NOMOVE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOCLIENTSIZE },
     { WM_MOVE, sent|defwinproc|optional },
     { WM_SIZE, sent|defwinproc|optional },
@@ -631,9 +631,10 @@
     { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
     { WM_SIZE, sent|optional }, /* XP doesn't send it */
     { WM_MOVE, sent|optional }, /* XP doesn't send it */
-    { WM_NCACTIVATE, sent|wparam, 0 },
-    { WM_ACTIVATE, sent|wparam, 0 },
-    { WM_ACTIVATEAPP, sent|wparam, 0 },
+    { WM_NCACTIVATE, sent|wparam|optional, 0 },
+    { WM_ACTIVATE, sent|wparam|optional, 0 },
+    { WM_ACTIVATEAPP, sent|wparam|optional, 0 },
+    { HCBT_SETFOCUS, hook|optional },
     { WM_KILLFOCUS, sent|wparam, 0 },
     { WM_IME_SETCONTEXT, sent|wparam|optional, 0 },
     { WM_IME_NOTIFY, sent|wparam|optional|defwinproc, 1 },
@@ -1776,7 +1777,8 @@
             message == WM_GETOBJECT ||
             message == WM_TIMECHANGE ||
             message == WM_DISPLAYCHANGE ||
-            message == WM_DEVICECHANGE);
+            message == WM_DEVICECHANGE ||
+            message == WM_DWMNCRENDERINGCHANGED);
 }
 
 
@@ -5384,6 +5386,7 @@
 	UpdateWindow(hwnd);
 	SetFocus(0);
 	flush_events();
+	SetFocus(0);
 	flush_sequence();
 
         log_all_parent_messages++;
@@ -6866,8 +6869,8 @@
     { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_APPS, 0xc0000001 }, /* XP */
     { WM_KEYUP, wparam|lparam, VK_APPS, 0xc0000001 },
     { WM_KEYUP, sent|wparam|lparam, VK_APPS, 0xc0000001 },
-    { WM_CONTEXTMENU, lparam, /*hwnd*/0, (LPARAM)-1 },
-    { WM_CONTEXTMENU, sent|lparam, /*hwnd*/0, (LPARAM)-1 },
+    { WM_CONTEXTMENU, lparam, /*hwnd*/0, -1 },
+    { WM_CONTEXTMENU, sent|lparam, /*hwnd*/0, -1 },
     { 0 }
 };
 static const struct message WmVkF10Seq[] = {
@@ -9324,17 +9327,21 @@
         skip( "queuing key events not supported\n" );
         goto done;
     }
-    ok(qstatus == MAKELONG(QS_KEY, QS_KEY),
+    ok(qstatus == MAKELONG(QS_KEY, QS_KEY) ||
+       /* keybd_event seems to trigger a sent message on NT4 */
+       qstatus == MAKELONG(QS_KEY|QS_SENDMESSAGE, QS_KEY|QS_SENDMESSAGE),
        "wrong qstatus %08x\n", qstatus);
 
     PostMessageA(info.hwnd, WM_CHAR, 'z', 0);
     qstatus = GetQueueStatus(qs_all_input);
-    ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY),
+    ok(qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY) ||
+       qstatus == MAKELONG(QS_POSTMESSAGE, QS_POSTMESSAGE|QS_KEY|QS_SENDMESSAGE),
        "wrong qstatus %08x\n", qstatus);
 
     InvalidateRect(info.hwnd, NULL, FALSE);
     qstatus = GetQueueStatus(qs_all_input);
-    ok(qstatus == MAKELONG(QS_PAINT, QS_PAINT|QS_POSTMESSAGE|QS_KEY),
+    ok(qstatus == MAKELONG(QS_PAINT, QS_PAINT|QS_POSTMESSAGE|QS_KEY) ||
+       qstatus == MAKELONG(QS_PAINT, QS_PAINT|QS_POSTMESSAGE|QS_KEY|QS_SENDMESSAGE),
        "wrong qstatus %08x\n", qstatus);
 
     trace("signalling to send message\n");
@@ -9896,7 +9903,7 @@
             /* Timer proc messages are not dispatched to the window proc,
              * and therefore not logged.
              */
-            if (msg.message == WM_TIMER || msg.message == WM_SYSTIMER)
+            if ((msg.message == WM_TIMER || msg.message == WM_SYSTIMER) && msg.hwnd)
             {
                 struct recvd_message s_msg;
 
@@ -10291,8 +10298,8 @@
 };
 static const struct message WmHide_1[] = {
     { WM_SHOWWINDOW, sent|wparam, 0 },
-    { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE },
-    { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
+    { WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE, 0, SWP_NOACTIVATE },
+    { WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE, 0, SWP_NOACTIVATE },
     { HCBT_ACTIVATE, hook|optional },
     { HCBT_SETFOCUS, hook|optional }, /* win2000 sends it */
     { 0 }
@@ -10840,6 +10847,7 @@
     { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE },
     { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE },
     { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
+    { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
     { WM_NCACTIVATE, sent|wparam, 1 },
     { WM_GETTEXT, sent|defwinproc|optional },
     { WM_ACTIVATE, sent|wparam, 1 },
@@ -12014,10 +12022,271 @@
     flush_events();
 }
 
+static const struct
+{
+    DWORD exp, broken;
+    BOOL todo;
+} wait_idle_expect[] =
+{
+/* 0 */  { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE },
+         { WAIT_TIMEOUT, 0,            FALSE },
+         { WAIT_TIMEOUT, 0,            FALSE },
+         { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE },
+         { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE },
+/* 5 */  { WAIT_TIMEOUT, 0,            FALSE },
+         { WAIT_TIMEOUT, 0,            FALSE },
+         { WAIT_TIMEOUT, WAIT_TIMEOUT, FALSE },
+         { 0,            0,            FALSE },
+         { 0,            0,            FALSE },
+/* 10 */ { 0,            0,            FALSE },
+         { 0,            0,            FALSE },
+         { 0,            WAIT_TIMEOUT, FALSE },
+         { 0,            0,            FALSE },
+};
+
+static DWORD CALLBACK do_wait_idle_child_thread( void *arg )
+{
+    MSG msg;
+
+    PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE );
+    Sleep( 200 );
+    MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT );
+    return 0;
+}
+
+static void do_wait_idle_child( int arg )
+{
+    WNDCLASS cls;
+    MSG msg;
+    HWND hwnd = 0;
+    HANDLE thread;
+    DWORD id;
+    HANDLE start_event = OpenEventA( EVENT_ALL_ACCESS, FALSE, "test_WaitForInputIdle_start" );
+    HANDLE end_event = OpenEventA( EVENT_ALL_ACCESS, FALSE, "test_WaitForInputIdle_end" );
+
+    memset( &cls, 0, sizeof(cls) );
+    cls.lpfnWndProc   = DefWindowProc;
+    cls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
+    cls.hCursor       = LoadCursor(0, IDC_ARROW);
+    cls.lpszClassName = "TestClass";
+    RegisterClass( &cls );
+
+    PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE );  /* create the msg queue */
+
+    ok( start_event != 0, "failed to create start event, error %u\n", GetLastError() );
+    ok( end_event != 0, "failed to create end event, error %u\n", GetLastError() );
+
+    switch (arg)
+    {
+    case 0:
+        SetEvent( start_event );
+        break;
+    case 1:
+        SetEvent( start_event );
+        Sleep( 200 );
+        PeekMessage( &msg, 0, 0, 0, PM_REMOVE );
+        break;
+    case 2:
+        SetEvent( start_event );
+        Sleep( 200 );
+        PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE );
+        PostThreadMessage( GetCurrentThreadId(), WM_COMMAND, 0x1234, 0xabcd );
+        PeekMessage( &msg, 0, 0, 0, PM_REMOVE );
+        break;
+    case 3:
+        SetEvent( start_event );
+        Sleep( 200 );
+        SendMessage( HWND_BROADCAST, WM_WININICHANGE, 0, 0 );
+        break;
+    case 4:
+        SetEvent( start_event );
+        Sleep( 200 );
+        hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL);
+        while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE|PM_NOYIELD )) DispatchMessage( &msg );
+        break;
+    case 5:
+        SetEvent( start_event );
+        Sleep( 200 );
+        hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL);
+        while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
+        break;
+    case 6:
+        SetEvent( start_event );
+        Sleep( 200 );
+        hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL);
+        while (PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE ))
+        {
+            GetMessage( &msg, 0, 0, 0 );
+            DispatchMessage( &msg );
+        }
+        break;
+    case 7:
+        SetEvent( start_event );
+        Sleep( 200 );
+        hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL);
+        SetTimer( hwnd, 3, 1, NULL );
+        Sleep( 200 );
+        while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE|PM_NOYIELD )) DispatchMessage( &msg );
+        break;
+    case 8:
+        SetEvent( start_event );
+        Sleep( 200 );
+        PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE );
+        MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT );
+        break;
+    case 9:
+        SetEvent( start_event );
+        Sleep( 200 );
+        hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL);
+        while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
+        for (;;) GetMessage( &msg, 0, 0, 0 );
+        break;
+    case 10:
+        SetEvent( start_event );
+        Sleep( 200 );
+        hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP|WS_VISIBLE, 0, 0, 10, 10, 0, 0, 0, NULL);
+        SetTimer( hwnd, 3, 1, NULL );
+        Sleep( 200 );
+        while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
+        break;
+    case 11:
+        SetEvent( start_event );
+        Sleep( 200 );
+        return;  /* exiting the process makes WaitForInputIdle return success too */
+    case 12:
+        PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE );
+        Sleep( 200 );
+        MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT );
+        SetEvent( start_event );
+        break;
+    case 13:
+        SetEvent( start_event );
+        PeekMessage( &msg, 0, 0, 0, PM_NOREMOVE );
+        Sleep( 200 );
+        thread = CreateThread( NULL, 0, do_wait_idle_child_thread, NULL, 0, &id );
+        WaitForSingleObject( thread, 10000 );
+        CloseHandle( thread );
+        break;
+    }
+    WaitForSingleObject( end_event, 2000 );
+    CloseHandle( start_event );
+    CloseHandle( end_event );
+    if (hwnd) DestroyWindow( hwnd );
+}
+
+static LRESULT CALLBACK wait_idle_proc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
+{
+    if (msg == WM_WININICHANGE) Sleep( 200 );  /* make sure the child waits */
+    return DefWindowProcA( hwnd, msg, wp, lp );
+}
+
+static DWORD CALLBACK wait_idle_thread( void *arg )
+{
+    WNDCLASS cls;
+    MSG msg;
+    HWND hwnd;
+
+    memset( &cls, 0, sizeof(cls) );
+    cls.lpfnWndProc   = wait_idle_proc;
+    cls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
+    cls.hCursor       = LoadCursor(0, IDC_ARROW);
+    cls.lpszClassName = "TestClass";
+    RegisterClass( &cls );
+
+    hwnd = CreateWindowExA(0, "TestClass", NULL, WS_POPUP, 0, 0, 10, 10, 0, 0, 0, NULL);
+    while (GetMessage( &msg, 0, 0, 0 )) DispatchMessage( &msg );
+    return 0;
+}
+
+static void test_WaitForInputIdle( char *argv0 )
+{
+    char path[MAX_PATH];
+    PROCESS_INFORMATION pi;
+    STARTUPINFOA startup;
+    BOOL ret;
+    HANDLE start_event, end_event, thread;
+    unsigned int i;
+    DWORD id;
+    const IMAGE_DOS_HEADER *dos = (const IMAGE_DOS_HEADER *)GetModuleHandleA(0);
+    const IMAGE_NT_HEADERS *nt = (const IMAGE_NT_HEADERS *)((const char *)dos + dos->e_lfanew);
+    BOOL console_app = (nt->OptionalHeader.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_GUI);
+
+    if (console_app)  /* build the test with -mwindows for better coverage */
+        trace( "not built as a GUI app, WaitForInputIdle may not be fully tested\n" );
+
+    start_event = CreateEventA(NULL, 0, 0, "test_WaitForInputIdle_start");
+    end_event = CreateEventA(NULL, 0, 0, "test_WaitForInputIdle_end");
+    ok(start_event != 0, "failed to create start event, error %u\n", GetLastError());
+    ok(end_event != 0, "failed to create end event, error %u\n", GetLastError());
+
+    memset( &startup, 0, sizeof(startup) );
+    startup.cb = sizeof(startup);
+    startup.dwFlags = STARTF_USESHOWWINDOW;
+    startup.wShowWindow = SW_SHOWNORMAL;
+
+    thread = CreateThread( NULL, 0, wait_idle_thread, NULL, 0, &id );
+
+    for (i = 0; i < sizeof(wait_idle_expect)/sizeof(wait_idle_expect[0]); i++)
+    {
+        ResetEvent( start_event );
+        ResetEvent( end_event );
+        sprintf( path, "%s msg %u", argv0, i );
+        ret = CreateProcessA( NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &startup, &pi );
+        ok( ret, "CreateProcess '%s' failed err %u.\n", path, GetLastError() );
+        if (ret)
+        {
+            ret = WaitForSingleObject( start_event, 5000 );
+            ok( ret == WAIT_OBJECT_0, "%u: WaitForSingleObject failed\n", i );
+            if (ret == WAIT_OBJECT_0)
+            {
+                ret = WaitForInputIdle( pi.hProcess, 1000 );
+                if (ret == WAIT_FAILED)
+                    ok( console_app ||
+                        ret == wait_idle_expect[i].exp ||
+                        broken(ret == wait_idle_expect[i].broken),
+                        "%u: WaitForInputIdle error %08x expected %08x\n",
+                        i, ret, wait_idle_expect[i].exp );
+                else if (wait_idle_expect[i].todo)
+                    todo_wine
+                    ok( ret == wait_idle_expect[i].exp || broken(ret == wait_idle_expect[i].broken),
+                        "%u: WaitForInputIdle error %08x expected %08x\n",
+                        i, ret, wait_idle_expect[i].exp );
+                else
+                    ok( ret == wait_idle_expect[i].exp || broken(ret == wait_idle_expect[i].broken),
+                        "%u: WaitForInputIdle error %08x expected %08x\n",
+                        i, ret, wait_idle_expect[i].exp );
+                SetEvent( end_event );
+                WaitForSingleObject( pi.hProcess, 1000 );  /* give it a chance to exit on its own */
+            }
+            TerminateProcess( pi.hProcess, 0 );  /* just in case */
+            winetest_wait_child_process( pi.hProcess );
+            ret = WaitForInputIdle( pi.hProcess, 100 );
+            ok( ret == WAIT_FAILED, "%u: WaitForInputIdle after exit error %08x\n", i, ret );
+            CloseHandle( pi.hProcess );
+            CloseHandle( pi.hThread );
+        }
+    }
+    CloseHandle( start_event );
+    PostThreadMessage( id, WM_QUIT, 0, 0 );
+    WaitForSingleObject( thread, 10000 );
+    CloseHandle( thread );
+}
+
 START_TEST(msg)
 {
+    char **test_argv;
     BOOL ret;
     BOOL (WINAPI *pIsWinEventHookInstalled)(DWORD)= 0;/*GetProcAddress(user32, "IsWinEventHookInstalled");*/
+
+    int argc = winetest_get_mainargs( &test_argv );
+    if (argc >= 3)
+    {
+        unsigned int arg;
+        /* Child process. */
+        sscanf (test_argv[2], "%d", (unsigned int *) &arg);
+        do_wait_idle_child( arg );
+        return;
+    }
 
     init_procs();
 
@@ -12059,6 +12328,7 @@
     test_ShowWindow();
     test_PeekMessage();
     test_PeekMessage2();
+    test_WaitForInputIdle( test_argv[0] );
     test_scrollwindowex();
     test_messages();
     test_setwindowpos();

Modified: trunk/rostests/winetests/user32/sysparams.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/sysparams.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/sysparams.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/sysparams.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -2764,6 +2764,27 @@
     }
 }
 
+static void test_GetSysColorBrush(void)
+{
+    HBRUSH hbr;
+
+    SetLastError(0xdeadbeef);
+    hbr = GetSysColorBrush(-1);
+    ok(hbr == NULL, "Expected NULL brush\n");
+    ok(GetLastError() == 0xdeadbeef, "Expected last error not set, got %x\n", GetLastError());
+    /* greater than max index */
+    hbr = GetSysColorBrush(COLOR_MENUBAR);
+    if (hbr)
+    {
+        SetLastError(0xdeadbeef);
+        hbr = GetSysColorBrush(COLOR_MENUBAR + 1);
+        ok(hbr == NULL, "Expected NULL brush\n");
+        ok(GetLastError() == 0xdeadbeef, "Expected last error not set, got %x\n", GetLastError());
+    }
+    else
+        win_skip("COLOR_MENUBAR unsupported\n");
+}
+
 START_TEST(sysparams)
 {
     int argc;
@@ -2794,6 +2815,7 @@
     test_GetSystemMetrics( );
     trace("testing EnumDisplaySettings vs GetDeviceCaps\n");
     test_EnumDisplaySettings( );
+    test_GetSysColorBrush( );
 
     change_counter = 0;
     change_last_param = 0;

Modified: trunk/rostests/winetests/user32/testlist.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/testlist.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/testlist.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/testlist.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -26,6 +26,7 @@
 extern void func_static(void);
 extern void func_sysparams(void);
 extern void func_text(void);
+extern void func_uitools(void);
 extern void func_win(void);
 extern void func_winstation(void);
 extern void func_wsprintf(void);
@@ -52,6 +53,7 @@
     { "static", func_static },
     { "sysparams", func_sysparams },
     { "text", func_text },
+    { "uitools", func_uitools },
     { "win", func_win },
     { "winstation", func_winstation },
     { "wsprintf", func_wsprintf },

Added: trunk/rostests/winetests/user32/uitools.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/uitools.c?rev=45081&view=auto
==============================================================================
--- trunk/rostests/winetests/user32/uitools.c (added)
+++ trunk/rostests/winetests/user32/uitools.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -1,0 +1,69 @@
+/* Unit test suite for user interface functions
+ *
+ * Copyright 2009 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/test.h"
+#include "winbase.h"
+#include "wingdi.h"
+#include "winuser.h"
+
+static void test_FillRect(void)
+{
+    HDC hdc, hdcmem;
+    DWORD bits[64];
+    HBITMAP hbmp, oldhbmp;
+    COLORREF col;
+    HBRUSH old_brush;
+    RECT r;
+
+    /* fill bitmap data with white */
+    memset(bits, 0xff, sizeof(bits));
+
+    hdc = GetDC(0);
+    ok( hdc != NULL, "CreateDC rets %p\n", hdc);
+    /* create a memory dc */
+    hdcmem = CreateCompatibleDC(hdc);
+    ok(hdcmem != NULL, "CreateCompatibleDC rets %p\n", hdcmem);
+    /* test monochrome bitmap: should always work */
+    hbmp = CreateBitmap(32, 32, 1, 1, bits);
+    ok(hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
+    oldhbmp = SelectObject(hdcmem, hbmp);
+    ok(oldhbmp != NULL, "SelectObject returned NULL\n"); /* a memdc always has a bitmap selected */
+    col = GetPixel(hdcmem, 0, 0);
+    ok( col == 0xffffff, "GetPixel returned %08x, expected 0xffffff\n", col);
+
+    /* select black brush */
+    old_brush = SelectObject(hdcmem, GetStockObject(BLACK_BRUSH));
+    r.left  = r.top = 0;
+    r.right = r.bottom = 5;
+    FillRect(hdcmem, &r, 0);
+    SelectObject(hdcmem, old_brush);
+    /* bitmap filled with last selected brush */
+    col = GetPixel(hdcmem, 0, 0);
+    ok(col == 0, "GetPixel returned %08x, expected 0\n", col);
+
+    SelectObject(hdcmem, oldhbmp);
+    DeleteObject(hbmp);
+    DeleteDC(hdcmem);
+    ReleaseDC(0, hdc);
+}
+
+START_TEST(uitools)
+{
+    test_FillRect();
+}

Propchange: trunk/rostests/winetests/user32/uitools.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/rostests/winetests/user32/user32.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/user32.rbuild?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/user32.rbuild [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/user32.rbuild [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -28,6 +28,7 @@
 	<file>static.c</file>
 	<file>sysparams.c</file>
 	<file>text.c</file>
+	<file>uitools.c</file>
 	<file>win.c</file>
 	<file>winstation.c</file>
 	<file>wsprintf.c</file>

Modified: trunk/rostests/winetests/user32/winstation.c
URL: http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/user32/winstation.c?rev=45081&r1=45080&r2=45081&view=diff
==============================================================================
--- trunk/rostests/winetests/user32/winstation.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/user32/winstation.c [iso-8859-1] Thu Jan 14 23:35:53 2010
@@ -76,7 +76,8 @@
     ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() );
     SetLastError( 0xdeadbeef );
     ok( !CloseDesktop( d1 ), "CloseDesktop succeeded\n" );
-    ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() );
+    ok( GetLastError() == ERROR_BUSY || broken(GetLastError() == 0xdeadbeef), /* wow64 */
+        "bad last error %d\n", GetLastError() );
     print_object( d1 );
     d2 = CreateDesktop( "foobar2", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL );
     trace( "created desktop %p\n", d2 );
@@ -84,7 +85,8 @@
 
     SetLastError( 0xdeadbeef );
     ok( !SetThreadDesktop( d2 ), "set thread desktop succeeded with existing window\n" );
-    ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() );
+    ok( GetLastError() == ERROR_BUSY || broken(GetLastError() == 0xdeadbeef), /* wow64 */
+        "bad last error %d\n", GetLastError() );
 
     DestroyWindow( hwnd );
     ok( SetThreadDesktop( d2 ), "set thread desktop failed\n" );
@@ -139,7 +141,8 @@
     ok( w2 != w1, "CreateWindowStation returned default handle\n" );
     SetLastError( 0xdeadbeef );
     ok( !CloseDesktop( (HDESK)w2 ), "CloseDesktop succeeded on win station\n" );
-    ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() );
+    ok( GetLastError() == ERROR_INVALID_HANDLE || broken(GetLastError() == 0xdeadbeef), /* wow64 */
+        "bad last error %d\n", GetLastError() );
     ok( CloseWindowStation( w2 ), "CloseWindowStation failed\n" );
 
     w2 = CreateWindowStation("WinSta0", 0, WINSTA_ALL_ACCESS, NULL );
@@ -200,7 +203,8 @@
 
     SetLastError( 0xdeadbeef );
     ok( !CloseDesktop(d1), "closing thread desktop succeeded\n" );
-    ok( GetLastError() == ERROR_BUSY, "bad last error %d\n", GetLastError() );
+    ok( GetLastError() == ERROR_BUSY || broken(GetLastError() == 0xdeadbeef), /* wow64 */
+        "bad last error %d\n", GetLastError() );
 
     SetLastError( 0xdeadbeef );
     if (CloseHandle( d1 ))  /* succeeds on nt4 */
@@ -225,7 +229,8 @@
     ok( d2 != 0, "create foobar desktop failed\n" );
     SetLastError( 0xdeadbeef );
     ok( !CloseWindowStation( (HWINSTA)d2 ), "CloseWindowStation succeeded on desktop\n" );
-    ok( GetLastError() == ERROR_INVALID_HANDLE, "bad last error %d\n", GetLastError() );
+    ok( GetLastError() == ERROR_INVALID_HANDLE || broken(GetLastError() == 0xdeadbeef), /* wow64 */
+        "bad last error %d\n", GetLastError() );
 
     SetLastError( 0xdeadbeef );
     d3 = CreateDesktop( "foobar", NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL );




More information about the Ros-diffs mailing list