Hi,<br><br>Here on Windows, the while loop is quite dangerous (there are reasons why I almost always avoid them like the plague!), as if the mouse moves out of the window and moves back in, all events are swallowed and Blender freezes. Perhaps this will need a more elegant solution...<br>
<br>Regards,<br>Joshua<br><br><div class="gmail_quote">On Mon, Dec 22, 2008 at 8:58 AM, Ton Roosendaal <span dir="ltr">&lt;<a href="mailto:ton@blender.org">ton@blender.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Revision: 17998<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&amp;root=bf-blender&amp;revision=17998" target="_blank">http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&amp;root=bf-blender&amp;revision=17998</a><br>

Author: &nbsp; ton<br>
Date: &nbsp; &nbsp; 2008-12-21 20:58:25 +0100 (Sun, 21 Dec 2008)<br>
<br>
Log Message:<br>
-----------<br>
2.5<br>
<br>
Animated screen! (unfinished, now only draws, no animation code yet).<br>
Fun though to see it all work. :)<br>
<br>
NOTE: Mac ghost has timer bug, the GHOST_ProcessEvents() doesnt wake<br>
up for timers.<br>
<br>
NOTE2: Added while loop in wm_window_process_events() to force Ghost<br>
giving all events to Blender. Timers otherwise don&#39;t accumulate...<br>
might be needed to fix in ghost too.<br>
<br>
I tend to think to code own timer, this ghost stuff is totally different<br>
per platform.<br>
<br>
Modified Paths:<br>
--------------<br>
 &nbsp; &nbsp;branches/blender2.5/blender/source/blender/editors/include/ED_screen.h<br>
 &nbsp; &nbsp;branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c<br>
 &nbsp; &nbsp;branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c<br>
 &nbsp; &nbsp;branches/blender2.5/blender/source/blender/editors/space_time/time_header.c<br>
 &nbsp; &nbsp;branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h<br>
 &nbsp; &nbsp;branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c<br>
 &nbsp; &nbsp;branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c<br>
