[Openmcl-devel] Re: [lambda-gtk-devel] Bug in examples.lisp

rm at fabula.de rm at fabula.de
Sun Dec 5 10:53:38 PST 2004


On Sat, Dec 04, 2004 at 12:11:48PM -0600, Rick Taube wrote:
> >Now, i can load and start the examples but unfortunately the first 
> >callback
> >seems to tickle openmcl's kernel in unwanted places. I guess i should 
> >first
> >test my gtk2 bindings without the lambdagtk suggar ... :-/
> 
> sorry i dont know anything about the callback support on linux-ppc, ive 
> only used the darwin version and that works quite well

Hello Rick,

here's what i've done so far (i'll send a cc tothe openmcl-devel list, i
fear i need some help from there).


 - created a (hopefully correct) populate.sh that uses 'pkg-config' to
   find all neccessary CPP flags.
                                                                                                               
 - generated the interface database as outlined on the website
                                                                                                               
 - rewrote 'ccl:library/openmcl-gtk-support.lisp' into 'ccl:library/openmcl-gtk2-support.lisp'
   (BTW, is the installation of the gtk-task with def-load-pointers really neccessary?
    Is there no better way to run the gtk-main loop in a dedicated thread?).
                                                                                                               
 - wrote a quick test case as follows:


;;; ---- File ffi-test-gtk2.lisp ---------------------------------------------------------

(eval-when (:compile-toplevel :execute)
  (require "openmcl-gtk2-support"))

(defcallback button-clicked
    (:address button :address cmd :void)
  (declare (ignore button cmd))
  (format t "Hello stranger ~%"))
  
