nowx build fix, and fix a bug when render to main is changed from the gfx config dialog while the emulator is running.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5200 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Glenn Rice
2010-03-16 01:16:55 +00:00
parent 2015d252f0
commit 172cc24f32
2 changed files with 19 additions and 24 deletions

View File

@ -122,7 +122,7 @@ THREAD_RETURN XEventThread(void *pArg);
void X11_EWMH_Fullscreen(int action) void X11_EWMH_Fullscreen(int action)
{ {
assert(action == _NET_WM_STATE_REMOVE || action == _NET_WM_STATE_ADD _assert_(action == _NET_WM_STATE_REMOVE || action == _NET_WM_STATE_ADD
|| action == _NET_WM_STATE_TOGGLE); || action == _NET_WM_STATE_TOGGLE);
// Init X event structure for _NET_WM_STATE_FULLSCREEN client message // Init X event structure for _NET_WM_STATE_FULLSCREEN client message
@ -149,16 +149,12 @@ void CreateXWindow (void)
wxMutexGuiEnter(); wxMutexGuiEnter();
#endif #endif
#if defined(HAVE_XRANDR) && HAVE_XRANDR #if defined(HAVE_XRANDR) && HAVE_XRANDR
if (GLWin.fs if (GLWin.fs && !GLWin.renderToMain)
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
&& !g_Config.RenderToMainframe
#endif
)
XRRSetScreenConfig(GLWin.dpy, GLWin.screenConfig, RootWindow(GLWin.dpy, GLWin.screen), XRRSetScreenConfig(GLWin.dpy, GLWin.screenConfig, RootWindow(GLWin.dpy, GLWin.screen),
GLWin.fullSize, GLWin.screenRotation, CurrentTime); GLWin.fullSize, GLWin.screenRotation, CurrentTime);
#endif #endif
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK) #if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
if (g_Config.RenderToMainframe) if (GLWin.renderToMain)
{ {
GLWin.panel->GetSize((int *)&GLWin.width, (int *)&GLWin.height); GLWin.panel->GetSize((int *)&GLWin.width, (int *)&GLWin.height);
GLWin.panel->GetPosition(&GLWin.x, &GLWin.y); GLWin.panel->GetPosition(&GLWin.x, &GLWin.y);
@ -212,7 +208,7 @@ void DestroyXWindow(void)
XRRSetScreenConfig(GLWin.dpy, GLWin.screenConfig, RootWindow(GLWin.dpy, GLWin.screen), XRRSetScreenConfig(GLWin.dpy, GLWin.screenConfig, RootWindow(GLWin.dpy, GLWin.screen),
GLWin.deskSize, GLWin.screenRotation, CurrentTime); GLWin.deskSize, GLWin.screenRotation, CurrentTime);
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK) #if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
if (!g_Config.RenderToMainframe) if (!GLWin.renderToMain)
#endif #endif
X11_EWMH_Fullscreen(_NET_WM_STATE_REMOVE); X11_EWMH_Fullscreen(_NET_WM_STATE_REMOVE);
#endif #endif
@ -234,7 +230,7 @@ void ToggleFullscreenMode (void)
GLWin.deskSize, GLWin.screenRotation, CurrentTime); GLWin.deskSize, GLWin.screenRotation, CurrentTime);
#endif #endif
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK) #if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
if (!g_Config.RenderToMainframe) if (!GLWin.renderToMain)
#endif #endif
{ {
X11_EWMH_Fullscreen(_NET_WM_STATE_TOGGLE); X11_EWMH_Fullscreen(_NET_WM_STATE_TOGGLE);
@ -318,19 +314,11 @@ THREAD_RETURN XEventThread(void *pArg)
} }
break; break;
case FocusIn: case FocusIn:
if (g_Config.bHideCursor && !bPaused if (g_Config.bHideCursor && !bPaused && !GLWin.renderToMain)
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
&& !g_Config.RenderToMainframe
#endif
)
XDefineCursor(GLWin.dpy, GLWin.win, GLWin.blankCursor); XDefineCursor(GLWin.dpy, GLWin.win, GLWin.blankCursor);
break; break;
case FocusOut: case FocusOut:
if (g_Config.bHideCursor && !bPaused if (g_Config.bHideCursor && !bPaused && !GLWin.renderToMain)
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
&& !g_Config.RenderToMainframe
#endif
)
XUndefineCursor(GLWin.dpy, GLWin.win); XUndefineCursor(GLWin.dpy, GLWin.win);
break; break;
case ConfigureNotify: case ConfigureNotify:
@ -365,21 +353,21 @@ THREAD_RETURN XEventThread(void *pArg)
XDefineCursor(GLWin.dpy, GLWin.win, GLWin.blankCursor); XDefineCursor(GLWin.dpy, GLWin.win, GLWin.blankCursor);
} }
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK) #if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
if (g_Config.RenderToMainframe && if (GLWin.renderToMain &&
(ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "RESIZE", False)) (ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "RESIZE", False))
{ {
GLWin.panel->GetSize((int *)&GLWin.width, (int *)&GLWin.height); GLWin.panel->GetSize((int *)&GLWin.width, (int *)&GLWin.height);
GLWin.panel->GetPosition(&GLWin.x, &GLWin.y); GLWin.panel->GetPosition(&GLWin.x, &GLWin.y);
XMoveResizeWindow(GLWin.dpy, GLWin.win, GLWin.x, GLWin.y, GLWin.width, GLWin.height); XMoveResizeWindow(GLWin.dpy, GLWin.win, GLWin.x, GLWin.y, GLWin.width, GLWin.height);
} }
if (g_Config.RenderToMainframe && if (GLWin.renderToMain &&
(ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "FOCUSIN", False)) (ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "FOCUSIN", False))
{ {
GLWin.panel->SetFocus(); GLWin.panel->SetFocus();
if (g_Config.bHideCursor) if (g_Config.bHideCursor)
XDefineCursor(GLWin.dpy, GLWin.win, GLWin.blankCursor); XDefineCursor(GLWin.dpy, GLWin.win, GLWin.blankCursor);
} }
if (g_Config.RenderToMainframe && g_Config.bHideCursor && if (GLWin.renderToMain && g_Config.bHideCursor &&
(ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "FOCUSOUT", False)) (ulong) event.xclient.data.l[0] == XInternAtom(GLWin.dpy, "FOCUSOUT", False))
XUndefineCursor(GLWin.dpy, GLWin.win); XUndefineCursor(GLWin.dpy, GLWin.win);
#endif #endif
@ -575,6 +563,12 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight
// Fullscreen option. // Fullscreen option.
GLWin.fs = g_Config.bFullscreen; //Set to setting in Options GLWin.fs = g_Config.bFullscreen; //Set to setting in Options
// Render to main option.
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
GLWin.renderToMain = g_Config.RenderToMainframe;
#else
GLWin.renderToMain = False;
#endif
/* get an appropriate visual */ /* get an appropriate visual */
GLWin.vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl); GLWin.vi = glXChooseVisual(GLWin.dpy, GLWin.screen, attrListDbl);
@ -658,7 +652,7 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight
#endif #endif
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK) #if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
if (g_Config.RenderToMainframe) if (GLWin.renderToMain)
g_VideoInitialize.pKeyPress(0, False, False); g_VideoInitialize.pKeyPress(0, False, False);
#endif #endif
@ -707,7 +701,7 @@ bool OpenGL_MakeCurrent()
if (GLWin.fs) if (GLWin.fs)
{ {
#if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK) #if defined(HAVE_GTK2) && HAVE_GTK2 && defined(wxGTK)
if (g_Config.RenderToMainframe) if (GLWin.renderToMain)
{ {
GLWin.fs = False; GLWin.fs = False;
g_VideoInitialize.pKeyPress(0x1d, False, False); g_VideoInitialize.pKeyPress(0x1d, False, False);

View File

@ -108,6 +108,7 @@ typedef struct {
int fullWidth, fullHeight; int fullWidth, fullHeight;
int winWidth, winHeight; int winWidth, winHeight;
Common::Thread *xEventThread; Common::Thread *xEventThread;
Bool renderToMain;
#if defined(HAVE_XRANDR) && HAVE_XRANDR #if defined(HAVE_XRANDR) && HAVE_XRANDR
XRRScreenConfiguration *screenConfig; XRRScreenConfiguration *screenConfig;
Rotation screenRotation; Rotation screenRotation;