<br>
Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h &nbsp; &nbsp; &nbsp;2008-12-21 19:40:47 UTC (rev 17997)<br>
+++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h &nbsp; &nbsp; &nbsp;2008-12-21 19:58:25 UTC (rev 17998)<br>
@@ -74,6 +74,7 @@<br>
&nbsp;bScreen *ED_screen_duplicate(struct wmWindow *win, struct bScreen *sc);<br>
&nbsp;void &nbsp; ED_screen_set_subwinactive(struct wmWindow *win, struct wmEvent *event);<br>
&nbsp;void &nbsp; ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen);<br>
+void &nbsp; ED_animation_timer(struct wmWindow *win, int enable);<br>
<br>
&nbsp;void &nbsp; ED_operatortypes_screen(void);<br>
&nbsp;void &nbsp; ED_keymap_screen(struct wmWindowManager *wm);<br>
<br>
Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c &nbsp; &nbsp; 2008-12-21 19:40:47 UTC (rev 17997)<br>
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c &nbsp; &nbsp; 2008-12-21 19:58:25 UTC (rev 17998)<br>
@@ -29,6 +29,7 @@<br>
&nbsp;#include &quot;MEM_guardedalloc.h&quot;<br>
<br>
&nbsp;#include &quot;DNA_vec_types.h&quot;<br>
+#include &quot;DNA_scene_types.h&quot;<br>
<br>
&nbsp;#include &quot;BLI_blenlib.h&quot;<br>
<br>
@@ -1263,3 +1264,14 @@<br>
<br>
&nbsp;}<br>
<br>
+void ED_animation_timer(wmWindow *win, int enable)<br>
+{<br>
+<br>
+ &nbsp; &nbsp; &nbsp; if(win-&gt;animtimer)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WM_event_remove_window_timer(win, win-&gt;animtimer);<br>
+ &nbsp; &nbsp; &nbsp; win-&gt;animtimer= NULL;<br>
+<br>
+ &nbsp; &nbsp; &nbsp; if(enable)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; win-&gt;animtimer= WM_event_add_window_timer(win, (int)(1000/FPS), (int)(1000/FPS));<br>
+}<br>
+<br>
<br>
Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c &nbsp; &nbsp; &nbsp;2008-12-21 19:40:47 UTC (rev 17997)<br>
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c &nbsp; &nbsp; &nbsp;2008-12-21 19:58:25 UTC (rev 17998)<br>
@@ -1310,7 +1310,6 @@<br>
<br>
&nbsp;void ED_SCR_OT_region_flip(wmOperatorType *ot)<br>
&nbsp;{<br>
-<br>
 &nbsp; &nbsp; &nbsp; &nbsp;/* identifiers */<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ot-&gt;name= &quot;Flip Region&quot;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ot-&gt;idname= &quot;ED_SCR_OT_region_flip&quot;;<br>
@@ -1322,7 +1321,39 @@<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ot-&gt;poll= ED_operator_areaactive;<br>
&nbsp;}<br>
<br>
+/* ****************** anim player, typically with timer ***************** */<br>
<br>
+static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event)<br>
+{<br>
+ &nbsp; &nbsp; &nbsp; wmWindow *win= CTX_wm_window(C);<br>
+<br>
+ &nbsp; &nbsp; &nbsp; if(win-&gt;animtimer==event-&gt;customdata) {<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Scene *scene= CTX_data_scene(C);<br>
+<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene-&gt;r.cfra++;<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(scene-&gt;r.cfra &gt; scene-&gt;r.efra)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scene-&gt;r.cfra= scene-&gt;r.sfra;<br>
+<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);<br>
+<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return OPERATOR_FINISHED;<br>
+ &nbsp; &nbsp; &nbsp; }<br>
+ &nbsp; &nbsp; &nbsp; return OPERATOR_PASS_THROUGH;<br>
+}<br>
+<br>
+void ED_SCR_OT_animation_play(wmOperatorType *ot)<br>
+{<br>
+ &nbsp; &nbsp; &nbsp; /* identifiers */<br>
+ &nbsp; &nbsp; &nbsp; ot-&gt;name= &quot;Animation player&quot;;<br>
+ &nbsp; &nbsp; &nbsp; ot-&gt;idname= &quot;ED_SCR_OT_animation_play&quot;;<br>
+<br>
+ &nbsp; &nbsp; &nbsp; /* api callbacks */<br>
+ &nbsp; &nbsp; &nbsp; ot-&gt;invoke= screen_animation_play;<br>
+<br>
+ &nbsp; &nbsp; &nbsp; ot-&gt;poll= ED_operator_screenactive;<br>
+<br>
+}<br>
+<br>
&nbsp;/* ************** border select operator (template) ***************************** */<br>
<br>
&nbsp;/* operator state vars used: (added by default WM callbacks)<br>
@@ -1402,7 +1433,8 @@<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;/*frame changes*/<br>
 &nbsp; &nbsp; &nbsp; &nbsp;WM_operatortype_append(ED_SCR_OT_frame_offset);<br>
-<br>
+ &nbsp; &nbsp; &nbsp; WM_operatortype_append(ED_SCR_OT_animation_play);<br>
+<br>
 &nbsp; &nbsp; &nbsp; &nbsp;/* tools shared by more space types */<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ED_marker_operatortypes();<br>
