Commit 9d9dac09 authored by Alexandre Julliard's avatar Alexandre Julliard

Added WIN_ListParents function and renamed WIN_BuildWinArray into

WIN_ListChildren. Made owner field in WND structure an HWND.
parent 41d6a96a
...@@ -58,12 +58,10 @@ HWND ICONTITLE_Create( HWND owner ) ...@@ -58,12 +58,10 @@ HWND ICONTITLE_Create( HWND owner )
wndPtr = WIN_FindWndPtr( hWnd ); wndPtr = WIN_FindWndPtr( hWnd );
if( wndPtr ) if( wndPtr )
{ {
WND *wnd = WIN_FindWndPtr(owner); wndPtr->owner = owner; /* MDI depends on this */
wndPtr->owner = wnd; /* MDI depends on this */
wndPtr->dwStyle &= ~(WS_CAPTION | WS_BORDER); wndPtr->dwStyle &= ~(WS_CAPTION | WS_BORDER);
if (!IsWindowEnabled(owner)) wndPtr->dwStyle |= WS_DISABLED; if (!IsWindowEnabled(owner)) wndPtr->dwStyle |= WS_DISABLED;
WIN_ReleaseWndPtr(wndPtr); WIN_ReleaseWndPtr(wndPtr);
WIN_ReleaseWndPtr(wnd);
return hWnd; return hWnd;
} }
return 0; return 0;
......
...@@ -347,9 +347,9 @@ static void set_wm_hints( Display *display, WND *win ) ...@@ -347,9 +347,9 @@ static void set_wm_hints( Display *display, WND *win )
/* transient for hint */ /* transient for hint */
if (win->owner) if (win->owner)
{ {
struct x11drv_win_data *owner_data = win->owner->pDriverData; Window owner_win = X11DRV_get_whole_window( win->owner );
XSetTransientForHint( display, data->whole_window, owner_data->whole_window ); XSetTransientForHint( display, data->whole_window, owner_win );
group_leader = owner_data->whole_window; group_leader = owner_win;
} }
else group_leader = data->whole_window; else group_leader = data->whole_window;
......
...@@ -573,7 +573,7 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter) ...@@ -573,7 +573,7 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter)
if( hwndInsertAfter != HWND_TOP ) if( hwndInsertAfter != HWND_TOP )
{ {
if ((list = WIN_BuildWinArray( GetDesktopWindow() ))) if ((list = WIN_ListChildren( GetDesktopWindow() )))
{ {
int i; int i;
for (i = 0; list[i]; i++) for (i = 0; list[i]; i++)
...@@ -588,7 +588,7 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter) ...@@ -588,7 +588,7 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter)
} }
else if (style & WS_CHILD) return hwndInsertAfter; else if (style & WS_CHILD) return hwndInsertAfter;
if (!list) list = WIN_BuildWinArray( GetDesktopWindow() ); if (!list) list = WIN_ListChildren( GetDesktopWindow() );
if (list) if (list)
{ {
int i; int i;
...@@ -604,7 +604,7 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter) ...@@ -604,7 +604,7 @@ static HWND SWP_DoOwnedPopups(HWND hwnd, HWND hwndInsertAfter)
hwndInsertAfter = list[i]; hwndInsertAfter = list[i];
} }
} }
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
} }
return hwndInsertAfter; return hwndInsertAfter;
......
...@@ -25,7 +25,7 @@ typedef struct tagWND ...@@ -25,7 +25,7 @@ typedef struct tagWND
struct tagWND *next; /* Next sibling */ struct tagWND *next; /* Next sibling */
struct tagWND *child; /* First child */ struct tagWND *child; /* First child */
struct tagWND *parent; /* Window parent (from CreateWindow) */ struct tagWND *parent; /* Window parent (from CreateWindow) */
struct tagWND *owner; /* Window owner */ HWND owner; /* Window owner */
struct tagCLASS *class; /* Window class */ struct tagCLASS *class; /* Window class */
HWINDOWPROC winproc; /* Window procedure */ HWINDOWPROC winproc; /* Window procedure */
DWORD dwMagic; /* Magic number (must be WND_MAGIC) */ DWORD dwMagic; /* Magic number (must be WND_MAGIC) */
...@@ -92,8 +92,8 @@ extern HWND WIN_FindWinToRepaint( HWND hwnd ); ...@@ -92,8 +92,8 @@ extern HWND WIN_FindWinToRepaint( HWND hwnd );
extern void WIN_DestroyThreadWindows( HWND hwnd ); extern void WIN_DestroyThreadWindows( HWND hwnd );
extern BOOL WIN_CreateDesktopWindow(void); extern BOOL WIN_CreateDesktopWindow(void);
extern BOOL WIN_IsWindowDrawable(WND*, BOOL ); extern BOOL WIN_IsWindowDrawable(WND*, BOOL );
extern HWND *WIN_BuildWinArray( HWND hwnd ); extern HWND *WIN_ListParents( HWND hwnd );
extern void WIN_ReleaseWinArray( HWND *wndArray ); extern HWND *WIN_ListChildren( HWND hwnd );
extern BOOL WIN_InternalShowOwnedPopups( HWND owner, BOOL fShow, BOOL unmanagedOnly ); extern BOOL WIN_InternalShowOwnedPopups( HWND owner, BOOL fShow, BOOL unmanagedOnly );
extern HWND CARET_GetHwnd(void); extern HWND CARET_GetHwnd(void);
......
...@@ -1609,14 +1609,14 @@ HWND16 WINAPI GetDlgItem16( HWND16 hwndDlg, INT16 id ) ...@@ -1609,14 +1609,14 @@ HWND16 WINAPI GetDlgItem16( HWND16 hwndDlg, INT16 id )
HWND WINAPI GetDlgItem( HWND hwndDlg, INT id ) HWND WINAPI GetDlgItem( HWND hwndDlg, INT id )
{ {
int i; int i;
HWND *list = WIN_BuildWinArray( hwndDlg ); HWND *list = WIN_ListChildren( hwndDlg );
HWND ret = 0; HWND ret = 0;
if (!list) return 0; if (!list) return 0;
for (i = 0; list[i]; i++) if (GetWindowLongW( list[i], GWL_ID ) == id) break; for (i = 0; list[i]; i++) if (GetWindowLongW( list[i], GWL_ID ) == id) break;
ret = list[i]; ret = list[i];
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
return ret; return ret;
} }
......
...@@ -141,13 +141,13 @@ static HWND MDI_GetChildByID(HWND hwnd, UINT id) ...@@ -141,13 +141,13 @@ static HWND MDI_GetChildByID(HWND hwnd, UINT id)
HWND *win_array; HWND *win_array;
int i; int i;
if (!(win_array = WIN_BuildWinArray( hwnd ))) return 0; if (!(win_array = WIN_ListChildren( hwnd ))) return 0;
for (i = 0; win_array[i]; i++) for (i = 0; win_array[i]; i++)
{ {
if (GetWindowLongA( win_array[i], GWL_ID ) == id) break; if (GetWindowLongA( win_array[i], GWL_ID ) == id) break;
} }
ret = win_array[i]; ret = win_array[i];
WIN_ReleaseWinArray( win_array ); HeapFree( GetProcessHeap(), 0, win_array );
return ret; return ret;
} }
...@@ -282,7 +282,7 @@ static HWND MDI_GetWindow(MDICLIENTINFO *clientInfo, HWND hWnd, BOOL bNext, ...@@ -282,7 +282,7 @@ static HWND MDI_GetWindow(MDICLIENTINFO *clientInfo, HWND hWnd, BOOL bNext,
dwStyleMask |= WS_DISABLED | WS_VISIBLE; dwStyleMask |= WS_DISABLED | WS_VISIBLE;
if( !hWnd ) hWnd = clientInfo->hwndActiveChild; if( !hWnd ) hWnd = clientInfo->hwndActiveChild;
if (!(list = WIN_BuildWinArray( GetParent(hWnd) ))) return 0; if (!(list = WIN_ListChildren( GetParent(hWnd) ))) return 0;
i = 0; i = 0;
/* start from next after hWnd */ /* start from next after hWnd */
while (list[i] && list[i] != hWnd) i++; while (list[i] && list[i] != hWnd) i++;
...@@ -304,7 +304,7 @@ static HWND MDI_GetWindow(MDICLIENTINFO *clientInfo, HWND hWnd, BOOL bNext, ...@@ -304,7 +304,7 @@ static HWND MDI_GetWindow(MDICLIENTINFO *clientInfo, HWND hWnd, BOOL bNext,
if (bNext) goto found; if (bNext) goto found;
} }
found: found:
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
return last; return last;
} }
...@@ -857,7 +857,7 @@ static LONG MDICascade( HWND client, MDICLIENTINFO *ci ) ...@@ -857,7 +857,7 @@ static LONG MDICascade( HWND client, MDICLIENTINFO *ci )
if (ci->nActiveChildren == 0) return 0; if (ci->nActiveChildren == 0) return 0;
if (!(win_array = WIN_BuildWinArray( client ))) return 0; if (!(win_array = WIN_ListChildren( client ))) return 0;
/* remove all the windows we don't want */ /* remove all the windows we don't want */
for (i = total = 0; win_array[i]; i++) for (i = total = 0; win_array[i]; i++)
...@@ -890,7 +890,7 @@ static LONG MDICascade( HWND client, MDICLIENTINFO *ci ) ...@@ -890,7 +890,7 @@ static LONG MDICascade( HWND client, MDICLIENTINFO *ci )
SWP_DRAWFRAME | SWP_NOACTIVATE | SWP_NOZORDER); SWP_DRAWFRAME | SWP_NOACTIVATE | SWP_NOZORDER);
} }
} }
WIN_ReleaseWinArray( win_array ); HeapFree( GetProcessHeap(), 0, win_array );
if (has_icons) ArrangeIconicWindows( client ); if (has_icons) ArrangeIconicWindows( client );
return 0; return 0;
...@@ -910,7 +910,7 @@ static void MDITile( HWND client, MDICLIENTINFO *ci, WPARAM wParam ) ...@@ -910,7 +910,7 @@ static void MDITile( HWND client, MDICLIENTINFO *ci, WPARAM wParam )
if (ci->nActiveChildren == 0) return; if (ci->nActiveChildren == 0) return;
if (!(win_array = WIN_BuildWinArray( client ))) return; if (!(win_array = WIN_ListChildren( client ))) return;
/* remove all the windows we don't want */ /* remove all the windows we don't want */
for (i = total = 0; win_array[i]; i++) for (i = total = 0; win_array[i]; i++)
...@@ -975,7 +975,7 @@ static void MDITile( HWND client, MDICLIENTINFO *ci, WPARAM wParam ) ...@@ -975,7 +975,7 @@ static void MDITile( HWND client, MDICLIENTINFO *ci, WPARAM wParam )
x += xsize; x += xsize;
} }
} }
WIN_ReleaseWinArray( win_array ); HeapFree( GetProcessHeap(), 0, win_array );
if (has_icons) ArrangeIconicWindows( client ); if (has_icons) ArrangeIconicWindows( client );
} }
...@@ -1948,7 +1948,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll ) ...@@ -1948,7 +1948,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll )
GetClientRect( hwnd, &clientRect ); GetClientRect( hwnd, &clientRect );
SetRectEmpty( &childRect ); SetRectEmpty( &childRect );
if ((list = WIN_BuildWinArray( hwnd ))) if ((list = WIN_ListChildren( hwnd )))
{ {
int i; int i;
for (i = 0; list[i]; i++) for (i = 0; list[i]; i++)
...@@ -1956,7 +1956,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll ) ...@@ -1956,7 +1956,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll )
DWORD style = GetWindowLongW( list[i], GWL_STYLE ); DWORD style = GetWindowLongW( list[i], GWL_STYLE );
if (style & WS_MAXIMIZE) if (style & WS_MAXIMIZE)
{ {
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
ShowScrollBar( hwnd, SB_BOTH, FALSE ); ShowScrollBar( hwnd, SB_BOTH, FALSE );
return; return;
} }
...@@ -1967,7 +1967,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll ) ...@@ -1967,7 +1967,7 @@ void WINAPI CalcChildScroll( HWND hwnd, INT scroll )
WIN_ReleaseWndPtr( pWnd ); WIN_ReleaseWndPtr( pWnd );
} }
} }
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
} }
UnionRect( &childRect, &clientRect, &childRect ); UnionRect( &childRect, &clientRect, &childRect );
...@@ -2145,11 +2145,11 @@ static BOOL WINAPI MDI_MoreWindowsDlgProc (HWND hDlg, UINT iMsg, WPARAM wParam, ...@@ -2145,11 +2145,11 @@ static BOOL WINAPI MDI_MoreWindowsDlgProc (HWND hDlg, UINT iMsg, WPARAM wParam,
HWND hListBox = GetDlgItem(hDlg, MDI_IDC_LISTBOX); HWND hListBox = GetDlgItem(hDlg, MDI_IDC_LISTBOX);
HWND *list, *sorted_list; HWND *list, *sorted_list;
if (!(list = WIN_BuildWinArray( (HWND)lParam ))) return TRUE; if (!(list = WIN_ListChildren( (HWND)lParam ))) return TRUE;
if (!(sorted_list = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, if (!(sorted_list = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(HWND) * ci->nActiveChildren ))) sizeof(HWND) * ci->nActiveChildren )))
{ {
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
return FALSE; return FALSE;
} }
...@@ -2159,7 +2159,7 @@ static BOOL WINAPI MDI_MoreWindowsDlgProc (HWND hDlg, UINT iMsg, WPARAM wParam, ...@@ -2159,7 +2159,7 @@ static BOOL WINAPI MDI_MoreWindowsDlgProc (HWND hDlg, UINT iMsg, WPARAM wParam,
UINT id = GetWindowLongW( list[i], GWL_ID ) - ci->idFirstChild; UINT id = GetWindowLongW( list[i], GWL_ID ) - ci->idFirstChild;
if (id < ci->nActiveChildren) sorted_list[id] = list[i]; if (id < ci->nActiveChildren) sorted_list[id] = list[i];
} }
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
for (i = 0; i < ci->nActiveChildren; i++) for (i = 0; i < ci->nActiveChildren; i++)
{ {
...@@ -2260,13 +2260,13 @@ static void MDI_SwapMenuItems(HWND parent, UINT pos1, UINT pos2) ...@@ -2260,13 +2260,13 @@ static void MDI_SwapMenuItems(HWND parent, UINT pos1, UINT pos2)
HWND *list; HWND *list;
int i; int i;
if (!(list = WIN_BuildWinArray( parent ))) return; if (!(list = WIN_ListChildren( parent ))) return;
for (i = 0; list[i]; i++) for (i = 0; list[i]; i++)
{ {
UINT id = GetWindowLongW( list[i], GWL_ID ); UINT id = GetWindowLongW( list[i], GWL_ID );
if (id == pos1) SetWindowLongW( list[i], GWL_ID, pos2 ); if (id == pos1) SetWindowLongW( list[i], GWL_ID, pos2 );
else if (id == pos2) SetWindowLongW( list[i], GWL_ID, pos1 ); else if (id == pos2) SetWindowLongW( list[i], GWL_ID, pos1 );
} }
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
} }
...@@ -651,7 +651,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs ...@@ -651,7 +651,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs
if( flags & (RDW_INVALIDATE | RDW_VALIDATE) ) if( flags & (RDW_INVALIDATE | RDW_VALIDATE) )
{ {
HWND *list; HWND *list;
if( hRgn > 1 && bChildren && (list = WIN_BuildWinArray( wndPtr->hwndSelf ))) if( hRgn > 1 && bChildren && (list = WIN_ListChildren( wndPtr->hwndSelf )))
{ {
POINT ptTotal, prevOrigin = {0,0}; POINT ptTotal, prevOrigin = {0,0};
POINT ptClient; POINT ptClient;
...@@ -689,7 +689,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs ...@@ -689,7 +689,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs
} }
WIN_ReleaseWndPtr( wnd ); WIN_ReleaseWndPtr( wnd );
} }
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
OffsetRgn( hRgn, ptTotal.x, ptTotal.y ); OffsetRgn( hRgn, ptTotal.x, ptTotal.y );
bChildren = 0; bChildren = 0;
} }
...@@ -700,7 +700,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs ...@@ -700,7 +700,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs
if( bChildren ) if( bChildren )
{ {
HWND *list; HWND *list;
if ((list = WIN_BuildWinArray( wndPtr->hwndSelf ))) if ((list = WIN_ListChildren( wndPtr->hwndSelf )))
{ {
INT i; INT i;
for (i = 0; list[i]; i++) for (i = 0; list[i]; i++)
...@@ -711,7 +711,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs ...@@ -711,7 +711,7 @@ static void RDW_UpdateRgns( WND* wndPtr, HRGN hRgn, UINT flags, BOOL firstRecurs
RDW_UpdateRgns( wnd, hRgn, flags, FALSE ); RDW_UpdateRgns( wnd, hRgn, flags, FALSE );
WIN_ReleaseWndPtr( wnd ); WIN_ReleaseWndPtr( wnd );
} }
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
} }
} }
...@@ -820,7 +820,7 @@ static HRGN RDW_Paint( WND* wndPtr, HRGN hrgn, UINT flags, UINT ex ) ...@@ -820,7 +820,7 @@ static HRGN RDW_Paint( WND* wndPtr, HRGN hrgn, UINT flags, UINT ex )
{ {
HWND *list, *phwnd; HWND *list, *phwnd;
if( (list = WIN_BuildWinArray( wndPtr->hwndSelf )) ) if( (list = WIN_ListChildren( wndPtr->hwndSelf )) )
{ {
for (phwnd = list; *phwnd; phwnd++) for (phwnd = list; *phwnd; phwnd++)
{ {
...@@ -830,7 +830,7 @@ static HRGN RDW_Paint( WND* wndPtr, HRGN hrgn, UINT flags, UINT ex ) ...@@ -830,7 +830,7 @@ static HRGN RDW_Paint( WND* wndPtr, HRGN hrgn, UINT flags, UINT ex )
hrgn = RDW_Paint( wndPtr, hrgn, flags, ex ); hrgn = RDW_Paint( wndPtr, hrgn, flags, ex );
WIN_ReleaseWndPtr(wndPtr); WIN_ReleaseWndPtr(wndPtr);
} }
WIN_ReleaseWinArray(list); HeapFree( GetProcessHeap(), 0, list );
} }
} }
......
...@@ -224,7 +224,7 @@ BOOL WINAPI ExitWindowsEx( UINT flags, DWORD reserved ) ...@@ -224,7 +224,7 @@ BOOL WINAPI ExitWindowsEx( UINT flags, DWORD reserved )
/* We have to build a list of all windows first, as in EnumWindows */ /* We have to build a list of all windows first, as in EnumWindows */
if (!(list = WIN_BuildWinArray( GetDesktopWindow() ))) return FALSE; if (!(list = WIN_ListChildren( GetDesktopWindow() ))) return FALSE;
/* Send a WM_QUERYENDSESSION message to every window */ /* Send a WM_QUERYENDSESSION message to every window */
...@@ -243,7 +243,7 @@ BOOL WINAPI ExitWindowsEx( UINT flags, DWORD reserved ) ...@@ -243,7 +243,7 @@ BOOL WINAPI ExitWindowsEx( UINT flags, DWORD reserved )
if (!IsWindow( *phwnd )) continue; if (!IsWindow( *phwnd )) continue;
SendMessageW( *phwnd, WM_ENDSESSION, result, 0 ); SendMessageW( *phwnd, WM_ENDSESSION, result, 0 );
} }
WIN_ReleaseWinArray(list); HeapFree( GetProcessHeap(), 0, list );
if (result) ExitKernel16(); if (result) ExitKernel16();
return FALSE; return FALSE;
......
...@@ -553,7 +553,7 @@ HWND WINAPI ChildWindowFromPointEx( HWND hwndParent, POINT pt, UINT uFlags) ...@@ -553,7 +553,7 @@ HWND WINAPI ChildWindowFromPointEx( HWND hwndParent, POINT pt, UINT uFlags)
GetClientRect( hwndParent, &rect ); GetClientRect( hwndParent, &rect );
if (!PtInRect( &rect, pt )) return 0; if (!PtInRect( &rect, pt )) return 0;
if (!(list = WIN_BuildWinArray( hwndParent ))) return 0; if (!(list = WIN_ListChildren( hwndParent ))) return 0;
for (i = 0; list[i] && !retvalue; i++) for (i = 0; list[i] && !retvalue; i++)
{ {
...@@ -571,7 +571,7 @@ HWND WINAPI ChildWindowFromPointEx( HWND hwndParent, POINT pt, UINT uFlags) ...@@ -571,7 +571,7 @@ HWND WINAPI ChildWindowFromPointEx( HWND hwndParent, POINT pt, UINT uFlags)
} }
WIN_ReleaseWndPtr( wnd ); WIN_ReleaseWndPtr( wnd );
} }
WIN_ReleaseWinArray( list ); HeapFree( GetProcessHeap(), 0, list );
if (!retvalue) retvalue = hwndParent; if (!retvalue) retvalue = hwndParent;
return retvalue; return retvalue;
} }
...@@ -1523,7 +1523,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus) ...@@ -1523,7 +1523,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
DWORD old_thread = GetWindowThreadProcessId( hwndPrevActive, NULL ); DWORD old_thread = GetWindowThreadProcessId( hwndPrevActive, NULL );
DWORD new_thread = GetWindowThreadProcessId( hwndActive, NULL ); DWORD new_thread = GetWindowThreadProcessId( hwndActive, NULL );
if ((list = WIN_BuildWinArray( GetDesktopWindow() ))) if ((list = WIN_ListChildren( GetDesktopWindow() )))
{ {
for (phwnd = list; *phwnd; phwnd++) for (phwnd = list; *phwnd; phwnd++)
{ {
...@@ -1531,12 +1531,12 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus) ...@@ -1531,12 +1531,12 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
if (GetWindowThreadProcessId( *phwnd, NULL ) == old_thread) if (GetWindowThreadProcessId( *phwnd, NULL ) == old_thread)
SendMessageW( *phwnd, WM_ACTIVATEAPP, 0, new_thread ); SendMessageW( *phwnd, WM_ACTIVATEAPP, 0, new_thread );
} }
WIN_ReleaseWinArray(list); HeapFree( GetProcessHeap(), 0, list );
} }
hActiveQueue = hNewActiveQueue; hActiveQueue = hNewActiveQueue;
if ((list = WIN_BuildWinArray( GetDesktopWindow() ))) if ((list = WIN_ListChildren( GetDesktopWindow() )))
{ {
for (phwnd = list; *phwnd; phwnd++) for (phwnd = list; *phwnd; phwnd++)
{ {
...@@ -1544,7 +1544,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus) ...@@ -1544,7 +1544,7 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
if (GetWindowThreadProcessId( *phwnd, NULL ) == new_thread) if (GetWindowThreadProcessId( *phwnd, NULL ) == new_thread)
SendMessageW( *phwnd, WM_ACTIVATEAPP, 1, old_thread ); SendMessageW( *phwnd, WM_ACTIVATEAPP, 1, old_thread );
} }
WIN_ReleaseWinArray(list); HeapFree( GetProcessHeap(), 0, list );
} }
if (hWnd && !IsWindow(hWnd)) goto CLEANUP; if (hWnd && !IsWindow(hWnd)) goto CLEANUP;
...@@ -1625,6 +1625,7 @@ BOOL WINPOS_ActivateOtherWindow(HWND hwnd) ...@@ -1625,6 +1625,7 @@ BOOL WINPOS_ActivateOtherWindow(HWND hwnd)
WND *pWnd; WND *pWnd;
HWND hwndActive = 0; HWND hwndActive = 0;
HWND hwndTo = 0; HWND hwndTo = 0;
HWND owner;
/* Get current active window from the active queue */ /* Get current active window from the active queue */
if ( hActiveQueue ) if ( hActiveQueue )
...@@ -1648,10 +1649,11 @@ BOOL WINPOS_ActivateOtherWindow(HWND hwnd) ...@@ -1648,10 +1649,11 @@ BOOL WINPOS_ActivateOtherWindow(HWND hwnd)
return 0; return 0;
} }
if( !(pWnd->dwStyle & WS_POPUP) || !(pWnd->owner) || owner = GetWindow( hwnd, GW_OWNER );
!WINPOS_CanActivate((hwndTo = GetAncestor( pWnd->owner->hwndSelf, GA_ROOT ))) ) if( !(pWnd->dwStyle & WS_POPUP) || !owner ||
!WINPOS_CanActivate((hwndTo = GetAncestor( owner, GA_ROOT ))) )
{ {
HWND tmp = GetAncestor( pWnd->hwndSelf, GA_ROOT ); HWND tmp = GetAncestor( hwnd, GA_ROOT );
hwndTo = hwndPrevActive; hwndTo = hwndPrevActive;
while( !WINPOS_CanActivate(hwndTo) ) while( !WINPOS_CanActivate(hwndTo) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment