JMarc, here it is. Verified w. xforms 0.88 thanks john -- "If you can't say anything good about someone, sit right here by me." - Alice Roosevelt Longworth
Index: ChangeLog =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/ChangeLog,v retrieving revision 1.364.2.45 diff -u -p -r1.364.2.45 ChangeLog --- ChangeLog 2000/12/05 17:32:21 1.364.2.45 +++ ChangeLog 2000/12/05 18:59:07 @@ -1,3 +1,8 @@ +2000-12-05 John Levon <[EMAIL PROTECTED]> + + * src/insets/figinset.C: use pre-emptive callback to avoid + gs hangs by xforms discarding ClientMessage events + 2000-12-05 Lars Gullik Bjønnes <[EMAIL PROTECTED]> * src/support/lstrings.C (prefixIs): make it compile with Index: src/insets/figinset.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/insets/figinset.C,v retrieving revision 1.66.2.1 diff -u -p -r1.66.2.1 figinset.C --- src/insets/figinset.C 2000/10/25 10:38:03 1.66.2.1 +++ src/insets/figinset.C 2000/12/05 18:59:09 @@ -167,10 +167,14 @@ void kill_gs(int pid, int sig) } -extern "C" // static -int GhostscriptMsg(FL_OBJECT *, Window, int, int, - XEvent * ev, void *) +extern "C" { +static +int GhostscriptMsg(XEvent * ev, void *) { + // bin all events not of interest + if (ev->type != ClientMessage) + return FL_PREEMPT; + XClientMessageEvent * e = reinterpret_cast<XClientMessageEvent*>(ev); if(lyxerr.debugging()) { @@ -299,8 +303,9 @@ int GhostscriptMsg(FL_OBJECT *, Window, } break; } - return 0; + return FL_PREEMPT; } +} static @@ -383,6 +388,8 @@ void AllocGrays(int num) gs_num_pixels = num; } +// xforms doesn't define this +extern "C" FL_APPEVENT_CB fl_set_preemptive_callback(Window, FL_APPEVENT_CB, void *); static void InitFigures() @@ -403,9 +410,10 @@ void InitFigures() // first get visual gs_color = false; if (lyxrc.use_gui) { - fl_add_canvas_handler(figinset_canvas, ClientMessage, - GhostscriptMsg, - current_view->owner()->getMainForm()); + /* we want to capture every event, in order to work around an + * xforms bug. + */ + fl_set_preemptive_callback(fl_get_canvas_id(figinset_canvas), +GhostscriptMsg, 0); local_gc_copy = createGC(); @@ -444,9 +452,6 @@ void DoneFigures() figures.clear(); lyxerr.debug() << "Unregistering figures..." << endl; - - fl_remove_canvas_handler(figinset_canvas, ClientMessage, - GhostscriptMsg); }