--- dlls/user/focus.c +++ dlls/user/focus.c @@ -257,7 +257,13 @@ HWND WINAPI SetFocus( HWND hwnd ) { HWND parent; LONG style = GetWindowLongW( hwndTop, GWL_STYLE ); - if (style & (WS_MINIMIZE | WS_DISABLED)) return 0; + if ((style & (WS_MINIMIZE | WS_DISABLED)) || + !(style & WS_VISIBLE)) + { + /* Don't activate the window */ + hwndTop = NULL; + break; + } parent = GetAncestor( hwndTop, GA_PARENT ); if (!parent || parent == GetDesktopWindow()) break; hwndTop = parent; @@ -267,11 +273,12 @@ HWND WINAPI SetFocus( HWND hwnd ) if (HOOK_CallHooks( WH_CBT, HCBT_SETFOCUS, (WPARAM)hwnd, (LPARAM)previous, TRUE )) return 0; /* activate hwndTop if needed. */ - if (hwndTop != GetActiveWindow()) + if (hwndTop && (hwndTop != GetActiveWindow())) { if (!set_active_window( hwndTop, NULL, FALSE, FALSE )) return 0; - if (!IsWindow( hwnd )) return 0; /* Abort if window destroyed */ } + + if (!IsWindow( hwnd )) return 0; /* Abort if window destroyed */ } else /* NULL hwnd passed in */ {