Fixed gtk-thread crash. Raised pixbuf-loader interface.
authorMatt Birkholz <matt@birkholz.chandler.az.us>
Fri, 15 May 2009 15:16:36 +0000 (08:16 -0700)
committerMatt Birkholz <matt@birkholz.chandler.az.us>
Mon, 18 May 2009 17:35:12 +0000 (10:35 -0700)
commit8491b1e3284a4af0900849f6d8c818f505c0a5c1
treeeb871d523da0b277091902c900440f2a71cfbe3f
parent3c02d3c8f2a0907881766aba7b4f7bead015f4d7
Fixed gtk-thread crash.  Raised pixbuf-loader interface.

* src/gtk/gobject.scm:

Wrap <pixbuf-loader>s' GdkPixbufs with a <pixbuf>, a new type of
<gobject> that will free a GdkPixbuf when it is GCed.  Provide hooks
so that users of <pixbuf-loader>s do not have to register low-level C
callbacks.  Support "late" hooking by cacheing size and pixbuf and
providing them immediately to latecomers.  (The update hook, on the
other hand, might never call.)  The close hook is run in the loader's
thread (or the latecomer's) after gdk_pixbuf_loader_close has been
closed, and any error status collected.

* src/gtk/: gobject.scm, gtk-object.scm, scm-layout.scm:

Use "cleanup" instead of "finalize" to avoid confusion with Gtk's
notion of finalization.  Assume gc-cleanups are without-interrupts.
Do NOT run gc-cleanups in a gc-daemon; run them in gtk-thread.  Added
more tracing; named more lambdas.

* src/gtk/gtk.pkg:

Declare new pixbuf-loader interface.  Rename (gtk object) package
"(gtk gtk-object)".  Punt gobject-finalize! (same as gobject-unref).
Move (gtk main) to load after (gtk gobject), so the gc-cleanup list is
initialized before gtk-thread is launched.

* src/gtk/main.scm:

Added program "name" parameter to gtk-init, to correctly (re)construct
the command line.

* src/gtk/scm-layout.scm:

Use the new pixbuf-loader hooks instead of low-level gsignals.
"%trace" -> "trace" for consistency.

* src/gtk/thread.scm:

Disable interrupts BEFORE calling out with run-gtk as now required by
the FFI.  Run gc-cleanups whenever the gc-timestamp increases.  Punt
signal-thread-events, which was trouble when run WITH interrupts.
maybe-signal-io-thread-events after run-gtk should be sufficient.

* src/gtk/thread.scm, src/runtime/thread.scm:

"tracing?" -> "trace?" for consistency.
src/gtk/gobject.scm
src/gtk/gtk-object.scm
src/gtk/gtk.pkg
src/gtk/main.scm
src/gtk/scm-layout.scm
src/gtk/thread.scm
src/runtime/thread.scm