(error "Cannot initialize Gtk+"))
(foreign-free (mem-ref argv '(:pointer :string))))))
-(gtk-init)
+(at-init () (gtk-init))
-(defcfun gtk-test-register-all-types :void)
+(defcfun gtk-main :void)
-(gtk-test-register-all-types)
+#+thread-support
+(defvar *main-thread* nil)
-(defcfun gtk-events-pending :boolean)
+#+thread-support
+(at-finalize ()
+ (when (and *main-thread* (bt:thread-alive-p *main-thread*))
+ (bt:destroy-thread *main-thread*)
+ (setf *main-thread* nil)))
-(defcfun gtk-main :void)
+#+thread-support
+(defun ensure-gtk-main ()
+ (when (and *main-thread* (not (bt:thread-alive-p *main-thread*)))
+ (setf *main-thread* nil))
+ (unless *main-thread*
+ (setf *main-thread* (bt:make-thread (lambda () (gtk-main)) :name "cl-gtk2 main thread"))))
-(defcfun gtk-main-level :uint)
+#+thread-support
+(defun join-main-thread ()
+ (when *main-thread*
+ (bt:join-thread *main-thread*)))
-(defcfun gtk-main-quit :void)
+#+thread-support
+(export 'join-main-thread)
+
+#-thread-support
+(defun ensure-gtk-main ()
+ (gtk-main))
+
+(export 'ensure-gtk-main)
-(defcfun gtk-main-iteration :boolean)
+#+thread-support
+(defun leave-gtk-main ()) ;noop on multithreading
-(defcfun gtk-main-iteration-do :boolean
- (blocking :boolean))
+#-thread-support
+(defun leave-gtk-main ()
+ (gtk-main-quit))
+
+(export 'leave-gtk-main)
+
+(defcfun gtk-main-level :uint)
+
+(defcfun gtk-main-quit :void)
(defcfun gtk-grab-add :void
(widget g-object))