Author: toshok
Date: 2008-01-23 21:57:03 -0500 (Wed, 23 Jan 2008)
New Revision: 93760

Modified:
   trunk/moon/src/ChangeLog
   trunk/moon/src/runtime.cpp
Log:
2008-01-23  Chris Toshok  <[EMAIL PROTECTED]>

        * runtime.cpp (Surface::HandleMouseEvent): don't crash when we
        re-enter HandleMouseEvent, which can happen when that stupid JS
        timeout dialog pops up.



Modified: trunk/moon/src/ChangeLog
===================================================================
--- trunk/moon/src/ChangeLog    2008-01-24 01:58:43 UTC (rev 93759)
+++ trunk/moon/src/ChangeLog    2008-01-24 02:57:03 UTC (rev 93760)
@@ -1,5 +1,11 @@
 2008-01-23  Chris Toshok  <[EMAIL PROTECTED]>
 
+       * runtime.cpp (Surface::HandleMouseEvent): don't crash when we
+       re-enter HandleMouseEvent, which can happen when that stupid JS
+       timeout dialog pops up.
+
+2008-01-23  Chris Toshok  <[EMAIL PROTECTED]>
+
        * runtime.cpp (Surface::SetMouseCapture): this fails not only if
        there's an existing capture, but also if there's a pending
        capture (so if both a parent and child capture on the same event,

Modified: trunk/moon/src/runtime.cpp
===================================================================
--- trunk/moon/src/runtime.cpp  2008-01-24 01:58:43 UTC (rev 93759)
+++ trunk/moon/src/runtime.cpp  2008-01-24 02:57:03 UTC (rev 93760)
@@ -1111,6 +1111,19 @@
 void
 Surface::HandleMouseEvent (MoonlightEventEmitFunc emitter, bool emit_leave, 
bool emit_enter, bool force_emit, GdkEvent *event)
 {
+       // we can end up here if mozilla pops up the JS timeout
+       // dialog.  The problem is that JS might have registered a
+       // handler for the event we're going to emit, so when we end
+       // up tripping the timeout while in JS, mozilla pops up the
+       // dialog, which causes a crossing-notify event to be emitted.
+       // This causes HandleMouseEvent to be called, and the original
+       // input_list is deleted.  the crossing-notify event is
+       // handled, then we return to the event that tripped the
+       // timeout, we crash.
+       if (emittingMouseEvent) {
+               return;
+       }
+
        if (event == NULL)
                return;
 

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to