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>
Thu, 8 Jul 2010 15:33:41 +0000 (08:33 -0700)
commitefcce74801dc65b94573bbb04dbd019c6f3af7e0
tree29aaa225962ac9399877e5676cf3e04cedcd2881
parentcacfd96cc6734be0b07d588f304a054129d05ba6
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