Update the desktop window size and send WM_DISPLAYCHANGE on resolution
changes.
This commit is contained in:
parent
79692a3fe8
commit
a4626a43f5
|
@ -176,20 +176,12 @@ int X11DRV_resize_desktop( unsigned int width, unsigned int height )
|
||||||
/* do the work */
|
/* do the work */
|
||||||
XSetWMNormalHints( display, w, size_hints );
|
XSetWMNormalHints( display, w, size_hints );
|
||||||
XResizeWindow( display, w, width, height );
|
XResizeWindow( display, w, width, height );
|
||||||
screen_width = width;
|
|
||||||
screen_height = height;
|
|
||||||
#if 0 /* FIXME */
|
|
||||||
SYSMETRICS_Set( SM_CXSCREEN, width );
|
|
||||||
SYSMETRICS_Set( SM_CYSCREEN, height );
|
|
||||||
#else
|
|
||||||
FIXME("Need to update SYSMETRICS after resizing display (now %dx%d)\n",
|
|
||||||
width, height);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* clean up */
|
/* clean up */
|
||||||
XFree( size_hints );
|
XFree( size_hints );
|
||||||
XFlush( display );
|
XFlush( display );
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
|
X11DRV_handle_desktop_resize( width, height );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1551,6 +1551,24 @@ static HWND query_zorder( Display *display, HWND hWndCheck)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* X11DRV_handle_desktop_resize
|
||||||
|
*/
|
||||||
|
void X11DRV_handle_desktop_resize( unsigned int width, unsigned int height )
|
||||||
|
{
|
||||||
|
RECT rect;
|
||||||
|
HWND hwnd = GetDesktopWindow();
|
||||||
|
|
||||||
|
screen_width = width;
|
||||||
|
screen_height = height;
|
||||||
|
TRACE("desktop %p change to (%dx%d)\n", hwnd, width, height);
|
||||||
|
SetRect( &rect, 0, 0, width, height );
|
||||||
|
WIN_SetRectangles( hwnd, &rect, &rect );
|
||||||
|
SendMessageTimeoutW( HWND_BROADCAST, WM_DISPLAYCHANGE, screen_depth,
|
||||||
|
MAKELPARAM( width, height ), SMTO_ABORTIFHUNG, 2000, NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* X11DRV_ConfigureNotify
|
* X11DRV_ConfigureNotify
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -222,6 +222,7 @@ extern int client_side_with_render;
|
||||||
extern int client_side_antialias_with_core;
|
extern int client_side_antialias_with_core;
|
||||||
extern int client_side_antialias_with_render;
|
extern int client_side_antialias_with_render;
|
||||||
extern int using_client_side_fonts;
|
extern int using_client_side_fonts;
|
||||||
|
extern int using_wine_desktop;
|
||||||
extern void X11DRV_XRender_Init(void);
|
extern void X11DRV_XRender_Init(void);
|
||||||
extern void X11DRV_XRender_Finalize(void);
|
extern void X11DRV_XRender_Finalize(void);
|
||||||
extern BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE*, HFONT);
|
extern BOOL X11DRV_XRender_SelectFont(X11DRV_PDEVICE*, HFONT);
|
||||||
|
@ -551,6 +552,7 @@ extern int X11DRV_sync_whole_window_position( Display *display, WND *win, int zo
|
||||||
extern int X11DRV_sync_client_window_position( Display *display, WND *win );
|
extern int X11DRV_sync_client_window_position( Display *display, WND *win );
|
||||||
extern void X11DRV_set_wm_hints( Display *display, WND *win );
|
extern void X11DRV_set_wm_hints( Display *display, WND *win );
|
||||||
|
|
||||||
|
extern void X11DRV_handle_desktop_resize(unsigned int width, unsigned int height);
|
||||||
extern void X11DRV_Settings_AddDepthModes(void);
|
extern void X11DRV_Settings_AddDepthModes(void);
|
||||||
extern void X11DRV_Settings_AddOneMode(unsigned int width, unsigned int height, unsigned int bpp, unsigned int freq);
|
extern void X11DRV_Settings_AddOneMode(unsigned int width, unsigned int height, unsigned int bpp, unsigned int freq);
|
||||||
extern int X11DRV_Settings_CreateDriver(LPDDHALINFO info);
|
extern int X11DRV_Settings_CreateDriver(LPDDHALINFO info);
|
||||||
|
|
|
@ -90,6 +90,7 @@ int client_side_with_core = 1;
|
||||||
int client_side_with_render = 1;
|
int client_side_with_render = 1;
|
||||||
int client_side_antialias_with_core = 1;
|
int client_side_antialias_with_core = 1;
|
||||||
int client_side_antialias_with_render = 1;
|
int client_side_antialias_with_render = 1;
|
||||||
|
int using_wine_desktop = 0;
|
||||||
|
|
||||||
unsigned int X11DRV_server_startticks;
|
unsigned int X11DRV_server_startticks;
|
||||||
|
|
||||||
|
@ -380,7 +381,10 @@ static void process_attach(void)
|
||||||
X11DRV_Settings_Init();
|
X11DRV_Settings_Init();
|
||||||
|
|
||||||
if (desktop_geometry)
|
if (desktop_geometry)
|
||||||
|
{
|
||||||
root_window = X11DRV_create_desktop( desktop_vi, desktop_geometry );
|
root_window = X11DRV_create_desktop( desktop_vi, desktop_geometry );
|
||||||
|
using_wine_desktop = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* initialize GDI */
|
/* initialize GDI */
|
||||||
if(!X11DRV_GDI_Initialize( display ))
|
if(!X11DRV_GDI_Initialize( display ))
|
||||||
|
|
|
@ -56,7 +56,6 @@ static int XRandRErrorHandler(Display *dpy, XErrorEvent *event, void *arg)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Bool in_desktop_mode;
|
|
||||||
|
|
||||||
/* create the mode structures */
|
/* create the mode structures */
|
||||||
static void make_modes(void)
|
static void make_modes(void)
|
||||||
|
@ -154,8 +153,6 @@ static void X11DRV_XRandR_SetCurrentMode(int mode)
|
||||||
dd_modes[mode].dwWidth, dd_modes[mode].dwHeight, rate);
|
dd_modes[mode].dwWidth, dd_modes[mode].dwHeight, rate);
|
||||||
stat = XRRSetScreenConfigAndRate (gdi_display, sc, root,
|
stat = XRRSetScreenConfigAndRate (gdi_display, sc, root,
|
||||||
size, rot, rate, CurrentTime);
|
size, rot, rate, CurrentTime);
|
||||||
FIXME("Need to update SYSMETRICS after resizing display (now %ldx%ld)\n",
|
|
||||||
dd_modes[mode].dwWidth, dd_modes[mode].dwHeight);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,17 +162,15 @@ static void X11DRV_XRandR_SetCurrentMode(int mode)
|
||||||
dd_modes[mode].dwWidth, dd_modes[mode].dwHeight);
|
dd_modes[mode].dwWidth, dd_modes[mode].dwHeight);
|
||||||
stat = XRRSetScreenConfig (gdi_display, sc, root,
|
stat = XRRSetScreenConfig (gdi_display, sc, root,
|
||||||
size, rot, CurrentTime);
|
size, rot, CurrentTime);
|
||||||
FIXME("Need to update SYSMETRICS after resizing display (now %ldx%ld)\n",
|
|
||||||
dd_modes[mode].dwWidth, dd_modes[mode].dwHeight);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (stat != RRSetConfigSuccess)
|
|
||||||
{
|
|
||||||
ERR("Resolution change not successful -- perhaps display has changed?\n");
|
|
||||||
}
|
|
||||||
XRRFreeScreenConfigInfo(sc);
|
XRRFreeScreenConfigInfo(sc);
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
|
if (stat == RRSetConfigSuccess)
|
||||||
|
X11DRV_handle_desktop_resize( dd_modes[mode].dwWidth, dd_modes[mode].dwHeight );
|
||||||
|
else
|
||||||
|
ERR("Resolution change not successful -- perhaps display has changed?\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void X11DRV_XRandR_Init(void)
|
void X11DRV_XRandR_Init(void)
|
||||||
|
@ -183,11 +178,10 @@ void X11DRV_XRandR_Init(void)
|
||||||
Bool ok;
|
Bool ok;
|
||||||
int nmodes = 0;
|
int nmodes = 0;
|
||||||
int i;
|
int i;
|
||||||
in_desktop_mode = (root_window != DefaultRootWindow(gdi_display));
|
|
||||||
|
|
||||||
if (xrandr_major) return; /* already initialized? */
|
if (xrandr_major) return; /* already initialized? */
|
||||||
if (!usexrandr) return; /* disabled in config */
|
if (!usexrandr) return; /* disabled in config */
|
||||||
if (in_desktop_mode) return; /* not compatible with desktop mode */
|
if (using_wine_desktop) return; /* not compatible with desktop mode */
|
||||||
|
|
||||||
/* see if Xrandr is available */
|
/* see if Xrandr is available */
|
||||||
wine_tsx11_lock();
|
wine_tsx11_lock();
|
||||||
|
|
|
@ -92,8 +92,6 @@ static int XVidModeErrorHandler(Display *dpy, XErrorEvent *event, void *arg)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Bool in_desktop_mode;
|
|
||||||
|
|
||||||
int X11DRV_XF86VM_GetCurrentMode(void)
|
int X11DRV_XF86VM_GetCurrentMode(void)
|
||||||
{
|
{
|
||||||
XF86VidModeModeLine line;
|
XF86VidModeModeLine line;
|
||||||
|
@ -131,13 +129,6 @@ void X11DRV_XF86VM_SetCurrentMode(int mode)
|
||||||
TRACE("Resizing X display to %dx%d\n",
|
TRACE("Resizing X display to %dx%d\n",
|
||||||
real_xf86vm_modes[mode]->hdisplay, real_xf86vm_modes[mode]->vdisplay);
|
real_xf86vm_modes[mode]->hdisplay, real_xf86vm_modes[mode]->vdisplay);
|
||||||
XF86VidModeSwitchToMode(gdi_display, DefaultScreen(gdi_display), real_xf86vm_modes[mode]);
|
XF86VidModeSwitchToMode(gdi_display, DefaultScreen(gdi_display), real_xf86vm_modes[mode]);
|
||||||
#if 0 /* FIXME */
|
|
||||||
SYSMETRICS_Set( SM_CXSCREEN, real_xf86vm_modes[mode]->hdisplay );
|
|
||||||
SYSMETRICS_Set( SM_CYSCREEN, real_xf86vm_modes[mode]->vdisplay );
|
|
||||||
#else
|
|
||||||
FIXME("Need to update SYSMETRICS after resizing display (now %dx%d)\n",
|
|
||||||
real_xf86vm_modes[mode]->hdisplay, real_xf86vm_modes[mode]->vdisplay);
|
|
||||||
#endif
|
|
||||||
#if 0 /* it is said that SetViewPort causes problems with some X servers */
|
#if 0 /* it is said that SetViewPort causes problems with some X servers */
|
||||||
XF86VidModeSetViewPort(gdi_display, DefaultScreen(gdi_display), 0, 0);
|
XF86VidModeSetViewPort(gdi_display, DefaultScreen(gdi_display), 0, 0);
|
||||||
#else
|
#else
|
||||||
|
@ -145,6 +136,8 @@ void X11DRV_XF86VM_SetCurrentMode(int mode)
|
||||||
#endif
|
#endif
|
||||||
XSync(gdi_display, False);
|
XSync(gdi_display, False);
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
|
X11DRV_handle_desktop_resize( real_xf86vm_modes[mode]->hdisplay,
|
||||||
|
real_xf86vm_modes[mode]->vdisplay );
|
||||||
}
|
}
|
||||||
|
|
||||||
void X11DRV_XF86VM_Init(void)
|
void X11DRV_XF86VM_Init(void)
|
||||||
|
@ -154,8 +147,6 @@ void X11DRV_XF86VM_Init(void)
|
||||||
DWORD dwBpp = screen_depth;
|
DWORD dwBpp = screen_depth;
|
||||||
if (dwBpp == 24) dwBpp = 32;
|
if (dwBpp == 24) dwBpp = 32;
|
||||||
|
|
||||||
in_desktop_mode = (root_window != DefaultRootWindow(gdi_display));
|
|
||||||
|
|
||||||
if (xf86vm_major) return; /* already initialized? */
|
if (xf86vm_major) return; /* already initialized? */
|
||||||
|
|
||||||
if (!usexvidmode) return;
|
if (!usexvidmode) return;
|
||||||
|
@ -182,13 +173,13 @@ void X11DRV_XF86VM_Init(void)
|
||||||
#endif /* X_XF86VidModeSetGammaRamp */
|
#endif /* X_XF86VidModeSetGammaRamp */
|
||||||
|
|
||||||
/* retrieve modes */
|
/* retrieve modes */
|
||||||
if (!in_desktop_mode) ok = XF86VidModeGetAllModeLines(gdi_display, DefaultScreen(gdi_display), &nmodes, &real_xf86vm_modes);
|
if (!using_wine_desktop) ok = XF86VidModeGetAllModeLines(gdi_display, DefaultScreen(gdi_display), &nmodes, &real_xf86vm_modes);
|
||||||
}
|
}
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
if (!ok) return;
|
if (!ok) return;
|
||||||
|
|
||||||
/* In desktop mode, do not switch resolution... But still use the Gamma ramp stuff */
|
/* In desktop mode, do not switch resolution... But still use the Gamma ramp stuff */
|
||||||
if (in_desktop_mode) return;
|
if (using_wine_desktop) return;
|
||||||
|
|
||||||
TRACE("XVidMode modes: count=%d\n", nmodes);
|
TRACE("XVidMode modes: count=%d\n", nmodes);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue