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.

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.
