]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/uiactionx11.cpp
avoid duplicate move events
[wxWidgets.git] / src / unix / uiactionx11.cpp
index 84d44f4a681b9778e8bf9b8923628165421e2916..a19a3d2284ae51f5269bc240219fe5cb733f8298 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Kevin Ollivier, Steven Lamerton, Vadim Zeitlin
 // Modified by:
 // Created:     2010-03-06
 // Author:      Kevin Ollivier, Steven Lamerton, Vadim Zeitlin
 // Modified by:
 // Created:     2010-03-06
-// RCS-ID:      $Id$
 // Copyright:   (c) Kevin Ollivier
 //              (c) 2010 Steven Lamerton
 //              (c) 2010 Vadim Zeitlin
 // Copyright:   (c) Kevin Ollivier
 //              (c) 2010 Steven Lamerton
 //              (c) 2010 Vadim Zeitlin
 #if wxUSE_UIACTIONSIMULATOR
 
 #include "wx/uiaction.h"
 #if wxUSE_UIACTIONSIMULATOR
 
 #include "wx/uiaction.h"
+#include "wx/event.h"
+#include "wx/evtloop.h"
 
 
+#include <X11/Xlib.h>
 #include <X11/Xutil.h>
 
 #include "wx/unix/utilsx11.h"
 #include <X11/Xutil.h>
 
 #include "wx/unix/utilsx11.h"
@@ -87,6 +89,15 @@ bool wxUIActionSimulator::MouseMove(long x, long y)
     Window root = display.DefaultRoot();
     XWarpPointer(display, None, root, 0, 0, 0, 0, x, y);
 
     Window root = display.DefaultRoot();
     XWarpPointer(display, None, root, 0, 0, 0, 0, x, y);
 
+    // At least with wxGTK we must always process the pending events before the
+    // mouse position change really takes effect, so just do it from here
+    // instead of forcing the client code using this function to always use
+    // wxYield() which is unnecessary under the other platforms.
+    if ( wxEventLoopBase* const loop = wxEventLoop::GetActive() )
+    {
+        loop->YieldFor(wxEVT_CATEGORY_USER_INPUT);
+    }
+
     return true;
 }
 
     return true;
 }