Jactry Zeng : user32: Implement semi-stub for FlashWindowEx.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Oct 12 09:51:13 CDT 2015


Module: wine
Branch: master
Commit: f22760d2102cee7752720d43f72b5e8fad1c0547
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f22760d2102cee7752720d43f72b5e8fad1c0547

Author: Jactry Zeng <jzeng at codeweavers.com>
Date:   Wed Oct  7 11:51:30 2015 +0800

user32: Implement semi-stub for FlashWindowEx.

Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/tests/win.c | 19 ++++++++--------
 dlls/user32/win.c       | 58 +++++++++++++++++++++++++++++++++----------------
 2 files changed, 48 insertions(+), 29 deletions(-)

diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 96136c1..34366a7 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -7085,14 +7085,14 @@ static void test_FlashWindow(void)
 
     SetLastError( 0xdeadbeef );
     ret = pFlashWindow( NULL, TRUE );
-    todo_wine ok( !ret && GetLastError() == ERROR_INVALID_PARAMETER,
+    ok( !ret && GetLastError() == ERROR_INVALID_PARAMETER,
         "FlashWindow returned with %d\n", GetLastError() );
 
     DestroyWindow( hwnd );
 
     SetLastError( 0xdeadbeef );
     ret = pFlashWindow( hwnd, TRUE );
-    todo_wine ok( !ret && GetLastError() == ERROR_INVALID_PARAMETER,
+    ok( !ret && GetLastError() == ERROR_INVALID_PARAMETER,
         "FlashWindow returned with %d\n", GetLastError() );
 }
 
@@ -7119,13 +7119,13 @@ static void test_FlashWindowEx(void)
     finfo.hwnd = NULL;
     SetLastError(0xdeadbeef);
     ret = pFlashWindowEx(&finfo);
-    todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
-                 "FlashWindowEx returned with %d\n", GetLastError());
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+       "FlashWindowEx returned with %d\n", GetLastError());
 
     finfo.hwnd = hwnd;
     SetLastError(0xdeadbeef);
     ret = pFlashWindowEx(NULL);
-    todo_wine ok(!ret && GetLastError() == ERROR_NOACCESS,
+    ok(!ret && GetLastError() == ERROR_NOACCESS,
        "FlashWindowEx returned with %d\n", GetLastError());
 
     SetLastError(0xdeadbeef);
@@ -7135,13 +7135,13 @@ static void test_FlashWindowEx(void)
     finfo.cbSize = sizeof(FLASHWINFO) - 1;
     SetLastError(0xdeadbeef);
     ret = pFlashWindowEx(&finfo);
-    todo_wine ok(!ret && GetLastError()==ERROR_INVALID_PARAMETER,
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
        "FlashWindowEx succeeded\n");
 
     finfo.cbSize = sizeof(FLASHWINFO) + 1;
     SetLastError(0xdeadbeef);
     ret = pFlashWindowEx(&finfo);
-    todo_wine ok(!ret && GetLastError()==ERROR_INVALID_PARAMETER,
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
        "FlashWindowEx succeeded\n");
     finfo.cbSize = sizeof(FLASHWINFO);
 
@@ -7149,7 +7149,7 @@ static void test_FlashWindowEx(void)
 
     SetLastError(0xdeadbeef);
     ret = pFlashWindowEx(&finfo);
-    todo_wine ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
        "FlashWindowEx returned with %d\n", GetLastError());
 
     ok(finfo.cbSize == sizeof(FLASHWINFO), "FlashWindowEx modified cdSize to %x\n", finfo.cbSize);
@@ -7165,7 +7165,7 @@ static void test_FlashWindowEx(void)
 
     SetLastError(0xdeadbeef);
     ret = pFlashWindowEx(NULL);
