mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 08:39:34 +00:00
winex11: Use the user driver interface to create host desktops.
This commit is contained in:
parent
e0d3683d89
commit
4fcbbf8c9a
|
@ -348,22 +348,22 @@ void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height )
|
|||
desktop_handler.free_monitors = X11DRV_desktop_free_monitors;
|
||||
desktop_handler.register_event_handlers = NULL;
|
||||
TRACE("Display device functions are now handled by: Virtual Desktop\n");
|
||||
X11DRV_DisplayDevices_Init( TRUE );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* x11drv_create_desktop
|
||||
* X11DRV_CreateDesktop
|
||||
*
|
||||
* Create the X11 desktop window for the desktop mode.
|
||||
*/
|
||||
NTSTATUS x11drv_create_desktop( void *arg )
|
||||
BOOL X11DRV_CreateDesktop( const WCHAR *name, UINT width, UINT height )
|
||||
{
|
||||
const struct create_desktop_params *params = arg;
|
||||
XSetWindowAttributes win_attr;
|
||||
Window win;
|
||||
Display *display = thread_init_display();
|
||||
|
||||
TRACE( "%s %ux%u\n", debugstr_w(name), width, height );
|
||||
|
||||
/* Create window */
|
||||
win_attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | EnterWindowMask |
|
||||
PointerMotionMask | ButtonPressMask | ButtonReleaseMask | FocusChangeMask;
|
||||
|
@ -376,20 +376,12 @@ NTSTATUS x11drv_create_desktop( void *arg )
|
|||
win_attr.colormap = None;
|
||||
|
||||
win = XCreateWindow( display, DefaultRootWindow(display),
|
||||
0, 0, params->width, params->height, 0, default_visual.depth, InputOutput,
|
||||
0, 0, width, height, 0, default_visual.depth, InputOutput,
|
||||
default_visual.visual, CWEventMask | CWCursor | CWColormap, &win_attr );
|
||||
if (!win) return FALSE;
|
||||
if (!create_desktop_win_data( win )) return FALSE;
|
||||
|
||||
X11DRV_init_desktop( win, params->width, params->height );
|
||||
if (is_desktop_fullscreen())
|
||||
{
|
||||
TRACE("setting desktop to fullscreen\n");
|
||||
XChangeProperty( display, win, x11drv_atom(_NET_WM_STATE), XA_ATOM, 32,
|
||||
PropModeReplace, (unsigned char*)&x11drv_atom(_NET_WM_STATE_FULLSCREEN),
|
||||
1);
|
||||
}
|
||||
XFlush( display );
|
||||
|
||||
X11DRV_init_desktop( win, width, height );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
@ -74,16 +74,6 @@ BOOL WINAPI DllMain( HINSTANCE instance, DWORD reason, void *reserved )
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* wine_create_desktop (winex11.@)
|
||||
*/
|
||||
BOOL CDECL wine_create_desktop( UINT width, UINT height )
|
||||
{
|
||||
struct create_desktop_params params = { .width = width, .height = height };
|
||||
return X11DRV_CALL( create_desktop, ¶ms );
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* AttachEventQueueToTablet (winex11.@)
|
||||
*/
|
||||
|
|
|
@ -409,6 +409,7 @@ static const struct user_driver_funcs x11drv_funcs =
|
|||
.pGetCurrentDisplaySettings = X11DRV_GetCurrentDisplaySettings,
|
||||
.pGetDisplayDepth = X11DRV_GetDisplayDepth,
|
||||
.pUpdateDisplayDevices = X11DRV_UpdateDisplayDevices,
|
||||
.pCreateDesktop = X11DRV_CreateDesktop,
|
||||
.pCreateWindow = X11DRV_CreateWindow,
|
||||
.pDesktopWindowProc = X11DRV_DesktopWindowProc,
|
||||
.pDestroyWindow = X11DRV_DestroyWindow,
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
enum x11drv_funcs
|
||||
{
|
||||
unix_create_desktop,
|
||||
unix_init,
|
||||
unix_systray_clear,
|
||||
unix_systray_dock,
|
||||
|
@ -36,13 +35,6 @@ enum x11drv_funcs
|
|||
|
||||
#define X11DRV_CALL(func, params) WINE_UNIX_CALL( unix_ ## func, params )
|
||||
|
||||
/* x11drv_create_desktop params */
|
||||
struct create_desktop_params
|
||||
{
|
||||
UINT width;
|
||||
UINT height;
|
||||
};
|
||||
|
||||
/* x11drv_init params */
|
||||
struct init_params
|
||||
{
|
||||
|
|
|
@ -1847,13 +1847,13 @@ BOOL X11DRV_DestroyNotify( HWND hwnd, XEvent *event )
|
|||
|
||||
|
||||
/* initialize the desktop window id in the desktop manager process */
|
||||
BOOL create_desktop_win_data( Window win )
|
||||
static BOOL create_desktop_win_data( Window win, HWND hwnd )
|
||||
{
|
||||
struct x11drv_thread_data *thread_data = x11drv_thread_data();
|
||||
Display *display = thread_data->display;
|
||||
struct x11drv_win_data *data;
|
||||
|
||||
if (!(data = alloc_win_data( display, NtUserGetDesktopWindow() ))) return FALSE;
|
||||
if (!(data = alloc_win_data( display, hwnd ))) return FALSE;
|
||||
data->whole_window = win;
|
||||
data->managed = TRUE;
|
||||
NtUserSetProp( data->hwnd, whole_window_prop, (HANDLE)win );
|
||||
|
@ -1883,7 +1883,10 @@ void X11DRV_SetDesktopWindow( HWND hwnd )
|
|||
|
||||
if (!width && !height) /* not initialized yet */
|
||||
{
|
||||
RECT rect = NtUserGetVirtualScreenRect();
|
||||
RECT rect;
|
||||
|
||||
X11DRV_DisplayDevices_Init( TRUE );
|
||||
rect = NtUserGetVirtualScreenRect();
|
||||
|
||||
SERVER_START_REQ( set_window_pos )
|
||||
{
|
||||
|
@ -1898,11 +1901,29 @@ void X11DRV_SetDesktopWindow( HWND hwnd )
|
|||
wine_server_call( req );
|
||||
}
|
||||
SERVER_END_REQ;
|
||||
|
||||
if (!is_virtual_desktop()) return;
|
||||
if (!create_desktop_win_data( root_window, hwnd ))
|
||||
{
|
||||
ERR( "Failed to create virtual desktop window data\n" );
|
||||
root_window = DefaultRootWindow( gdi_display );
|
||||
}
|
||||
else if (is_desktop_fullscreen())
|
||||
{
|
||||
Display *display = x11drv_thread_data()->display;
|
||||
TRACE("setting desktop to fullscreen\n");
|
||||
XChangeProperty( display, root_window, x11drv_atom(_NET_WM_STATE), XA_ATOM, 32, PropModeReplace,
|
||||
(unsigned char*)&x11drv_atom(_NET_WM_STATE_FULLSCREEN), 1 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Window win = (Window)NtUserGetProp( hwnd, whole_window_prop );
|
||||
if (win && win != root_window) X11DRV_init_desktop( win, width, height );
|
||||
if (win && win != root_window)
|
||||
{
|
||||
X11DRV_init_desktop( win, width, height );
|
||||
X11DRV_DisplayDevices_Init( TRUE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,8 +4,5 @@
|
|||
@ cdecl LoadTabletInfo(long) X11DRV_LoadTabletInfo
|
||||
@ cdecl WTInfoW(long long ptr) X11DRV_WTInfoW
|
||||
|
||||
# Desktop
|
||||
@ cdecl wine_create_desktop(long long)
|
||||
|
||||
# System tray
|
||||
@ cdecl wine_notify_icon(long ptr)
|
||||
|
|
|
@ -222,6 +222,7 @@ extern BOOL X11DRV_GetCurrentDisplaySettings( LPCWSTR name, BOOL is_primary, LPD
|
|||
extern INT X11DRV_GetDisplayDepth( LPCWSTR name, BOOL is_primary ) DECLSPEC_HIDDEN;
|
||||
extern BOOL X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manager,
|
||||
BOOL force, void *param ) DECLSPEC_HIDDEN;
|
||||
extern BOOL X11DRV_CreateDesktop( const WCHAR *name, UINT width, UINT height ) DECLSPEC_HIDDEN;
|
||||
extern BOOL X11DRV_CreateWindow( HWND hwnd ) DECLSPEC_HIDDEN;
|
||||
extern LRESULT X11DRV_DesktopWindowProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) DECLSPEC_HIDDEN;
|
||||
extern void X11DRV_DestroyWindow( HWND hwnd ) DECLSPEC_HIDDEN;
|
||||
|
@ -765,7 +766,6 @@ extern void X11DRV_resize_desktop(void) DECLSPEC_HIDDEN;
|
|||
extern BOOL is_virtual_desktop(void) DECLSPEC_HIDDEN;
|
||||
extern BOOL is_desktop_fullscreen(void) DECLSPEC_HIDDEN;
|
||||
extern BOOL is_detached_mode(const DEVMODEW *) DECLSPEC_HIDDEN;
|
||||
extern BOOL create_desktop_win_data( Window win ) DECLSPEC_HIDDEN;
|
||||
void X11DRV_Settings_Init(void) DECLSPEC_HIDDEN;
|
||||
|
||||
void X11DRV_XF86VM_Init(void) DECLSPEC_HIDDEN;
|
||||
|
@ -843,7 +843,6 @@ static inline BOOL is_window_rect_mapped( const RECT *rect )
|
|||
|
||||
/* unixlib interface */
|
||||
|
||||
extern NTSTATUS x11drv_create_desktop( void *arg ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS x11drv_systray_clear( void *arg ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS x11drv_systray_dock( void *arg ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS x11drv_systray_hide( void *arg ) DECLSPEC_HIDDEN;
|
||||
|
|
|
@ -1320,7 +1320,6 @@ NTSTATUS x11drv_client_call( enum client_callback func, UINT arg )
|
|||
|
||||
const unixlib_entry_t __wine_unix_call_funcs[] =
|
||||
{
|
||||
x11drv_create_desktop,
|
||||
x11drv_init,
|
||||
x11drv_systray_clear,
|
||||
x11drv_systray_dock,
|
||||
|
@ -1408,7 +1407,6 @@ static NTSTATUS x11drv_wow64_tablet_info( void *arg )
|
|||
|
||||
const unixlib_entry_t __wine_unix_call_wow64_funcs[] =
|
||||
{
|
||||
x11drv_create_desktop,
|
||||
x11drv_wow64_init,
|
||||
x11drv_wow64_systray_clear,
|
||||
x11drv_wow64_systray_dock,
|
||||
|
|
Loading…
Reference in a new issue