Module: wine Branch: master Commit: f22760d2102cee7752720d43f72b5e8fad1c0547 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f22760d2102cee7752720d43f7...
Author: Jactry Zeng jzeng@codeweavers.com Date: Wed Oct 7 11:51:30 2015 +0800
user32: Implement semi-stub for FlashWindowEx.
Signed-off-by: Jactry Zeng jzeng@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 )