Overview of Changes in GLib 2.0.1
=================================

* Portability fixes for Sun's Forte compiler [Erwann Chenede]
* Performance improvements for GObject parameter lookup, 
  g_filename_to/from_utf8() [Alex Larsson]
* Actually check interface prerequisites [Matthias Clasen,
  Miroslaw Dobrzanski-Neumann]
* Fix problem with glib-mkenums taking huge amounts of stack. [Owen Taylor]
* Fix g_signal_handlers_disconnect_by_func() for C++ [Damien Sandras]
* Fixes for g_log() and threading.
  [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann, Tim Janik]
* Make g_print(), g_printerr(), g_warning(), etc, convert from
  UTF-8 to the encoding of the locale [Sebastain Wilhelmi, Tim]
* Fixes for GIOChannel on windows. [Tor Lillquist]
* Fix gsize/gint mismatches in giochannel.c [Miroslaw Dobrzanski-Neumann]
* Fix file descriptor leak in g_file_get_contents() [Matthias]
* Workaround iconv() problems on older Solaris [Lauri Alanko]
* Fix warnings with gcc-3.1 about asm const [Cody Russel]
* Minor bug fixes.

Other contributors: Hans Breuer, LEE Sau Dan, Sven Neumann, Salmaso Raffaele,
  Akira Tagoh, Morten Welinder


Overview of Changes in GLib 2.0.0
=================================

* Thread portability fixes [Sebastian Wilhelmi]
* Documentation updates [Owen Taylor]
* Make g_strerror(), g_strsignal() properly return UTF-8,
  call bind_text_domain_codeset() so that error strings
  are in UTF-8 as well. [Owen, Tor Lillqvist]

Overview of Changes in GLib 2.0.0 rc1:
======================================

* Win32 fixes [Tor Lillqvist]
* Portability fixes [Finlay Dobbie, Miroslaw Dobrzanski-Neumann]
* Fix up g_date_strftime [Daniel Elstner]
* Add some structure padding [Tim Janik]
* Make g_get_homedir() prefer the users home directory to $HOME

Other contributors: Matthias Clasen, Paolo Maggi, Christian Rose

Overview of Changes in GLib 1.3.15:
===================================

* Speed up marshalers by using private access to GValue 
  [Anders Carlsson, Tim Janik]
* Reduce GValue to 2 elements [Tim]
* Add G_DEBUG environment variable, G_DEBUG=fatal_warnings [Matthias Clasen]
* Fixes for AIX compilation [Miroslaw Dobrzanski-Neumann]
* Add padding to various structures [Owen Taylor, Tim]
* Win32 fixes [Tor Lillquist]

Other contributors: James Henstridge, Ryan Lovett, Morten Welinder,
  Daniel Elstner

Overview of Changes in GLib 1.3.14:
===================================

* Register value transformations for gint64, guint64 [Andy Wingo]
* Build with large-file support [Sven Neumann, Owen Taylor]
* Fix handling of hostnames in URI's [Darin Adler]
* Main loop bug fixes [Havoc Pennington, Owen]
* Doc fixes and improvements [Manish Singh, Tim Janik]
* Support ' as attribute delimiters in GMarkup [Matthias Clasen]
* Win32 fixes [Hans Breuer, Tor Lillqvist]
* Threading bug and build fixes [Sebastian Wilhelmi, Miroslaw Dobrzanski-Neumann]
* Miscellaneous bug fixes

Other contributors: Matthias Clasen, James Henstridge, Mitch Natterer, 
  Morten Welinder.

Overview of Changes in GLib 1.3.13:
===================================

* Fix g_filename_to/from_uri for Win32 [Tor Lillqvist, Darin Adler]
* Miscellaneous win32 fixes [Tor, Hans Breuer]
* Fix thread options for gcc on AIX [Jerome Zago, Sebastian Wilhelmi]
* Documentation improvements [Ron Steinke, Matthias, Sebastian]
* Cache iconv converters as used by g_convert() [Jeffrey Stedfast]
* Bug fixes [Sven Neumann, Owen Taylor, Matthias Clasen, Jeffrey,
  Laszlo Peter, Havoc Pennington, Tim Janik]

Overview of Changes in GLib 1.3.12:
===================================

* Implement closure chaining, fixing up API (Tim Janik)
* Closure chaining test case (James Henstridge)
* Make GType long not int where both are equal width (Tim)
* Win32 fixes and improvements (Hans Breuer, Tor Lillqvist)
* Fixes for NetBSD. (Dan Winship)
* Use snprintf() for g_printf_string_upper_bound() where possible. (Matthias Clasen)
* Save space for GBSearchArray (Tim Janik)
* Documentation improvements. (Matthias, Sven Neumann, Havoc Pennington)

Other contributors: Darin Adler, Chris Blizzard, Anders Carlson, Daniel Elstner, Michael Meeks, 
  Mark McLoughlin, Dave Neary, Manish Singh, Owen Taylor, HideToshi Tajima, 
  Sebastian Wilhelmi.


