Attempt to recover from true fullscreen failing.

This commit is contained in:
Themaister 2012-10-05 13:55:24 +02:00
parent e13ccc559a
commit 45a5895abf
3 changed files with 23 additions and 7 deletions

View File

@ -256,17 +256,23 @@ static bool gfx_ctx_set_video_mode(
g_win = XCreateWindow(g_dpy, RootWindow(g_dpy, vi->screen),
0, 0, width ? width : 200, height ? height : 200, 0,
vi->depth, InputOutput, vi->visual,
CWBorderPixel | CWColormap | CWEventMask | (fullscreen ? CWOverrideRedirect : 0), &swa);
CWBorderPixel | CWColormap | CWEventMask | (fullscreen && g_should_reset_mode ? CWOverrideRedirect : 0), &swa);
XSetWindowBackground(g_dpy, g_win, 0);
gfx_ctx_update_window_title(true);
x11_hide_mouse(g_dpy, g_win);
if (fullscreen)
if (fullscreen && g_should_reset_mode)
{
XMapRaised(g_dpy, g_win);
XGrabKeyboard(g_dpy, g_win, True, GrabModeAsync, GrabModeAsync, CurrentTime);
}
else if (fullscreen) // We attempted true fullscreen, but failed. Attempt using windowed fullscreen.
{
XMapRaised(g_dpy, g_win);
RARCH_WARN("[GLX]: True fullscreen failed. Attempt using windowed fullscreen instead.\n");
x11_windowed_fullscreen(g_dpy, g_win);
}
else
XMapWindow(g_dpy, g_win);

View File

@ -123,9 +123,13 @@ bool x11_enter_fullscreen(Display *dpy, unsigned width, unsigned height, XF86Vid
XF86VidModeModeInfo mode;
if (get_video_mode(dpy, width, height, &mode, desktop_mode))
{
XF86VidModeSwitchToMode(dpy, DefaultScreen(dpy), &mode);
XF86VidModeSetViewPort(dpy, DefaultScreen(dpy), 0, 0);
return true;
if (XF86VidModeSwitchToMode(dpy, DefaultScreen(dpy), &mode))
{
XF86VidModeSetViewPort(dpy, DefaultScreen(dpy), 0, 0);
return true;
}
else
return false;
}
else
return false;

View File

@ -285,7 +285,7 @@ static bool gfx_ctx_set_video_mode(
g_win = XCreateWindow(g_dpy, RootWindow(g_dpy, vi->screen),
0, 0, width ? width : 200, height ? height : 200, 0,
vi->depth, InputOutput, vi->visual,
CWBorderPixel | CWColormap | CWEventMask | (fullscreen ? CWOverrideRedirect : 0), &swa);
CWBorderPixel | CWColormap | CWEventMask | (fullscreen && g_should_reset_mode ? CWOverrideRedirect : 0), &swa);
XSetWindowBackground(g_dpy, g_win, 0);
// GLES 2.0. Don't use for any other API.
@ -310,11 +310,17 @@ static bool gfx_ctx_set_video_mode(
gfx_ctx_update_window_title(true);
x11_hide_mouse(g_dpy, g_win);
if (fullscreen)
if (fullscreen && g_should_reset_mode)
{
XMapRaised(g_dpy, g_win);
XGrabKeyboard(g_dpy, g_win, True, GrabModeAsync, GrabModeAsync, CurrentTime);
}
else if (fullscreen) // We attempted true fullscreen, but failed. Attempt using windowed fullscreen.
{
XMapRaised(g_dpy, g_win);
RARCH_WARN("[X/EGL]: True fullscreen failed. Attempt using windowed fullscreen instead.\n");
x11_windowed_fullscreen(g_dpy, g_win);
}
else
XMapWindow(g_dpy, g_win);