[Redbutton-devel] SF.net SVN: redbutton: [192] redbutton-browser/trunk/MHEGTimer.c
Brought to you by:
skilvington
|
From: <ski...@us...> - 2007-01-23 15:59:33
|
Revision: 192
http://svn.sourceforge.net/redbutton/?rev=192&view=rev
Author: skilvington
Date: 2007-01-23 07:59:30 -0800 (Tue, 23 Jan 2007)
Log Message:
-----------
don't hang if a timer causes us to Quit, Launch, Spawn or Retune
Modified Paths:
--------------
redbutton-browser/trunk/MHEGTimer.c
Modified: redbutton-browser/trunk/MHEGTimer.c
===================================================================
--- redbutton-browser/trunk/MHEGTimer.c 2007-01-23 08:56:53 UTC (rev 191)
+++ redbutton-browser/trunk/MHEGTimer.c 2007-01-23 15:59:30 UTC (rev 192)
@@ -22,6 +22,8 @@
{
TimerCBData *data = (TimerCBData *) usr_data;
EventData event_data;
+ XEvent ev;
+ MHEGDisplay *d = MHEGEngine_getDisplay();
/* generate a TimerFired event */
event_data.choice = EventData_integer;
@@ -33,8 +35,22 @@
safe_free(data);
- /* process the async event we generated */
- MHEGEngine_processMHEGEvents();
+ /*
+ * a timer going off does not get us out of a block in XtAppNextEvent
+ * but we need to process the async event we just generated
+ * we could just call MHEGEngine_processMHEGEvents() here
+ * but if processing that means we want to Launch, Retune etc we will not be able to do it until XtAppNextEvent exits
+ * so generate a fake event here, just to end XtAppNextEvent and get back to the engine main loop
+ */
+ ev.xexpose.type = Expose;
+ ev.xexpose.display = d->dpy;
+ ev.xexpose.window = d->win;
+ ev.xexpose.x = 0;
+ ev.xexpose.y = 0;
+ ev.xexpose.width = 0;
+ ev.xexpose.height = 0;
+ ev.xexpose.count = 0;
+ XSendEvent(d->dpy, d->win, False, 0, &ev);
return;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|