Overview of Changes in GLib 1.3.11:
===================================

* Win32 fixes [Hans Breuer, Tor Lillqvist]
* Documentation improvements [Matthias Clasen]
* Portable directory handling API [Hans]
* Threading fixes [Sebastian Wilhelmi, Havoc Pennington]
* Fix excess relocations in Unicode tables [Andrew Taylor]
* Fix gpattern for UTF-8 [Matthias Clasen]
* Support overriding class closures [Tim Janik]
* Support for derivation from G_TYPE_POINTER [Owen Taylor]
* Hide pointers to type information inside GType to reduce locking
  [Alex Larsson, Tim]
* Adds check for direct inclusion of gobject/*.h [Owen]
* GObject API cleanups [Tim]

Other contributors: Darin Adler, Jacob Berkman, Daniel Egger, Eric Lemings, 
  Michael Meeks, Mark McLoughlin, Arkadiusz Miskiewicz, Dan Winship


Overview of Changes in GLib 1.3.10:
===================================

* Many Win32 fixes and improvements [Tor Lillqvist]
* Documentation improvements [Matthias Clasen]
* g_string_printfa() renamed to g_string_append_printf()
* Use libcharset from libiconv to implement charset detection
  more portably. [Owen Taylor, Hidetoshi Tajima]
* Add 64 bit type support to GObject [Joshua Pritikin, Mathieu Lacage, Owen]
* Make support for 64 bit integers a requirement [Joshua]
* GPattern improvements [Tim Janik, Matthias]
* Locale independent g_ascii_strtod / g_ascii_dtostr [Alex Larsson]
* Many bug fixes and minor tweaks.

Other Contributors: Darin Adler, Jakub Jelinek, James Antill, Andrew Taylor,
  Ben Gertzfield, Elliot Lee, Manish Singh, Abel Cheung, Laszlo Peter,
  Sven Neumann, George Lebl, Raja Harinath, Sebastian Wilhelmi,
  Jacob Berkman


Overview of Changes in GLib 1.3.9:
==================================

* Fixes for comparison of threads [Sebastian Wilhelmi]
* Use vasprintf() when possible for g_strdup_printf [Matthias Clasen]
* Win32 fixes [Tor Lillqvist, Hans Breuer]
* Add a len argument to g_ascii_strup/strdown
* Bug, portability fixes, cleanups.

Other Contributors: Darin Adler, Katsuhiro Okuno, Joshua N. Pritikin


Overview of Changes in GLib 1.3.8:
==================================

* Documentation updates [Owen]
* Made GType interfaces overridable in derived types
* Many win32 fixes [Tor Lillqvist]
* Miscellaneous cleanups and fixes

Other contributors:
  Darin Adler, Matthias Clasen, Ron Steinke, Hans Breuer, Alex Larsson


Overview of Changes in GLib 1.3.7:
==================================

* Integrate GClosure support into the main loop [Owen Taylor]
* More GSignal convenience functions (macros) [Sven Neumann, Tim Janik]
* Introduced weak references for GObject [James Henstridge, Sven, Tim] 
* Minor hash table optimizations
* Main loop and threading improvements [Sebastian Wilhelmi]
* Added g_ascii_* functions to be used for locale insensitive UTF-8
  compliant code instead of old string functions  [Darin Adler, Alex Larsson]
* Add functions for Unicode case-conversion, normalization, and 
  collation [Owen]* GString improvements [Owen]
* Reworked the GIOChannel code [Hidetoshi Tajima, Ron Steinke]
* Removed glib-config-2.0 in favour of pkgconfig [Sebastian]
* Make code 64bit clean [Mark Murnane]
* More G_CONST_RETURN fixes
* Many improvements to the win32 code [Tor Lillqvist, Hans Breuer]
* Miscellaneous bug and API fixes

Other contributors:
  Michael Natterer, Christopher James Lahey, Padraig O'Briain,
  Matthias Clasen, Josh Pritikin, Steve Baker, Cesar Rincon, Garry R. Osgood,
  Michael Meeks, Laszlo Peter,  Martin Baulig, Kjartan Maraas, Andrew Lanoix,
  Peter Williams


Overview of Changes in GLib 1.3.6:
==================================

* Threads have a "return value" from g_thread_join
* Removed ability to adjust thread stack size
* Prefix warnings with progname/PID by default, change toggle for this to 
  be an env variable G_MESSAGES_PREFIXED not a compile-time option
* GMarkup speedups
* GDate const, convenience fixups
* Include test cases that headers are compilable by C++ compiler
* Add ability to spawn processes with argv[0] != executable path.
* g_strstr_len, g_strrstr, g_strrstr_len
* Add length argument to g_utf8_strchr and g_utf8_strrchr.
* Misc bug fixes


Overview of Changes in GLib 1.3.5:
==================================

* Added an installed glib-mkenums Perl program for parsing enumeration
  declarations from header files.
* Mark some additional deprecated functions.
* Bug and Portability fixes


Overview of Changes in GLib 1.3.4:
==================================

* Efficiency improvements for GThreadPool
* A few bug fixes
* Build fixes
* Documentation improvements


Overview of Changes in GLib 1.3.3:
==================================

GLib:

* More user_data support in various functions.
* Main loop API revamps to support per-thread main loops.
* Unicode handling improvements.
* Implemented debugging traps.
* G_CONST_RETURN specification all over the place.
* Various new small utility functions.
* Random number generator precision improvements.
* New configure option --disable-mem-pools.
* Many Win32 improvements.
* Added g_try_malloc() friends varinats.
* Many documentation improvements.
* Many threading improvements, support for dynamic allocation
  of static mutexes.
* GHookLIst API cleanups.
* Improved format support of GDate parser.
* String function speed improvements with new g_stpcpy().
* Hashtable API additions.
* New GPatternSpec for shell-style pattern matching (from GtkPatternSpec).
* Optimizations, cleanups, bug fixes.

GObject:

* Added many convenience functions.
* GClosure and GParamSpec use float/sink ref-counting scheme now.
* Reworked property change notification.
* Binary searchable array cleanups, so it's widely usable now.
* Added static content keeping for some GValue types.
* Support for statically scoped signal parameters.
* Extinguished property trailer args in set/get interface.
* Added support for abstract types.
* G_CONST_RETURN specification all over the place.
* Split parameter exchange functionality into value transforms
  and parameter conversions.
* Added signal emission hooks and signal accumulators.
* Added interface prerequisites to support is_a (interface, object)
  relations.
* Implemented GValueArray.
* New types, boxed: G_TYPE_VALUE, G_TYPE_CLOSURE, G_TYPE_GSTRING
  GParamSpecs: G_TYPE_PARAM_PARAM, G_TYPE_PARAM_POINTER, G_TYPE_PARAM_CLOSURE,
  G_TYPE_VALUE_ARRAY, G_TYPE_PARAM_UNICHAR, G_TYPE_PARAM_VALUE_ARRAY.
* Varrags value collection improvements.
* Implemented debugging traps.
* Made things thread-safe.
* Many documentation improvements.
* Many cleanups, optimizations and bug fixes.


Overview of Changes in GLib 1.3.2:
==================================

GLib:

* Win32 build improvements  [Tor]
* Improvements to error reporting  
  (g_critical(), g_return_if_reached()) [Darin]
* Add g_strlcpy/g_strlcat  [David Wheeler]
* New IO channel implementation for Win32  [Tor] 
* Make g_array_free, g_string_free return pointer to memory requested
  not to be freed.  [Darin]
* Added GError based error reporting for thread functions.  [Sebastian]
* Moved reference docs into GLib distribution. [Owen]
* Added g_convert() for doing convenient character set conversions based
  on iconv. (GLib now requires libiconv or a native iconv.) [Havoc/Owen]
* Various Unicode handling additions (g_ucs4_to_utf8, g_utf8_validate(),
  g_{locale,filename}_{to,from}_utf8)  [Robert/Havoc/Owen]
* Portability fixes for threading.  [Sebastian]
* Added convenient functions for launching new processes (g_spawn_*),
  and shell quoting/unquoting functions.  [Havoc]
* Split glib.h into many headers.  [Sebastian]
* Added a simple callback-based parser for XML-like files (GMarkup).  [Havoc]
* Fixed confusions between comparison functions that return <0, 0, >0
  and equaility functions that return FALSE,TRUE.  [Sebastian]
* Added safe/portable temporary file manipulation functions.  [Tor]
* autoconf improvements.  [Raja]
* Many documentation improvements.
* Bug fixes.

GObject:

* Added boxed and pointer types.  [Tim/Jonathan]
* Added callback abstraction (GClosure)  [Tim]
* Added signal system (GSignal)  [Tim]
* Make GTypePlugin an interface  [Tim]
* Added GTypeModule - a simple GTypePlugin instantiation  [Owen]
* Bug fixes.


What's new in GLib 1.3.1:
=========================

* New GObject library added including object system based on
  the GTK+ object system. 
* Functions for getting the properties of Unicode characters, 
  computing the canonical decomposition and ordering combining
  characters aand manipulating UTF-8 string manipulation based
  on libunicode.
* GString now properly handles embedded nuls.
* Multiple fixes from the 1.2.x branch.
* Upgrade to libtool 1.3.3
* Full thread support (thread creation and destruction).
* BeOS port, BeOS dynamic modules.
* Many improvements to the Windows ports.
* Improvements to the OS/2 port, OS/2 module support.
* Double ended queue implementation.
* GLib macros for printf() formatting, e.g. G_GULONG_FORMAT = "lu"
* New configure option --enable-msg-prefix to prefix messages, warnings
  et ceteri with the program name and the process id.
* New thread-safe random number generator Mersenne Twister.
* g_strcompress() added, g_strescape() had a slight API change, and
  more tightly defined semantics.
* the g_string(x) macro has been removed, #x may be used instead.
                                
