1<refentry id="glib-changes" revision="17 Jan 2002"> 2<refmeta> 3<refentrytitle>Changes to GLib</refentrytitle> 4<manvolnum>3</manvolnum> 5<refmiscinfo>Changes to GLib</refmiscinfo> 6</refmeta> 7 8<refnamediv> 9<refname>Changes to GLib</refname> 10<refpurpose> 11Incompatible changes made between successing versions of GLib 12</refpurpose> 13</refnamediv> 14 15 16<refsect1> 17<title>Incompatible changes from 2.0 to 2.2</title> 18 19<itemizedlist> 20 21<listitem> 22<para> 23GLib changed the seeding algorithm for the pseudo-random number 24generator Mersenne Twister, as used by <structname>GRand</structname> 25and <structname>GRandom</structname>. This was necessary, because some 26seeds would yield very bad pseudo-random streams. Also the 27pseudo-random integers generated by 28<function>g_rand*_int_range()</function> will have a 29slightly better equal distribution with the new version of GLib. 30</para> 31 32<para> 33Further information can be found at the website of the Mersenne 34Twister random number generator at <ulink 35url="http://www.math.keio.ac.jp/~matumoto/emt.html">http://www.math.keio.ac.jp/~matumoto/emt.html</ulink>. 36</para> 37 38<para> 39The original seeding and generation algorithms, as found in GLib 402.0.x, can be used instead of the new ones by setting the environment 41variable <envar>G_RANDOM_VERSION</envar> to the value of '2.0'. Use 42the GLib-2.0 algorithms only if you have sequences of numbers generated 43with Glib-2.0 that you need to reproduce exactly. 44</para> 45 46</listitem> 47 48</itemizedlist> 49 50</refsect1> 51 52<refsect1> 53<title>Incompatible changes from 1.2 to 2.0</title> 54 55<para> 56The <ulink url="http://developer.gnome.org/dotplan/porting/">GNOME 2.0 57porting guide</ulink> on <ulink 58url="http://developer.gnome.org">http://developer.gnome.org</ulink> 59has some more detailed discussion of porting from 1.2 to 2.0. 60See the section on GLib. 61</para> 62 63<itemizedlist> 64 65<listitem> 66<para> 67The event loop functionality <structname>GMain</structname> has extensively 68been revised to support multiple separate main loops in separate threads. 69All sources (timeouts, idle functions, etc.) are associated with a 70<structname>GMainContext</structname>. 71</para> 72 73<para> 74Compatibility functions exist so that most application code dealing with 75the main loop will continue to work. However, code that creates new custom 76types of sources will require modification. 77</para> 78 79<para> 80The main changes here are: 81 82 <itemizedlist> 83 84 <listitem> 85 <para> 86 Sources are now exposed as <type>GSource *</type>, rather than simply as 87 numeric ids. 88 </para> 89 </listitem> 90 91 <listitem> 92 <para> 93 New types of sources are created by structure "derivation" from 94 <structname>GSource</structname>, so the <literal>source_data</literal> 95 parameter to the <structname>GSource</structname> virtual functions has been 96 replaced with a <type>GSource *</type>. 97 </para> 98 </listitem> 99 100 <listitem> 101 <para> 102 Sources are first created, then later added to a specific 103 <structname>GMainContext</structname>. 104 </para> 105 </listitem> 106 107 <listitem> 108 <para> 109 Dispatching has been modified so both the callback and data are passed 110 in to the <function>dispatch()</function> virtual function. 111 </para> 112 </listitem> 113 114 </itemizedlist> 115 To go along with this change, the vtable for 116 <structname>GIOChannel</structname> has changed and 117 <function>add_watch()</function> has been replaced by 118 <function>create_watch()</function>. 119</para> 120</listitem> 121 122<listitem> 123<para> 124<function>g_list_foreach()</function> and 125<function>g_slist_foreach()</function> have been changed so they 126are now safe against removal of the current item, not the next item. 127</para> 128 129<para> 130It's not recommended to mutate the list in the callback to these 131functions in any case. 132</para> 133</listitem> 134 135<listitem> 136<para> 137<structname>GDate</structname> now works in UTF-8, not in the current locale. 138If you want to use it with the encoding of the locale, you need to convert 139strings using <function>g_locale_to_utf8()</function> first. 140</para> 141</listitem> 142 143<listitem> 144<para> 145<function>g_strsplit()</function> has been fixed to: 146 147 <itemizedlist> 148 <listitem> 149 <para> 150 include trailing empty tokens, rather than stripping them 151 </para> 152 </listitem> 153 <listitem> 154 <para> 155 split into a maximum of <literal>max_tokens</literal> tokens, rather 156 than <literal>max_tokens + 1</literal> 157 </para> 158 </listitem> 159 </itemizedlist> 160 161 Code depending on either of these bugs will need to be fixed. 162</para> 163</listitem> 164 165<listitem> 166<para> 167Deprecated functions that got removed: 168<function>g_set_error_handler()</function>, 169<function>g_set_warning_handler()</function>, 170<function>g_set_message_handler()</function>, use 171<function>g_log_set_handler()</function> instead. 172</para> 173</listitem> 174</itemizedlist> 175 176</refsect1> 177 178</refentry> 179