[2/3 v3] user32: Implement semi-stub for FlashWindowEx.
Jactry Zeng
jzeng at codeweavers.com
Tue Oct 6 22:36:12 CDT 2015
Superseded patch 114769.
ChangeLog:
v3:
- Move implementation from FlashWindow to FlashWindowEx.
v2:
- Call FlashWindow with false bInvert when FLASHW_STOP is gave.
Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
---
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 )
--
2.1.0
More information about the wine-patches
mailing list