(defcallback action-quit (:address widget :address data :void)
  (declare (ignore widget))
  (format t "Oi veh ...~%")
  (#_gtk_main_quit))

(defun gtk2-test ()
    
    (let ((window (#_gtk_window_new #$GTK_WINDOW_TOPLEVEL))
	  (button (#_gtk_button_new))) 
      
      (with-cstrs ((destroy-name  "destroy")
		   (clicked-name  "clicked")
		   (window-title  "Mompidomp ...")
		   (button-label  "Click me, stranger ..."))
	(#_gtk_window_set_title window window-title)
	(#_gtk_button_set_label button button-label)
	(#_g_signal_connect_data button clicked-name button-clicked button (%null-ptr) 0)
	(#_g_signal_connect_data window destroy-name action-quit window (%null-ptr) 0))

      (#_gtk_container_add window button)    
      (#_gtk_widget_show button)
      (#_gtk_widget_show window)
      
      (ccl::%install-periodic-task 'gtk2-task
				   #'(lambda ()
				       (do* ()
					    ((eql (#_gtk_events_pending) 0))
					 (#_gtk_main_iteration)))
				   10)))

;;;; -------------- File ends here --------------------------------------------------

NOTE: i installed the periodic task here since i haven't put it into my gtk2-support
and i wnated to test whether gtk-main was causing the troubles (same effect with
gtk-man and the periodic task, i'm affraid).

Now, as with the lambda-gtk code, everything works fine until the first callback
arrives ... here's a kernel backtrace:

  Welcome to OpenMCL Version (Beta: Linux) 0.14.2!
  ? (load "ffi-test-gtk2.lisp")
   
  "Loading libraries ..."
  " ... Done"
  ;Compiler warnings :
  ;   Unused lexical variable DATA, in ACTION-QUIT.
  #P"/usr/local/src/LISP/lambda-gtk-0.1/ffi-linux.lisp"
  ? (gtk2-test)
  #<PERIODIC-TASK GTK2-TASK 10 #x353B58A6>
  ? Unhandled exception 11 at 0x00012c78, context->regs at #x7fffdd50
  Read operation to unmapped address 0x7f454c44
   In foreign code at address 0x00012c78
  ? for help
  [8158] OpenMCL kernel debugger: b
   
   
  (#x7fffe210) #x00013688 : (null) + 79496
  (#x7fffe240) #x0001381C : (null) + 79900
  (#x7fffe480) #x300E4BD4 : (null) + 806243284
  (#x7FFFE4B0) #x7FFFE808 : foreign code (unknown)
  (#x7fffeb00) #x0F8E3AC4 : (null) + 260979396
  (#x7fffebc0) #x0F8E29EC : g_signal_emit_valist + 1864
  (#x7fffee10) #x0F8E2D38 : g_signal_emit + 108
  (#x7fffeea0) #x0F015628 : gtk_button_clicked + 132
  (#x7fffeec0) #x0F016804 : (null) + 251750404
  (#x7fffeee0) #x0F8E405C : g_cclosure_marshal_VOID__VOID + 176
  (#x7fffef00) #x0F8CE930 : (null) + 260892976
  (#x7fffef30) #x0F8CE5A4 : g_closure_invoke + 224
  (#x7fffef70) #x0F8E3374 : (null) + 260977524
  (#x7ffff030) #x0F8E29EC : g_signal_emit_valist + 1864
  (#x7ffff280) #x0F8E2D38 : g_signal_emit + 108
  (#x7ffff310) #x0F015568 : gtk_button_released + 132
  (#x7ffff330) #x0F016618 : (null) + 251749912
  (#x7ffff350) #x0F0D62F0 : _gtk_marshal_BOOLEAN__BOXED + 212
  (#x7ffff380) #x0F8CE930 : (null) + 260892976
  (#x7ffff3b0) #x0F8CE5A4 : g_closure_invoke + 224
  (#x7ffff3f0) #x0F8E3470 : (null) + 260977776
  (#x7ffff4b0) #x0F8E27B0 : g_signal_emit_valist + 1292
  (#x7ffff700) #x0F8E2D38 : g_signal_emit + 108
  (#x7ffff790) #x0F1DBEE8 : (null) + 253607656
  (#x7ffff7b0) #x0F0D4670 : gtk_propagate_event + 268
  (#x7ffff7d0) #x0F0D3118 : gtk_main_do_event + 652
  (#x7ffff800) #x0F96965C : (null) + 261527132
  (#x7ffff820) #x0F9DAC98 : (null) + 261991576
  (#x7ffff870) #x0F9DC1DC : g_main_context_dispatch + 232
  (#x7ffff890) #x0F9DC5AC : (null) + 261997996
  (#x7ffff8d0) #x0F9DC8B0 : g_main_context_iteration + 132
  (#x7ffff8f0) #x0F0D2AE0 : gtk_main_iteration + 60
  (#x7ffff910) #x00007BE0 : (null) + 31712
  (#x7FFFF918) #x353BF980 : #<Anonymous Function #x353bf9be> + 52
  (#x7FFFF928) #x311143D0 : #<Function HOUSEKEEPING #x3512b42e> + 452
  (#x7FFFF938) #x31114358 : #<Function HOUSEKEEPING #x3512b42e> + 332
  (#x7FFFF948) #x311142C8 : #<Function HOUSEKEEPING #x3512b42e> + 188
  (#x7FFFF958) #x310F7F6C : #<Anonymous Function #x350f7afe> + 312
  (#x7FFFF968) #x310F7F84 : #<Anonymous Function #x350f7afe> + 336
  (#x7FFFF978) #x310F7F8C : #<Anonymous Function #x350f7afe> + 344
  (#x7FFFF988) #x310F7FC0 : #<Anonymous Function #x350f7afe> + 396
  (#x7FFFF998) #x00008820 : (subprimitive (null))


 ... more follows but didn't look to relevant.

Hmm, i don't really know where to go now. Maybe one of the OpenMCL
gurus has some idea/pointer?


> >Oh, and as a suggestion: i'd be rather cool to have libglade support in
> >lambda-gtk. Saves a _lot_ of typing ...
> 
> there was a post about this on Planet Lisp last month, I think this is 
> the one:
> 
> http://journal.boblycat.org/musings/archives/000144.html

Ah, missed that. That does look very promissing :-)

 TIA Ralf Mattes
 

----- End forwarded message -----



More information about the Openmcl-devel mailing list