Merge pull request #896 from magcius/event-thread-bozo

Don't sleep in the event thread
This commit is contained in:
shuffle2 2014-09-04 19:33:49 -07:00
commit f09978ddeb
2 changed files with 64 additions and 72 deletions

View File

@ -57,19 +57,15 @@ void cX11Window::XEventThread()
while (win) while (win)
{ {
XEvent event; XEvent event;
for (int num_events = XPending(dpy); num_events > 0; num_events--) XNextEvent(dpy, &event);
switch (event.type)
{ {
XNextEvent(dpy, &event); case ConfigureNotify:
switch (event.type) XResizeWindow(dpy, win, event.xconfigure.width, event.xconfigure.height);
{ GLInterface->SetBackBufferDimensions(event.xconfigure.width, event.xconfigure.height);
case ConfigureNotify: break;
XResizeWindow(dpy, win, event.xconfigure.width, event.xconfigure.height); default:
GLInterface->SetBackBufferDimensions(event.xconfigure.width, event.xconfigure.height); break;
break;
default:
break;
}
} }
Common::SleepCurrentThread(20);
} }
} }

View File

@ -199,72 +199,69 @@ class PlatformX11 : public Platform
{ {
XEvent event; XEvent event;
KeySym key; KeySym key;
for (int num_events = XPending(dpy); num_events > 0; num_events--) XNextEvent(dpy, &event);
switch (event.type)
{ {
XNextEvent(dpy, &event); case KeyPress:
switch (event.type) key = XLookupKeysym((XKeyEvent*)&event, 0);
if (key == XK_Escape)
{ {
case KeyPress: if (Core::GetState() == Core::CORE_RUN)
key = XLookupKeysym((XKeyEvent*)&event, 0);
if (key == XK_Escape)
{ {
if (Core::GetState() == Core::CORE_RUN) if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
{ XUndefineCursor(dpy, win);
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor) Core::SetState(Core::CORE_PAUSE);
XUndefineCursor(dpy, win);
Core::SetState(Core::CORE_PAUSE);
}
else
{
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
XDefineCursor(dpy, win, blankCursor);
Core::SetState(Core::CORE_RUN);
}
} }
else if ((key == XK_Return) && (event.xkey.state & Mod1Mask)) else
{ {
fullscreen = !fullscreen; if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
X11Utils::ToggleFullscreen(dpy, win); XDefineCursor(dpy, win, blankCursor);
#if defined(HAVE_XRANDR) && HAVE_XRANDR Core::SetState(Core::CORE_RUN);
XRRConfig->ToggleDisplayMode(fullscreen);
#endif
} }
else if (key >= XK_F1 && key <= XK_F8)
{
int slot_number = key - XK_F1 + 1;
if (event.xkey.state & ShiftMask)
State::Save(slot_number);
else
State::Load(slot_number);
}
else if (key == XK_F9)
Core::SaveScreenShot();
else if (key == XK_F11)
State::LoadLastSaved();
else if (key == XK_F12)
{
if (event.xkey.state & ShiftMask)
State::UndoLoadState();
else
State::UndoSaveState();
}
break;
case FocusIn:
rendererHasFocus = true;
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor &&
Core::GetState() != Core::CORE_PAUSE)
XDefineCursor(dpy, win, blankCursor);
break;
case FocusOut:
rendererHasFocus = false;
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
XUndefineCursor(dpy, win);
break;
case ClientMessage:
if ((unsigned long) event.xclient.data.l[0] == XInternAtom(dpy, "WM_DELETE_WINDOW", False))
running = false;
break;
} }
else if ((key == XK_Return) && (event.xkey.state & Mod1Mask))
{
fullscreen = !fullscreen;
X11Utils::ToggleFullscreen(dpy, win);
#if defined(HAVE_XRANDR) && HAVE_XRANDR
XRRConfig->ToggleDisplayMode(fullscreen);
#endif
}
else if (key >= XK_F1 && key <= XK_F8)
{
int slot_number = key - XK_F1 + 1;
if (event.xkey.state & ShiftMask)
State::Save(slot_number);
else
State::Load(slot_number);
}
else if (key == XK_F9)
Core::SaveScreenShot();
else if (key == XK_F11)
State::LoadLastSaved();
else if (key == XK_F12)
{
if (event.xkey.state & ShiftMask)
State::UndoLoadState();
else
State::UndoSaveState();
}
break;
case FocusIn:
rendererHasFocus = true;
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor &&
Core::GetState() != Core::CORE_PAUSE)
XDefineCursor(dpy, win, blankCursor);
break;
case FocusOut:
rendererHasFocus = false;
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bHideCursor)
XUndefineCursor(dpy, win);
break;
case ClientMessage:
if ((unsigned long) event.xclient.data.l[0] == XInternAtom(dpy, "WM_DELETE_WINDOW", False))
running = false;
break;
} }
if (!fullscreen) if (!fullscreen)
{ {
@ -277,7 +274,6 @@ class PlatformX11 : public Platform
(unsigned int *)&SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowHeight, (unsigned int *)&SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowHeight,
&borderDummy, &depthDummy); &borderDummy, &depthDummy);
} }
usleep(100000);
} }
} }