]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/window.cpp
Fix for mousewheel events when it is set to page mode instead of lines.
[wxWidgets.git] / src / motif / window.cpp
index 3d778a7fa6b9b76ea112a5c390722c1d347e0806..ccb85596eb6b29449ed8caea2498b323354e5f19 100644 (file)
@@ -1189,6 +1189,34 @@ bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
     XmMenuPosition (menuWidget, &event);
     XtManageChild (menuWidget);
 
+       XEvent x_event;
+       // The ID of a pop-up menu is 1 when active, and is set to 0 by the
+    // idle-time destroy routine.
+       // Waiting until this ID changes causes this function to block until
+    // the menu has been dismissed and the widgets cleaned up.
+    // In other words, once this routine returns, it is safe to delete
+    // the menu object.
+    // Ian Brown <ian.brown@printsoft.de>
+       while (menu->GetId() == 1)
+    {
+        XtAppNextEvent( (XtAppContext) wxTheApp->GetAppContext(), &x_event);
+
+        wxTheApp->ProcessXEvent((WXEvent*) & x_event);
+
+        if (XtAppPending( (XtAppContext) wxTheApp->GetAppContext() ) == 0)
+        {
+            if (!wxTheApp->ProcessIdle())
+            {
+#if wxUSE_THREADS
+                // leave the main loop to give other threads a chance to
+                // perform their GUI work
+                wxMutexGuiLeave();
+                wxUsleep(20);
+                wxMutexGuiEnter();
+#endif
+            }
+        }
+    }
     return TRUE;
 }