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; ...@@ -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; ...@@ -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) ...@@ -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 @@ ...@@ -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 ) ...@@ -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 */ ...@@ -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) ...@@ -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 ) ...@@ -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 ...@@ -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) ...@@ -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 { ...@@ -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 @@ ...@@ -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 ...@@ -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 ...@@ -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); ...@@ -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 ) ...@@ -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); ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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 = \ ...@@ -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
......
/*
* 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