forked from Mirrors/wine-wine
Moved ForceWindowRaise to the USER driver and removed the WND driver.
parent
b9bd3f81c0
commit
ed15fc7de1
|
@ -127,14 +127,4 @@ extern int screen_rows;
|
||||||
extern int screen_cols;
|
extern int screen_cols;
|
||||||
extern WINDOW *root_window;
|
extern WINDOW *root_window;
|
||||||
|
|
||||||
/* TTY windows driver */
|
|
||||||
|
|
||||||
extern struct tagWND_DRIVER TTYDRV_WND_Driver;
|
|
||||||
|
|
||||||
extern HANDLE TTYDRV_LoadOEMResource(WORD resid, WORD type);
|
|
||||||
|
|
||||||
extern void TTYDRV_WND_ForceWindowRaise(struct tagWND *pWnd);
|
|
||||||
extern void TTYDRV_WND_ScrollWindow(struct tagWND *wndPtr, HDC hdc, INT dx, INT dy, const RECT *clipRect, BOOL bUpdate);
|
|
||||||
extern BOOL TTYDRV_WND_SetHostAttr(struct tagWND *wndPtr, INT haKey, INT value);
|
|
||||||
|
|
||||||
#endif /* !defined(__WINE_TTYDRV_H) */
|
#endif /* !defined(__WINE_TTYDRV_H) */
|
||||||
|
|
|
@ -29,8 +29,6 @@ WINDOW *root_window;
|
||||||
*/
|
*/
|
||||||
static void process_attach(void)
|
static void process_attach(void)
|
||||||
{
|
{
|
||||||
WND_Driver = &TTYDRV_WND_Driver;
|
|
||||||
|
|
||||||
#ifdef WINE_CURSES
|
#ifdef WINE_CURSES
|
||||||
if ((root_window = initscr()))
|
if ((root_window = initscr()))
|
||||||
{
|
{
|
||||||
|
@ -57,8 +55,6 @@ static void process_detach(void)
|
||||||
#ifdef WINE_CURSES
|
#ifdef WINE_CURSES
|
||||||
if (root_window) endwin();
|
if (root_window) endwin();
|
||||||
#endif /* WINE_CURSES */
|
#endif /* WINE_CURSES */
|
||||||
|
|
||||||
WND_Driver = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,11 +15,6 @@
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(ttydrv);
|
DEFAULT_DEBUG_CHANNEL(ttydrv);
|
||||||
|
|
||||||
WND_DRIVER TTYDRV_WND_Driver =
|
|
||||||
{
|
|
||||||
TTYDRV_WND_ForceWindowRaise
|
|
||||||
};
|
|
||||||
|
|
||||||
#define SWP_AGG_NOGEOMETRYCHANGE \
|
#define SWP_AGG_NOGEOMETRYCHANGE \
|
||||||
(SWP_NOSIZE | SWP_NOMOVE | SWP_NOCLIENTSIZE | SWP_NOCLIENTMOVE)
|
(SWP_NOSIZE | SWP_NOMOVE | SWP_NOCLIENTSIZE | SWP_NOCLIENTMOVE)
|
||||||
#define SWP_AGG_NOPOSCHANGE \
|
#define SWP_AGG_NOPOSCHANGE \
|
||||||
|
@ -98,14 +93,6 @@ BOOL TTYDRV_DestroyWindow( HWND hwnd )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* TTYDRV_WND_ForceWindowRaise
|
|
||||||
*/
|
|
||||||
void TTYDRV_WND_ForceWindowRaise(WND *wndPtr)
|
|
||||||
{
|
|
||||||
FIXME("(%p): stub\n", wndPtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DCE_OffsetVisRgn
|
* DCE_OffsetVisRgn
|
||||||
|
|
|
@ -35,9 +35,7 @@ WORD USER_HeapSel = 0; /* USER heap selector */
|
||||||
|
|
||||||
static HMODULE graphics_driver;
|
static HMODULE graphics_driver;
|
||||||
|
|
||||||
#define GET_USER_FUNC(name) \
|
#define GET_USER_FUNC(name) USER_Driver.p##name = (void*)GetProcAddress( graphics_driver, #name )
|
||||||
if (!(USER_Driver.p##name = (void*)GetProcAddress( graphics_driver, #name ))) \
|
|
||||||
FIXME("%s not found in graphics driver\n", #name)
|
|
||||||
|
|
||||||
/* load the graphics driver */
|
/* load the graphics driver */
|
||||||
static BOOL load_driver(void)
|
static BOOL load_driver(void)
|
||||||
|
@ -89,6 +87,7 @@ static BOOL load_driver(void)
|
||||||
GET_USER_FUNC(DestroyWindow);
|
GET_USER_FUNC(DestroyWindow);
|
||||||
GET_USER_FUNC(GetDC);
|
GET_USER_FUNC(GetDC);
|
||||||
GET_USER_FUNC(EnableWindow);
|
GET_USER_FUNC(EnableWindow);
|
||||||
|
GET_USER_FUNC(ForceWindowRaise);
|
||||||
GET_USER_FUNC(MsgWaitForMultipleObjectsEx);
|
GET_USER_FUNC(MsgWaitForMultipleObjectsEx);
|
||||||
GET_USER_FUNC(ScrollDC);
|
GET_USER_FUNC(ScrollDC);
|
||||||
GET_USER_FUNC(ScrollWindowEx);
|
GET_USER_FUNC(ScrollWindowEx);
|
||||||
|
|
|
@ -1943,3 +1943,47 @@ void X11DRV_SysCommandSizeMove( HWND hwnd, WPARAM wParam )
|
||||||
END:
|
END:
|
||||||
WIN_ReleaseWndPtr(wndPtr);
|
WIN_ReleaseWndPtr(wndPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* X11DRV_ForceWindowRaise (X11DRV.@)
|
||||||
|
*
|
||||||
|
* Raise a window on top of the X stacking order, while preserving
|
||||||
|
* the correct Windows Z order.
|
||||||
|
*
|
||||||
|
* FIXME: this should go away.
|
||||||
|
*/
|
||||||
|
void X11DRV_ForceWindowRaise( HWND hwnd )
|
||||||
|
{
|
||||||
|
XWindowChanges winChanges;
|
||||||
|
Display *display = thread_display();
|
||||||
|
WND *wndPrev, *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
|
|
||||||
|
if (!wndPtr) return;
|
||||||
|
|
||||||
|
if ((wndPtr->dwExStyle & WS_EX_MANAGED) ||
|
||||||
|
wndPtr->parent->hwndSelf != GetDesktopWindow() ||
|
||||||
|
IsRectEmpty( &wndPtr->rectWindow ) ||
|
||||||
|
!get_whole_window(wndPtr))
|
||||||
|
{
|
||||||
|
WIN_ReleaseWndPtr( wndPtr );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Raise all windows up to wndPtr according to their Z order.
|
||||||
|
* (it would be easier with sibling-related Below but it doesn't
|
||||||
|
* work very well with SGI mwm for instance)
|
||||||
|
*/
|
||||||
|
winChanges.stack_mode = Above;
|
||||||
|
while (wndPtr)
|
||||||
|
{
|
||||||
|
if (!IsRectEmpty( &wndPtr->rectWindow ) && get_whole_window(wndPtr))
|
||||||
|
TSXReconfigureWMWindow( display, get_whole_window(wndPtr), 0,
|
||||||
|
CWStackMode, &winChanges );
|
||||||
|
wndPrev = wndPtr->parent->child;
|
||||||
|
if (wndPrev == wndPtr) break;
|
||||||
|
while (wndPrev && (wndPrev->next != wndPtr)) wndPrev = wndPrev->next;
|
||||||
|
WIN_UpdateWndPtr( &wndPtr, wndPrev );
|
||||||
|
}
|
||||||
|
WIN_ReleaseWndPtr( wndPtr );
|
||||||
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ debug_channels (bitblt bitmap clipboard cursor dinput event font gdi graphics
|
||||||
@ cdecl DestroyWindow(long) X11DRV_DestroyWindow
|
@ cdecl DestroyWindow(long) X11DRV_DestroyWindow
|
||||||
@ cdecl GetDC(long long long long) X11DRV_GetDC
|
@ cdecl GetDC(long long long long) X11DRV_GetDC
|
||||||
@ cdecl EnableWindow(long long) X11DRV_EnableWindow
|
@ cdecl EnableWindow(long long) X11DRV_EnableWindow
|
||||||
|
@ cdecl ForceWindowRaise(long) X11DRV_ForceWindowRaise
|
||||||
@ cdecl MsgWaitForMultipleObjectsEx(long ptr long long long) X11DRV_MsgWaitForMultipleObjectsEx
|
@ cdecl MsgWaitForMultipleObjectsEx(long ptr long long long) X11DRV_MsgWaitForMultipleObjectsEx
|
||||||
@ cdecl ScrollDC(long long long ptr ptr long ptr) X11DRV_ScrollDC
|
@ cdecl ScrollDC(long long long ptr ptr long ptr) X11DRV_ScrollDC
|
||||||
@ cdecl ScrollWindowEx(long long long ptr ptr long ptr long) X11DRV_ScrollWindowEx
|
@ cdecl ScrollWindowEx(long long long ptr ptr long ptr long) X11DRV_ScrollWindowEx
|
||||||
|
|
|
@ -263,8 +263,6 @@ static void process_attach(void)
|
||||||
{
|
{
|
||||||
Display *display;
|
Display *display;
|
||||||
|
|
||||||
WND_Driver = &X11DRV_WND_Driver;
|
|
||||||
|
|
||||||
get_server_startup();
|
get_server_startup();
|
||||||
setup_options();
|
setup_options();
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,7 @@ typedef struct tagUSER_DRIVER {
|
||||||
BOOL (*pDestroyWindow)(HWND);
|
BOOL (*pDestroyWindow)(HWND);
|
||||||
BOOL (*pGetDC)(HWND,HDC,HRGN,DWORD);
|
BOOL (*pGetDC)(HWND,HDC,HRGN,DWORD);
|
||||||
BOOL (*pEnableWindow)(HWND,BOOL);
|
BOOL (*pEnableWindow)(HWND,BOOL);
|
||||||
|
void (*pForceWindowRaise)(HWND);
|
||||||
DWORD (*pMsgWaitForMultipleObjectsEx)(DWORD,const HANDLE*,DWORD,DWORD,DWORD);
|
DWORD (*pMsgWaitForMultipleObjectsEx)(DWORD,const HANDLE*,DWORD,DWORD,DWORD);
|
||||||
BOOL (*pScrollDC)(HDC,INT,INT,const RECT*,const RECT*,HRGN,LPRECT);
|
BOOL (*pScrollDC)(HDC,INT,INT,const RECT*,const RECT*,HRGN,LPRECT);
|
||||||
INT (*pScrollWindowEx)(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT);
|
INT (*pScrollWindowEx)(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT);
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
struct tagCLASS;
|
struct tagCLASS;
|
||||||
struct tagDCE;
|
struct tagDCE;
|
||||||
struct tagMESSAGEQUEUE;
|
struct tagMESSAGEQUEUE;
|
||||||
struct tagWND_DRIVER;
|
|
||||||
|
|
||||||
typedef struct tagWND
|
typedef struct tagWND
|
||||||
{
|
{
|
||||||
|
@ -40,7 +39,7 @@ typedef struct tagWND
|
||||||
void *pProp; /* Pointer to properties list */
|
void *pProp; /* Pointer to properties list */
|
||||||
struct tagDCE *dce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
|
struct tagDCE *dce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
|
||||||
HGLOBAL16 hmemTaskQ; /* Task queue global memory handle */
|
HGLOBAL16 hmemTaskQ; /* Task queue global memory handle */
|
||||||
HRGN16 hrgnUpdate; /* Update region */
|
HRGN hrgnUpdate; /* Update region */
|
||||||
HRGN hrgnWnd; /* window's region */
|
HRGN hrgnWnd; /* window's region */
|
||||||
HWND hwndLastActive;/* Last active popup hwnd */
|
HWND hwndLastActive;/* Last active popup hwnd */
|
||||||
DWORD dwStyle; /* Window style (from CreateWindow) */
|
DWORD dwStyle; /* Window style (from CreateWindow) */
|
||||||
|
@ -48,23 +47,15 @@ typedef struct tagWND
|
||||||
DWORD clsStyle; /* Class style at window creation */
|
DWORD clsStyle; /* Class style at window creation */
|
||||||
UINT wIDmenu; /* ID or hmenu (from CreateWindow) */
|
UINT wIDmenu; /* ID or hmenu (from CreateWindow) */
|
||||||
DWORD helpContext; /* Help context ID */
|
DWORD helpContext; /* Help context ID */
|
||||||
WORD flags; /* Misc. flags (see below) */
|
UINT flags; /* Misc. flags (see below) */
|
||||||
HMENU16 hSysMenu; /* window's copy of System Menu */
|
HMENU16 hSysMenu; /* window's copy of System Menu */
|
||||||
int cbWndExtra; /* class cbWndExtra at window creation */
|
int cbWndExtra; /* class cbWndExtra at window creation */
|
||||||
int irefCount; /* window's reference count*/
|
int irefCount; /* window's reference count*/
|
||||||
DWORD userdata; /* User private data */
|
DWORD userdata; /* User private data */
|
||||||
struct tagWND_DRIVER *pDriver; /* Window driver */
|
|
||||||
void *pDriverData; /* Window driver data */
|
void *pDriverData; /* Window driver data */
|
||||||
DWORD wExtra[1]; /* Window extra bytes */
|
DWORD wExtra[1]; /* Window extra bytes */
|
||||||
} WND;
|
} WND;
|
||||||
|
|
||||||
typedef struct tagWND_DRIVER
|
|
||||||
{
|
|
||||||
void (*pForceWindowRaise)(WND *);
|
|
||||||
} WND_DRIVER;
|
|
||||||
|
|
||||||
extern WND_DRIVER *WND_Driver;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
RECT16 rectNormal;
|
RECT16 rectNormal;
|
||||||
|
|
|
@ -386,10 +386,6 @@ extern void X11DRV_MoveCursor(WORD wAbsX, WORD wAbsY);
|
||||||
extern void X11DRV_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
|
extern void X11DRV_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
|
||||||
WORD keyState, DWORD data, DWORD time, HWND hWnd );
|
WORD keyState, DWORD data, DWORD time, HWND hWnd );
|
||||||
|
|
||||||
/* X11 windows driver */
|
|
||||||
|
|
||||||
extern struct tagWND_DRIVER X11DRV_WND_Driver;
|
|
||||||
|
|
||||||
/* x11drv private window data */
|
/* x11drv private window data */
|
||||||
struct x11drv_win_data
|
struct x11drv_win_data
|
||||||
{
|
{
|
||||||
|
@ -420,8 +416,6 @@ inline static Window get_whole_window( WND *wnd )
|
||||||
return data->whole_window;
|
return data->whole_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void X11DRV_WND_ForceWindowRaise(struct tagWND *pWnd);
|
|
||||||
|
|
||||||
extern void X11DRV_SetFocus( HWND hwnd );
|
extern void X11DRV_SetFocus( HWND hwnd );
|
||||||
extern Cursor X11DRV_GetCursor( Display *display, struct tagCURSORICONINFO *ptr );
|
extern Cursor X11DRV_GetCursor( Display *display, struct tagCURSORICONINFO *ptr );
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,6 @@ DECLARE_DEBUG_CHANNEL(msg);
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
WND_DRIVER *WND_Driver = NULL;
|
|
||||||
|
|
||||||
/* Desktop window */
|
/* Desktop window */
|
||||||
static WND *pWndDesktop = NULL;
|
static WND *pWndDesktop = NULL;
|
||||||
|
|
||||||
|
@ -539,7 +537,6 @@ BOOL WIN_CreateDesktopWindow(void)
|
||||||
if (!hwndDesktop) return FALSE;
|
if (!hwndDesktop) return FALSE;
|
||||||
pWndDesktop = (WND *) USER_HEAP_LIN_ADDR( hwndDesktop );
|
pWndDesktop = (WND *) USER_HEAP_LIN_ADDR( hwndDesktop );
|
||||||
|
|
||||||
pWndDesktop->pDriver = WND_Driver;
|
|
||||||
pWndDesktop->next = NULL;
|
pWndDesktop->next = NULL;
|
||||||
pWndDesktop->child = NULL;
|
pWndDesktop->child = NULL;
|
||||||
pWndDesktop->parent = NULL;
|
pWndDesktop->parent = NULL;
|
||||||
|
@ -747,8 +744,6 @@ static HWND WIN_CreateWindowEx( CREATESTRUCTA *cs, ATOM classAtom,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wndPtr->pDriver = wndPtr->parent->pDriver;
|
|
||||||
|
|
||||||
wndPtr->class = classPtr;
|
wndPtr->class = classPtr;
|
||||||
wndPtr->winproc = winproc;
|
wndPtr->winproc = winproc;
|
||||||
wndPtr->dwMagic = WND_MAGIC;
|
wndPtr->dwMagic = WND_MAGIC;
|
||||||
|
|
|
@ -1655,7 +1655,9 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !hwndPrevActive && wndPtr )
|
if( !hwndPrevActive && wndPtr )
|
||||||
(*wndPtr->pDriver->pForceWindowRaise)(wndPtr);
|
{
|
||||||
|
if (USER_Driver.pForceWindowRaise) USER_Driver.pForceWindowRaise( wndPtr->hwndSelf );
|
||||||
|
}
|
||||||
|
|
||||||
/* if active wnd is minimized redraw icon title */
|
/* if active wnd is minimized redraw icon title */
|
||||||
if( IsIconic(hwndActive) ) WINPOS_RedrawIconTitle(hwndActive);
|
if( IsIconic(hwndActive) ) WINPOS_RedrawIconTitle(hwndActive);
|
||||||
|
|
|
@ -9,8 +9,7 @@ C_SRCS = \
|
||||||
clipboard.c \
|
clipboard.c \
|
||||||
event.c \
|
event.c \
|
||||||
keyboard.c \
|
keyboard.c \
|
||||||
mouse.c \
|
mouse.c
|
||||||
wnd.c
|
|
||||||
|
|
||||||
PROGRAMS = wineclipsrv
|
PROGRAMS = wineclipsrv
|
||||||
|
|
||||||
|
|
|
@ -1,102 +0,0 @@
|
||||||
/*
|
|
||||||
* X11 windows driver
|
|
||||||
*
|
|
||||||
* Copyright 1993, 1994, 1995, 1996 Alexandre Julliard
|
|
||||||
* 1993 David Metcalfe
|
|
||||||
* 1995, 1996 Alex Korobka
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <X11/Xatom.h>
|
|
||||||
|
|
||||||
#include "ts_xlib.h"
|
|
||||||
#include "ts_xutil.h"
|
|
||||||
#include "ts_shape.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "bitmap.h"
|
|
||||||
#include "debugtools.h"
|
|
||||||
#include "gdi.h"
|
|
||||||
#include "options.h"
|
|
||||||
#include "message.h"
|
|
||||||
#include "win.h"
|
|
||||||
#include "windef.h"
|
|
||||||
#include "x11drv.h"
|
|
||||||
#include "wingdi.h"
|
|
||||||
#include "winnls.h"
|
|
||||||
#include "wine/winuser16.h"
|
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(win);
|
|
||||||
|
|
||||||
extern Atom wmChangeState;
|
|
||||||
|
|
||||||
#define HAS_DLGFRAME(style,exStyle) \
|
|
||||||
((!((style) & WS_THICKFRAME)) && (((style) & WS_DLGFRAME) || ((exStyle) & WS_EX_DLGMODALFRAME)))
|
|
||||||
|
|
||||||
/**********************************************************************/
|
|
||||||
|
|
||||||
WND_DRIVER X11DRV_WND_Driver =
|
|
||||||
{
|
|
||||||
X11DRV_WND_ForceWindowRaise
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* X11DRV_WND_IsZeroSizeWnd
|
|
||||||
*
|
|
||||||
* Return TRUE if the window has a height or widht less or equal to 0
|
|
||||||
*/
|
|
||||||
static BOOL X11DRV_WND_IsZeroSizeWnd(WND *wndPtr)
|
|
||||||
{
|
|
||||||
if ( (wndPtr->rectWindow.left >= wndPtr->rectWindow.right) ||
|
|
||||||
(wndPtr->rectWindow.top >= wndPtr->rectWindow.bottom) )
|
|
||||||
return TRUE;
|
|
||||||
else
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* X11DRV_WND_ForceWindowRaise
|
|
||||||
*
|
|
||||||
* Raise a window on top of the X stacking order, while preserving
|
|
||||||
* the correct Windows Z order.
|
|
||||||
*/
|
|
||||||
void X11DRV_WND_ForceWindowRaise(WND *wndPtr)
|
|
||||||
{
|
|
||||||
XWindowChanges winChanges;
|
|
||||||
WND *wndPrev,*pDesktop = WIN_GetDesktop();
|
|
||||||
|
|
||||||
if (X11DRV_WND_IsZeroSizeWnd(wndPtr))
|
|
||||||
{
|
|
||||||
WIN_ReleaseDesktop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( !wndPtr || !get_whole_window(wndPtr) || (wndPtr->dwExStyle & WS_EX_MANAGED) )
|
|
||||||
{
|
|
||||||
WIN_ReleaseDesktop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Raise all windows up to wndPtr according to their Z order.
|
|
||||||
* (it would be easier with sibling-related Below but it doesn't
|
|
||||||
* work very well with SGI mwm for instance)
|
|
||||||
*/
|
|
||||||
winChanges.stack_mode = Above;
|
|
||||||
while (wndPtr)
|
|
||||||
{
|
|
||||||
if ( !X11DRV_WND_IsZeroSizeWnd(wndPtr) && get_whole_window(wndPtr) )
|
|
||||||
TSXReconfigureWMWindow( thread_display(), get_whole_window(wndPtr), 0,
|
|
||||||
CWStackMode, &winChanges );
|
|
||||||
|
|
||||||
wndPrev = pDesktop->child;
|
|
||||||
if (wndPrev == wndPtr) break;
|
|
||||||
while (wndPrev && (wndPrev->next != wndPtr)) wndPrev = wndPrev->next;
|
|
||||||
|
|
||||||
wndPtr = wndPrev;
|
|
||||||
}
|
|
||||||
WIN_ReleaseDesktop();
|
|
||||||
}
|
|
Loading…
Reference in New Issue