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

	* === Released 2.6.3 ===

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

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

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

	* Makefile.am (TESTS): Only check the abi if
	the compiler supports visibility, otherwise we
	know there will be (harmless) extra symbols.  
	(#166181, Ed Avis)

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-02-02  Matthias Clasen  <mclasen@redhat.com>

	* === Released 2.6.2 ===

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.

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 invokation of after handlers. relookup handler list for
	restarted emissions. preliminary abort normal handler invokation 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.