<br>
@@ -1430,6 +1462,7 @@<br>
 &nbsp; &nbsp; &nbsp; &nbsp;RNA_enum_set(WM_keymap_add_item(keymap, &quot;ED_SCR_OT_region_split&quot;, SKEY, KM_PRESS, KM_SHIFT, 0)-&gt;ptr, &quot;dir&quot;, &#39;v&#39;);<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;/*frame offsets*/<br>
+ &nbsp; &nbsp; &nbsp; WM_keymap_add_item(keymap, &quot;ED_SCR_OT_animation_play&quot;, TIMER, KM_ANY, 0, 0);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;RNA_int_set(WM_keymap_add_item(keymap, &quot;ED_SCR_OT_frame_offset&quot;, UPARROWKEY, KM_PRESS, 0, 0)-&gt;ptr, &quot;delta&quot;, 10);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;RNA_int_set(WM_keymap_add_item(keymap, &quot;ED_SCR_OT_frame_offset&quot;, DOWNARROWKEY, KM_PRESS, 0, 0)-&gt;ptr, &quot;delta&quot;, -10);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;RNA_int_set(WM_keymap_add_item(keymap, &quot;ED_SCR_OT_frame_offset&quot;, LEFTARROWKEY, KM_PRESS, 0, 0)-&gt;ptr, &quot;delta&quot;, -1);<br>
<br>
Modified: branches/blender2.5/blender/source/blender/editors/space_time/time_header.c<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/editors/space_time/time_header.c 2008-12-21 19:40:47 UTC (rev 17997)<br>
+++ branches/blender2.5/blender/source/blender/editors/space_time/time_header.c 2008-12-21 19:58:25 UTC (rev 17998)<br>
@@ -337,24 +337,7 @@<br>
 &nbsp; &nbsp; &nbsp; &nbsp;return block;<br>
&nbsp;}<br>
<br>
-static void start_animated_screen(SpaceTime *stime)<br>
-{<br>
- &nbsp; &nbsp; &nbsp; // XXX &nbsp;add_screenhandler(G.curscreen, SCREEN_HANDLER_ANIM, stime-&gt;redraws);<br>
-<br>
- &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp;if(stime-&gt;redraws &amp; TIME_WITH_SEQ_AUDIO)<br>
- &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;audiostream_start( CFRA );<br>
-<br>
- &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp;BKE_ptcache_set_continue_physics((stime-&gt;redraws &amp; TIME_CONTINUE_PHYSICS));<br>
-}<br>
<br>
-static void end_animated_screen(SpaceTime *stime)<br>
-{<br>
- &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp;rem_screenhandler(G.curscreen, SCREEN_HANDLER_ANIM);<br>
-<br>
- &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp;audiostream_stop();<br>
- &nbsp; &nbsp; &nbsp; // &nbsp; &nbsp; &nbsp;BKE_ptcache_set_continue_physics(0);<br>
-}<br>
-<br>
&nbsp;#define B_REDRAWALL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;750<br>
&nbsp;#define B_TL_REW &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 751<br>
&nbsp;#define B_TL_PLAY &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;752<br>
@@ -374,7 +357,7 @@<br>
<br>
&nbsp;void do_time_buttons(bContext *C, void *arg, int event)<br>
&nbsp;{<br>
- &nbsp; &nbsp; &nbsp; SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);<br>
+// &nbsp; &nbsp; SpaceTime *stime= (SpaceTime*)CTX_wm_space_data(C);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Scene *scene= CTX_data_scene(C);<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;switch(event) {<br>
@@ -386,10 +369,10 @@<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//update_for_newframe();<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case B_TL_PLAY:<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start_animated_screen(stime);<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ED_animation_timer(CTX_wm_window(C), 1);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case B_TL_STOP:<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end_animated_screen(stime);<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ED_animation_timer(CTX_wm_window(C), 0);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;case B_TL_FF:<br>
@@ -524,10 +507,10 @@<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xco, yco, XIC, YIC, 0, 0, 0, 0, 0, &quot;Skip to previous keyframe (Ctrl PageDown)&quot;);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;xco+= XIC+4;<br>
<br>
-// &nbsp; &nbsp; if(has_screenhandler(G.curscreen, SCREEN_HANDLER_ANIM))<br>
-// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uiDefIconBut(block, BUT, B_TL_STOP, ICON_PAUSE,<br>
-// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xco, 0, XIC, YIC, 0, 0, 0, 0, 0, &quot;Stop Playing Timeline&quot;);<br>
-// &nbsp; &nbsp; else<br>
+ &nbsp; &nbsp; &nbsp; if(CTX_wm_window(C)-&gt;animtimer)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uiDefIconBut(block, BUT, B_TL_STOP, ICON_PAUSE,<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xco, yco, XIC, YIC, 0, 0, 0, 0, 0, &quot;Stop Playing Timeline&quot;);<br>
+ &nbsp; &nbsp; &nbsp; else<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;uiDefIconBut(block, BUT, B_TL_PLAY, ICON_PLAY,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xco, yco, XIC, YIC, 0, 0, 0, 0, 0, &quot;Play Timeline &quot;);<br>
<br>
<br>
Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h &nbsp; &nbsp; &nbsp; 2008-12-21 19:40:47 UTC (rev 17997)<br>
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h &nbsp; &nbsp; &nbsp; 2008-12-21 19:58:25 UTC (rev 17998)<br>
@@ -47,6 +47,7 @@<br>
&nbsp;struct bScreen;<br>
&nbsp;struct uiBlock;<br>
&nbsp;struct wmSubWindow;<br>
+struct wmTimerHandle;<br>
&nbsp;struct StructRNA;<br>
&nbsp;struct PointerRNA;<br>
<br>
@@ -93,6 +94,8 @@<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;struct wmSubWindow *curswin; &nbsp; &nbsp;/* internal for wm_subwindow.c only */<br>
<br>
+ &nbsp; &nbsp; &nbsp; struct wmTimerHandle *animtimer;<br>
+<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ListBase queue; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* all events (ghost level events were handled) */<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ListBase handlers; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/* window+screen handlers, overriding all queues */<br>
<br>
<br>
Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c &nbsp; 2008-12-21 19:40:47 UTC (rev 17997)<br>
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c &nbsp; 2008-12-21 19:58:25 UTC (rev 17998)<br>
@@ -675,7 +675,7 @@<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CTX_wm_area_set(C, area_event_inside(C, event));<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CTX_wm_region_set(C, region_event_inside(C, event));<br>
<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* MVC demands to not draw in event handlers... for now we leave it */<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* MVC demands to not draw in event handlers... but we need to leave it for ogl selecting etc */<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;wm_window_make_drawable(C, win);<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;action= wm_handlers_do(C, event, &amp;win-&gt;handlers);<br>
<br>
Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c<br>
===================================================================<br>
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c 2008-12-21 19:40:47 UTC (rev 17997)<br>
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c 2008-12-21 19:58:25 UTC (rev 17998)<br>
@@ -498,8 +498,21 @@<br>
<br>
&nbsp;void wm_window_process_events(int wait_for_event)<br>
&nbsp;{<br>
- &nbsp; &nbsp; &nbsp; GHOST_ProcessEvents(g_system, wait_for_event);<br>
- &nbsp; &nbsp; &nbsp; GHOST_DispatchEvents(g_system);<br>
+ &nbsp; &nbsp; &nbsp; int handled= 0;<br>
+<br>
+ &nbsp; &nbsp; &nbsp; /* ghost only processes 1 (timer?) event a time... we want to accumulate all */<br>
+ &nbsp; &nbsp; &nbsp; while(1) {<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(GHOST_ProcessEvents(g_system, 0)) {<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GHOST_DispatchEvents(g_system);<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handled= 1;<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br>
+ &nbsp; &nbsp; &nbsp; }<br>
+ &nbsp; &nbsp; &nbsp; if(handled==0 &amp;&amp; wait_for_event) {<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GHOST_ProcessEvents(g_system, wait_for_event);<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GHOST_DispatchEvents(g_system);<br>
+ &nbsp; &nbsp; &nbsp; }<br>
&nbsp;}<br>
<br>
&nbsp;/* **************** init ********************** */<br>
<br>
<br>
_______________________________________________<br>
Bf-blender-cvs mailing list<br>
<a href="mailto:Bf-blender-cvs@blender.org">Bf-blender-cvs@blender.org</a><br>
<a href="http://lists.blender.org/mailman/listinfo/bf-blender-cvs" target="_blank">http://lists.blender.org/mailman/listinfo/bf-blender-cvs</a><br>
</blockquote></div><br>