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>
Tue, 21 Dec 2010 17:29:18 +0000 (10:29 -0700)
commit30a5d6b8fadde966149db44d19abcbd6233b77e1
tree89145c94f52c3a40b9193aa1cf14fd621d98efee
parentb916e385db5510c010e097a3fe90a01f12a6f98f
Fixed gtk-thread crash.  Raised pixbuf-loader interface.

* src/.gitignore:

Added exceptions for src/gtk/Clean.sh and src/gtk/Tags.sh.

* 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