When multithreading is supported, run gtk_main with Gdk threads lock acquired
authorDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Wed, 30 Dec 2009 20:10:53 +0000 (23:10 +0300)
committerDmitry Kalyanov <Kalyanov.Dmitry@gmail.com>
Wed, 30 Dec 2009 20:10:53 +0000 (23:10 +0300)
gdk/gdk.threads.lisp
gtk/gtk.main_loop_events.lisp

index fc13d8e..5be7743 100644 (file)
@@ -9,6 +9,14 @@
 (defcfun gdk-threads-leave :void)
 (export 'gdk-threads-leave)
 
+(defmacro with-gdk-threads-lock (&body body)
+  `(progn
+     (gdk-threads-enter)
+     (unwind-protect
+          (progn ,@body)
+       (gdk-threads-leave))))
+(export 'with-gdk-threads-lock)
+
 ;; ignored:
 ;; void                gdk_threads_set_lock_functions      (GCallback enter_fn,
 ;;                                                          GCallback leave_fn);
index 961b357..b26f147 100644 (file)
 
 (at-init () (gtk-init))
 
-(defcfun gtk-main :void)
+(defcfun (%gtk-main "gtk_main") :void)
+
+#+thread-support
+(defun gtk-main ()
+  (with-gdk-threads-lock (%gtk-main)))
+
+#-thread-support
+(defun gtk-main ()
+  (%gtk-main))
 
 #+thread-support
 (defvar *main-thread* nil)