From: Olivier Scalbert on 15 Sep 2009 13:18 Hi all, I have found some OpenGL code there: http://adaopengl.sourceforge.net/downloads.php I manage to get it compiled on my linux box but when I run it, I have: raised SYSTEM.ASSERTIONS.ASSERT_FAILURE : Handlers for "expose_event" on a GtkGLArea should be functions So it looks I have problem with callbacks somewhere around: Destroy_CB.Connect(MyGL, "destroy", Destroy_CB.To_Marshaller( Quit'Access)); Expose_CB.Connect(MyGL, "expose_event", Expose_CB.To_Marshaller( Expose'Access)); Resize_CB.Connect(MyGL, "configure_event", Resize_CB.To_Marshaller( Reshape'Access)); All the files are located there: http://scalbert.dyndns.org/ada/adagtkgl/ If somebody can help me, I would appreciate ! Thanks, Olivier
From: Ludovic Brenta on 15 Sep 2009 14:19 On Sep 15, 7:18 pm, Olivier Scalbert <olivier.scalb...(a)algosyn.com> wrote: > Hi all, > > I have found some OpenGL code there:http://adaopengl.sourceforge.net/downloads.php > > I manage to get it compiled on my linux box but when I run it, I have: > > raised SYSTEM.ASSERTIONS.ASSERT_FAILURE : Handlers for "expose_event" on > a GtkGLArea should be functions > > So it looks I have problem with callbacks somewhere around: > Destroy_CB.Connect(MyGL, "destroy", Destroy_CB.To_Marshaller( Quit'Access)); > > Expose_CB.Connect(MyGL, "expose_event", Expose_CB.To_Marshaller( > Expose'Access)); > > Resize_CB.Connect(MyGL, "configure_event", Resize_CB.To_Marshaller( > Reshape'Access)); > > All the files are located there:http://scalbert.dyndns.org/ada/adagtkgl/ > > If somebody can help me, I would appreciate ! > > Thanks, > > Olivier In your example, Expose'Access presumably designates a procedure. This is wrong. Expose should be a function returning Boolean. The return value means: False: pass the signal to any other signal handlers attached to it True: abort processing of the signal. The same holds for delete_event and a few other signals as documented in the GTK+ reference at http://www.gtk.org. The GtkAda signal handler infrastructure makes it impossible to detect the type mismatch at compile time, so it has run-time checks instead. This is the source of the error message. HTH -- Ludovic Brenta.
From: Olivier Scalbert on 16 Sep 2009 02:43 Ludovic Brenta wrote: > In your example, Expose'Access presumably designates a procedure. > This is wrong. Expose should be a function returning Boolean. The > return value means: > > False: pass the signal to any other signal handlers attached to it > True: abort processing of the signal. > > The same holds for delete_event and a few other signals as documented > in the GTK+ reference at http://www.gtk.org. > > The GtkAda signal handler infrastructure makes it impossible to detect > the type mismatch at compile time, so it has run-time checks instead. > This is the source of the error message. > > HTH > > -- > Ludovic Brenta. Thanks for your help Ludovic! I do not know how to solve it. I have tried to change the Expose procedure into a function returning a Boolean, but then it does not compile anymore: gtkgl.adb:89:66: no candidate interpretations match the actuals: gtkgl.adb:89:87: expected type "Handler" defined at gtk-marshallers.ads:355, instance at gtk-handlers.ads:915, instance at line 68 gtkgl.adb:89:87: found type access to function "Expose" defined at line 89 gtkgl.adb:89:87: ==> in call to "To_Marshaller" at gtk-handlers.ads:939, instance at line 68 gtkgl.adb:89:87: ==> in call to "To_Marshaller" at gtk-handlers.ads:934, instance at line 68 gtkgl.adb:89:87: ==> in call to "To_Marshaller" at gtk-handlers.ads:930, instance at line 68 gtkgl.adb:89:87: ==> in call to "To_Marshaller" at gtk-handlers.ads:926, instance at line 68 gtkgl.adb:89:87: ==> in call to "To_Marshaller" at gtk-handlers.ads:922, instance at line 68 gtkgl.adb:89:87: ==> in call to "To_Marshaller" at gtk-handlers.ads:918, instance at line 68 Olivier
From: Ludovic Brenta on 16 Sep 2009 03:34 Olivier Scalbert wrote: > Ludovic Brenta wrote: >> In your example, Expose'Access presumably designates a procedure. >> This is wrong. Expose should be a function returning Boolean. The >> return value means: >> >> False: pass the signal to any other signal handlers attached to it >> True: abort processing of the signal. >> >> The same holds for delete_event and a few other signals as documented >> in the GTK+ reference athttp://www.gtk.org. >> >> The GtkAda signal handler infrastructure makes it impossible to detect >> the type mismatch at compile time, so it has run-time checks instead. >> This is the source of the error message. >> >> HTH > > Thanks for your help Ludovic! > > I do not know how to solve it. > I have tried to change the Expose procedure into a function returning a > Boolean, but then it does not compile anymore: > > gtkgl.adb:89:66: no candidate interpretations match the actuals: > gtkgl.adb:89:87: expected type "Handler" defined at > gtk-marshallers.ads:355, instance at gtk-handlers.ads:915, instance at > line 68 > gtkgl.adb:89:87: found type access to function "Expose" defined at line 89 > gtkgl.adb:89:87: ==> in call to "To_Marshaller" at > gtk-handlers.ads:939, instance at line 68 > gtkgl.adb:89:87: ==> in call to "To_Marshaller" at > gtk-handlers.ads:934, instance at line 68 > gtkgl.adb:89:87: ==> in call to "To_Marshaller" at > gtk-handlers.ads:930, instance at line 68 > gtkgl.adb:89:87: ==> in call to "To_Marshaller" at > gtk-handlers.ads:926, instance at line 68 > gtkgl.adb:89:87: ==> in call to "To_Marshaller" at > gtk-handlers.ads:922, instance at line 68 > gtkgl.adb:89:87: ==> in call to "To_Marshaller" at > gtk-handlers.ads:918, instance at line 68 You must call GtkAda.Handlers.Return_Callback.Connect as opposed to GtkAda.Handlers.Widget_Callback.Connect. (If you use some other instances of Gtk.Handlers, the same holds: Return_Callback instead of Callback). -- Ludovic Brenta.
From: Olivier Scalbert on 16 Sep 2009 07:51 Ludovic Brenta wrote: > You must call GtkAda.Handlers.Return_Callback.Connect as opposed to > GtkAda.Handlers.Widget_Callback.Connect. (If you use some other > instances of Gtk.Handlers, the same holds: Return_Callback instead of > Callback). > > -- > Ludovic Brenta. Thanks Ludovic, it works now ! Olivier
|
Pages: 1 Prev: Timing_Events: Event time still set after Cancel_Handler Next: GUI Application in ObjectAda |