Add clearSystemMessages to IrrlichtDevices (implemented only for Win32 and Linux so far).
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3051 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
dae1088202
commit
9b50b09ea3
|
@ -1,5 +1,7 @@
|
|||
Changes in 1.7
|
||||
|
||||
- Add clearSystemMessages to devices (implemented only for Linux and Win32 so far).
|
||||
|
||||
- Fix incorrect cursorpos for resizable windows on Windows Vista (found and patched by buffer)
|
||||
|
||||
- Change the beginScene window parameter from void* to SExposedVideoData&. This will allow to manage contexts for OpenGL at some point.
|
||||
|
|
|
@ -237,6 +237,18 @@ namespace irr
|
|||
virtual bool getGammaRamp(f32 &red, f32 &green, f32 &blue,
|
||||
f32 &brightness, f32 &contrast) =0;
|
||||
|
||||
//! Remove all messages pending in the system message loop
|
||||
/** This function is usually used after messages have been buffered for a longer time, for example
|
||||
when loading a large scene. Clearing the message loop prevents that mouse- or buttonclicks which users
|
||||
have pressed in the meantime will now trigger unexpected actions in the gui. <br>
|
||||
So far the following messages are cleared:<br>
|
||||
Win32: All keyboard and mouse messages<br>
|
||||
Linux: All messages<br>
|
||||
All other devices are not yet supported here.<br>
|
||||
The function is still somewhat experimental, as the kind of messages we clear is based on just a few use-cases.
|
||||
If you think further messages should be cleared, or some messages should not be cleared here, then please tell us. */
|
||||
virtual void clearSystemMessages() = 0;
|
||||
|
||||
//! Get the type of the device.
|
||||
/** This allows the user to check which windowing system is currently being
|
||||
used. */
|
||||
|
|
|
@ -1814,6 +1814,21 @@ void CIrrDeviceLinux::copyToClipboard(const c8* text) const
|
|||
#endif
|
||||
}
|
||||
|
||||
//! Remove all messages pending in the system message loop
|
||||
void CIrrDeviceLinux::clearSystemMessages()
|
||||
{
|
||||
#ifdef _IRR_COMPILE_WITH_X11_
|
||||
if (CreationParams.DriverType != video::EDT_NULL)
|
||||
{
|
||||
XEvent event;
|
||||
while (XPending(display) > 0 )
|
||||
{
|
||||
XNextEvent(display, &event);
|
||||
}
|
||||
}
|
||||
#endif //_IRR_COMPILE_WITH_X11_
|
||||
}
|
||||
|
||||
void CIrrDeviceLinux::initXAtoms()
|
||||
{
|
||||
#ifdef _IRR_COMPILE_WITH_X11_
|
||||
|
|
|
@ -116,6 +116,9 @@ namespace irr
|
|||
//! This sets the clipboard selection and _not_ the primary selection which you have on X on the middle mouse button.
|
||||
virtual void copyToClipboard(const c8* text) const;
|
||||
|
||||
//! Remove all messages pending in the system message loop
|
||||
virtual void clearSystemMessages();
|
||||
|
||||
//! Get the device type
|
||||
virtual E_DEVICE_TYPE getType() const
|
||||
{
|
||||
|
|
|
@ -352,6 +352,12 @@ u32 CIrrDeviceStub::getDoubleClickTime() const
|
|||
return MouseMultiClicks.DoubleClickTime;
|
||||
}
|
||||
|
||||
//! Remove all messages pending in the system message loop
|
||||
void CIrrDeviceStub::clearSystemMessages()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // end namespace irr
|
||||
|
||||
|
|
|
@ -123,6 +123,10 @@ namespace irr
|
|||
//! Get the maximal elapsed time between 2 clicks to generate double- and tripleclicks for the mouse.
|
||||
virtual u32 getDoubleClickTime() const;
|
||||
|
||||
//! Remove all messages pending in the system message loop
|
||||
virtual void clearSystemMessages();
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
void createGUIAndScene();
|
||||
|
|
|
@ -1185,6 +1185,16 @@ bool CIrrDeviceWin32::getGammaRamp( f32 &red, f32 &green, f32 &blue, f32 &bright
|
|||
|
||||
}
|
||||
|
||||
//! Remove all messages pending in the system message loop
|
||||
void CIrrDeviceWin32::clearSystemMessages()
|
||||
{
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE))
|
||||
{}
|
||||
while (PeekMessage(&msg, NULL, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE))
|
||||
{}
|
||||
}
|
||||
|
||||
// shows last error in a messagebox to help internal debugging.
|
||||
void CIrrDeviceWin32::ReportLastWinApiError()
|
||||
{
|
||||
|
|
|
@ -87,6 +87,9 @@ namespace irr
|
|||
//! Get the current Gamma Value for the Display
|
||||
virtual bool getGammaRamp( f32 &red, f32 &green, f32 &blue, f32 &brightness, f32 &contrast );
|
||||
|
||||
//! Remove all messages pending in the system message loop
|
||||
virtual void clearSystemMessages();
|
||||
|
||||
//! Get the device type
|
||||
virtual E_DEVICE_TYPE getType() const
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue