Added function for processing only pending events.

This commit is contained in:
Camilla Berglund 2012-04-10 01:15:50 +02:00
parent 0e9e37bfc4
commit e0c4d81e46
3 changed files with 24 additions and 5 deletions

View File

@ -135,11 +135,10 @@ size_t _glfwPlatformGetClipboardString(_GLFWwindow* window, char* data, size_t s
_glfwLibrary.X11.selection.atom,
_glfwLibrary.X11.selection.request,
None, window->X11.handle, CurrentTime);
XFlush(_glfwLibrary.X11.display);
// Process pending events until we get a SelectionNotify.
while (!_glfwLibrary.X11.selection.converted)
_glfwPlatformWaitEvents();
// Process the resulting SelectionNotify event
XSync(_glfwLibrary.X11.display, False);
_glfwProcessPendingEvents();
// Successful?
if (_glfwLibrary.X11.selection.converted == 1)

View File

@ -283,4 +283,7 @@ long _glfwKeySym2Unicode(KeySym keysym);
// Clipboard handling
Atom _glfwSelectionRequest(XSelectionRequestEvent *request);
// Event processing
void _glfwProcessPendingEvents(void);
#endif // _platform_h_

View File

@ -1299,6 +1299,23 @@ static void processSingleEvent(void)
}
//////////////////////////////////////////////////////////////////////////
////// GLFW internal API //////
//////////////////////////////////////////////////////////////////////////
//========================================================================
// Processes all pending events
//========================================================================
void _glfwProcessPendingEvents(void)
{
int i, count = XPending(_glfwLibrary.X11.display);
for (i = 0; i < count; i++)
processSingleEvent();
}
//////////////////////////////////////////////////////////////////////////
////// GLFW platform API //////
//////////////////////////////////////////////////////////////////////////
@ -1369,7 +1386,7 @@ int _glfwPlatformOpenWindow(_GLFWwindow* window,
}
// Process the window map event and any other that may have arrived
_glfwPlatformPollEvents();
_glfwProcessPendingEvents();
// Retrieve and set initial cursor position
{