<?xml version="1.0"?> <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]> <refentry id="glib-changes" revision="17 Jan 2002"> <refmeta> <refentrytitle>Changes to GLib</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>Changes to GLib</refmiscinfo> </refmeta> <refnamediv> <refname>Changes to GLib</refname> <refpurpose> Incompatible changes made between successive versions of GLib </refpurpose> </refnamediv> <refsect1> <title>Incompatible changes from 2.0 to 2.2</title> <itemizedlist> <listitem> <para> GLib changed the seeding algorithm for the pseudo-random number generator Mersenne Twister, as used by <structname>GRand</structname> and <structname>GRandom</structname>. This was necessary, because some seeds would yield very bad pseudo-random streams. Also the pseudo-random integers generated by <function>g_rand*_int_range()</function> will have a slightly better equal distribution with the new version of GLib. </para> <para> Further information can be found at the website of the Mersenne Twister random number generator at <ulink url="http://www.math.keio.ac.jp/~matumoto/emt.html">http://www.math.keio.ac.jp/~matumoto/emt.html</ulink>. </para> <para> The original seeding and generation algorithms, as found in GLib 2.0.x, can be used instead of the new ones by setting the environment variable <envar>G_RANDOM_VERSION</envar> to the value of '2.0'. Use the GLib-2.0 algorithms only if you have sequences of numbers generated with Glib-2.0 that you need to reproduce exactly. </para> </listitem> </itemizedlist> </refsect1> <refsect1> <title>Incompatible changes from 1.2 to 2.0</title> <itemizedlist> <listitem> <para> The event loop functionality <structname>GMain</structname> has extensively been revised to support multiple separate main loops in separate threads. All sources (timeouts, idle functions, etc.) are associated with a <structname>GMainContext</structname>. </para> <para> Compatibility functions exist so that most application code dealing with the main loop will continue to work. However, code that creates new custom types of sources will require modification. </para> <para> The main changes here are: <itemizedlist> <listitem> <para> Sources are now exposed as <type>GSource *</type>, rather than simply as numeric ids. </para> </listitem> <listitem> <para> New types of sources are created by structure "derivation" from <structname>GSource</structname>, so the <literal>source_data</literal> parameter to the <structname>GSource</structname> virtual functions has been replaced with a <type>GSource *</type>. </para> </listitem> <listitem> <para> Sources are first created, then later added to a specific <structname>GMainContext</structname>. </para> </listitem> <listitem> <para> Dispatching has been modified so both the callback and data are passed in to the <function>dispatch()</function> virtual function. </para> </listitem> </itemizedlist> To go along with this change, the vtable for <structname>GIOChannel</structname> has changed and <function>add_watch()</function> has been replaced by <function>create_watch()</function>. </para> </listitem> <listitem> <para> <function>g_list_foreach()</function> and <function>g_slist_foreach()</function> have been changed so they are now safe against removal of the current item, not the next item. </para> <para> It's not recommended to mutate the list in the callback to these functions in any case. </para> </listitem> <listitem> <para> <structname>GDate</structname> now works in UTF-8, not in the current locale. If you want to use it with the encoding of the locale, you need to convert strings using <function>g_locale_to_utf8()</function> first. </para> </listitem> <listitem> <para> <function>g_strsplit()</function> has been fixed to: <itemizedlist> <listitem> <para> include trailing empty tokens, rather than stripping them </para> </listitem> <listitem> <para> split into a maximum of <literal>max_tokens</literal> tokens, rather than <literal>max_tokens + 1</literal> </para> </listitem> </itemizedlist> Code depending on either of these bugs will need to be fixed. </para> </listitem> <listitem> <para> Deprecated functions that got removed: <function>g_set_error_handler()</function>, <function>g_set_warning_handler()</function>, <function>g_set_message_handler()</function>, use <function>g_log_set_handler()</function> instead. </para> </listitem> </itemizedlist> </refsect1> </refentry>