2008-07-01  Matthias Clasen  <mclasen@redhat.com>

	* *.c: Fix up section comments far enough to avoid regressions.

2008-06-27  Hans Breuer  <hans@breuer.org>

	* glib-genmarshal.c : move G_OS_WIN32 inclusion of <io.h> down to
	where G_OS_WIN32 will be defined (#540047, Kazuki IWAMOTO)

2008-06-22  Michael Natterer  <mitch@imendio.com>

	* *.c: remove trailing whitespace from newly added gtk-doc
	comments and reformatted some where they contained overly long or
	ill-formatted lines.

2008-06-22  Michael Natterer  <mitch@imendio.com>

	* *.c: moved includes back to the top of the files (before gtk-doc
	SECTION comments). Add "config.h" in all files and move system
	included before glib includes. Remove trailing whitespace from
	SECTION comments and did some reformatting where lines were overly
	long, no documentation content was changed.

2008-06-22  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/gobject-unused.sgml:
	* gobject/gobject.h:
	* gobject/gtype.c:
	* gobject/gtype.h:
	  Move some content for gobject-unused.sgml and cleared empty entries.
	  The remaining 4 ones should be checked by some else. If they are not
	  needed. The file can be removed.

2008-06-22  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/value_collection.sgml:
	* gobject/gvaluecollector.h:
	  Migrating docs.

2008-06-22  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/value_arrays.sgml:
	* gobject/gvaluearray.c:
	* gobject/gvaluearray.h:
	  Migrating docs.

2008-06-22  Stefan Kost  <ensonic@users.sf.net>

	* gobject/gsignal.c:
	  Fix compiler warning in format string check.

2008-06-22  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/signals.sgml:
	* gobject/gclosure.c:
	* gobject/gobject.c:
	* gobject/gsignal.c:
	* gobject/gsignal.h:
	  Migrating docs.

2008-06-22  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/Makefile.am:
	  Help poor little gtkdoc a bit and tell that it can ignore
	  G_GNUC_INTERNAL. Also disable including the unit-test header as this
	  causes warnings and we don't need it here.

2008-06-22  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/param_value_types.sgml:
	* gobject/gboxed.c:
	* gobject/gboxed.h:
	* gobject/genums.c:
	* gobject/genums.h:
	* gobject/gobject.c:
	* gobject/gobject.h:
	* gobject/gparam.c:
	* gobject/gparam.h:
	* gobject/gparamspecs.c:
	* gobject/gparamspecs.h:
	* gobject/gvaluetypes.c:
	* gobject/gvaluetypes.h:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/objects.sgml:
	* gobject/gobject.c:
	* gobject/gobject.h:
	* gobject/gparam.h:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/gtypeplugin.sgml:
	* gobject/gtypeplugin.c:
	* gobject/gtypeplugin.h:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/Makefile.am:
	  Add --sgml-mode to allow sgml in doc-fragments (which somehow works
	  before already).

	* gobject/gboxed.h:
	* gobject/gclosure.c:
	* gobject/gparam.c:
	* gobject/gparam.h:
	* gobject/gtype.h:
	  Convert character entities back. Fix some broken sgml.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/gtypemodule.sgml:
	* gobject/gtypemodule.c:
	* gobject/gtypemodule.h:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* gobject/gboxed.c:
	* gobject/gclosure.c:
	* gobject/genums.c:
	* gobject/gparam.c:
	* gobject/gvalue.c:
	  Add titles back from tmpl.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/gtype.sgml:
	* gobject/gtype.c:
	* gobject/gtype.h:
	* gobject/gvaluetypes.h:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* gobject/gclosure.h:
	* gobject/gparam.h:
	  Add one missing ':' and reformate GParamFlags docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/gparamspec.sgml:
	* gobject/gparam.c:
	* gobject/gparam.h:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* gobject/gboxed.c:
	* gobject/gclosure.c:
	* gobject/genums.c:
	* gobject/gvalue.c:
	  Use file-names from the section file for SECTION: comments.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/generic_values.sgml:
	* gobject/gboxed.h:
	* gobject/gtype.h:
	* gobject/gvalue.c:
	* gobject/gvalue.h:
	* gobject/gvaluetypes.c:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* gobject/genums.h:
	  Fix documentation for return values.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/gclosure.sgml:
	* gobject/gboxed.h:
	* gobject/gclosure.c:
	* gobject/gclosure.h:
	* gobject/gobject.c:
	* gobject/gsourceclosure.c:
	* gobject/gsourceclosure.h:
	  Migrating docs.

2008-06-21  Tor Lillqvist  <tml@novell.com>

	* glib/gstdio.c: Improve Windows-specific parts of
	documentation. Mention the different C library issue in more
	places.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/gobject-sections.txt:
	  Remove duplicated entries. They are documented and should be shown.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/enumerations_flags.sgml:
	* gobject/genums.c:
	* gobject/genums.h:
	  Migrating docs.

2008-06-21  Stefan Kost  <ensonic@users.sf.net>

	* docs/reference/gobject/tmpl/gboxed.sgml:
	* gobject/gboxed.c:
	* gobject/gboxed.h:
	* gobject/gvaluetypes.c:
	  Migrating docs.

2008-06-12  Matthias Clasen  <mclasen@redhat.com>
	
	* === Released 2.17.2 ===

2008-06-12  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.17.1 ===

2008-06-10 13:34:01  Tim Janik  <timj@imendio.com>

	* tests/threadtests.c: added race condition tester from Michael Meeks
	with a couple fixes so it's not triggering development warnings. From:
	Bug 537555 - GObject instantiation not thread safe ...

2008-06-10 13:15:29  Tim Janik  <timj@imendio.com>

	* gtype.c (g_type_class_ref): fixed race condition where references to
	partially initialized classes could be handed out.

2008-05-28  Michael Natterer  <mitch@imendio.com>

	* Makefile.am: don't define G_DISABLE_SINGLE_INCLUDES, it's in
	the global CPPFLAGS now.

2008-05-27  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.17.0 ===

2008-05-05  Michael Natterer  <mitch@imendio.com>

	* Makefile.am. build with G_DISABLE_SINGLE_INCLUDES to prevent
	code from being checked in that breaks the build of applications
	which use G_DISABLE_SINGLE_INCLUDES.

2008-03-16  Tor Lillqvist  <tml@novell.com>

	* Makefile.am: Define gobject_def locally here instead of using an
	Autoconf variable.

2008-03-10  Matthias Clasen  <mclasen@redhat.com>
	
	* === Released 2.16.1 ===

2008-03-10  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.16.0 ===

2008-02-25  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.15.6 ===

2008-02-11  Matthias Clasen <mclasen@redhat.com>

	* === Released 2.15.5 ===

2008-02-06  Benjamin Otte  <otte@gnome.org>

	* gparamspecs.c: (param_gtype_set_default), (param_gtype_validate):
	make GParamGType require the set type during construction instead of
	using G_TYPE_NONE, which causes issues when setting.
	Bug 513073 - g_param_spec_gtype breaks with G_PARAM_CONSTRUCT

2008-02-05 18:52:07  Tim Janik  <timj@imendio.com>

	* gtype.c: added recursive mutex to protect class initialization,
	default interface initialization and per-class interface construction.
	a lock to this recursive mutex is held during user callback invocations
	such as initializers or finalizers, effectively allowing only one thread
	to run class/interface initializers/finalizers at a time.
	also made misc fixups. this fixes:
	Bug 64764 - Class initialization isn't thread safe.

2008-02-05 18:41:22  Tim Janik  <timj@imendio.com>

	* Makefile.am: integrate tests/.

	* tests/: new directory for libgobject tests.

	* tests/Makefile.am: build and run threadtests.

	* tests/threadtests.c: test multi-threaded initializers for
	object classes and interfaces.

2008-01-28  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.15.4 ===

2008-01-21  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.15.3 ===

2008-01-14  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.15.2 ===

008-01-07  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.15.1 ===

2007-12-26  Behdad Esfahbod  <behdad@gnome.org>

	* gclosure.h (G_CCLOSURE_SWAP_DATA): Fix macro argument.
	(#505674, Areg Beketovski)

2007-12-20  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.15.0 ===

2007-11-11  Mathias Hasselmann  <mathias@openismus.com>

	Always exit with non-zero error code when printing warnings.

	* gobject/glib-genmarshal.c: Add global exit_status variable, and use
	it in pad() and process_signature() to return with non-zero error code
	when printing warnings. (#495294)

2007-11-08  Matthias Clasen <mclasen@redhat.com>

	* glib-mkenums.in: Don't shift ARGV[0] to undefined. 
	(#466557, Aidan Delaney)

2007-11-07  Matthias Clasen <mclasen@redhat.com>

	* === Released 2.14.3 ===

2007-10-16  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.14.2 ===

2007-09-20  Carlos Garnacho  <carlos@imendio.com>

	* gtypemodule.h: make sure we define GType g_define_type_id in
	G_G_DEFINE_DYNAMIC_TYPE_EXTENDED so it works together with
	G_IMPLEMENT_INTERFACE. (#478459)

2007-09-19  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.14.1 ===

2007-08-03  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.14.0 ===

2007-07-12  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.13.7 ===

Tue Jul 10 12:31:50 2007  Tim Janik  <timj@imendio.com>

	* gtype.h: use g_once_init_enter/g_once_init_leave to guard critical
	initialization section of *_get_type implementations in G_DEFINE_TYPE,
	bug #65041.

Fri Jun 29 2007  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.13.6 ===

Fri Jun 22 11:31:27 2007  Tim Janik  <timj@gtk.org>

	* gtype.h: reintroduce typedef gulong GType; for C++, to avoid
	C++ specific ABI breakage.

2007-06-18  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.13.5 ===

Thu Jun 14 23:32:00 2007  Tim Janik  <timj@gtk.org>

	* gtype.h: always define GType unconditionally in terms of gsize,
	there's no need to jump through a glong hoop ever and this fixes
	the printf modifier to %zu.

Thu Jun 14 22:33:11 2007  Tim Janik  <timj@imendio.com>

	* gparamspecs.c (g_param_spec_types_init): work around SGI IDO cc,
	fixes #363986.

2007-06-05  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.13.4 ===

2007-06-04  Matthias Clasen  <mclasen@redhat.com>
	
	* === Released 2.13.3 ===

2007-05-22  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.13.2 ===

2007-05-17  Matthias Clasen <mclasen@redhat.com>

	* gtype.h: Move G_GNUC_INTERNAL before function
	declarations to fix compilation with sun studio.  (#438873,
	Damien Carbery)

2007-05-03  Matthias Clasen <mclasen@redhat.com>

	* === Released 2.13.1 ===

2007-04-25  Michael Natterer  <mitch@imendio.com>

	* gparamspecs.c (param_string_validate): also clear the
	NOCOPY_CONTENTS flag when replacing NULL with the empty string.

2007-04-24  Michael Natterer  <mitch@imendio.com>

        * gparamspecs.c (param_string_validate): don't free or modify
	static strings, dup them when needed and clear the
	G_VALUE_NOCOPY_CONTENTS flag. Fixes bug #432895.

Tue Apr  3 12:34:14 2007  Tim Janik  <timj@gtk.org>

	* gobject.[hc]: invoke GObjectClass.constructed() only for newly
	constructed objects, and invoke it while the notify queue is
	still being frozen, after all CONSTRUCT* properties have been
	set and before random other properties are being set.

	* applied modified patch from Ryan Lortie to implement
	GObjectClass.constructed() to fix #425324.

2007-04-02  Ryan Lortie  <desrt@desrt.ca>

	* gobject/gobject.h: Add 'constructed' vcall to GObjectClass.
	* gobject/gobject.c (g_object_newv): call ->constructed() as last
	step of object construction.

2007-03-16  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.13.0 ===

2007-03-15  Matthias Clasen  <mclasen@redhat.com>

	* gvaluearray.c: Use  g_slice.  (#404430, Chris Wilson)

2007-03-14  Stefan Kost  <ensonic@users.sf.net>

	* gparam.h:
	  Add G_PARAM_STATIC_STRINGS define (fixes #418021).

Mon Mar 12 13:30:20 2007  Tim Janik  <timj@gtk.org>

	* gtype.h: marked purely functional g_type accessors as PURE or CONST,
	closes #305100.

2007-01-02  Tor Lillqvist  <tml@novell.com>

	* glib-genmarshal.c (main): Handle "/dev/stdin" by dup()ing fd 0
	so that it works on Win32 and other systems without
	/dev/stdin. (#407431)

2006-12-29 Matthias Clasen  <mclasen@redhat.com>

	* gtypemodule.h: Define G_DEFINE_DYNAMIC_TYPE and
	and _EXTENDED variant.  (#334437)

Fri Dec 15 2006  Matthias Clasen  <mclasen@redhat.com>

	* gtype.c (instance_real_class_get): Dereference the pointer 
	before dropping the lock.  (#378078, Jonathan Matthew)

Tue Oct 10 12:06:08 2006  Tim Janik  <timj@gtk.org>

	* glib-mkenums.in: 
	* glib-mkenums.1: applied patch from David Necas which introduces
	an underscore_name option and fixes #358734.

Mon Oct  2 15:50:16 2006  Tim Janik  <timj@gtk.org>

	* gvalue.c (g_value_peek_pointer): reverted a change to have an
	assert instead of a g_return_val_if_fail() here. libraries (and
	programs) should only ever g_assert or g_error if there is no way
	to carry on with the current program state. that's clearly not 
	the case here.

	* ChangeLog: added missing changelog entry for 2003-12-30.

Sat Sep 30 2006  Matthias Clasen  <mclasen@redhat.com>

	* pltcheck.sh: Script to check PLT entries.

	* Makefile.am (TESTS): Run pltcheck.sh

	* gtype.c:
	* gsignal.c:
	* gobject.c:
	* gvaluetypes.c: Move all includes before gobjectalias.h.
	(#3545422, Behdad Esfahbod)

Fri Sep 22 13:41:02 2006  Tim Janik  <timj@imendio.com>

	* gtype.h: applied patch from Behdad with slight optimization, 
	fixes #356175.

	* gobjectnotifyqueue.c: fixed include-guard macro name.

Mon Sep 11 12:12:45 2006  Tim Janik  <timj@imendio.com>

	* gparam.c (g_param_spec_sink): reimplemented floating flag handling by
	atomically accessing a reserved GData bit, fixes #330556.

Tue Aug 29 13:27:33 2006  Tim Janik  <timj@gtk.org>

	* glib-mkenums.in: fixed to print usage and version info on STDOUT
	(#322502).

	* gobject.c (g_initially_unowned_init): restore ; after G_DEFINE_TYPE.

2006-08-26  Matthias Clasen  <mclasen@redhat.com>

	* gobject.c: Remove ; after G_DEFINE_TYPE.  (#351741, Kjartan Maraas)

Wed Aug 23 10:35:32 2006  Tim Janik  <timj@gtk.org>

	* gobject.[hc]: changed return value of g_value_dup_object(), fixes #343292.

2006-08-23  Sven Neumann  <sven@gimp.org>

	* gobject/glib-genmarshal.[c1]: added new command-line option
	"--internal" that can be used to let glib-genmarshal generate
	internal functions using the G_GNUC_INTERNAL attribute (bug #346647).

Wed Aug 16 13:55:08 2006  Tim Janik  <timj@imendio.com>

	* gobject.c: conditionally thaw the notify queue after construction,
	so we don't trigger warnings when trying to thaw an unfrozen singleton.

2006-08-15  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.12.2 ===

2006-08-05  Matthias Clasen  <mclasen@redhat.com>

	* gparamspecs.c (g_param_spec_types_init): Don't initialize
	struct members with function calls.  (#349952)

2006-07-22  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.12.1 ===

2006-07-21  Matthias Clasen  <mclasen@redhat.com>

	* gtypemodule.c (g_type_module_register_type): Copy the complete
	value table, not just the first 4 bytes.  (#348136, Coverity)

2006-07-02  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.12.0 ===

2006-06-20  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.11.4 ===

2006-06-15  Federico Mena Quintero  <federico@novell.com>

	* gtype.c (g_type_instance_get_private): Fix the error message so
	that it mentions the right functions:
	"g_type_instance_get_private() requires a prior call to
	g_type_class_add_private()".

2006-06-12  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.11.3 ===

2006-06-05  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.11.2 ===

2006-06-02  Behdad Esfahbod  <behdad@gnome.org>

	* gobject/genum.h: Make value_name and value_nick const in structs
	_GEnumValue and _GFlagValue.  (#317793)

Tue May 16 14:01:43 2006  Tim Janik  <timj@imendio.com>

	* gtype.h (G_IMPLEMENT_INTERFACE): turn off compiler warnings, #337129.

2006-05-15  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.11.1 ===

2006-05-02  Matthias Clasen  <mclasen@redhat.com>
	
	* === Released 2.11.0 ===

Tue May  2 14:51:03 2006  Tim Janik  <timj@gtk.org>

	* gtype.h: split up G_DEFINE_*TYPE macro definitions so C CODE arguments
	are not passed on to nested macro calls. patch mostly courtesy of Behdad
	Esfahbod, fixes #337128.

2006-04-23  Matthias Clasen  <mclasen@redhat.com>

	* gobject.symbols: Fix a typo.

	* gtype.c: (g_type_register_static_simple): Add a 
	missing return.

	* gtype.h: Silence warnings from G_DEFINE_TYPE.
	
2006-04-21  Matthias Clasen  <mclasen@redhat.com>

	* gobject.symbols:
	* gtype.[hc]: Add a g_type_register_static_simple
	variant of g_type_register_static that does not take 
	a relocation-causing GTypeInfo struct, and use it 
	in G_DEFINE_TYPE.

2006-03-07  Matthias Clasen  <mclasen@redhat.com>

	* ===  Released 2.10.1 ===

Tue Mar  7 17:09:07 2006  Tim Janik  <timj@gtk.org>

	* gobject.c (g_object_compat_control): added case3 to hand out the
	original floating flag handler. required by gtk+ >= 2.10.

2006-02-24  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.10.0 ===

2006-02-10  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.9.6 ===

2006-01-29  Matthias Clasen  <mclasen@redhat.com>

	* gclosure.c: Remove C++ comment.

2006-01-27  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.9.5 ===

2006-01-18  Matthias Clasen  <mclasen@redhat.com>
	
	* === Released 2.9.4 ===

2006-01-18  Matthias Clasen  <mclasen@redhat.com>

	* gobject.h: Make g_object_compat_control() visible
	for GTK+ compilation, to avoid segfaults on 64bit
	platforms.

2006-01-16  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.9.3 ===

2006-01-05  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.9.2 ===

2006-01-04  Matthias Clasen  <mclasen@redhat.com>

	* gobject.symbols: Add g_initially_unowned_get_type.

2005-12-30  Matthias Clasen  <mclasen@redhat.com>
	
	* gsignal.c: Remove the handler trash stack, which
	is now unused.
	(g_signal_init): Remove the restriction that HandlerMatch
	must be the same size as GList, and obsolete comments 
	referring to mem chunks.

2005-12-24  Matthias Clasen  <mclasen@redhat.com>

	* gobject.symbols: Add new functions.

Thu Dec 22 18:53:14 2005  Tim Janik  <timj@gtk.org>

	* gobject.[hc]: renamed GUnowned to GInitiallyUnowned.

Thu Dec 22 14:59:24 2005  Tim Janik  <timj@imendio.com>

	* gvaluetypes.[hc]: implemented G_TYPE_GTPYE. applied patch
	from matthias which implements GType accessors for GValue.

	* gparamspecs.[hc]: applied patch from matthias which 
	implements G_TYPE_PARAM_GTYPE.

	* gobject.[hc]:
	GUnowned: introduced a new object type that has an initially
	floating reference.
	g_object_compat_control(): allow setting of a floating flag handler.

2005-12-09  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.9.1 ===

2005-12-05  Matthias Clasen  <mclasen@redhat.com>

	* genums.h (G_FLAGS_CLASS_TYPE_NAME): Use G_FLAGS_CLASS_TYPE.
	(#323273, Kalle Vahlman)
	
Thu Dec  1 12:53:26 2005  Tim Janik  <timj@imendio.com>

	* gtype.c: use g_slic_* for all object allocations.

2005-11-28  Matthias Clasen  <mclasen@redhat.com>

	* gobjectnotifyqueue.c (g_object_notify_queue_thaw): 
	* gobject-query.c (main): Silence compiler warnings.

	* glib-genmarshal.c (main): Use G_N_ELEMENTS.

2005-11-27  Matthias Clasen  <mclasen@redhat.com>

	* gboxed.h: Declare g_hash_table_get_type.

Wed Nov 23 18:01:46 2005  Tim Janik  <timj@imendio.com>

	* gobject.[hc]: added floating reference count.
	g_object_is_floating():
	g_object_ref_sink(): new functions to deal with floating references.
	g_object_force_floating(): new funciton for object implementations
	to set the floating flag.

	* gobject.c (g_object_init): make objects initially floating.

Wed Nov 23 17:58:13 2005  Tim Janik  <timj@gtk.org>

	* gparam.[hc]: added g_param_spec_ref_sink().

Wed Nov 23 13:36:02 2005  Tim Janik  <timj@gtk.org>

	* gboxed.[hc]: minor cleanups, implemented G_TYPE_HASH_TABLE.

2005-11-17  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.9.0 ===

2005-11-17  Matthias Clasen  <mclasen@redhat.com>

	* glib-genmarshal.c: const correctness fixes, found
	by Arjan van de Ven and gcc.
	
Tue Nov  1 17:07:43 2005  Tim Janik  <timj@imendio.com>

	* gsignal.c: allocate signal handlers and handler match structures
	via the new g_slice_*() API (get's rid of GList allocation hack).

	* gtype.c: got rid of per-type memchunks. if GTypeInfo.n_preallocs
	is > 0, objects are allocated via g_slice_*() instead of g_malloc().

2005-10-03  Matthias Clasen  <mclasen@redhat.com>

	* glib-mkenums.in: Really fix #314890.

2005-09-28  Michael Natterer  <mitch@gimp.org>

	* gtype.h (G_IMPLEMENT_INTERFACE): revert last change, it breaks
	all users of G_IMPLEMENT_INTERFACE() inside
	G_DEFINE_TYPE_WITH_CODE(), since apparently GCC doesn't like
	commas enclosed in {}, not (), in nested macro calls.

2005-09-26  DindinX  <dindinx@gimp.org>

	* gobject/gtype.h: initialize all the fields of GInterfaceInfo in the
	G_IMPLEMENT_INTERFACE macro, to shut up a warning when compiling at -W

2005-09-26  Matthias Clasen  <mclasen@redhat.com>

	* glib-mkenums.in: Don't hang on '{' following a trigraph comment
	in the same line.  (#314890, Mathias Hasselmann)

Thu Sep 22 12:42:12 2005  Tim Janik  <timj@gtk.org>

	* gparam.c (g_param_spec_internal): fix pspec->name assignment which
	needs to be strdup()ed for non G_PARAM_STATIC_NAME pspecs. this fixes
	recently introduced crashes during plugin unloading.
	also, ensure that static pspec names are canonicalized.

	* gsignal.h: reverted last change from matthias, we don't guarantee
	that type ids aren't mangled with G_SIGNAL_TYPE_STATIC_SCOPE anywhere.

2005-09-20  Matthias Clasen  <mclasen@redhat.com>

	* gsignal.h (struct _GSignalQuery): Remove the misleading comment
	about G_SIGNAL_TYPE_STATIC_SCOPE, since we don't allow that 
	on return types.

2005-09-08  Kjartan Maraas  <kmaraas@gnome.org>

	* gclosure.c: (g_closure_set_meta_marshal): Remove some unused
	code.
	* gsignal.c: (g_signal_emitv): Same here
	* gtype.c: (g_type_register_fundamental): And here
	* testgobject.c: Mark some functions static.

2005-09-05  Matthias Clasen  <mclasen@redhat.com>

	* gsignal.c (struct _SignalNode): Make the name field const.
	(g_signal_newv): Don't keep an unnecessary extra copy of the 
	signal name around, and don't forget to free the name if
	an existing node is reused.	

2005-08-31  Matthias Clasen  <mclasen@redhat.com>

	* gobject.c (g_object_do_class_init): Intern the signal name.

	* gparam.c (g_param_spec_internal): Intern the name here,
	since we need the quark anyway when sending change notification.

	* gboxed.c: 
	* gparamspecs.c: 
	* gtype.c (g_type_init_with_debug_flags): Intern type name
	before registering the types.

	* gtype.h (G_DEFINE_TYPE_EXTENDED): Intern type name
	before registering the type.

	* gvaluetypes.c (g_value_types_init): 
	* gtypeplugin.c (g_type_plugin_get_type): 
	* gtypemodule.c (g_type_module_get_type): 
	* gparam.c (g_param_type_init): 
	* gobject.c (g_object_type_init): 
	* genums.c (g_enum_types_init): 
	* gboxed.c (g_boxed_type_init): Intern type names
	before registering the type to avoid unnecessary
	copies.

2005-08-23  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.8.1 ===

2005-08-12  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.8.0 ===

2005-08-09  Matthias Clasen  <mclasen@redhat.com>

	* gvaluetransform.c: Access enum and flags
	values as v_long/v_ulong, not v_int/v_uint,
	to make value transformation of such types
	work on bigendian 64bit machines.  (#312485,
	Michael Lorenz)

2005-08-05  Matthias Clasen  <mclasen@redhat.com>
	
	* abicheck.sh: Also check exported variables

	* === Released 2.7.7 ===

2005-08-03  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.7.6 ===

2005-08-02  Matthias Clasen  <mclasen@redhat.com>

	* gclosure.c (union ClosureInt): Mark the vint member as
	volatile, which seems to be necessary to make atomic operations
	work on s390.

	* === Released 2.7.5 ===

Mon Aug  1 23:00:42 2005  Tim Janik  <timj@imendio.com>

	* gclosure.c: turned all modifications to the first 32 integer bits in a 
	closure into atomic accesses. wrapped write accesses into special macros
	to keep the atomic modification logic in a single place. comment cleanups.

	* gclosure.h: made all atomicly accessed closure fields volatile.

	* gobject.h: made ref_count field volatile.

Sun Jul 31 02:04:23 2005  Tim Janik  <timj@gtk.org>

	* gobject.c: use g_datalist_set_flags() and g_datalist_unset_flags() to
	allow proper locking around &qdata modifications.

Sat Jul 30 21:10:26 2005  Tim Janik  <timj@gtk.org>

	* gobject.c: reverted notify_mutex introduction, since this prevents
	parallelized setting of object properties on different objects, and
	serves no apparent purpose (to me at least).
	g_object_real_dispose(): removed non-atomic reference count 
	modifications.
	g_object_unref(): make sure the closures array is destroyed when
	destroying signal handlers.

	* gparam.c: cosmetic changes.

	* gsignal.c: comment fixup. allow 16bit blocking count.

	* gsignal.c: reverted GClosure related changes.

	* gclosure.c: reverted premature commit of atomic reference
	counting attempt.

2005-07-21  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.7.4 ===

2005-07-15  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.7.3 ===
	
2005-07-15  Matthias Clasen  <mclasen@redhat.com>

	Make refcounting threadsafe by using atomic 
	operations.  (#166020, Wim Taymans)
	
	* gobject.c: Use a recursive lock to protect the 
	notify queue.
	(g_object_unref): Get rid of g_object_last_unref and
	do the last unref handling in g_object_unref.
	(g_object_ref, g_object_unref): Use atomic operations.

	* gsignal.c (struct _HandlerMatch): Use a full integer
	for the ref_count field.
	(handler_ref, handler_unref_R): Use atomic operations.

	* gparam.c (g_param_spec_ref, g_param_spec_unref): 
	Use atomic operations instead of a lock to make the
	refcounting threadsafe.

	* gclosure.c (g_closure_ref, g_closure_unref): Use atomic
	operations. This is more complicated here, since the
	refcount is stored in a bitfield, so we also have
	to access all other bitfield members atomically.

	* gsignal.c (handlers_find): Read the meta_marshal flag
	of the closure atomically.

2005-07-11  Matthias Clasen  <mclasen@redhat.com>

	* gobject.h: 
	* gobject.symbols: Remove G_GNUC_NULL_TERMINATED from
	g_object_new again, since that makes gcc warn on calls of 
	the form g_object_new (some_type, NULL)

2005-07-09  Tor Lillqvist  <tml@novell.com>

	* Makefile.am: Don't use the scripts in build/win32 to compile
	gobject.rc into a resource object file. (This means we lose the
	build number increment magic, but I doubt it was that useful
	anyway.) Instead use windres directly. To pass the normal .o file
	produced by windres through libtool, which wants .lo files, pass
	it directly to the linker using a -Wl option.

	* gobject.rc.in: Thus replace BUILDNUMBER with 0.

2005-07-08  Matthias Clasen  <mclasen@redhat.com>
	
	* === Released 2.7.2 ===

2005-06-30  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.7.1 ===

2005-06-26  Tor Lillqvist  <tml@novell.com>

	* Makefile.am: libtool installs/uninstalls the import library, no
	need to do it ourselves. Do still install/uninstall the .def file,
	though.

2005-06-24  Tor Lillqvist  <tml@novell.com>

	* Makefile.am (install-libtool-import-lib): Current GNU tools do
	understand the PRIVATE keyword.

2005-06-19  Matthias Clasen  <mclasen@redhat.com>

	* gparam.h (GParamFlags): Avoid a warning.  (#308295,
	Murray Cumming).

2005-06-13  Matthias Clasen  <mclasen@redhat.com>

	* gparam.h (GParamFlags): Re-add G_PARAM_PRIVATE as a 
	deprecated name for bit 5, since some language bindings
	have it bound.

2005-06-10  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.7.0 ===

2005-05-20  Matthias Clasen  <mclasen@redhat.com>

	* gvaluetypes.c (g_value_set_string): dup the new value
	before freeing the old, just in case.  (#172142, Morten
	Welinder)

2005-05-13  Matthias Clasen  <mclasen@redhat.com>

	* glib-genmarshal.1: Mention 64bit integer types.

2005-05-05  Owen Taylor  <otaylor@redhat.com>

	* gobject.[ch] gobject.symbols: Add
	g_object_add/remove_toggle_ref() functions to get notification
	when a reference count is the last remaining reference; this
	enables better memory management for language bindings.
	(http://mail.gnome.org/archives/gtk-devel-list/2005-April/msg00095.html)

2005-04-29  Matthias Clasen  <mclasen@redhat.com>

	* gobject.symbols: 
	* gboxed.h (G_TYPE_DATE): 
	* gboxed.c: Add a boxed type for GDate. (#301787, Tim-Philipp 
	Müller)

2005-03-25  Matthias Clasen  <mclasen@redhat.com>

	* gparam.c (param_spec_ht_lookup): Don't do the second
	lookup if the name was already canonical.  (#171502, Morten
	Welinder)

Tue Mar 22 14:15:23 2005  Manish Singh <yosh@gimp.org>

	* gparam.c (g_param_spec_internal): cast away any constness on
	assignment.

2005-03-21  Matthias Clasen  <mclasen@redhat.com>

	* glib-mkenums.in: Avoid forcing extra newlines when using
	template files.  (#171005)

2005-03-20  Matthias Clasen  <mclasen@redhat.com>

	* gparam.c (g_param_spec_internal): Don't copy strings
	which are marked as static. Don't allow non-canonical static 
	names.

	* gparam.h (GParamFlags): Add G_PARAM_STATIC_{NAME,NICK,BLURB}
	flags.  (#160655, Ben Maurer)
	
2005-03-18  Hans Breuer  <hans@breuer.org>

	* makefile.msc.in : handle gobjectaliasdef.c

2005-03-14  Matthias Clasen  <mclasen@redhat.com>

	Make PLT-reduction work with gcc4, and don't include
	everything in gobjectalias.h:
	
	* gobject.symbols: Group symbols by header and source 
	file.
	* makegobjectalias.pl: Protect definitions by the same 
	preprocessor symbols used to guard the headers. Move
	the alias declarations to a separate file which is 
	produced when calling makegalias.pl -def
	* Makefile.am (gobjectaliasdef.c): Add a rule to 
	build this file.
	* *.c: Include gobjectalias.h after the other i
	GLib headers, include gobjectaliasdef.c at the bottom.

2005-03-08  Matthias Clasen  <mclasen@redhat.com>

	* gobject.symbols: Add the new attributes here, too.

	* gobject.h: Use G_GNUC_NULL_TERMINATED where
	appropriate.  (#164706, Marc Meissner)

	* gvaluearray.h: Small cleanup (use G_BEGIN/END_DECLS).
	(#168474, Fabricio Barros Cabral)

2005-02-24  Tor Lillqvist  <tml@novell.com>

	* Makefile.am (EXTRA_DIST): Don't distribute
	gobject.def. (#167496, J. Ali Harlow)

Sun Feb  6 22:00:46 2005  Manish Singh  <yosh@gimp.org>

	* abicheck.sh: feed the contents of config.h and glibconfig.h
	into the preprocessor, since glib.symbols could need #defines
	from them.

2005-01-12  Matthias Clasen  <mclasen@redhat.com>

	Cosmetic fixes (#163792, Benoît Carpentier):
	
	* gobject-query.c (main): Remove duplicate lines.

	* gvaluetransform.c: Remove duplicate definitions of
	value_transform_[u]int64_[u]int64.

2005-01-07  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.6.1 ===

2004-12-27  Matthias Clasen  <mclasen@redhat.com>

	* Makefile.am: Only check the ABI on linux, since
	the shell script is not portable.  (#161734, Adrian Bunk)

2004-12-16  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.6.0 ===
	
2004-12-02  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.5.7 ===
	
2004-11-30  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am (gobject.def): gcc -E complains "linker input file
	unused because linking not done" if told to preprocess the
	gobject.symbols file. Use '-' and redirection to pass it as
	standard input instead.

Sun Nov 28 13:21:12 2004  Manish Singh  <yosh@gimp.org>

	* abicheck.sh: filter G_GNUC before PRIVATE so $ is still true.

Sun Nov 28 01:37:54 2004    <timj@birnet.org>

	* gsignal.c: applied patch by sven@gimp.org (#153727) to reduce
	signal connection complexity from O(n_handlers) to O(1).

Thu Nov 25 14:09:41 2004  Manish Singh  <yosh@gimp.org>

	* abicheck.sh: filter out G_GNUC stuff when doing the compare.

2004-11-23  Matthias Clasen  <mclasen@redhat.com>

	* gobject.symbols: Typo fix.

	Fix a problem with the PLT reduction changes which caused the
	internal aliases to lose all attributes.
	
	* gobject.symbols: Add attribute annotations.
	* makegobjectalias.pl: Keep attribute annotations, but strip PRIVATE.
	* Makefile.am (gobject.def): Strip attribute annotations, but keep 
	PRIVATE.

	* gtypemodule.h (g_type_module_get_type): Mark as const,
	like all other get_type() functions.

2004-11-12  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.5.6 ===
	
Mon Nov  8 10:47:41 2004  Manish Singh  <yosh@gimp.org>

	* gobject/gsourceclosure.c: removed wrap_g_io_channel_ref() hack,
	since g_io_channel_ref() has a compatible API now.

2004-11-02  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.5.5 ===

2004-10-27 Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.5.4 ===

2004-10-27  Matthias Clasen  <mclasen@redhat.com>

	* abicheck.sh: Strip Win32 specific defs file syntax.

	* Makefile.am (gobjectalias.h): Fix srcdir != builddir 
	builds.  (#156447, Thomas Fitzsimmons)

2004-10-26  Matthias Clasen  <mclasen@redhat.com>

	* abicheck.sh: Don't include symbols which are just in the 
	symbols list for .defs file compatibility.

2004-10-23  Matthias Clasen  <mclasen@redhat.com>

	* gtype.h (GTypeInterfaceCheckFunc): Rename first parameter to 
	check_data, since apparently the system headers on AIX leak a
	macro named func_data.  (#155178, Andrea Campi)

Wed Oct  6 02:12:44 2004    <timj@birnet.org>

	* gtype.c (g_type_instance_get_private): applied patch from Jean-Yves 
	Lefort <jylefort@brutele.be> to not access the instance_real_class_bsa
	pointer without holding the instance_real_class lock.

2004-10-04  Matthias Clasen  <mclasen@redhat.com>

	* gsignal.c (g_signal_add_emission_hook): Improve the warning 
	if G_SIGNAL_NO_HOOKS is set.  (#154299, Nickolay V. Shmyrev)

2004-09-22  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am (install-libtool-import-lib): [Win32] Add code to
	remove the bug-compatibility entries (see #134813, and related
	comments below) from the import library. The PRIVATE keyword in
	the .def file is supposed to mean that, but it isn't implemented
	yet by GNU ld.

	* makegobjectalias.pl: In case the symbol is followed by some
	stuff ("PRIVATE") that's intended for the .def file, use just the
	actual symbol.

	* gobject.symbols: For binary bug compatibility on Win32, add the
	g_slist_remove_all and g_unichar_validate symbols inside #ifdef
	INCLUDE_INTERNAL_SYMBOLS. (See #134813 and log entries from March
	below.)

2004-09-18 Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.5.3 ===

Thu Sep 16 18:42:46 2004  Manish Singh  <yosh@gimp.org>

	* abicheck.sh: don't hardcode lengths for cut, instead split on
	the third field.

2004-09-16  Matthias Clasen  <mclasen@redhat.com>

	Implement the same PLT reduction technique used in GTK+:

	* Makefile.am: Generate gobjectalias.h from gobject.symbols.
	(BUILT_SOURCES): Add gobjectalias.h.

	* makegobjectalias.pl: Script to generate gobjectalias.h.

	* *.c: Include gobjectalias.h

2004-09-16  Matthias Clasen  <mclasen@redhat.com>

	Add ABI control using the same technique that is used in GTK+.
	
	* gobject.symbols: Master list of symbols.

	* gobject.def: Removed. It is now generated from gobject.symbols.

	* Makefile.am: Generate gobject.def from gobject.symbols.
	(TESTS): Add abicheck.sh
	(EXTRA_DIST): Add abicheck.sh
	(export_symbols): Don't export _-prefixed symbols.

	* gtype.h: 
	* gtype.c: Move the declarations of the various _init() functions
	to the header, and mark them as G_GNUC_INTERNAL.

2004-08-25 Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.5.2 ===

2004-08-01 Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.5.1 ===

2004-07-28  Matthias Clasen  <mclasen@redhat.com>

	* gtype.c (g_type_instance_get_private): Catch cases of 
	forgotten g_type_add_private().  (#148368, Tommi Komulainen) 

2004-07-21  Matthias Clasen  <mclasen@redhat.com>

	* glib-genmarshal.c (put_marshal_value_getters): Use the 
	correct fields for enums and flags.  (#145015, Tommi Komulainen) 

Sun Jul 18 18:03:08 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

	* === Released 2.5.0 ===

2004-07-12  Matthias Clasen  <mclasen@redhat.com>

	* gsignal.c (g_signal_handler_is_connected): Don't
	choke on a zero handler_id.

Tue Jul  6 00:46:43 2004  Matthias Clasen  <maclas@gmx.de>

	* gtypemodule.h: 
	* gtypemodule.c: Fix the declarations of the new 
	functions to return GType, not void. 
	Also add missing includes.  (#145508, Morten Welinder)

Tue Jul  6 00:46:43 2004  Matthias Clasen  <maclas@gmx.de>

	* gtypemodule.h: 
	* gtypemodule.c (g_type_module_register_flags): 
	* gtypemodule.c (g_type_module_register_enum): New 
	functions to register enum and flags types from a 
	GTypeModule.  (#145396, Sven Neumann)

Wed Jun 23 12:55:34 2004  Matthias Clasen  <maclas@gmx.de>

	* gtype.h (G_DEFINE_TYPE_EXTENDED): Add an initializer for
	the g_define_type_info.value_table.  (#144678, Mariano 
	Suárez-Alvarez) 

Tue Jun 22 21:50:47 2004  Matthias Clasen  <maclas@gmx.de>

	* gsignal.c: Fix a couple of typos.

Fri Jun 18 22:53:13 2004  Matthias Clasen  <maclas@gmx.de>

	* gsourceclosure.h (__G_SOURCECLOSURE_H__): Actually 
	define the guard after checking for it.  (#108038, 
	Morten Welinder)

2004-04-30  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.4.1 ===

2004-04-22  Matthias Clasen  <mclasen@redhat.com>

	* glib-mkenums.in: Actually convert escape chars in 
	--vprod.   (#139058, Christophe Saout)

2004-04-15  Matthias Clasen  <mclasen@redhat.com>

	* gparamspecs.c (param_float_init): Correct the initial 
	minimal value to be -G_MAXFLOAT. The initial values were 
	inconsistant before, with the initial default being smaller 
	than the inital minimum.	
	(param_double_init): Correct the initial minimal value 
	to be -G_MAXDOUBLE.

Tue Mar  9 09:16:11 2004  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.4.0 ===

2004-03-10  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Mark the two entries that shouldn't be in the
	import library (see below) as PRIVATE.

Tue Mar  9 09:16:11 2004  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.3.6 ===

2004-03-04  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Another of the glib DLL's functions was erronously
	present in the stable branch's gobject.def: g_unichar_validate,
	and nobody noticed until too late. Thus there are applications
	deployed that expect it to be found in the gobject DLL, and to
	keep ABI compatibility, we must keep it there forever. Argh.

Mon Mar  1 16:49:51 2004  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.3.5 ===

2004-03-01  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add g_slist_remove_all back for ABI
	compatibility. That entry point actually is in the glib DLL, but
	it was at some time many years ago by mistake added to
	gobject.def. Thus there presumably are executables out there that
	expect it to be exported from the gobject DLL. We don't want to
	break those. (#134813, J. Ali Harlow)

Fri Feb 27 01:49:22 2004  Matthias Clasen  <maclas@gmx.de>

	* glib-mkenums.in: Support parsing of intializers containing
	macros with arguments.  (#129717)

2003-02-28  Hans Breuer  <hans@breuer.org>

	* gobject.def : added g_strv_get_type

Tue Feb 24 14:09:21 2004  Owen Taylor  <otaylor@redhat.com>

	* === Released 2.3.3 ===

Fri Feb 20 02:44:54 2004  Tim Janik  <timj@gtk.org>

	* gtype.h (G_DEFINE_TYPE_EXTENDED): added (GTypeFlags) cast needed by C++.

Tue Feb  3 21:24:01 2004  Tim Janik  <timj@gtk.org>

	* gtype.h (_G_TYPE_CVH): provide a short-cut version for
	this macro in case value->g_type==checked_type for gcc, similar
	to instance and class check short-cuts. this speeds up code that
	makes frequent use of G_VALUE_HOLDS_*() (e.g. setters/getters).

	* gtype.c (type_data_last_unref_Wm): don't call class-cache functions
	for the uncached case, this rendered g_type_class_unref_uncached()
	useless. pointed out by Stefan Westerfeld.

Sat Jan 24 18:20:13 2004  Tim Janik  <timj@gtk.org>

	* gtype.h: prefixed the parent_class variable defined by G_DEFINE_TYPE()
	with type_name. removed type_parent_class argument
	from G_DEFINE_TYPE_EXTENDED().

2004-01-24  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add a missing entry.

Sun Jan 11 15:34:35 2004  Manish Singh  <yosh@gimp.org>

	* gsourceclosure.c: wrap g_io_channel_ref in a function that returns
	the passed in GIOChannel, so we aren't abusing GBoxedCopyFunc
	semantics. Fixes bug #131076.

Sat Jan 10 23:55:42 2004  Matthias Clasen  <maclas@gmx.de>

	* glib-mkenums.1: Document the lowercase_name trigraph option.

Sat Jan 10 02:43:20 2004  Tim Janik  <timj@gtk.org>

	* gtype.h: made G_DEFINE_TYPE_INTERNAL() public by renaming it to
	G_DEFINE_TYPE_EXTENDED() and moving it into the appropriate section.

Fri Jan  9 23:41:00 2004  Matthias Clasen  <maclas@gmx.de>

	* gboxed.h:
	* gboxed.c (g_strv_get_type): Add a boxed type for nul-terminated
	string arrays.  (#110528)

Fri Jan  9 15:34:15 2004  Tim Janik  <timj@gtk.org>

	* gtype.h: added convenience macros G_IMPLEMENT_INTERFACE() and
	G_DEFINE_TYPE() plus variants.

2003-12-30  Murray Cumming  <murrayc@usa.net>
  
        * gobject/glib-mkenums.in: Added a lowercase_name option, to be used
        next to the enum declaration, where the flag option is already used,
        when it is not possible to guess where to put the underscores in the
        _get_type() function name, for instance for GNOMEVFSURIHide.

Fri Dec 26 01:34:01 2003  Matthias Clasen  <maclas@gmx.de>

	* gtype.c (g_type_class_peek_parent): Don't acquire a read lock 
	here.  (#106433, Owen Taylor)

Wed Dec 17 23:29:17 2003  Matthias Clasen  <maclas@gmx.de>

	* gvalue.c (g_value_peek_pointer): Use g_assert() instead of
	g_return_val_if_fail(), suggested by Sheldon Simms.

2003-12-13  Hans Breuer  <hans@breuer.org>

	gobject.def : update externals

Sat Nov 29 14:57:20 2003  Tim Janik  <timj@gtk.org>

	* gobject.c: fix g_object_set() within _init() implementations
	not working for construct-only properties.
	(g_object_init): make the object enter a construct_objects list.
	(g_object_newv): remove object from construct_objects after creation.
	(g_object_set_valist):
	(g_object_set_property): allow construct-only properties for
	objects which are in construct_objects.

Thu Nov 27 17:53:52 2003  Tim Janik  <timj@gtk.org>

	* gtype.[hc]:
	(g_type_class_peek_static): variant of class_peek() which works for
	static types only.

	* gobject.c:
	(g_object_do_class_init): make ::notify a run-action signal.
	(g_object_newv): use g_type_class_peek_static() by default to
	speed up common code path (trades two write-locks for one read-lock).
	(g_object_disconnect):
	(g_object_connect): allow signal specification words to be
	seperated by '-'.
	(g_object_set_valist):
	(g_object_new_valist): don't leak values.
	(g_object_get_property): check property for readability.
	(g_object_set_property): check property for writability and to
	not be construct-only.
	(g_object_set_valist): check property to not be construct-only.

Sat Oct 25 01:09:17 2003  Matthias Clasen  <maclas@gmx.de>

	* gparam.h (struct _GParamSpecClass): Add /*< private >*/ 
	marker for documentation purposes.

Tue Oct 21 23:17:06 2003  Matthias Clasen  <maclas@gmx.de>

	* genums.h (struct _GEnumClass): 
	* genums.h (struct _GFlagsClass): 
	* gtypemodule.h (struct _GTypeModuleClass):
	* gtypemodule.h (struct _GTypeModule): Add /*< public >*/ 
	and /*< private >*/ markers for documentation purposes.

Tue Oct 14 17:40:19 2003  Owen Taylor  <otaylor@redhat.com>

	* gparamspecs.[ch]: Add a new GParamSpecOverride type
	that is a pointer to a different paramspec in a parent
	class or interface.

	* gparam.[ch]: Add g_paramspec_get_redirect_target()
	which follows GParamSpecOverride to the real property.
	Make g_param_spec_pool_list() hand redirections, 
	properties on interfaces.

	* gobject.[ch] gobjectnotifyqueue.c: Add
	g_object_interface_install_property,
	g_object_interface_find_property,
	g_object_interface_list_properties(). Redirect virtually all
	publically exposed GParamSpec's to the redirect target if
	any. (->constructor is the exception.)
	(#105894)

Mon Oct 20 22:06:12 2003  Matthias Clasen  <maclas@gmx.de>

	* gobject.h (struct  _GObjectClass): Add /*< public >*/
	and /*< private >*/ markers for documentation purposes.

Sat Oct 18 01:24:14 2003  Matthias Clasen  <maclas@gmx.de>

	* gtypeplugin.h (struct _GTypePluginClass): Add /*< public >*/
	and /*< private >*/ markers for documentation purposes.

Thu Oct  2 07:37:12 2003  Tim Janik  <timj@gtk.org>

	* gtype.c: fix post class_init interface initialization logic
	for child types.

Thu Oct  2 01:16:50 2003  Owen Taylor  <otaylor@redhat.com>

	* gtype.[ch]: Add g_type_add/remove_interface_check(),
	which allows inserting a post-interface-initialization
	check.

	* testgobject.c: Fix a deprecated usage.

Mon Sep 29 10:51:01 2003  Owen Taylor  <otaylor@redhat.com>

	* gtype.[ch]: Add g_type_default_interface_ref/peek/unref
	for accessing the default vtable of an interface.

Fri Sep 26 17:24:53 2003  Owen Taylor  <otaylor@redhat.com>

	* gtype.c (g_type_instance_get_private): You can
	have instance_real_class_bsa be non-NULL, but still 
	the class not be in the bsa. (Found by Kris Rietveld)

2003-09-15  Matthias Clasen  <maclas@gmx.de>

	* glib-genmarshal.c (complete_out_arg): Don't generate code 
	using deprecated APIs.  (#122292, Christian Persch)

Fri Sep 12 16:31:40 2003  Owen Taylor  <otaylor@redhat.com>

	* gsignal.[ch]: Add g_signal_accumulator_true_handled(), to
	do TRUE-stops-emit signals. (#80487, Ron Steinke)

	* Makefile.am: Move testoverride.c and testifaceinit.c to
	tests/gobject.

2003-09-12  Matthias Clasen  <maclas@gmx.de>

	Make the g_value_set_x_take_ownership() functions "official"
	part of the API (#100948):
	
	* gvaluetypes.[hc]: Add g_value_take_string() (synonym to the
	now deprecated g_value_set_string_take_ownership()).  

	* gparam.[hc]: Add g_value_take_param() (synonym to the
	now deprecated g_value_set_param_take_ownership()).  

	* gobject.[hc]: Add g_value_take_object() (synonym to the
	now deprecated g_value_set_object_take_ownership()).  

	* gboxed.[hc]: Add g_value_take_boxed() (synonym to the
	now deprecated g_value_set_boxed_take_ownership()).  

Tue Sep  2 19:37:21 2003  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: added support for a "default vtable" per interface,
	that interface vtables are initialized from.
	the default vtable is initialized and finalized through class_init,
	class_finalize and class_data from the interfaces GTypeInfo struct.
	(type_data_last_unref_Wm): unload child plugin before unreffing
	parent type.

	testifaceinit.c: minor fixups. fixed up base_init() assertions, since
	with a default vtable, base_init() may be called multiple times.
	added default initializer to iface1.

Tue Sep  2 14:53:41 2003  Tim Janik  <timj@gtk.org>

	* gobject-query.c (main): fix iterating over fundamental types.

	* gtype.c: applied patch from owen which keeps internal
	class initialization state to maintain class and interface
	initialization happen in the order of:
	1. class' base_init
	2. interface' base_init
	=  interfaces added after here are immediately base_init-ialized
	3. class_init
	4. Interface_init
	=  interfaces added here are immediately Interface_init-ialized

Wed Aug 27 19:53:26 2003  Manish Singh  <yosh@gimp.org>

	* gobject.c: removed stray change from previous commit.

Wed Aug 27 01:25:40 2003  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am testifaceinit.c: Add a detailed test case
	for interface initialization, testing the ability to
	add interfaces during class initialization and the ordering
	of interface base_init, class init, and interface_init.
	(Expected to fail at the moment.)

Mon Aug 25 14:51:46 2003  Manish Singh  <yosh@gimp.org>

	* gtypemodule.c (g_type_module_register_type): fix typo in last
	commit, cast to GTypeValueTable * to get rid of const warning.

Mon Aug 25 14:16:48 2003  Owen Taylor  <otaylor@redhat.com>
 
 	* gtypemodule.c (g_type_module_register_type): Clarify
 	docs on the return. Fix a memory leak if a type with a
 	value table is reloaded. (#112439, Daniel Yacob)
 
Tue Aug 19 05:21:04 2003  Tim Janik  <timj@gtk.org>

	* testgobject.c (main): check private instance data after
	initialization.

	* gtype.c: for instances with private data, store the real class
	pointer in a bsearch array during class initialization.
	(g_type_instance_get_private): fetch the real class of
	an instance from the bsearch array if necessary.

Tue Aug 19 04:08:14 2003  Tim Janik  <timj@gtk.org>

	* gvalue.c: adapt to new gbsearcharray.h code.
	(g_value_register_transform_func): turn transform function
	replacement into a valid operation.

        * gsignal.c: adapt to new gbsearcharray.h code.
	
	* gboxed.c: adapt to new gbsearcharray.h code.

Tue Aug 19 01:31:28 2003  Tim Janik  <timj@gtk.org>

	* gsignal.c: added optimizations to skip NOP signal emissions.

2003-08-08  Matthias Clasen  <maclas@gmx.de>

	* gobject.c (object_set_property): Improve the wording of the warning for invalid 
	values.  (#117246, Mariano Suarez-Alvarez)
	
Wed Aug  6 09:57:14 2003  Owen Taylor  <otaylor@redhat.com>

	* testgobject.c (test_signal_accumulator): Add check
	for instance private usage within in instance_init.
	(Currently will fail.)

2003-07-20  Hans Breuer  <hans@breuer.org>

	* gobject.def : updated externals

Tue Jul  8 22:29:31 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

	* gtype.c (type_class_init_Wm): Only access node->data->instance
	when the node is instantiable.

Tue Jul  8 14:55:27 2003  Owen Taylor  <otaylor@redhat.com>

	* gtype.c (type_class_init_Wm): Initialize
	node->data->instance.private_size here rather than
	in type_data_make_W() since the class init for the parent
        class may have changed pnode->data->instance.private_size.
	(#116921, reported by Soeren Sandmann)

2003-06-18  Matthias Clasen  <maclas@gmx.de>

	* Makefile.am (man_MANS): Removed, these are now installed from
	docs/reference/gobject.

Fri May 30 14:42:24 2003  Owen Taylor  <otaylor@redhat.com>
 
 	* gobject.c (g_value_set_object): Order refs/unrefs
 	so setting the same object back is safe. (#112861,
 	Morten Welinder)
 
2003-03-24  Sven Neumann  <sven@gimp.org>

	* gtype.c (type_data_finalize_class_ifaces_Wm): removed leftover
	debugging message (bug #109093).

Thu Feb 27 17:33:19 2003  Owen Taylor  <otaylor@redhat.com>

	* gtype.[ch] testgobject.c: Add support for instance-private data. 
	g_type_class_add_private(), g_type_instance_get_private(),
	G_TYPE_INSTANCE_GET_PRIVATE(). (#101959, patch partly by
	Mark McLoughlin, extensive feedback from Tim Janik.)

2003-03-06  Matthias Clasen  <maclas@gmx.de>

	* gsignal.c (g_signal_handlers_block_matched): 
	(g_signal_handlers_unblock_matched): 
	(g_signal_handlers_disconnect_matched): Fix 0/FALSE confusion.
	(#107662, Morten Welinder)

Mon Feb 17 20:59:47 2003  Tim Janik  <timj@gtk.org>

	* gvalue.c (g_value_register_transform_func): don't assert the types
	passed in to have value tables. this prevents dynamic types from
	registering transform functions.

Sun Feb  9 13:44:01 2003  Soeren Sandmann  <sandmann@daimi.au.dk>

	* gboxed.c (boxed_proxy_value_init): remove lookup of unused
	BoxedNode.

2003-02-07  Matthias Clasen  <maclas@gmx.de>

	* gtypemodule.c: 
	* gtype.c: 
	* gsourceclosure.c: 
	* gparamspecs.c: 
	* gparam.c: 
	* gobject.c: 
	* gsignal.c: Remove all docs from gobject at Tims
	request. Documentation is only for weenies anyway...	

2003-01-12  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add g_type_interface_prerequisites. Thanks to
	Kenichi SUTO.

2002-12-18  Matthias Clasen  <maclas@gmx.de>

	* gobject.c: Add docs.

2002-12-18  Michael Natterer  <mitch@gimp.org>

	* gobject/gtype.c (type_data_finalize_class_ifaces_Wm): applied
	patch I got from Tim Janik for testing which fixes bug #101521.
	(restart iterating the interface enties each time we finalized one
	because they might have been modified).

2002-12-17  Matthias Clasen  <maclas@gmx.de>

	* gparam.c (g_param_spec_internal): Remove markup from doc
	comment, as GObject doesn't use --sgml-mode yet.

2002-12-15  Matthias Clasen  <maclas@gmx.de>

	* gsignal.c (g_signal_new): Typo fix.

	* gparamspecs.c:  
	* gparam.c (g_param_spec_internal): 
	* gobject.c (g_object_class_install_property): Add docs.

2002-12-13  Matthias Clasen  <maclas@gmx.de>

	* glib-genmarshal.c, gobject-query.c: Use g_printf() instead of 
	system printf.  (#99319)

Thu Dec 12 15:00:10 2002  Manish Singh  <yosh@gimp.org>

	* gvaluetransform.c: use G_G[U]INT64_FORMAT unconditionally,
	since we'll always have it now.

2002-12-07  Matthias Clasen  <maclas@gmx.de>

	* gparam.c (canonalize_key): Rename to canonicalize_key. Adjust
	all callers.

2002-12-05  Matthias Clasen  <maclas@gmx.de>

	* gsignal.c (g_signal_new): Explain allowed signal names in more
	detail.

2002-12-04  Matthias Clasen  <maclas@gmx.de>

	* gsignal.h (g_signal_add_emission_hook): 
	* gtype.h (g_type_interface_get_plugin): Sync parameter names with
	docs and implementation.

	* gtype.c (g_type_add_interface_dynamic): 
	(g_type_interface_get_plugin): 
	(g_type_interface_peek_parent): 
	(g_type_query): Add docs.

2002-12-03  Matthias Clasen  <maclas@gmx.de>

	* gtype.c (g_type_get_qdata): 
	(g_type_set_qdata): 
	(g_type_interface_add_prerequisite): Add docs.

2002-12-02  Matthias Clasen  <maclas@gmx.de>

	* gobject.c (g_signal_connect_object): Add docs.

2002-11-30  Matthias Clasen  <maclas@gmx.de>

	* gsignal.c: More docs.

2002-11-28  Matthias Clasen  <maclas@gmx.de>

	* gtype.c (g_type_interface_prerequisites): Document as 2.2 
	API addition.

Thu Nov 21 16:05:50 2002  Owen Taylor  <otaylor@redhat.com>

	* gtype.c (g_type_check_instance_cast): Allow
	NULL to be cast to any type. (Frequently requested,
	most recently #99023, Lars Clausen.)

Mon Nov  4 14:42:36 2002  Owen Taylor  <otaylor@redhat.com>
 
 	* gtype.c gsignal.c gvaluearray.c: Include config.h
 	so DISABLE_MEMPOOLS actually has an effect.
 	(#96437, Morten Welinder)
 
 	* gsignal.c: Conditionalize definition of g_handler_ts
 	on DISABLE_MEM_POOLS (#96437)
	
2002-10-20  Matthias Clasen  <maclas@gmx.de>

	* gtype.c (g_type_interface_prerequisites): Report only the most
	specific instantiatable prerequisite, filter out all supertypes of
	this one (the supertypes are added to the prerequisites array for
	technical reasons).

2002-10-16  Matthias Clasen  <maclas@gmx.de>

	* glib-mkenums.in: Support for template files.
	
	* glib-mkenums.1: Document --template.

2002-10-15  Matthias Clasen  <maclas@gmx.de>

	* gtype.c (g_type_interface_prerequisites): New function to obtain
	the prerequisites of an interface type.

Sat Oct 12 22:02:32 2002  Tim Janik  <timj@gtk.org>

	* merged up from 2.0:

        * testgobject.c: test creation of new fundamental types.

        * gtype.c (g_type_fundamental_next), (type_node_fundamental_new_W):
        account for static_fundamental_next storing non-shifted fundamental
        IDs. this fixes g_type_fundamental_next() not returning a new usable
        fundamental ID.

Wed Sep 11 16:50:20 2002  Dom Lachowicz <cinamod@hotmail.com>

	* gtype.h: Fix problems with excessive C++ warnings: "ISO C++ forbids nested groups within expressions"
	
Fri Jul 26 15:46:36 2002  Owen Taylor  <otaylor@redhat.com>

	* gvaluetransform.c: Fix problems with excess ';'
	by addition of strategic 'extern void glib_dummy_decl (void)'
	(#83272, David L. Cooper II)

Thu Jul 25 20:34:39 2002  Owen Taylor  <otaylor@redhat.com>

	* gtype.c (g_type_interface_add_prerequisite): When
	adding ancestral prerequisites, add the grandparents,
	not the siblings. (Problem found by Jon Trowbridge, patch from 
	Dave Camp, #86879)

2002-07-05  Anders Carlsson  <andersca@gnu.org>

	* gobject.c (g_object_base_class_finalize): Remove debugging
	message, approved by Tim Janik.

2002-06-11  Anders Carlsson  <andersca@gnu.org>

	* gtypemodule.c: (g_type_module_complete_interface_info):
	* gtypeplugin.h:
	Fix argument order. Fixes #82806.
	
Mon May 20 15:57:47 2002  Owen Taylor  <otaylor@redhat.com>

	* gsignal.c: When printing errors, handle NULL
	returns from g_type_debug(). (#73559, Laszlo Peter)

	* gtype.c (type_descriptive_name_I): De-inline,
	since it's only used for debugging.

Tue May  7 15:03:02 2002  Owen Taylor  <otaylor@redhat.com>

        * glib-genmarshal.c: Fix include order for config.h (#71704,
        Morten Welinder)

2002-05-07  Michael Natterer  <mitch@gimp.org>

	* Makefile.am: use the glib-genmarshal found at configure time
	if CROSS_COMPILING is set, use the one which was just built
	otherwise.

Mon May  6 16:06:23 2002  Owen Taylor  <otaylor@redhat.com>

	[ merged from stable ]

	* gobject.c: Remove PROPERTIES_CHANGED enumeration
	value that wasn't used any more. (#78833, 
	Matthias Clasen)

	* gboxed.c (g_boxed_copy): Remove check on data[2]
	that no longer exists. (#80814, Daniel Elstner)

Tue Mar 26 15:21:47 2002  Owen Taylor  <otaylor@redhat.com>

	* gsignal.h (g_signal_handlers_*_by_func): Add explicit
	cast of G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA to
	GSignalMatchType so that these macros work for C++.
	(#76454, Damien Sandras)

Mon Mar 25 17:51:05 2002  Owen Taylor  <otaylor@redhat.com>

	* glib-mkenums.in (parse_entries): Fix various bugs and
	excessive stack usage that crept in the conversion from
	gtk-mkenums. (#74431)

Mon Mar 25 17:25:57 2002  Owen Taylor  <otaylor@redhat.com>

	* gtype.c (g_type_free_instance): Wrap setting freed instance
	memory to 0xaa in #ifdef G_ENABLE_DEBUG

Thu Mar 21 01:28:14 2002  Tim Janik  <timj@gtk.org>

	* gsignal.[hc]:
	* gobject.[hc]: fix extraneous include.

Tue Mar 19 18:57:12 2002  Tim Janik  <timj@gtk.org>

	* gtype.c (check_add_interface_L): applied patch from Matthias Clasen
	<maclas@gmx.de> to check for prerequisite of interfaces, fixes #74427.
	fixed mutex recursion in his patch (we can't call g_type_is_a() while
	holding a read lock).

	* gparam.c (canonalize_key): cleanup.

2002-03-13  Alexander Larsson  <alla@lysator.liu.se>

	* gparam.c (canonalize_key):
	Function to canonicalize parameter names. Faster than
	using g_strcanon().
	(g_param_spec_internal, param_spec_ht_lookup):
	Use canonalize_key.

2002-03-13  Erwann Chenede  <erwann.chenede@sun.com>
        * gobject/gclosure.c  
	* gobject/gobject.c 
	* gobject/gsignal.c: fixed cast problems with function pointer
	to avoid warnings (with forte compiler) (#73898)
	
2002-03-05  Sven Neumann  <sven@gimp.org>

	* gvaluetransform.c (g_value_transforms_init): don't try to 
	register undeclared value transform functions if G_GINT64_FORMAT
	or G_GUINT64_FORMAT are undefined (#73586).

2002-03-03  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in
	* makefile.mingw.in: Rename testgruntime to testgobject here, too.

Sun Mar  3 04:11:58 2002  Tim Janik  <timj@gtk.org>

	* gobject.c: placed a comment about not changing CArray until we have
	g_object_list_watched_closures().

	* gparam.h (struct _GParamSpecClass): added padding.

	* gobjectnotifyqueue.c (struct _GObjectNotifyQueue): abuse
	g_list_alloc() to allocate GObjectNotifyQueue to et rid
	of locking issues.

Tue Feb 26 10:51:00 2002  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (testgobject_LDADD): Rename testgruntime
	to testgobject.

Sun Feb 24 22:08:29 2002  Owen Taylor  <otaylor@redhat.com>

	* gtypemodule.[ch] (g_type_module_add_interface): Make
	GInterfaceInfo paramter const to correspond to the
	conventions for the g_type_add_interface() functions.
	(#72461, Miroslaw Dobrzanski-Neumann)

Sat Feb 23 13:28:56 2002  Owen Taylor  <otaylor@redhat.com>

	* gtypeplugin.h (struct _GTypePluginClass): Add some
	padding to the class.

	* gclosure.h (struct _GClosure): Fix typo in comment.

2002-02-20  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add g_value_set_object_take_ownership and
	g_value_set_param_take_ownership.

Wed Feb 20 22:55:15 2002  Owen Taylor  <otaylor@redhat.com>

	* gobject.c: Fix implicit conversions between void * and 
	function pointer (Miroslaw Dobrzanski-Neumann, #71963)

Sun Feb 16 22:08:48 2002  Tim Janik  <timj@gtk.org>

	* gobject.[hc]:
	* gparam.[hc]: provide marshaller specific value_set_*_take_ownership()
	variants.

	* gvalue.h: shrink GValue's data contents to 2 unions.

	* glib-genmarshal.c: fix release and realeas_check hackage by always
	using _take_ownership() variants. directly access value contents if
	G_ENABLE_DEBUG is not defined.

	* gobject.h: add padding pointers to the class struct.

Wed Feb 13 17:22:37 2002  Tim Janik  <timj@gtk.org>

	* gtype.c (g_type_value_table_peek): fixed a check for node not being NULL.

Wed Feb 13 06:53:50 2002  Tim Janik  <timj@gtk.org>

	* gparam.c: remove extraneous redefinition of G_PARAM_SPEC_CLASS().

Wed Feb 13 06:29:51 2002  Tim Janik  <timj@gtk.org>

	* gvaluetransform.c: cosmetic cleanups, fixed [u]int64->string
	conversions.

	* ChangeLog: added entry from owen which went into the wrong
	file.

Fri Feb  8 23:52:27 2002  Owen Taylor  <otaylor@redhat.com>

        * gobject/gvaluetransform.c: Register transformations for
        gint64, guint64. (#70780, patch from Andy Wingo)

2002-02-10  Hans Breuer  <hans@breuer.org>

	* gvaluetransform.c : msvc 5.0 can't cast from uint64 to
	double. Disable respective transform_func than.

	* makefile.msc.in : build test programs

Thu Jan 24 07:39:56 2002  Tim Janik  <timj@gtk.org>

	* gobject.c (g_signal_connect_object): return gulong instead
	of guint.

Fri Jan 11 12:26:36 2002  Tim Janik  <timj@gtk.org>

	* gparamspecs.c: fixed param_value_array_values_cmp(),
	param_value_array_validate() and
	param_value_array_set_default() to deal with NULL value
	arrays.

Wed Jan  9 05:23:27 2002  Tim Janik  <timj@gtk.org>

	* gobject.h (G_OBJECT_WARN_INVALID_PROPERTY_ID): cosmetic fix.

2002-01-05  Hans Breuer  <hans@breuer.org>

	* makefile.msc.in : use -FImsvc_recommended_pragmas.h

Fri Jan  4 04:36:46 2002  Tim Janik  <timj@gtk.org>

	* gtype.h (G_TYPE_FLAG_RESERVED_ID_BIT): turn this into a GType,
	so negating it works on 64bit platforms.

2001-12-21  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add g_signal_get_invocation_hint.

Tue Dec 18 21:39:57 2001  Tim Janik  <timj@gtk.org>

	* testoverride.c: added some assertions to test
	g_signal_get_invocation_hint().

	* gsignal.[hc]: remove signal_id argument from
	g_signal_chain_from_overridden(), the parameters are assumed to match
	the innermost signal currently in emission for this instance.
	added g_signal_get_invocation_hint() to figure the invocation hint
	of the innermost signal emission of an instance.

	* gsignal.c (g_signal_list_ids): fix G_BSEARCH_ARRAY_NODES() to
	access a bsearch array and not a pointer to it (discovered by
	Sven Neumann).

2001-12-17  Anders Carlsson  <andersca@gnu.org>

	* gtype.h (G_TYPE_FLAG_RESERVED_ID_BIT): Set the reserved bit
	to (1 << 0) instead of (1 << 30). 

2001-12-14  James Henstridge  <james@daa.com.au>

	* Makefile.am: add rules to build it.

	* testoverride.c: test program for closure override/chaining.

Thu Dec 13 08:03:17 2001  Tim Janik  <timj@gtk.org>

	* gsignal.c: implemented closure chaining.

2001-12-08  Christopher Blizzard  <blizzard@redhat.com>

	* gsignal.h (g_signal_connect): Explicitly add a cast to the last
	argument so that the macro will work from C++.

2001-12-06  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in (gobject_OBJECTS): Add gsourceclosure.o.

Mon Nov 26 09:55:12 2001  Tim Janik  <timj@gtk.org>

	* gtype.h: typedef GType to gulong instead of gsize, if possible.

	* gtype.c: fixups for GType being sizeof(long) wide (changed
	UINT casts).
	* gsignal.c:
	* gclosure.c:
	* gparam.c: likewise.

Sun Nov 25 22:33:32 2001  Tim Janik  <timj@gtk.org>

	* gtype.h: removed enum GTypeFundamentals. use macros
	to provide the constant fundamental type IDs, so they
	all return numbers of type GType, and not int.
	sizeof(GTypeFundamentals) < sizeof(GType) problem reported
	and fix sugegsted by Havoc.

2001-11-23  Hans Breuer  <hans@breuer.org>

	* gobject.def : updated externals

Mon Nov 19 14:35:56 2001  Owen Taylor  <otaylor@redhat.com>
 
 	* *.h: Improve the detection of invalid includes by moving
 	the test outside the duplicate include guards.
 
	* gsourceclosure.c (g_source_set_closure): Doc fix.

Thu Nov 22 03:30:57 2001  Tim Janik  <timj@gtk.org>

	* gvalue.h (G_TYPE_IS_VALUE): use g_type_check_is_value_type()
	instead of g_type_value_table_peek().

	* gtype.[hc] (type_check_is_value_type_U): speed up check
	LOCK-less by caching lookups in node->mutatable_has_value_table.

	* gtype.[hc]: removed locks where possible. partly based on
	patches from owen and alex.

Thu Nov 22 00:26:26 2001  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: provide G_TYPE_FUNDAMENTAL_SHIFT and
	g_type_fundamental_next() to return next usable fundamental
	type. use TypeNode pointers as type IDs.
	
2001-11-22  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in (DEFINES): Set G_LOG_DOMAIN as in Makefile.am.

	* gparamspecs.h (GOBJECT_VAR): Can't use GLIB_VAR here, as that
	makes sense only when building libglib. GOBJECT_VAR is similar for
	libgobject.

	* gobject.def: Add g_param_spec_types, remove
	g_type_fundamental_branch_last.

Wed Nov 21 17:23:33 2001  Tim Janik  <timj@gtk.org>

	* gparamspecs.[hc]: put newly created param spec types into a
	global array.

	* gboxed.[hc]: moved boxed types with _get_type() function here,
	for: G_TYPE_CLOSURE, G_TYPE_VALUE, G_TYPE_VALUE_ARRAY,
	G_TYPE_GSTRING.

	* gtype.h: removed fundamental branch APIs and derived enum
	values. define GType as gsize.

2001-11-19  jacob berkman  <jacob@ximian.com>

	* gobjectnotifyqueue.c: include glib-object.h rather than
	gobject/gobject.h

2001-11-16  Mark McLoughlin  <mark@skynet.ie>

	* glib-mkenums.in: allow the enums name to not be on the same
	line as the trailing '}'. (#64714)

2001-11-18  Hans Breuer  <hans@breuer.org>

	* makefile.msc.in : remove g_log_domain_gruntime usage

Sat Nov 17 18:14:40 2001  Owen Taylor  <otaylor@redhat.com>

	* glib-genmarshal.c: Exit with non-zero exit status if
	any errors were encountered.

	* glib-genmarshal.c: Instead of generating gobject/gmarshal.h
	#include only for the header, generate glib-object.h 
	#include for both the header and body. (#63834)

	* glib-genmarshal.c: Generate include guards around the 
	content unless --nostdinc is specified.

2001-11-17  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add g_pointer_type_register_static.

2001-11-15  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Reflect recent changes.

Tue Nov 13 23:18:10 2001  Tim Janik  <timj@gtk.org>

	* gsignal.[hc]: add API for chaining:
	g_signal_chain_from_overridden() and g_signal_override_class_closure(),
	implementation yet to come.

	* gtype.[hc], Makefile.am: provide G_LOG_DOMAIN as compile flag.
	
	* gparam.[hc]: s/g_param_get/g_param_spec_get/ for get_nick,
	get_name and get_blurb, to be consistent with the rest of the
	g_param_spec_*() functions.
	
	* gparamspecs.[hc]: got rid of bogus GClosure paramspec.
	G_TYPE_CLOSURE is a boxed type already.
	
Tue Nov 13 22:16:41 2001  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: API cleanups.
	remove g_type_check_flags(), provide g_type_test_flags() as
	a *private* function.
	s/g_type_check_is_a/g_type_check_class_is_a/, private function.
	s/g_type_instance_is_a/g_type_check_instance_is_a/, also private.

Tue Nov 13 20:02:47 2001  Tim Janik  <timj@gtk.org>

	* gparam.h: fix standard type macros.

Wed Nov  7 00:56:00 2001  Tim Janik  <timj@gtk.org>

	* gclosure.h: provide G_CLOSURE_N_NOTIFIERS() for people that need
	to walk the notifier list (puhh, black magic, stay-away-warning ;).

Mon Nov  5 18:59:08 2001  Tim Janik  <timj@gtk.org>

	* gobject.h: 
	* gsignal.h: we need signal.h for G_BREAKPOINT().

Sun Nov  4 14:01:23 2001  Owen Taylor  <otaylor@redhat.com>

	* gvaluetypes.[ch]: Add a function g_pointer_type_register_static()
	to register a type derived from G_TYPE_POINTER.

2001-11-03  Hans Breuer  <hans@breuer.org>

	* makefile.msc.in : gobject-query needs gmarshal.[hc,stings]
	so build it after them. Add gsourceclosure.obj. 

	* gobject.def : removed duplicates, added mising

Mon Oct 29 11:05:15 2001  Owen Taylor  <otaylor@redhat.com>

	* glib-mkenums.in: Generate glib-mkenums from glib-mkenums.in, 
	substituting in path to perl.  (#63093, Dan Winship)

	* Makefile.am (bin_SCRIPTS): Remove hack to copy glib-mkenums
	from srcdir.

2001-10-26  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in: When running glib-genmarshal, set PATH to
	include ../glib.

2001-10-23  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am: (Win32): If we have built the MSVC import library,
	install it. Install the gcc import library. Also support
	uninstall.

2001-10-13  Matthias Clasen  <matthiasc@poet.de>

	* glib-genmarshal.1, glib-mkenums.1: Typo fixes.

Fri Oct 12 18:40:18 2001  Tim Janik  <timj@gtk.org>

	* cosmetic fixups.

Wed Oct 10 17:25:22 2001  Joshua N Pritikin  <vishnu@pobox.com>

	* glib-genmarshal.c gparamspecs.[ch] gtype.[ch] gvalue.h
	gvaluecollector.h gvaluetypes.[ch]: Fill in missing support for
	gint64 & guint64 (#59254).
	
	* Unconditionalize same (compile with or without G_HAVE_INT64).

Wed Oct 10 15:38:58 2001  Joshua N Pritikin  <vishnu@pobox.com>

	* gparamspecs.h (G_IS_PARAM_SPEC_FLAGS): Fix order of
	*_PARAM_SPEC_ULONG defines.

Thu Oct  4 01:10:52 2001  Owen Taylor  <otaylor@redhat.com>

	* gparamspecs.h: Add missing G_HAVE_GINT64 conditionalization.

Wed Oct  3 16:02:24 2001  Owen Taylor  <otaylor@redhat.com>

	* glib-genmarshal.c gparamspecs.[ch] gvalue.h 
        gobject/gvaluetypes.[ch]: Add support for G_TYPE_INT64
	and storing it in GValue (Patch from Mathieu Lacage, #59254.)

2001-10-03  jacob berkman  <jacob@ximian.com>

	* gtype.c (type_iface_retrieve_holder_info_Wm): 
	(type_iface_vtable_init_Wm): 
	(type_iface_vtable_finalize_Wm): 
	(g_type_class_ref): 

	* gobject.c (g_object_get_property): s/retrive/retrieve/

2001-09-25  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am: Use new macros for .def file, and check for
	MS_LIB_AVAILABLE, new rule to build MS import library.

	* makefile.msc.in: Use same DLL and import library names as
	libtool.
	
2001-09-21  Hans Breuer  <hans@breuer.org>

	* gobject.def : updated externals

2001-09-19  Tor Lillqvist  <tml@iki.fi>

	* gobject.rc.in: Correct InternalName and OriginalFilename to
	match what we actually produce.

Tue Sep 18 23:09:02 2001  Tim Janik  <timj@gtk.org>

	* gparam.[hc]: rename *nick and *blurb fields to catch
	direct accesses in third party code.
	provide g_param_get_nick(), g_param_get_blurb() and
	g_param_get_name() accessors.

Mon Sep 10 20:31:37 2001  Tim Janik  <timj@gtk.org>

	* gobject.[hc]: removed extraneous GObject* returns from a
	couple functions that are very unlikely to be used in nested.
	changed gpointer->GObject* for a couple return values/arguments.
	this fixes #50206.

Mon Sep 10 19:27:47 2001  Tim Janik  <timj@gtk.org>

	* gtype.[hc]:
	g_type_add_interface*(): implement the ability to add an interface to
	a type whose parents already conform to this interface.
	such "overriding" interfaces, when initialized, are not just initialized
	with 0, but with a copy of the interface they override.
	g_type_interface_peek_parent(): new function, return the interface
	that this interface "overrides", if any.

	* testgruntime.c: test new interface stuff.

2001-09-10  Alex Larsson  <alexl@redhat.com>

        * gobject/gboxed.[ch]:
        * gobject/gsourceclosure.c:
        Removed is_refcounted and GBoxedInitFunc from
        g_boxed_type_register_static().

Sat Sep  8 14:13:57 2001  Owen Taylor  <otaylor@redhat.com>

	* gobject/Makefile.am: Move gbsearcharray.[ch] to glib
	as a private ininstalled header.

Tue Sep  4 22:24:48 2001  Matthias Clasen  <matthiasc@poet.de>

	* gobject.c (g_object_base_class_finalize): typo fix.

Tue Sep  4 01:49:18 2001  Tim Janik  <timj@gtk.org>

	* gsourceclosure.c: make closure_callback_funcs static,
	added some g_return_if_fail() statements.

Mon Aug 27 14:55:27 2001  Owen Taylor  <otaylor@redhat.com>

	* gsourceclosure.[ch] (g_source_set_closure): Implement.

	* gsourceclosure.[ch]: Add GType's for GIOChannel, GIOCondition.

2001-08-17  James Henstridge  <james@daa.com.au>

	* gobject.c (WeakRefStack): add an object member to the structure.
	(weak_refs_notify): pass wstack->object as extra argument to
	notify functions.
	(g_object_weak_ref): set wstack->object when initialising
	WeakRefStack.

	* gobject.h (GWeakNotify): add second argument to prototype which
	gives the pointer to where the object that is being disposed of
	was.

Wed Jul 18 19:42:31 2001  Tim Janik  <timj@gtk.org>

        * gtype.h: if __GNUC__ is defined, inline a test for an exact type
        match for instances and classes in G_TYPE_CHECK_INSTANCE_TYPE() and
        G_TYPE_CHECK_CLASS_TYPE() before calling g_type_instance_is_a().

Sun Aug 12 02:07:10 2001  Tim Janik  <timj@gtk.org>

	* gvaluearray.[hc]: fix preallocation logic, support DISABLE_MEM_POOLS
	properly, group value allocations.
	(g_value_array_new): fix semantic of n_prealloced argument, so it's
	really just about preallocation space.

2001-07-23  Padraig O'Briain <Padraig.Obriain@Sun.COM>
	
	* gobject/gobjectnotifyqueue.c: fix unconditional check of
	first GParamSpec in g_object_notify_queue_thaw(); to prevent
	property notification being lost.

2001-08-06  Sven Neumann  <sven@gimp.org>

	* gobject.[ch]: 
	added new functions g_object_[add|remove]_weak_pointer().

2001-08-01  Sven Neumann  <sven@gimp.org>

	* gsignal.h: added convenience macro g_signal_connect_after().

2001-07-29  Hans Breuer  <hans@breuer.org>

	* gobject.def : updated externals

2001-07-20  Hans Breuer  <hans@breuer.org>

	* gobject.def : updated externals

	* makefile.msc.in : reflect glib move

Tue Jul 10 18:50:16 2001  Tim Janik  <timj@gtk.org>

	* gsignal.h (struct _GSignalQuery): fix misplaced comment.

Mon Jul  2 07:17:47 2001  Tim Janik  <timj@gtk.org>

	* gobject.c (g_object_weak_ref): 
	(g_object_watch_closure): congrats tim, introducing of-by-one
	errors like on my very first day of C programming.

Sat Jun 30 11:07:00 2001  Tim Janik  <timj@gtk.org>

	* gobject.[hc]: provide weak_ref/weak_unref functions,
	invoked from ->dispose. renamed ->shutdown() to ->dispose(),
	provide "public" API entry here: g_object_run_dispose(), this
	fucntion should _only_ be called from object system implementations
	(e.g. gtkobject.c) if at all.

	* gtypemodule.c (g_type_module_dispose): s/shutdown/dispose/

	* gsignal.h: removed compat aliases.

	* gobject.c (g_object_connect): support data objects.
	
Sat Jun 30 13:17:12 2001  Owen Taylor  <otaylor@redhat.com>

	* testgruntime.c (test_object_class_init)
	  gobject.c (g_object_do_class_init): 
	  g_signal_newc() => g_signal_new().

Thu Jun 28 22:49:40 2001  Owen Taylor  <otaylor@redhat.com>

	* gtype.[ch] gobject-query.c testgruntime.c: Remove
	debug flag argument to g_type_init() and add
	g_type_init_with_debug_flags().

Thu Jun 28 16:42:49 2001  Tim Janik  <timj@gtk.org>

	* gsignal.c (g_signal_lookup): 
	(g_signal_list_ids): give elaborate warnings about invalid types,
	non-instantiatable types and unloaded types that we can't operate on.

	* gparam.[hc]: g_param_spec_pool_belongings() ->
	g_param_spec_pool_list_owned().

	* gsignal.[hc]: renamed:
	g_signal_newc -> g_signal_new
	g_signal_disconnect_by_func -> g_signal_handlers_disconnect_by_func
	g_signal_block_by_func -> g_signal_handlers_block_by_func
	g_signal_unblock_by_func -> g_signal_handlers_unblock_by_func
	added GConnectType to simplify (..gboolean swapped, gboolean after)
	args.

	* gobject.[hc]: changed prototypes accordingly.

2001-06-22  Hans Breuer  <hans@breuer.org>

	* gobject.def : updated externals

	* gobjectnotifyqueue.c : include <string.h> for memset ()

Thu Jun 21 02:43:10 2001  Tim Janik  <timj@gtk.org>

	* gparamspecs.h: s/long/int/ for default_value in enum and flags
	pspecs.

Wed Jun 20 03:59:42 2001  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: added debugging variants g_type_name_from_class(),
	g_type_name_from_instance().

Mon Jun 11 17:07:06 2001  Tim Janik  <timj@gtk.org>

	* gboxed.[hc]: remove left-over usages of an anonymous GBoxed typedef.

	* gobjectnotifyqueue.c: moved property notify queue implementation
	bits into this function.

	* gparam.[hc]: added g_param_spec_pool_belongings(), completed
	g_param_spec_pool_list(). added GParameter for _setv() functions.

	* gobject.[hc]: use gobjectnotifyqueue.h implementation now.
	got rid of properties_changed signal.
	new functions g_object_newv(), g_object_class_list_properties().
	removed "properties_changed" signal.

	* gtype.[hc]: added g_type_depth() to figure number of parent
	types + 1 for a type.

	* gsignal.h: add g_signal_connect() (as per owen's request) and
	g_signal_connect_swapped().

2001-06-13  Havoc Pennington  <hp@redhat.com>

	* Makefile.am (progs_LDADD): link to ./libgobject-1.3.la
	since an installed libgobject was somehow being found; think 
	it's a libtool bug, but this workaround should do for now.

2001-06-12  Havoc Pennington  <hp@redhat.com>

	* Makefile.am (glib-mkenums): don't put $(srcdir)/glib-mkenums in
	bin_SCRIPTS, that breaks make install. Instead put 'glib-mkenums'
	in bin_SCRIPTS and cp it into builddir

Thu May 31 17:56:47 2001  Owen Taylor  <otaylor@redhat.com>

	* gobject-query.c: Fix mispelling in help output.
	(#53952, Skip Montanaro)

2001-05-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* Makefile.am (EXTRA_DIST): Really distribute glib-mkenums, now
	that bin_SCRIPTS doesn't seem to care about doing so anymore.

Mon May 28 06:51:24 2001  Tim Janik  <timj@gtk.org>

	* gsignal.c (signal_emit_unlocked_R): fixed bad faux-pass, forgot
	to release signal lock when restarting emissions.

Sun May 27 04:52:28 2001  Tim Janik  <timj@gtk.org>

	* gsignal.[hc] (g_signal_stop_emission_by_name): added variant
	to stop signal emissions through a detailed_signal string.

	* gsignal.c (signal_emit_R) (g_signal_emit_valist): account for
	the fact that g_value_* functions may cause signal emissons by
	unlocking the global signal system lock around g_value_* functions.
	(signal_emit_unlocked_R): renamed this from signal_emit_R() to reflect
	that this functions acquires the lock on its own now.

2001-05-24  Hans Breuer  <hans@breuer.org>

	* makefile.msc.in : changed depndencies to build glib-genmarshal
	first and statically linked with glib, which makes it independent
	from the installed glib version. Added new object files to build.

	* gobject.def : updated

Thu May 24 08:52:02 2001  Owen Taylor  <otaylor@redhat.com>

	* gobject.[ch] (g_value_set_object): gpointer, not
	gpointer *.

2001-05-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* Makefile.am (bin_SCRIPTS): made 'make distcheck' happy.

	* gobject.def: Removed g_param_spec_stringc.

Tue May 22 02:46:13 2001  Tim Janik  <timj@gtk.org>

	* gobject.c (g_value_set_object): make g_value_set_object()
	take a gpointer v_object so people don't need to G_OBJECT()
	cast NULL pointers (C code convenience).

Mon May 14 01:49:01 2001  Tim Janik  <timj@gtk.org>

	* gsignal.[hc] (g_signal_handler_is_connected): new function
	to check whether a handler is still connected to an instance
	(by handler id).

Thu May 10 14:00:48 2001  Tim Janik  <timj@gtk.org>

	* gparamspecs.[hc]: removed g_param_spec_stringc() in lack of
	evidence of public need.

	* gsignal.h: added g_signal_disconnect_by_func(),
	g_signal_block_by_func() and g_signal_unblock_by_func() convenience
	macros as per owen's request.

	* gtype.c (SIZEOF_FUNDAMENTAL_INFO): align sizeof (GTypeFundamentalInfo)
	to size of longs and pointers.

2001-05-05  James Henstridge  <james@daa.com.au>

	* Makefile.am: glib-mkenums is not a compiled program, so shouldn't
	be in the bin_PROGRAMS primary.  Put it in bin_SCRIPTS instead, and
	removed the glib_mkenums_SOURCES var.

Thu May  3 06:10:23 2001  Owen Taylor  <otaylor@redhat.com>

	* gobject.c (g_object_set_[q]data_full): Make types of ternary
	operator correspond. (Fixes compilation errors with Sun CC,
	#52230)

Mon Apr 30 20:03:56 2001  Tim Janik  <timj@gtk.org>

	* glib-mkenums (usage): removed \v escaping, newer perl versions don't
	support this, and it'S probably useless anyways.

Sat Apr 28 23:39:42 2001  Tim Janik  <timj@gtk.org>

	* gsignal.[hc]: made signal handler and emission hook ids gulongs.
	(signal_handlers_foreach_matched_R): only invoke callback for handlers
	that are not disconnected (id>0).
	(signal_emit_R): prevent invocation of signal handlers during the
	emission they were connected within.
	
	* glib-mkenums: publically installed perl-script to parse C code
	enums and generate descriptions thereof.
	* glib-mkenums.1: assorted man page.
	
2001-04-19  Havoc Pennington  <hp@redhat.com>

	* gobject.c (g_object_get_valist): We were returning junk memory
	here, because we didn't copy the value (G_VALUE_NOCOPY_CONTENTS
	passed to G_VALUE_LCOPY) and then we freed the GValue immediately
	after. Removed G_VALUE_NOCOPY_CONTENTS from here; need a
	G_VALUE_STEAL_CONTENTS or the like if we want this optimization.

Wed Apr 18 09:46:56 2001  Owen Taylor  <otaylor@redhat.com>

	* gobject.c gsignal.c: Change C++ comments for FIXME's to
	C comments. (Patch from Andres Salomon)

2001-04-14  Hans Breuer  <hans@breuer.org>

	* gobject.def : updated

Mon Apr  9 18:56:15 2001  Tim Janik  <timj@gtk.org>

	* gclosure.c (g_closure_invoke): only require marshal/meta_marshal if
	we're valid (about to actually do marshalling).

Tue Apr  3 20:23:24 2001  Tim Janik  <timj@gtk.org>

	* NEWS: updates.

Tue Apr  3 14:06:00 2001  Tim Janik  <timj@gtk.org>

	* gparam.[hc]: added g_param_spec_pool_list() to list pspecs per
	owner_type. the pspecs are not referenced, so the caller is
	supposed to have some idea about owner_type not randomly
	nuking his pspec's. if this is going to provide problems in
	the future, we can either auto-ref the pspecs, or add a
	_foreach variant, though the latter would have to invoke
	the callback while pspec's mutex is acquired, so i just
	went for the _list variant for now.

	* gclosure.h (G_CALLBACK): made GCallback a void (*) (void) fucntion.

Sat Mar 31 23:55:58 2001  Tim Janik  <timj@gtk.org>

	* gtype.h:
	* gparamspecs.[hc]: applied patch from owen to implement
	GParamSpecUnichar.

Fri Mar 30 07:34:02 2001  Tim Janik  <timj@gtk.org>

	* gtype.c (type_iface_retrive_holder_info_Wm): 
	* gtypeplugin.c (g_type_plugin_complete_interface_info): 
	* gtypemodule.c (g_type_module_complete_interface_info): 
	change order of instance_type and interface_type so they match
	the g_type_add_interface_*() API.

	* gsignal.c (g_signal_emit_valist): always assign C return value
	location, people depending on unaltered return values after emissions
	that had no handlers to run need to use g_signal_emitv().

	* gtype.[hc] (g_type_query): new function to allow querying of
	class and object size (semantics like g_signal_query()).
	currently the implementation is better held conservative so as to
	only support types that are classed and static.

2001-03-29  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Updates.

Wed Mar 28 17:04:06 2001  Tim Janik  <timj@gtk.org>

	* gobject.c (object_queue_property): only queue readable properties
	for notification changes.

Thu Mar 22 13:36:50 2001  Tim Janik  <timj@gtk.org>

	* gsignal.c (g_signal_newv): catch G_SIGNAL_RUN_FIRST with a return value.

2001-03-21  Martin Baulig  <baulig@suse.de>

	* gboxed.[ch] (g_value_dup_boxed): This takes a `const GValue *'
	argument.

2001-03-18  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Correct some renamed functions.

Sat Mar 17 23:18:36 2001  Tim Janik  <timj@gtk.org>

	* gobject.c (g_object_get_property): minor bug-fix.

	* gbsearcharray.[hc]: provide a macro for static initialization and
	functions g_bsearch_array_new() and g_bsearch_array_destroy() for
	dynamic allocations.
	
	* gboxed.c: introduce G_TYPE_GSTRING, boxed type for GString.
	
	* gclosure.[hc]: naming corrections.

Fri Mar  9 16:42:08 2001  Tim Janik  <timj@gtk.org>

	* gvaluetypes.[hc]: moved g_strdup_value_contents() into this file as
	a public function (was static in gobject.c before). it's a bit odd
	to have that function here, especially since it requires extra includes,
	but then it doesn't very well fit somewhere else either.

	* gparamspecs.c: added default/max/min checks to param spec creation
	functions.

2001-03-10  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add a couple of missing entries.

	* Makefile.am (libgobject_1_3_la_LIBADD): Use only on Win32.

Fri Mar  9 14:57:17 2001  Tim Janik  <timj@gtk.org>

	* testgruntime.c: test program. covers run first/last/cleanup signal
	handlers, return value accumulator, signal string returns, and
	interface types in signal arguments.

	* gtype.c (g_type_value_table_peek): for interface types without
	value table, try looking up a value table from an instantiatable
	prerequisite type (this is safe as an interface may only have
	one instantiatable prerequisiste).
	(type_check_is_value_type_U): same here.

	* gsignal.c (g_signal_newv): assert that return types never have
	G_SIGNAL_TYPE_STATIC_SCOPE set.
	(g_signal_newc): only create class closure if the class_offset is not
	0.

Fri Mar  9 10:14:00 2001  Tim Janik  <timj@gtk.org>

	* gparamspecs.c (g_param_spec_object): use g_type_is_a() to check
	for object_type being a G_TYPE_OBJECT, not G_TYPE_IS_OBJECT(), since
	that wouldn't allow interface types.

	* gtype.c (g_type_interface_add_prerequisite): arg, fixed small cnp bug
	with bad implications and an off-by-one error.

Thu Mar  8 16:34:22 2001  Owen Taylor  <otaylor@redhat.com>

	* gvaluetransform.c: Include <string.h> for memcpy.

	* gvaluetransform.c (DEFINE_SPRINTF): Remove unnecessary
	and ANSI-illegal ## token pasting.

Thu Mar  8 18:11:52 2001  Tim Janik  <timj@gtk.org>

	* gsignal.c: eek, fixed old hook detail storage code.

Thu Mar  8 16:35:48 2001  Tim Janik  <timj@gtk.org>

	* gparamspecs.[hc]: s/g_param_spec_string_c/g_param_spec_stringc/.

	* gsignal.[hc]: fixed accumulator invocation, implemented emission
	hooks. and no, neither of these callbacks are called via a closure,
	language bindings can wrap the accumulator and emission hook
	interface, they already get parameters marshalled into a GValue array.
	(g_signal_connect): removed this function as its C specific, doesn't
	cover the swapped argument, is too close to its broken original
	gtk_signal_connect() and creates demand for _swapped, _after and
	_swapped_after variants <brrr>.
	(g_signal_connectc): convenience macro to connect a C handler
	func with data, like the old g_signal_connect() plus swapped
	argument.

	* gtype.h:
	* gboxed.c: added G_TYPE_VALUE boxed type.

Wed Mar  7 19:02:51 2001  Tim Janik  <timj@gtk.org>

	* gtype.c (type_node_add_iface_entry_W): catch when adding an interface
	to an ancestor of a child that already conforms to this interface.
	currently we spew a warning here, should we be silent?
	(g_type_interface_add_prerequisite): new function to add a prerequisite
	type to an interface, that must succeed an instance is_a prerequisite
	type check before the interface can be added to an instance. the
	prerequisite types are also suuported in is_a checks of the interface.
	(g_type_instance_is_a):
	(g_type_check_instance_cast):
	(g_type_check_instance): cleanups and optimizations.
	(g_type_class_is_a):
	(g_type_check_class_cast): same, also prevented these from accepting
	interface types, as class structures don't nest interfaces.

2001-03-07  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* Makefile.am: Avoid rebuilding everything everytime.

Wed Mar  7 09:36:33 2001  Tim Janik  <timj@gtk.org>

	* gboxed.[hc]: changed prototype of g_boxed_type_register_static()
	to contain an optional init function and a hint at whether the
	boxed structure uses ref counting internally.
	added g_value_set_boxed_take_ownership().
	made G_TYPE_BOXED an abstract value type.

	* genums.[hc]: made G_TYPE_ENUM and G_TYPE_FLAGS abstract value
	types.

	* glib-genmarshal.c: argument type changes, preparation for third-party
	arg specification.

	* gobject.[hc]: cleaned up get/set property code.
	added g_strdup_value_contents() to improve warnings.

	* gparam.[hc]: added g_param_value_convert(), taking over responsibility
	of the old g_value_convert(). added G_PARAM_LAX_VALIDATION flag so
	validation alterations may be valid a part of the property setting
	process.

	* gparamspecs.[hc]: made value comparisons stable (for sort applications).
	added GParamSpecValueArray, a param spec for value arrays and
	GParamSpecClosure. nuked the value exchange functions and
	GParamSpecCCallback.

	* gtype.[hc]: catch unintialized usages of the type system with
	g_return_val_if_uninitialized(). introduced G_TYPE_FLAG_VALUE_ABSTRACT
	to flag types that introduce a value table, but can't be used for
	g_value_init(). cleaned up reserved type ids.

	* gvalue.[hc]: code cleanups and saner checking.
	nuked the value exchange API. implemented value transformations, we
	can't really "convert" values, rather transforms are an anylogy to
	C casts, real conversions need a param spec for validation, which is
	why g_param_value_convert() does real conversions now.

	* gvaluearray.[hc]: new files that implement a GValueArray, a struct
	that can hold inhomogeneous arrays of value (to that extend that it
	also allowes undefined values, i.e. G_VALUE_TYPE(value)==0).
	this is exposed to the type system as a boxed type.

	* gvaluetransform.c: new file implementing most of the former value
	exchange functions as single-sided transformations.

	* gvaluetypes.[hc]: nuked G_TYPE_CCALLBACK, added
	g_value_set_string_take_ownership().

	* *.h: s/G_IS_VALUE_/G_VALUE_HOLDS_/.

	* *.[hc]: many fixes and cleanups.

	* many warning improvements.

Tue Feb 27 18:35:15 2001  Tim Janik  <timj@gtk.org>

	* gobject.c (g_object_get_valist): urg, pass G_VALUE_NOCOPY_CONTENTS
	into G_VALUE_LCOPY(), this needs proper documenting.

	* gparam.c: fixed G_PARAM_USER_MASK.

	* gtype.c (type_data_make_W): 
	(type_data_last_unref_Wm): fixed invalid memory freeing.

	* gobject.c (g_object_last_unref): destroy signal handlers associated
	with object, right before finalization.

	* gsignal.c (g_signal_parse_name): catch destroyed nodes or signals
	that don't actually support details.

	* gobject.[hc]: got rid of property trailers. nuked GObject
	properties "data" and the "signal" variants.
	(g_object_connect): new convenience function to do multiple
	signal connections at once.
	(g_object_disconnect): likewise, for disconnections.

	* gparam.[hc] (g_param_spec_pool_lookup): took out trailer support.

	* gvalue.[hc]: marked g_value_fits_pointer() and g_value_peek_pointer()
	as private (the latter got renamed from g_value_get_as_pointer()).

2001-02-21  Tor Lillqvist  <tml@iki.fi>

	* *.h: Use G_BEGIN_DECLS and G_END_DECLS.

	* Makefile.am: Use libglib-1.3.la from top_builddir. Invoke
	libtool with -no-undefined for Win32 and Cygwin.

Wed Feb 21 18:31:46 2001  Jonathan Blandford  <jrb@redhat.com>

	* gsignal.h (g_signal_connect): Add g_signal_connect define to
	make porting from gtk_signal_connect easy.

	* gsignal.c (g_signal_emit_valist): Use G_TYPE_FROM_INSTANCE
	(instance) instead of node->itype when initting the value.

2001-02-17  Havoc Pennington  <hp@pobox.com>

        Applied patch from Soeren Sandmann:
	
	* gvaluetypes.c (g_value_get_string): G_CONST_RETURN

	* gtype.c (g_type_name): G_CONST_RETURN

	* gsignal.c (g_signal_name): G_CONST_RETURN

	* gobject-query.c (main): const fix

Sat Feb 17 07:58:46 2001  Tim Janik  <timj@gtk.org>

	* genums.h (G_TYPE_IS_FLAGS): patch from sven to fixup
	G_ENUM_CLASS_TYPE() macro.

Sat Feb 17 04:55:35 2001  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: changed collect_format, collect_value() and lcopy_format,
	lcopy_value() in the GTypeValueTable. the collect functions are now
	called only once per value, collect_format/lcopy_format are strings
	that enlist all necessary GTypeCValues to be varargs-collected.

	* gvalue.h: ranamed STATIC_TAG to G_VALUE_NOCOPY_CONTENTS to indicate that
	a value shouldn't copy its contents.

	* gvaluecollector.h: changed G_VALUE_COLLECT() and G_VALUE_LCOPY()
	macros to carry an additional argument (flags) that can be used
	to pass G_VALUE_NOCOPY_CONTENTS along to the collection functions.

	* *.c: adapted collect_value() and lcopy_value() functions to the new
	prototypes, support G_VALUE_NOCOPY_CONTENTS where apropriate.

	* gsignal.[hc]: introduced a G_SIGNAL_TYPE_STATIC_SCOPE flag that can
	be passed along (ORed) with the parameter types, indicating that the
	emission arguments are to be considered static for the scope of the
	emission. should be used with care and only if the caller knows that
	a parameter cannot be destroyed/freed from signal handlers connected
	to an emission.

Fri Feb 16 07:10:44 2001  Tim Janik  <timj@gtk.org>

	* gclosure.c:
	(g_closure_ref):
	(g_closure_sink): make closure sinking explicit.

	* gsignal.c:
	(g_signal_connect_data): 
	(g_signal_connect_closure): 
	(g_signal_connect_closure_by_id): 
	(g_signal_newv): perform explicit closure sinking.

Thu Feb  8 00:31:45 2001  Tim Janik  <timj@gtk.org>

	* gtype.h: added G_TYPE_DEBUG_NONE for/from Eric Lemings ;)

2001-02-04  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Remove glib_debug_objects.

Sun Feb  4 07:30:53 2001  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: changed g_type_init() to take debugging flags
	initially, a combination of G_TYPE_DEBUG_OBJECTS and
	G_TYPE_DEBUG_SIGNALS. using the G_TYPE_ prefix is a bit odd
	here, but basically g_type_int() serves as initialization
	fucntion for all of GType, GObject, GSignal, so what the heck.

	* gobject.c: special case debugging code properly.
	changed glib_trap_object_ref to g_trap_object_ref.

	* gsignal.c: add signal emission debugging abilities, along with
	a new trap object g_trap_instance_signals.

2001-02-04  Tor Lillqvist  <tml@iki.fi>

	* Makefile.am (progs_LDADD): Change order of libs to libgobject
	first, then libglib. Needed for cygwin, says jbdoll@kepri.re.kr.

Wed Jan 31 06:19:49 2001  Tim Janik  <timj@gtk.org>

	* gparam.h: gtk-doc sucks for not dealing with #define inside enums.

	* gtype.[hc]: added G_TYPE_FLAG_RESERVED_ID_BIT, a bit in the type
	number that's supposed to be left untouched (preserved mainly
	for the signal code).

	* *.c: added thread safety code, based on an old patch from sebastian.
	the remaining thread safety issues are now datalists on pspecs (to be
	solved im gdataset.c) and gvalue.c where locking concerns value exchange
	functionality only, and that's soon to be revised.

2001-01-27  Tor Lillqvist  <tml@iki.fi>

	* makefile.msc.in: Don't try to compile gmarshal.c on its own.

2001-01-24    <alexl@redhat.com>

	* gclosure.c (g_closure_unref):
	Don't leak closure->notifiers.

2001-01-05  Havoc Pennington  <hp@redhat.com>

	* gparamspecs.c (g_param_spec_enum): set the value_type in the
	param spec; closes bug 40210
	(g_param_spec_flags): ditto for flags

2001-01-03  Alexander Larsson  <alexl@redhat.com>

	* gobject.c:
	Move glib_debug_objects out of the G_ENABLE_DEBUG #ifdef.

Thu Dec 28 11:36:44 2000  Tim Janik  <timj@gtk.org>

	* gbsearcharray.c (upper_power2): disable G_BSEARCH_ALIGN_POWER2
	fucntionality if DISABLE_MEM_POOLS is defined.

	* gtype.c: honour DISABLE_MEM_POOLS.

	* gsignal.c (g_signal_init): flag signal key bsearch array with
	G_BSEARCH_ALIGN_POWER2 to avoid excessive growth time. honour
	DISABLE_MEM_POOLS.

	* gparam.h: added G_PARAM_READWRITE alias for (G_PARAM_READABLE |
	                                               G_PARAM_WRITABLE).

2000-12-15  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Update.

2000-12-15  Havoc Pennington  <hp@pobox.com>

	* gobject.c (g_object_do_class_init): use g_signal_newc

	* gsignal.c (g_signal_newc): convenience function for signals
	created from C
	(g_signal_new_valist): added
	(g_signal_new): removed

Fri Dec 15 04:40:23 2000  Tim Janik  <timj@gtk.org>

	* gparam.[hc]: add an instance member value_type so the default
	value of the pspec class can be overridden.

2000-12-14  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in: Update, include parts from Makefile.am to
	build gmarshal.[ch]. Some day, we won't need these separate
	makefiles for Win32 compilation. I hope.

	* makefile.msc.in: Update. No use trying to build gmarshal.[ch]
	here, it would require Unixish tools. MSVC users building from CVS
	sources are out of luck.
	
	* gobject.def: Update.

Wed Dec 13 09:31:26 2000  Tim Janik  <timj@gtk.org>

	* gparamspecs.[hc]: add G_TYPE_PARAM_BOXED implementation.

	* gobject.[hc]: minor fixes.

Tue Dec 12 23:38:02 2000  Tim Janik  <timj@gtk.org>

	* Makefile.am: _never_ touch oldest-source-stamp.
	
	* gobject.[hc]: construct property handling fixes/improvements.
	fixed trailer handling in get/set property.
	
	* gparam.[hc]: implement param spec pool, got rid of param spec
	hashtable. the most prominent change is that e deal with type
	prefixes here.
	
2000-12-12  Elliot Lee  <sopwith@redhat.com>

	* Makefile.am:
	  . You have to 'touch oldest-source-stamp' if you want to avoid having
	  the Makefile constantly rebuild itself.
	  . Fix marshaller generation rules to work with srcdir != builddir
	    (there were issues with trying to run "./glib-genmarshal", etc.)

Mon Dec 11 04:44:11 2000  Tim Janik  <timj@gtk.org>

	* gboxed.c: fixed dealing with collection/lcopy of NULL values.
	
	* gclosure.h: removed insane ramblings, added G_CALLBACK() a casting
	convenience macro.
	
	* Makefile.am: cleanups, marshaller generation rules.
	
	* gmarshal.[hc]: new files with GRuntime standard marshallers.
	
	* glib-genmarshal.c: fix log domain, support gruntime standard 
	marshallers, suport G_TYPE_PARAM, come with extern "C" and
	#include gmarshal.h.
	
	* glib-genmarshal.1: reflect glib-genmarshal.c updates.
	
	* gobject.[hc]: implement object constructor. rework parameter
	changed notification queueing, we support queue freezes now and
	don't dispatch from an idle handler anymore.
	parameter->property rename hassle.
	implemented ::properties_changed and ::notify::* signals for
	property change notification (the later supports property names
	as details). added signal connection and named data properties.
	(g_signal_connect_object): new function to setup while_alive
	connections.
	(g_object_class_install_property): sink properties now, since they
	are initially floating.
	(g_object_steal_data):
	(g_object_set_data_full):
	(g_object_set_data):
	(g_object_get_data): set/get data by using g_datalist_*() functions
	directly.
	(g_object_queue_param_changed): nuked.
	(g_object_freeze_notify): start queueing of property changes (freeze/
	thaw calls stack).
	(g_object_notify): announce changes of a certain property directly.
	(g_object_thaw_notify): process queue of property changes, therefore
	emitting GObject::notify::detail with detail being the changed
	properties names.
	(G_OBJECT_WARN_INVALID_PROPERTY_ID): saner macro variant of former
	G_WARN_INVALID_PARAM_ID().
	
	* gparam.[hc]: param specs are now initially floating and need to be
	sunken with g_param_spec_sink(), support G_TYPE_PARAM values.
	added G_PARAM_CONSTRUCT and G_PARAM_CONSTRUCT_ONLY parameter flags,
	required by GObjectClass.constructor().
	
	* gparamspecs.[hc]: added GParamSpecParam, GParamSpecPointer and
	GParamSpecCCallback, param specs for G_TYPE_PARAM, G_TYPE_POINTER
	and G_TYPE_CCALLBACK respectively.
	
	* gsignal.[hc]: cleanups.
	(signal_id_lookup): after walking the anchestry, try interfaces as well.
	(g_signal_new): new function to create signals from varargs type list.
	(g_signal_connect_closure): closure connection variant that works from
	signal name+detail.
	(g_signal_connect_data): c handler connection variant that works from
	signal name+detail.
	(g_signal_emit_valist): emit signal for an instance with paraneters
	collected from a va_list.
	(g_signal_emit): emit signal, taking parameters from varargs list.
	(g_signal_emit_by_name): same as g_signal_emit, working from
	signal name+detail.
	(signal_emit_R): return whether return_value needs to be altered.
	
	* gtype.[hc]: set log-domain to GRuntime, i'm slowly getting to all
	the points that need to reflect the upcoming rename.
	melt g_type_conforms_to() functionality into g_type_is_a(), as that
	is what we really want (liskov substitution principle).
	assorted changes to other files due to conforms_to->is_a.

	* gvalue.[hc]: implemented g_value_set_instance() that sets a value
	from an instantiatable type via the value_table's collect_value()
	function (based on an idea from James Henstridge <james@daa.com.au>).
	cleanups/fixes.
	
	* gvaluetypes.[hc]: implement G_TYPE_CCALLBACK and G_TYPE_PARAM.

Wed Nov 29 13:30:05 2000  Tim Janik  <timj@gtk.org>

	* gsignal.c (handlers_find): fix elliots "logic fix" that dereferences
	NULL nodes if C handlers are searched for specific signals.

2000-11-28  Elliot Lee  <sopwith@redhat.com>

	* gsignal.c: Fix warnings about possible use of uninitialized
	variables, and fix logic that would leave 'node' unset in cases
	that it might be used in.

	* glib-genmarshal.c: Fix warning about printf format.

2000-11-28  Tor Lillqvist  <tml@iki.fi>

	* gboxed.c: Include <string.h> for memset ().

2000-11-22  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Update.

2000-11-20  Havoc Pennington  <hp@redhat.com>

	* gobject.c (g_object_get_data)
	(g_object_set_data)
	(g_object_set_data_full)
	(g_object_steal_data): More convenient data-setting functions

Wed Nov 15 20:58:05 2000  Owen Taylor  <otaylor@redhat.com>

	* gtypemodule.c (g_type_module_use): If loading the
	module fails, don't increment the use count.

Thu Nov  9 01:49:43 2000  Tim Janik  <timj@gtk.org>

	* gobject.h (G_WARN_INVALID_PARAM_ID): doh,
	s/BSE_OBJECT_TYPE_NAME/G_OBJECT_TYPE_NAME/; reported by Maas-Maarten
	Zeeman <maas@wanadoo.nl>.

Mon Nov 13 00:48:39 2000  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (EXTRA_DIST): Add glib-genmarshal.1

2000-11-11  Tor Lillqvist  <tml@iki.fi>

	* gtypemodule.c: Include stdlib.h for exit().

	* makefile.{mingw,msc}.in (gobject_OBJECTS): Add gtypemodule.

	* gobject.def: Add missing functions.

Sun Nov  5 13:21:28 2000  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am gtypemodule.[ch]: New basic implementation of
	GTypePlugin interface as a GObject. Dynamically loaded modules can
	register any number of types and interface on the module.

Sun Nov  5 10:25:40 2000  Owen Taylor  <otaylor@redhat.com>

	* gsignal.c (handlers_find): When appending handlers and
	not matching on signal_id, use hlist->signal_id instead of 
	signal_id. Having the correct signal_id when unreffing
	the handlers makes things work a lot better.

2000-11-05  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in (gobject_OBJECTS): Add gtypeplugin.

	* gobject.def: Update.

Sun Nov  5 05:22:55 2000  Tim Janik  <timj@gtk.org>

	* gsignal.c:
	fixed a bag full of subtle bugs of immensive screw-up potential in
	handlers_find(), luckily no one found out about them yet ;)
	fixed signal_handlers_foreach_matched_R() so it operates on an
	initial handler list snapshot provided by handlers_find() to work
	around general reentrancy problems and to avoid multiple callback()
	invocations on the same handlers.
	this code is now officially 80% bug free (10% remaining for interface
	types, and 10% remaining for destroyed signals ;)
	
Sat Nov  4 02:01:33 2000  Tim Janik  <timj@gtk.org>

	* gsignal.c (_g_signals_destroy): valid signal nodes start out at 1.

	* gtypeplugin.[hc]: new files holding a GTypePlugin interface
	implementation that provides the API required by GType to deal with
	dynamically loadable types.

	* gtype.[hc]: displace any GTypePlugin business to gtypeplugin.h.

Fri Nov  3 07:35:00 2000  Tim Janik  <timj@gtk.org>

	* gsignal.[hc]: prefix internal functions with '_'. renamed
	g_signal_connect_closure() to g_signal_connect_closure_by_id().
	added g_signal_parse_name() to retrive signal_id and detail quark
	from a signal name (internal).

Wed Nov  1 03:36:54 2000  Tim Janik  <timj@gtk.org>

	* gobject.c (g_object_base_class_finalize): destroy all signals that
	the finalized obejct type introduced.

	* gsignal.c (g_signals_destroy): don't require itype to have
	signals.

	* gobject.c (g_object_do_finalize): make sure all signal handlers
	are destroyed.

	* gsignal.[hc]:
	(g_signal_handler_find): only match on non-0 masks.
	(g_signal_handlers_block_matched):
	(g_signal_handlers_unblock_matched):
	(g_signal_handlers_disconnect_matched): new functions to block/unblock
	or disconnect handlers in groups.

2000-10-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gvalue.c (exchange_entries_equal), gparam.c (param_spec_equals):
	made both functions return gboolean just for the little extra
	standard conformance now that GEqualFunc is introduced.

Mon Oct 30 05:52:45 2000  Tim Janik  <timj@gtk.org>

	* gsignal.c (g_signal_list_ids): get rid of inline documentation owen
	added, the doc system would ignore it anyways (for some reason not
	aparent to me).

Mon Oct 30 03:00:07 2000  Tim Janik  <timj@gtk.org>

	* gsignal.[hc] (g_signal_list_ids): renamed owen's g_type_signals(),
	added required mutex locks.

Sun Oct 29 02:31:03 2000  Owen Taylor  <otaylor@redhat.com>

	* gsignal.c (g_type_signals): Fix problem where signals
	with "_" in them appeared twice in the result array.

Sun Oct 29 01:58:44 2000  Owen Taylor  <otaylor@redhat.com>

	* gsignal.h: Add g_type_signals() - a function to list
	all signals for a given type.

Sat Oct 28 00:28:09 2000  Tim Janik  <timj@gtk.org>

	* gclosure.c (g_closure_add_marshal_guards): fixed notifier position
	for post_marshal guard which was off at 0.

Fri Oct 27 21:49:31 2000  Tim Janik  <timj@gtk.org>

	* gobject.[hc]: doh, fix argument order in for
	g_cclosure_new_object_swap and g_cclosure_new_object.

2000-10-28  Tor Lillqvist  <tml@iki.fi>

	* makefile.{mingw,msc}.in: Make glib-genmarshal.exe.

	* glib-genmarshal.c: Conditionalise include of unistd.h.
	Include <io.h> on Win32.

	* gobject.def: Add some missing entry points.

Fri Oct 27 16:33:41 2000  Tim Janik  <timj@gtk.org>

	* gsignal.[hc]: publically define GSignalInvocationHint structure
	that gets passed in to closure invocations. added signal details.
	renamed GSignalType to GSignalFlags to comply with conventions.
	quite some cleanups and minor fixes. avoid uneccessary handler list
	walks upon invocation of after handlers. relookup handler list for
	restarted emissions. preliminary abort normal handler invocation if
	after handler is encountered.

	* glib-genmarshal.c:
	* gclosure.[hc]: moved invocation_hint to the end of the
	g_closure_invoke() arguments as sugegsted by kenelson.
	also made it a gpointer to be more generic. the invocation_hint
	is a caller specific thing that can be used to pass additional
	data in to closure invocations as documented with the caller
	invoking the closure.

Fri Oct 27 05:35:14 2000  Tim Janik  <timj@gtk.org>

	* gobject.c (g_object_watch_closure): fixed realloc bug, reported
	by havoc.

	* gsignal.c (g_signal_newv): fixed deadlock scenarion where
	g_signal_lookup() would be called with the signal lock being
	held. reported by james henstridge.

	* gclosure.c (g_closure_set_meta_marshal): fixed memcpy/overwrite bug
	reported by owen.

2000-10-26  Tor Lillqvist  <tml@iki.fi>

	* gbsearcharray.c (bsearch_array_insert): Fix gccisms (pointer
	arithmetic on void pointer, label without statement following.

	* gtype.c (type_node_fundamental_info): Don't apply unary minus to
	result of sizeof operator, it can be unsigned. Cast first to
	gssize.

	* gobject.def: Add new functions.

	* makefile.{mingw,msc}.in: Add new objects.

2000-10-26  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* Makefile.am: Remove empty SUBDIRS line _again_, as that _still_
	prevents 'make dist' from working.

Wed Oct 25 19:11:03 2000  Owen Taylor  <otaylor@redhat.com>

	* gbsearcharray.h (g_bsearch_array_get_nth): Don't use implicit
	casts from void * since this will get included from C++ too
	at times.
	
Thu Oct 26 00:30:27 2000  Tim Janik  <timj@gtk.org>

	* gvaluetypes.[hc]: added g_value_set_static_string().

	* gboxed.[hc]: const corrections. added g_value_set_static_boxed().

Wed Oct 25 20:27:02 2000  Tim Janik  <timj@gtk.org>

	* gtype.c (g_type_free_instance): for the moment, freeing object
	structures will fill their memory portion with 0xAA. there's a
	FIXME there, remove this line at a later point.

Tue Oct 24 23:10:26 2000  Tim Janik  <timj@gtk.org>

	* glib-genmarshal.1:
	* glib-genmarshal.c: added publically installed marshaller generator.

	* gtype.h: added G_TYPE_INSTANCE_GET_INTERFACE() to retrive a certain
	interface VTable from instances.

Mon Oct 23 08:28:15 2000  Tim Janik  <timj@gtk.org>

	* gobject.[hc]: new functions for closure maintenance:
	(g_object_watch_closure): maintain validity of the object and
	the closure for objects that are used as data part of a closure.
	(g_cclosure_new_object): convenience function to create C closures
	that have an object as data argument.
	(g_closure_new_object): convenience function to create closures
	that have an object as data argument.

	* gclosure.[hc]: implementation of GClosure mechanism.
	a closure is basically an encapsulation of a callback function
	and its environment. ideally, most places supporting callback
	functions will simply take a GClosure* pointer and thus unify
	callback environments wrg destroy notification etc.
	GClosure provides destroy notifiers for arbitrary data pointers,
	reference counting, invalidation notification (it can be invalidated
	which is merely a deactivate state) and a marshallinbg abstraction.
	GCClosure is also provided in these files, they present a specialized
	GClosure implementation for C language callbacks.

	* genum.c: macro cleanups.
	
	* gboxed.[hc]: new files, for boxed type abstraction.
	(g_boxed_copy): copy a boxed structure
	(g_boxed_free): free a boxed structure
	(g_value_set_boxed):
	(g_value_get_boxed): standard GValue functions for boxed types
	(g_boxed_type_register_static): convenience function for easy
	introduction of new G_TYPE_BOXED derivatives.

	* gparam.[hc]: introduced g_param_type_register_static(), a short hand
	for creation of new GParamSpec derived types.

	* gtype.[hc]: many fixes, introduced ability to flag individual
	type nodes as ABSTRACT upon registration, added value_peek_pointer()
	to the value table to peek at GValue contents as a pointer for types
	that support this. fixed up GValue checks.

	* gvalue.[hc]: added g_value_fits_pointer() and g_value_get_as_pointer()
	to peek at the value contents as pointer.

	* *.[hc]: adaptions to type macro fixes and changes in the type
	registration API.

	* many const corrections over the place.

Sat Oct 21 02:49:56 2000  Tim Janik  <timj@gtk.org>

	* gtype.c (g_type_conforms_to): this function basically behaves like
	and is_a check, except that it _additionally_ features interfaces
	for instantiatable types. enforce this in the second branch as well
	(`type' conforms_to `type') even if `type' is not an interface type.

Fri Oct 20 15:31:04 2000  Tim Janik  <timj@gtk.org>

	* gvaluetypes.[hc]: added G_TYPE_POINTER implementation from jrb.

	* gtype.[hc]:
	* gobject.c:
	* gvaluetypes.c: added GTypeValueTable.value_peek_pointer and
	suitable implementations of this for G_TYPE_STRING, G_TYPE_OBJECT
	and G_TYPE_POINTER.

Mon Aug 21 04:13:37 2000  Tim Janik  <timj@gtk.org>

	* gbsearcharray.[hc]: long standing needed generic implementation
	of a binary searchable, sorted and dynamically sized array.

2000-10-15  Raja R Harinath  <harinath@cs.umn.edu>

	* Makefile.am (BUILT_EXTRA_DIST): New variable.
	(dist-hook): Handle $(BUILT_EXTRA_DIST).
	(*): Remove traces of @STRIP_{BEGIN,END}@.
	
2000-09-29  Martin Baulig  <baulig@suse.de>
	
	Several minor ANSI C fixes.

	Added missing casts:
	* gtype.c (type_class_init): 
	`(gpointer) bnode->data->class.class_init_base'
	in call to g_slist_prepend() and
	'GBaseInitFunc class_init_base = (GBaseInitFunc) slist->data'.

	* gobject.c: Put text following #endif into comments.

2000-09-25  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* Makefile.am: Remove empty SUBDIRS line, as that prevents make
	dist from working.

Sat Sep  9 20:04:13 2000  Owen Taylor  <otaylor@redhat.com>

	* gobject.c (g_object_last_unref): Move call to
	g_type_free_instance() here from g_object_do_finalize,
	since g_type_free_instance() can unload the object's
	implementation.

2000-07-27  Tor Lillqvist  <tml@iki.fi>

	* gobject.c: No, don't mark glib_debug_objects for export here,
	it's handled specially in gtktypeutils.c.

	* gobject.def: Export g_type_fundamental_last (the function).

2000-07-26  Tor Lillqvist  <tml@iki.fi>

	* gobject.def
	* gobject.c: Mark glib_debug_objects for export/import as it is
	used by GTK+.

Sun Jul 23 17:23:35 2000  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: make g_type_fundamental_last() a function, avoiding all
	that extern variable clutter and avoiding further problems with thread
	safety.

2000-07-19  Tor Lillqvist  <tml@iki.fi>

	* gparam.h
	* gvalue.h
	* gparam.c
	* gtype.c: Shut up Sun's picky compiler.

2000-07-14  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Add g_type_get_plugin.

Thu Jul 13 02:07:54 2000  Tim Janik  <timj@gtk.org>

	* gparam.c (g_param_value_defaults): default initialize the temporary
	default value, instead of nuking the caller's value contents.

2000-07-11  Raja R Harinath  <harinath@cs.umn.edu>

	* gtype.c (g_type_get_plugin): Don't return just 0 or 1.

Tue Jul 11 02:48:13 2000  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: removed g_type_is_dynamic() and added g_type_get_plugin().

2000-07-10  Tor Lillqvist  <tml@iki.fi>

	* gobject-query.c: Include ../config.h for HAVE_UNISTD_H. Use it
	to guard inclusion of <unistd.h>.

	* gtype.h: Fix copy-paste errors in the ifdefs on how to declare a
	variable for export. Call the macro GOBJECT_VAR.

	* gtype.c: Declare _g_type_fundamental_last for export here, too.
	(type_node_any_new): Use only constant expressions for sizeof
	operator (for instance MSVC requires this).

	* makefile.mingw.in: Define GOBJECT_COMPILATION.

Sun Jul  9 21:21:46 2000  Owen Taylor  <otaylor@redhat.com>

	* genums.c: Move string.h include into the .c file
	instead of where it was in the .h file by mistake.

Thu Jul  6 15:30:27 2000  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (EXTRA_DIST): dist fixes.

	* gobject.c: Add a global variable glib_debug_objects
	(not in header file) to control object tracing.

2000-07-01  Tor Lillqvist  <tml@iki.fi>

	* gobject.def: Update added and renamed entry points.

	* makefile.mingw.in: Add gvaluetypes.o.

Thu Jun 29 16:02:07 2000  Owen Taylor  <otaylor@redhat.com>

	* gobject.c:include string.h for memset
	* genums.h: include string.h for strcpy
	* gvalue.c: include string.h for memset, memcpy.

Sat Jun 24 23:03:04 2000  Tim Janik  <timj@gtk.org>

	* gtype.[hc]: provide G_TYPE_CHAR, G_TYPE_UCHAR, G_TYPE_BOOLEAN,
	G_TYPE_INT, G_TYPE_UINT, G_TYPE_LONG, G_TYPE_ULONG, G_TYPE_FLOAT,
	G_TYPE_DOUBLE and G_TYPE_STRING fundamental types.
	added a GTypeValueTable* pointer to GTypeInfo structure for types
	to implement GValue handling functions.
	GTypeValueTable contains the following members:
	  value_init(): initialize a GValue structure.
	  value_free(): free GValue structure contents (optional).
	  value_copy(): copy one GValue contents to another GValue structure of
	  collect_type: varargs collection type for the first variable argument
	  to be collected by collect_value().
	  collect_value(): variable arguments collection function (optional).
	  lcopy_type: varargs collection type for the first variable argument
	  to be location copyied by lcopy_value().
	  lcopy_value(): variable arguments location copy function (optional).
	g_type_value_table_peek(): new function to retrive the GTypeValueTable*
	for a type node. ValueTables get inherited from parent types, unless
	overridden through the GTypeInfo structure. internally, GTypeValueTable
	support means an added overhead of one pointer per static or used
	dynamic type node.
	g_type_add_class_cache_func(): provide a cache_func/data pair to be
	called 	prior to a type nodes last_unref() function, this can be used
	to prevent premature class destruction. multiple installed cache_func()
	will be chained upon last_unref() untill one of them returns TRUE.
	the cache_func()s have to check the class id passed in to figure whether
	they actually want to cache the class of this type (since all classes
	are routed through the cache_func() chain).
	g_type_remove_class_cache_func(): remove a previously installed
	cache_func/data pair. the cache maintained by this function has to be
	clear when calling g_type_remove_class_cache_func() to avoid leaks.
	g_type_class_unref_uncached(): class unref function for cache_func()
	implementations, unreferences a class omitting the cache chain (and
	therefore unref->cache->unref->... loops).

	* gvaluetypes.[hc]: provide the value setters/getters for the primitive
	fundamental types boolean, char, uchar, int, uint, long, ulong, float,
	double and string.

	* gvalue.[hc]: provide G_TYPE_IS_VALUE() in terms of whether a
	GTypeValueTable is provided for this type.
	removed g_value_init_default(), g_value_validate(), g_value_defaults(),
	g_value_set_default() and g_values_cmp() as these are supplied by the
	GParamSpec API now.
	moved g_values_exchange() into the "implementation details" section,
	since it just provides the underlying functionality for
	g_value_convert().

	* gvaluecollector.h: renamed the varargs value container from
	GParamCValue to GTypeCValue as the value collection methods are
	supplied by the type system now.
	G_PARAM_COLLECT_VALUE() and G_PARAM_LCOPY_VALUE() got renamed to
	G_VALUE_COLLECT() and G_VALUE_LCOPY() and operate without a
	GParamSpec structure now.

	* genums.h: macros cleanups/fixes.

	* genum.c: provide G_TYPE_ENUM and G_TYPE_FLAGS type
	and assorted g_value_{s|g}et_{enum|flags}() implementations.

	* gobject.[hc]:
	provide G_IS_VALUE_OBJECT(), G_TYPE_OBJECT ValueTable methods
	and g_value_{s|g}et_object().

	* gparam.[hc]: reduced class to value_set_default(),
	value_validate() and values_cmp(). also parameters now need to fill
	in a GType value_type; field to indicate the GValue type they
	are handling. provide g_param_value_set_default(),
	g_param_value_defaults(), g_param_value_validate() and
	g_param_values_cmp().

	* gparamspecs.[hc]: got rid of the g_value_* functions and
	the G_IS_VALUE_* macros. adapted param spec implementations
	according to the GParamSpecClass changes.

Sat Jun 10 08:38:27 2000  Tim Janik  <timj@gtk.org>

	* gtype.c (type_class_init): fetch the nth iface entry of the
	type node in the nth loop iteration, not alwys the first.
	bug discovered by Walt Pohl <cher@suitware.com>.
	(type_data_finalize_class_ifaces): same here, cut and paste
	rulez.

Wed Jun  7 09:21:05 2000  Owen Taylor  <otaylor@redhat.com>

	* Makefile.am (INCLUDES): Add top_builddir so glibconfig.h
	is found properly when build srcdir != builddir. (Patch from
	Eric Lemings)

2000-05-13  Tor Lillqvist  <tml@iki.fi>

	* makefile.mingw.in
	* gobject.def
	* gobject.rc.in: New files, for Win32 (mingw) build.

	* Makefile.am: Add to EXTRA_DIST. Add rules to produce the
	corresponding non-*.in files.

	* gtype.h: (Win32:) Mark _g_type_fundamental_last for
	export/import from DLL.

Fri May  5 01:15:48 2000  Tim Janik  <timj@gtk.org>

	* gtype.h: add reserved fundamental ids for gtk types (for transition
	time). added G_TYPE_FUNDAMENTAL_MAX for gtk.

Mon Apr 17 20:45:50 2000  Tim Janik  <timj@gtk.org>

	* glib-gobject.c (g_object_base_class_finalize): oops, don't unset
	n_params prior to destructing them.

Tue Apr 11 04:28:10 2000  Tim Janik  <timj@gtk.org>

	* fixed a couple of bugs in the initial parameter/object
	implementations, after getting beast running on GObject and GValue.

Fri Apr  7 04:27:49 2000  Tim Janik  <timj@gtk.org>

	* glib-gobject.[hc]: completed parameter set/get implementations,
	along with asyncronous parameter changed notification queue.

Sun Apr  2 04:54:36 2000  Tim Janik  <timj@gtk.org>

	* glib-gobject.[hc]: GObject implementation, that is facilities
	for setting/getting quarked data and reference counting.

	* glib-gparamspecs.[hc]: first actuall parameter implementations
	for GLib, so far we have: char, uchar, bool, int, uint, long,
	ulong, enum, flags, float, double, string and object. each of these
	GParamSpecs is a new instantiatable type in its own respect,
	so the .c file derives 13 new types from G_TYPE_PARAM and
	defines over 50 (*2) conversion facilities.

	* glib-gvaluecollector.h: generic varargs handling stubs for
	GParamSpecs, private header file (does get installed for
	inclusion into user code though).

	* glib-gvalue.[hc]: GValue functionality implementation.

	* glib-gparam.[hc]: basis GParamSpec implementation for
	the virtual base type G_TYPE_PARAM.

        * glib-genums.[hc]: enum/flags type implementation, based on
	bseenum.[hc].

	* glib-gtype.[hc]: GLib Type System implementation, heavily
	based on BSE's dynamic type system.
