3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS user32.dll
5 * FILE: lib/user32/windows/window.c
6 * PURPOSE: Window management
7 * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
9 * 06-06-2001 CSH Created
12 /* INCLUDES ******************************************************************/
16 #include <wine/debug.h>
17 WINE_DEFAULT_DEBUG_CHANNEL(user32
);
19 /* FUNCTIONS *****************************************************************/
21 /*******************************************************************
24 * Check if we can activate the specified window.
26 static BOOL
can_activate_window( HWND hwnd
)
30 if (!hwnd
) return FALSE
;
31 style
= GetWindowLongPtrW( hwnd
, GWL_STYLE
);
32 if (!(style
& WS_VISIBLE
)) return FALSE
;
33 if ((style
& (WS_POPUP
|WS_CHILD
)) == WS_CHILD
) return FALSE
;
34 return !(style
& WS_DISABLED
);
38 /*******************************************************************
39 * WINPOS_ActivateOtherWindow
41 * Activates window other than pWnd.
45 WinPosActivateOtherWindow(HWND hwnd
)
49 if ((GetWindowLongPtrW( hwnd
, GWL_STYLE
) & WS_POPUP
) && (hwndTo
= GetWindow( hwnd
, GW_OWNER
)))
51 hwndTo
= GetAncestor( hwndTo
, GA_ROOT
);
52 if (can_activate_window( hwndTo
)) goto done
;
58 if (!(hwndTo
= GetWindow( hwndTo
, GW_HWNDNEXT
))) break;
59 if (can_activate_window( hwndTo
)) break;
63 fg
= GetForegroundWindow();
64 TRACE("win = %p fg = %p\n", hwndTo
, fg
);
65 if (!fg
|| (hwnd
== fg
))
67 if (SetForegroundWindow( hwndTo
)) return;
69 if (!SetActiveWindow( hwndTo
)) SetActiveWindow(0);
75 WinPosGetMinMaxInfo(HWND hWnd
, POINT
* MaxSize
, POINT
* MaxPos
,
76 POINT
* MinTrack
, POINT
* MaxTrack
)
80 if(NtUserGetMinMaxInfo(hWnd
, &MinMax
, TRUE
))
82 MinMax
.ptMaxTrackSize
.x
= max(MinMax
.ptMaxTrackSize
.x
,
83 MinMax
.ptMinTrackSize
.x
);
84 MinMax
.ptMaxTrackSize
.y
= max(MinMax
.ptMaxTrackSize
.y
,
85 MinMax
.ptMinTrackSize
.y
);
87 if (MaxSize
) *MaxSize
= MinMax
.ptMaxSize
;
88 if (MaxPos
) *MaxPos
= MinMax
.ptMaxPosition
;
89 if (MinTrack
) *MinTrack
= MinMax
.ptMinTrackSize
;
90 if (MaxTrack
) *MaxTrack
= MinMax
.ptMaxTrackSize
;
92 return 0; //FIXME: what does it return?
100 GetActiveWindow(VOID
)
102 return (HWND
)NtUserGetThreadState(THREADSTATE_ACTIVEWINDOW
);
110 ArrangeIconicWindows(HWND hWnd
)
112 return NtUserCallHwndLock( hWnd
, HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS
);