Commit ed15fc7d authored by Alexandre Julliard's avatar Alexandre Julliard

Moved ForceWindowRaise to the USER driver and removed the WND driver.

parent b9bd3f81
......@@ -127,14 +127,4 @@ extern int screen_rows;
extern int screen_cols;
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) */
......@@ -29,8 +29,6 @@ WINDOW *root_window;
*/
static void process_attach(void)
{
WND_Driver = &TTYDRV_WND_Driver;
#ifdef WINE_CURSES
if ((root_window = initscr()))
{
......@@ -57,8 +55,6 @@ static void process_detach(void)
#ifdef WINE_CURSES
if (root_window) endwin();
#endif /* WINE_CURSES */
WND_Driver = NULL;
}
......
......@@ -15,11 +15,6 @@
DEFAULT_DEBUG_CHANNEL(ttydrv);
WND_DRIVER TTYDRV_WND_Driver =
{
TTYDRV_WND_ForceWindowRaise
};
#define SWP_AGG_NOGEOMETRYCHANGE \
(SWP_NOSIZE | SWP_NOMOVE | SWP_NOCLIENTSIZE | SWP_NOCLIENTMOVE)
#define SWP_AGG_NOPOSCHANGE \
......@@ -98,14 +93,6 @@ BOOL TTYDRV_DestroyWindow( HWND hwnd )
return TRUE;
}
/***********************************************************************
* TTYDRV_WND_ForceWindowRaise
*/
void TTYDRV_WND_ForceWindowRaise(WND *wndPtr)
{
FIXME("(%p): stub\n", wndPtr);
}
/***********************************************************************
* DCE_OffsetVisRgn
......
......@@ -35,9 +35,7 @@ WORD USER_HeapSel = 0; /* USER heap selector */
static HMODULE graphics_driver;
#define GET_USER_FUNC(name) \
if (!(USER_Driver.p##name = (void*)GetProcAddress( graphics_driver, #name ))) \
FIXME("%s not found in graphics driver\n", #name)
#define GET_USER_FUNC(name) USER_Driver.p##name = (void*)GetProcAddress( graphics_driver, #name )
/* load the graphics driver */
static BOOL load_driver(void)
......@@ -89,6 +87,7 @@ static BOOL load_driver(void)
GET_USER_FUNC(DestroyWindow);
GET_USER_FUNC(GetDC);
GET_USER_FUNC(EnableWindow);
GET_USER_FUNC(ForceWindowRaise);
GET_USER_FUNC(MsgWaitForMultipleObjectsEx);
GET_USER_FUNC(ScrollDC);
GET_USER_FUNC(ScrollWindowEx);
......
......@@ -1943,3 +1943,47 @@ void X11DRV_SysCommandSizeMove( HWND hwnd, WPARAM wParam )
END:
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 GetDC(long long long long) X11DRV_GetDC
@ cdecl EnableWindow(long long) X11DRV_EnableWindow
@ cdecl ForceWindowRaise(long) X11DRV_ForceWindowRaise
@ cdecl MsgWaitForMultipleObjectsEx(long ptr long long long) X11DRV_MsgWaitForMultipleObjectsEx
@ cdecl ScrollDC(long long long ptr ptr long ptr) X11DRV_ScrollDC
@ cdecl ScrollWindowEx(long long long ptr ptr long ptr long) X11DRV_ScrollWindowEx
......
......@@ -263,8 +263,6 @@ static void process_attach(void)
{
Display *display;
WND_Driver = &X11DRV_WND_Driver;
get_server_startup();
setup_options();
......
......@@ -74,6 +74,7 @@ typedef struct tagUSER_DRIVER {
BOOL (*pDestroyWindow)(HWND);
BOOL (*pGetDC)(HWND,HDC,HRGN,DWORD);
BOOL (*pEnableWindow)(HWND,BOOL);
void (*pForceWindowRaise)(HWND);
DWORD (*pMsgWaitForMultipleObjectsEx)(DWORD,const HANDLE*,DWORD,DWORD,DWORD);
BOOL (*pScrollDC)(HDC,INT,INT,const RECT*,const RECT*,HRGN,LPRECT);
INT (*pScrollWindowEx)(HWND,INT,INT,const RECT*,const RECT*,HRGN,LPRECT,UINT);
......
......@@ -19,7 +19,6 @@
struct tagCLASS;
struct tagDCE;
struct tagMESSAGEQUEUE;
struct tagWND_DRIVER;
typedef struct tagWND
{
......@@ -40,7 +39,7 @@ typedef struct tagWND
void *pProp; /* Pointer to properties list */
struct tagDCE *dce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
HGLOBAL16 hmemTaskQ; /* Task queue global memory handle */
HRGN16 hrgnUpdate; /* Update region */
HRGN hrgnUpdate; /* Update region */
HRGN hrgnWnd; /* window's region */
HWND hwndLastActive;/* Last active popup hwnd */
DWORD dwStyle; /* Window style (from CreateWindow) */
......@@ -48,23 +47,15 @@ typedef struct tagWND
DWORD clsStyle; /* Class style at window creation */
UINT wIDmenu; /* ID or hmenu (from CreateWindow) */
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 */
int cbWndExtra; /* class cbWndExtra at window creation */
int irefCount; /* window's reference count*/
DWORD userdata; /* User private data */
struct tagWND_DRIVER *pDriver; /* Window driver */
void *pDriverData; /* Window driver data */
DWORD wExtra[1]; /* Window extra bytes */
} WND;
typedef struct tagWND_DRIVER
{
void (*pForceWindowRaise)(WND *);
} WND_DRIVER;
extern WND_DRIVER *WND_Driver;
typedef struct
{
RECT16 rectNormal;
......
......@@ -386,10 +386,6 @@ extern void X11DRV_MoveCursor(WORD wAbsX, WORD wAbsY);
extern void X11DRV_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
WORD keyState, DWORD data, DWORD time, HWND hWnd );
/* X11 windows driver */
extern struct tagWND_DRIVER X11DRV_WND_Driver;
/* x11drv private window data */
struct x11drv_win_data
{
......@@ -420,8 +416,6 @@ inline static Window get_whole_window( WND *wnd )
return data->whole_window;
}
extern void X11DRV_WND_ForceWindowRaise(struct tagWND *pWnd);
extern void X11DRV_SetFocus( HWND hwnd );
extern Cursor X11DRV_GetCursor( Display *display, struct tagCURSORICONINFO *ptr );
......
......@@ -29,8 +29,6 @@ DECLARE_DEBUG_CHANNEL(msg);
/**********************************************************************/
WND_DRIVER *WND_Driver = NULL;
/* Desktop window */
static WND *pWndDesktop = NULL;
......@@ -539,7 +537,6 @@ BOOL WIN_CreateDesktopWindow(void)
if (!hwndDesktop) return FALSE;
pWndDesktop = (WND *) USER_HEAP_LIN_ADDR( hwndDesktop );
pWndDesktop->pDriver = WND_Driver;
pWndDesktop->next = NULL;
pWndDesktop->child = 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->winproc = winproc;
wndPtr->dwMagic = WND_MAGIC;
......
......@@ -1655,7 +1655,9 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
}
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( IsIconic(hwndActive) ) WINPOS_RedrawIconTitle(hwndActive);
......
......@@ -9,8 +9,7 @@ C_SRCS = \
clipboard.c \
event.c \
keyboard.c \
mouse.c \
wnd.c
mouse.c
PROGRAMS = wineclipsrv
......
/*
* 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();
}
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