3 (defcfun gtk-init-check :boolean
5 (argv (:pointer (:pointer :string))))
8 (gtk-init-check (foreign-alloc :int :initial-element 0)
9 (foreign-alloc :string :initial-contents '("/usr/bin/sbcl")))
10 #+nil(with-foreign-objects ((argc :int)
11 (argv '(:pointer :string) 1))
12 (setf (mem-ref argc :int) 0
13 (mem-ref argv '(:pointer :string)) (foreign-alloc :string :count 1
14 :initial-element "/usr/bin/sbcl"))
16 (unless (gtk-init-check argc argv)
17 (error "Cannot initialize Gtk+"))
18 (foreign-free (mem-ref argv '(:pointer :string))))))
20 (at-init () (gtk-init))
22 (defcfun (%gtk-main "gtk_main") :void)
25 (with-gdk-threads-lock (%gtk-main)))
28 (defvar *main-thread* nil)
32 (when (and *main-thread* (bt:thread-alive-p *main-thread*))
33 (bt:destroy-thread *main-thread*)
34 (setf *main-thread* nil)))
37 (defun ensure-gtk-main ()
38 (when (and *main-thread* (not (bt:thread-alive-p *main-thread*)))
39 (setf *main-thread* nil))
41 (setf *main-thread* (bt:make-thread (lambda () (gtk-main)) :name "cl-gtk2 main thread"))))
44 (defun join-main-thread ()
46 (bt:join-thread *main-thread*)))
49 (export 'join-main-thread)
52 (defun ensure-gtk-main ()
55 (export 'ensure-gtk-main)
58 (defun leave-gtk-main ()) ;noop on multithreading
61 (defun leave-gtk-main ()
64 (export 'leave-gtk-main)
66 (defcfun gtk-main-level :uint)
68 (defcfun gtk-main-quit :void)
70 (defcfun gtk-grab-add :void
73 (defcfun gtk-grab-get-current g-object)
75 (defcfun gtk-grab-remove :void