-    todo_wine ok(!ret && GetLastError() == ERROR_NOACCESS,
+    ok(!ret && GetLastError() == ERROR_NOACCESS,
        "FlashWindowEx returned with %d\n", GetLastError());
 
     SetLastError(0xdeadbeef);
@@ -7180,7 +7180,6 @@ static void test_FlashWindowEx(void)
     finfo.dwFlags = FLASHW_STOP;
     SetLastError(0xdeadbeef);
     ret = pFlashWindowEx(&finfo);
-todo_wine
     ok(prev != ret, "previous window state should be different\n");
 
     DestroyWindow( hwnd );
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index e3650f5..fb320c7 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -3413,17 +3413,45 @@ BOOL WINAPI AnyPopup(void)
  */
 BOOL WINAPI FlashWindow( HWND hWnd, BOOL bInvert )
 {
+    FLASHWINFO finfo;
+
+    finfo.cbSize = sizeof(FLASHWINFO);
+    finfo.dwFlags = bInvert ? FLASHW_ALL : FLASHW_STOP;
+    finfo.uCount = 1;
+    finfo.dwTimeout = 0;
+    finfo.hwnd = hWnd;
+    return FlashWindowEx( &finfo );
+}
+
+/*******************************************************************
+ *		FlashWindowEx (USER32.@)
+ */
+BOOL WINAPI FlashWindowEx( PFLASHWINFO pfinfo )
+{
     WND *wndPtr;
 
-    TRACE("%p\n", hWnd);
+    TRACE( "%p\n", pfinfo->hwnd );
+
+    if (!pfinfo)
+    {
+        SetLastError( ERROR_NOACCESS );
+        return FALSE;
+    }
+
+    if (!pfinfo->hwnd || pfinfo->cbSize != sizeof(FLASHWINFO) || !IsWindow( pfinfo->hwnd ))
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return FALSE;
+    }
+    FIXME( "%p - semi-stub\n", pfinfo );
 
-    if (IsIconic( hWnd ))
+    if (IsIconic( pfinfo->hwnd ))
     {
-        RedrawWindow( hWnd, 0, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_FRAME );
+        RedrawWindow( pfinfo->hwnd, 0, 0, RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_FRAME );
 
-        wndPtr = WIN_GetPtr(hWnd);
+        wndPtr = WIN_GetPtr( pfinfo->hwnd );
         if (!wndPtr || wndPtr == WND_OTHER_PROCESS || wndPtr == WND_DESKTOP) return FALSE;
-        if (bInvert && !(wndPtr->flags & WIN_NCACTIVATED))
+        if (pfinfo->dwFlags && !(wndPtr->flags & WIN_NCACTIVATED))
         {
             wndPtr->flags |= WIN_NCACTIVATED;
         }
@@ -3437,30 +3465,22 @@ BOOL WINAPI FlashWindow( HWND hWnd, BOOL bInvert )
     else
     {
         WPARAM wparam;
+        HWND hwnd = pfinfo->hwnd;
 
-        wndPtr = WIN_GetPtr(hWnd);
+        wndPtr = WIN_GetPtr( hwnd );
         if (!wndPtr || wndPtr == WND_OTHER_PROCESS || wndPtr == WND_DESKTOP) return FALSE;
-        hWnd = wndPtr->obj.handle;  /* make it a full handle */
+        hwnd = wndPtr->obj.handle;  /* make it a full handle */
 
-        if (bInvert) wparam = !(wndPtr->flags & WIN_NCACTIVATED);
-        else wparam = (hWnd == GetForegroundWindow());
+        if (pfinfo->dwFlags) wparam = !(wndPtr->flags & WIN_NCACTIVATED);
+        else wparam = (hwnd == GetForegroundWindow());
 
         WIN_ReleasePtr( wndPtr );
-        SendMessageW( hWnd, WM_NCACTIVATE, wparam, 0 );
+        SendMessageW( hwnd, WM_NCACTIVATE, wparam, 0 );
         return wparam;
     }
 }
 
 /*******************************************************************
- *		FlashWindowEx (USER32.@)
- */
-BOOL WINAPI FlashWindowEx( PFLASHWINFO pfwi )
-{
-    FIXME("%p\n", pfwi);
-    return TRUE;
-}
-
-/*******************************************************************
  *		GetWindowContextHelpId (USER32.@)
  */
 DWORD WINAPI GetWindowContextHelpId( HWND hwnd )




More information about the wine-cvs mailing list