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);
 }
 
 

Reply via email to