]> Pileus Git - ~andy/gtk/blob - docs/Changes-2.0.txt
Document the fact that gtk_paned_set_handle_size() has been removed.
[~andy/gtk] / docs / Changes-2.0.txt
1 Incompatible Changes from GTK+-1.2 to GTK+-2.0:
2
3 * gtk_container_get_toplevels() was removed and replaced with
4   gtk_window_list_toplevels(), which has different memory management 
5   on the return value (gtk_window_list_toplevels() copies the GList
6   and also references each widget in the list, so you have to
7   g_list_free() the list after first unref'ing each list member).
8
9 * The gdk_time* functions have been removed. This functionality
10   has been unused since the main loop was moved into GLib
11   prior to 1.2. 
12
13 * The signature for GtkPrintFunc (used for gtk_item_factory_dump_items)
14   has been changed to take a 'const gchar *' instead of 'gchar *', to
15   match what we do for glib, and other similar cases.
16
17 * The detail arguments in the GtkStyleClass structure are now 'const gchar *'.
18
19 * gtk_paned_set_gutter_size() has been removed, since the small handle tab
20   has been changed to include the entire area previously occupied by
21   the gutter.
22
23 * gtk_paned_set_handle_size() has been removed, in favor of a style property,
24   since this is an option that only makes sense for themes to adjust.
25
26 * GDK no longer selects OwnerGrabButtonMask for button presses. This means  
27   that the automatic grab that occurs when the user presses a button
28   will have owner_events = FALSE, so all events are redirected to the
29   grab window, even events that would normally go to  other windows of the
30   window's owner.
31
32 * GtkColorSelectionDialog has now been moved into it's own set of files,
33   gtkcolorseldialog.c and gtkcolorseldialog.h.
34
35 * gtk_widget_shape_combine_mask() now keeps a reference count on the 
36   mask pixmap that is passed in.
37
38 * the GtkPatternSpec has been moved to glib as GPatternSpec, the pattern
39   arguments to gtk_item_factory_dump_items() and gtk_item_factory_dump_rc()
40   have thusly been changed to take a GPatternSpec instead of GtkPatternSpec.
41   
42 * Type system changes:
43   - GTK_TYPE_OBJECT is not a fundamental type anymore. Type checks of the
44     style (GTK_FUNDAMENTAL_TYPE (some_type) == GTK_TYPE_OBJECT)
45     will not work anymore. As a replacement, (GTK_TYPE_IS_OBJECT (some_type))
46     can be used now.
47   - The following types vanished: GTK_TYPE_ARGS, GTK_TYPE_CALLBACK,
48     GTK_TYPE_C_CALLBACK, GTK_TYPE_FOREIGN. The corresponding GtkArg
49     fields and field access macros are also gone.
50   - The following type aliases vanished: GTK_TYPE_FLAT_FIRST,
51     GTK_TYPE_FLAT_LAST, GTK_TYPE_STRUCTURED_FIRST, GTK_TYPE_STRUCTURED_LAST.
52   - The type macros GTK_TYPE_MAKE() and GTK_TYPE_SEQNO() vanished, use of
53     GTK_FUNDAMENTAL_TYPE() is discouraged. Instead, the corresponding GType
54     API should be used: G_TYPE_FUNDAMENTAL(), G_TYPE_DERIVE_ID(),
55     G_TYPE_BRANCH_SEQNO(). Note that the GLib type system doesn't build new
56     type ids based on a global incremental sequential number anymore, but
57     numbers new type ids sequentially per fundamental type branch.
58   - The following type functions vanished/were replaced:
59     Old Function                 Replacement
60     gtk_type_query()             - being investigated -
61     gtk_type_set_varargs_type()  -
62     gtk_type_get_varargs_type()  -
63     gtk_type_check_object_cast() g_type_check_instance_cast()
64     gtk_type_check_class_cast()  g_type_check_class_cast()
65     gtk_type_describe_tree()     -
66     gtk_type_describe_heritage() -
67     gtk_type_free()              -
68     gtk_type_children_types()    g_type_children()
69     gtk_type_set_chunk_alloc()   GTypeInfo.n_preallocs
70     gtk_type_register_enum()     g_enum_register_static()
71     gtk_type_register_flags()    g_flags_register_static()
72     gtk_type_parent_class()      g_type_parent() / g_type_class_peek_parent()
73     Use of g_type_class_ref() / g_type_class_unref() and g_type_class_peek()
74     is recommended over usage of gtk_type_class().
75     Use of g_type_register_static() / g_type_register_dynamic() is recommended
76     over usage of gtk_type_unique().
77
78 * Object system changes:
79   GtkObject derives from GObject, so is not the basic object type anymore.
80   This imposes the following source incompatible changes:
81   - GtkObject has no klass field anymore, an object's class can be retrived
82     with the object's coresponding GTK_<OBJECT>_GET_CLASS (object) macro.
83   - GtkObjectClass has no type field anymore, a class's type can be retrived
84     with the GTK_CLASS_TYPE (class) macro.
85   - GtkObjectClass does not introduce the finalize() and shutdown() methods
86     anymore. While shutdown() is intended for GTK+ internal use only, finalize()
87     is required by a variety of object implementations. GObjectClass.finalize
88     should be overriden here, e.g.:
89     static void gtk_label_finalize (GObject *gobject)
90     {
91       GtkLabel *label = GTK_LABEL (gobject);
92       
93       G_OBJECT_CLASS (parent_class)->finalize (object);
94     }
95     static void gtk_label_class_init (GtkLabelClass *class)
96     {
97       GObjectClass *gobject_class = G_OBJECT_CLASS (class);
98       
99       gobject_class->finalize = gtk_label_finalize;
100     }
101
102   - the GtkObject::destroy signal can now be emitted multiple times on an object.
103     ::destroy implementations should check that make sure that they take this
104     into account, by checking to make sure that resources are there before
105     freeing them. For example:
106     if (object->foo_data)
107       { 
108         g_free (object->foo_data);
109         object->foo_data = NULL;
110       }
111
112     Also, ::destroy implementations have to release object references that
113     the object holds. Code in finalize implementations such as:
114     if (object->adjustment)
115       {
116         gtk_object_unref (object->adjustment);
117         object->adjustment = NULL;
118       }
119     have to be moved into the ::destroy implementations. The reason for doing
120     this is that all object reference cycles should be broken at destruction 
121     time.
122
123     Because the ::destroy signal can be emitted multiple times, it no longer
124     makes sense to check if a widget has been destroyed using the 
125     GTK_OBJECT_DESTROYED() macro, and this macro has been removed. If 
126     catching destruction is still needed, it can be done with a signal
127     connection to ::destroy.
128     
129 * Signal system changes:
130   The Gtk 2.0 signal merly proxies the GSignal system now.
131   For future usage, direct use of the GSignal API is recommended,
132   this avoids significant performance hits where GtkArg structures
133   have to be converted into GValues. For language bindings,
134   GSignal+GClosure provide a much more flexible and convenient
135   mechanism to hook into signal emissions or install class default
136   handlers, so the old GtkSignal API for language bindings is not
137   supported anymore.
138   Functions that got removed in the Gtk signal API:
139   gtk_signal_n_emissions(), gtk_signal_n_emissions_by_name(),
140   gtk_signal_set_funcs(), gtk_signal_handler_pending_by_id(),
141   gtk_signal_add_emission_hook(), gtk_signal_add_emission_hook_full(),
142   gtk_signal_remove_emission_hook(), gtk_signal_query().
143   Also, the GtkCallbackMarshal argument to gtk_signal_connect_full() is
144   not supported anymore.
145   For many of the removed functions, similar variants are available
146   in the g_signal_* namespace.
147   The GSignal system perfomrs emissions in a slightly different manner than
148   the old GtkSignal code. Signal handlers that are connected to signal "foo"
149   on object "bar" while "foo" is being emitted, will not be called anymore
150   during the emission they were connected within.
151
152 * Inserting and deleting text in GtkEntry though functions such
153   as gtk_entry_insert_text() now leave the cursor at its original
154   position in the text instead of moving it to the location of
155   the insertion/deletion.
156
157 * The ->label field of GtkFrame widgets has been removed. (As part of
158   a change to allow the arbitrary widgets in the title position.) The
159   text can now be retrieved with the new function gtk_frame_get_text().
160
161 * The 'font' and 'font_set' declarations in RC files are now ignored. There
162   is a new 'font_name' field that holds the string form of a Pango font
163
164 * A number of types in GDK have become subclasses of GObject. For the
165   most part, this should not break anyone's code. However, it's now 
166   possible/encouraged to use g_object_ref()/g_object_unref() and other
167   GObject features with these GDK types. The converted types are:
168   GdkWindow, GdkDrawable, GdkPixmap, GdkImage, GdkGC, GdkDragContext,
169   GdkColormap
170
171 * All drawables including pixmaps used to have a type tag, the 
172   GdkWindowType enumeration, which included GDK_WINDOW_PIXMAP.
173   GdkWindowType is now a property of GdkWindow _only_, and there is
174   no GDK_WINDOW_PIXMAP. You can use the GDK_IS_PIXMAP() macro to see 
175   if you have a pixmap, if you need to know that.
176
177 * GtkStyle and GtkRcStyle are now subclasses of GObject as well.  This
178   requires fairly extensive changes to theme engines quite badly, but
179   shouldn't affect most other code.
180
181 * xthickness/ythickness have moved from GtkStyleClass to GtkStyle
182   (from class to instance). This gives themes a bit more flexibility
183   and is generally more of the Right Thing. You can trivially fix
184   your code with s/style->klass->xthickness/style->xthickness/g and 
185   same for ythickness.
186
187 * Some GtkStyle draw_ methods have been removed (cross, oval, ramp) 
188   and others have been added (expander, layout). This will require
189   changes to theme engines.
190
191 * If you were using private GDK types, they have been rearranged
192   significantly. You shouldn't use private types. ;-) 
193
194 * The visual for a widget, and also the default visual is now derived
195   from the colormap for the widget and the default colormap. 
196   gtk_widget_set_visual(), gtk_widget_set_default_visual(), gtk_widget_push_visual() 
197   and gtk_widget_pop_visual() now do nothing. Since the visual always
198   had to match that of the colormap, it is safe to simply delete
199   all references to these functions.
200
201 * A number of functions in GDK have been renamed for consistency and
202   clarity. #defines to provide backwards compatibility have been
203   included, but can be disabled by defineing GDK_DISABLE_DEPRECATED.
204
205   #define gdk_draw_pixmap                gdk_draw_drawable
206   #define gdk_draw_bitmap                gdk_draw_drawable
207
208   #define gdk_window_get_size            gdk_drawable_get_size
209   #define gdk_window_get_type            gdk_window_get_window_type
210   #define gdk_window_get_colormap        gdk_drawable_get_colormap
211   #define gdk_window_set_colormap        gdk_drawable_set_colormap
212   #define gdk_window_get_visual          gdk_drawable_get_visual
213
214   #define gdk_window_ref                 gdk_drawable_ref
215   #define gdk_window_unref               gdk_drawable_unref
216   #define gdk_bitmap_ref                 gdk_drawable_ref
217   #define gdk_bitmap_unref               gdk_drawable_unref
218   #define gdk_pixmap_ref                 gdk_drawable_ref
219   #define gdk_pixmap_unref               gdk_drawable_unref
220
221   #define gdk_gc_destroy                 gdk_gc_unref
222   #define gdk_image_destroy              gdk_image_unref
223   #define gdk_cursor_destroy             gdk_cursor_unref
224
225   (Note that g_object_ref() and g_object_unref() may be used for all of
226   the above _ref and _unref functions.)
227
228   #define gdk_window_copy_area(drawable,gc,x,y,source_drawable,source_x,source_y,width,height) \
229      gdk_draw_pixmap(drawable,gc,source_drawable,source_x,source_y,x,y,width,height)
230
231   #define gdk_rgb_get_cmap               gdk_rgb_get_colormap
232   
233   gtk_widget_popup() was removed, it was only usable for GtkWindows, and
234   there the same effect can be achived by gtk_widget_set_uposition() and
235   gtk_widget_show().
236
237 * gdk_pixmap_foreign_new() no longer calls XFreePixmap() on the 
238   pixmap when the GdkPixmap is finalized. This change corresponds
239   to the behavior of gdk_window_foreign_new(), and fixes a lot
240   of problems with code where the pixmap wasn't supposed to be
241   freed. If XFreePixmap() is needed, it can be done using the
242   destroy-notification facilities of g_object_set_data().
243
244 * GtkProgress/GtkProgressBar had serious problems in GTK 1.2.
245   - Only 3 or 4 functions are really needed for 95% of progress  
246     interfaces; GtkProgress[Bar] had about 25 functions, and 
247     didn't even include these 3 or 4.
248   - In activity mode, the API involves setting the adjustment 
249     to any random value, just to have the side effect of 
250     calling the progress bar update function - the adjustment
251     is totally ignored in activity mode
252   - You set the activity step as a pixel value, which means to 
253     set the activity step you basically need to connect to 
254     size_allocate
255   - There are ctree_set_expander_style()-functions, to randomly 
256     change look-and-feel for no good reason
257   - The split between GtkProgress and GtkProgressBar makes no sense 
258     to me whatsoever.
259   This was a big wart on GTK and made people waste lots of time,
260   both learning and using the interface.
261   So, we have added what we feel is the correct API, and marked all the
262   rest deprecated. However, the changes are 100% backward-compatible and
263   should break no existing code.
264   The following 5 functions are the new programming interface and you 
265   should consider changing your code to use them:
266   void       gtk_progress_bar_pulse                (GtkProgressBar *pbar);
267   void       gtk_progress_bar_set_text             (GtkProgressBar *pbar,
268                                                     const gchar    *text);
269   void       gtk_progress_bar_set_fraction         (GtkProgressBar *pbar,
270                                                     gfloat          fraction);
271
272   void       gtk_progress_bar_set_pulse_step       (GtkProgressBar *pbar,
273                                                     gfloat          fraction);
274   void       gtk_progress_bar_set_orientation      (GtkProgressBar *pbar,
275                                                     GtkProgressBarOrientation orientation);
276
277 * The GtkNotebookPage structure has been removed from the public header files;
278   this was never meant to be a public structure, and all functionality that
279   could be done by accessing the struct fields of this structure should be 
280   accesible otherwise.
281
282 * GtkMenuPositionFunc has a new parameter push_in which controls how
283   menus placed outside the screen is handled. If this is set to true and
284   part of the menu is outside the screen then Gtk+ pushes it into the visible
285   area. Otherwise the menu is cut of at the end of the visible screen area.
286
287   Regardles of what happens to the size of the menu, the result is always
288   that the items are placed in the same place as if the menu was placed
289   outside the screen, using menu scrolling if necessary.
290   
291 * The "draw" signal and virtual method on GtkWidget has been removed.
292   All drawing should now occur by invalidating a region of the widget
293   (call gdk_window_invalidate_rect() or gtk_widget_queue_draw() for
294   example to invalidate a region). GTK+ merges all invalid regions,
295   and sends expose events to the widget in an idle handler for the
296   invalid regions. gtk_widget_draw() is deprecated but still works; it
297   adds the passed-in area to the invalid region and immediately sends
298   expose events for the current invalid region. 
299   Most widgets will work fine if you just delete their "draw"
300   implementation, since they will already have working expose_event
301   implementations. The draw method was rarely called in practice
302   anyway.
303
304 * The GdkExposeEvent has a new region field. This can be used instead
305   of the area field if you want a more exact representation of the
306   area to update.
307
308 * Sending synthetic exposes using gtk_widget_event is no longer allowed.
309   If you just need an expose call you should use gdk_window_invalidate_rect()
310   or gdk_window_invalidate_region() instead. For the case of container
311   widgets that need to propagate expose events to NO_WINDOW children
312   you can either use gtk_container_propagate_expose(), or chain to the
313   default container expose handler.
314  
315 * The draw_default and draw_focus methods/signals on GtkWidget are
316   gone; simply draw things in your expose handler. 
317   gtk_widget_draw_focus() and gtk_widget_draw_default() wrapper
318   functions are also gone; just queue a draw on the widget,  
319   or the part affected by the focus/default anyway.
320   Also, GtkWidget now has default implementations for focus_in_event
321   and focus_out_event. These set/unset GTK_HAS_FOCUS, and queue a
322   draw. So if your focus in/out handler just does that, you can delete
323   it.
324
325 * GtkText and GtkTree are buggy and broken. We don't recommend using
326   them, and changing old code to avoid them is a good idea. The
327   recommended alternatives are GtkTextView and GtkTreeView.  The
328   broken widgets are not declared in the headers by default; to use
329   them, define the symbol GTK_ENABLE_BROKEN during compilation.  In
330   some future release, these widgets will be removed from GTK+.
331
332 * GdkColorContext is gone; you probably weren't using it anyway.
333   Use GdkColormap and the gdk_rgb_* functions instead.
334
335 * GtkMenuBar now draws the GtkContainer::border_width space outside
336   the frame, not inside the frame
337
338 * In GTK 1.2, if an event handler returned TRUE it prevented
339   propagation of that event to parent widgets. That is, the 
340   event signal would not be emitted on parent widgets. In 
341   GTK 2.0, if an event handler returns TRUE, the current signal 
342   emission on the current widget is immediately stopped. That is,
343   other callbacks connected to the signal will not be invoked.
344
345 * gtk_toolbar_new() no longer has arguments. This function 
346   was broken because the default GtkToolbarStyle (icons, text, both)
347   is now a user preference, which is overridden when you call
348   gtk_toolbar_set_style(). The constructor forced everyone to 
349   override the preference, which was undesirable. So to port
350   your app, decide if you want to force the toolbar style 
351   or conform to the user's global defaults; if you want to force
352   it, call gtk_toolbar_set_style().
353
354   The orientation arg was removed from toolbar_new() as well, just
355   because it wasn't very useful and we were breaking the function
356   anyway so had an opportunity to lose it. Call
357   gtk_toolbar_set_orientation() to set toolbar orientation.
358
359 * GtkRange/GtkScrollbar/GtkScale were rewritten; this means that most
360   theme engines won't draw them properly, and any custom subclasses of
361   these widgets will need a rewrite (though if you could figure out
362   how to subclass the old version of GtkRange, you have our
363   respect). Also, GtkTroughType is gone.
364
365 * The GtkContainer::focus signal/virtualfunction and
366   gtk_container_focus() call were replaced by 
367   GtkWidget::focus and gtk_widget_child_focus(). 
368   The semantics are the same, so you should be able to just 
369   replace "container_class->focus = mywidget_focus" with 
370   "widget_class->focus = mywidget_focus" and replace 
371   gtk_container_focus() calls with gtk_widget_child_focus() calls.
372
373   The purpose of this change was to allow non-containers to have 
374   focusable elements.
375  
376 * gtk_rc_set_image_loader() and gtk_rc_load_image() has been removed, now 
377   that GTK+ includes decent image loading capabilities itself.
378
379 * An extra GtkSettings argument has been added to
380   gtk_rc_find_pixmap_in_path(). This function is only actually useful
381   from a theme engine during parsing, at which point the GtkSettings
382   is provided.
383
384 * The child argument facility in gtkcontainer.c has been converted
385   to a child property facility using GParamSpec and other facilities
386   for GObject.   
387
388    - The set_child_arg and get_child_arg virtual methods have been
389      replaced with set_child_property / get_child_property, which
390      work similar to GObject->set_property/get_property.
391
392    - Other removed functions with the replacements:
393
394      gtk_container_add_child_arg_type => gtk_container_class_install_child_property
395      gtk_container_query_child_args   => gtk_container_class_list_child_properties
396      gtk_container_child_getv         => gtk_container_child_set_property
397      gtk_container_child_setv         => gtk_container_child_get_property
398      gtk_container_add_with_args      => gtk_container_add_with_properties
399      gtk_container_addv               => gtk_container_add / gtk_container_child_set_property
400
401 * gdk_image_get() (or rather its replacement,
402   gdk_drawable_get_image()) now handles errors properly by returning
403   NULL, previously it would crash. Also, a window being offscreen is
404   no longer considered an error; instead, the area being contains
405   undefined contents for the offscreen areas. In most cases, code
406   using gdk_image_get() should really be ported to
407   gdk_pixbuf_get_from_drawable().
408
409 * gtk_widget_set_usize() has been renamed to
410   gtk_widget_set_size_request(), however the old name still exists
411   unless you define GTK_DISABLE_DEPRECATED.
412
413 * gtk_widget_set_uposition() is deprecated; use gtk_window_move(), 
414   gtk_fixed_put(), or gtk_layout_put() instead.
415
416 * gtk_window_set_policy() is deprecated. To get the effect of
417   "allow_shrink", call gtk_widget_set_size_request(window, 0, 0).  To
418   get the effect of "allow_grow", call
419   gtk_window_set_resizable(window, TRUE). You didn't want the effect
420   of auto_shrink, it made no sense. But maybe if you were using it you
421   want to use gtk_window_resize (window, 1, 1) to snap a window back
422   to its minimum size (the 1, 1 will be rounded up to the minimum
423   window size).
424
425 * The core GTK+ now takes care of handling mapping, unmapping and
426   realizing the child widgets of containers in
427   gtk_widget_set_parent(). In most cases, this allows container
428   implementations to be simplifid by removing the code in add()
429   methods to map and realize children. However, there are 
430   a couple of things to watch out for here:
431
432    - If the parent is realized before the add() happens, 
433      gtk_widget_set_parent_window() must be called before
434      gtk_widget_set_parent(), since gtk_widget_set_parent()
435      will realize the child.
436
437    - If a container depended on its children not being mapped
438      unless it did so itself (for example, GtkNotebook only
439      mapped the current page), then the new function
440      gtk_widget_set_child_visible() must be called to keep
441      widgets that should not be mapped not mapped.
442
443   As part of this change, most containers also will no longer need
444   custom implementations of the map() and unmap() virtual
445   functions. The only cases where this is necessary are:
446
447    - For !NO_WINDOW widgets, if you create children of widget->window 
448      and don't map them in realize() then you must map them
449      in map(). [ In almost all cases, you can simply map the
450      windows in realize() ]
451
452    - For NO_WINDOW widgets, if you create windows in your realize()
453      method, you must map then in map() and unmap them in unmap().
454
455 * gtk_widget_set_default_style (), gtk_widget_push_style (),
456   and gtk_widget_pop_style () have been removed, since they
457   did not work properly with themes and there were better
458   alternatives for modifying the appearance of widgets.
459
460   You should generally use gtk_widget_modify_fg/bg/base/text/font
461   instead.
462   
463 * gtk_image_new() now takes no arguments and creates an empty GtkImage
464   widget. To create a GtkImage widget from a GdkImage (the least
465   common usage of GdkImage), use gtk_image_new_from_image.
466
467 * GTK_SELECTION_EXTENDED is now deprecated, and neither the
468   GtkList/GtkTree nor the GtkCList/GtkCTree support
469   GTK_SELECTION_EXTENDED anymore.  However, the old extended behavior
470   replaces MULTIPLE behavior.
471
472 * The following variables are no longer exported from GDK. (Other variables
473   are also no longer exported; the following are the ones found used
474   externally in a large sample of GTK+ code.)
475
476    Variable                               Replacement
477    ========                               ===========
478    gdk_null_window_warnings               None - did nothing in GTK+-1.2.
479    gdk_leader_window                      None - private variable
480    gdk_screen                             gdk_x11_get_default_screen ()
481    gdk_root_window                        gdk_x11_get_default_root_xwindow ()
482    gdk_root_parent                        gdk_get_default_root_window ()
483    gdk_error_code/gdk_error_warnings      gdk_error_trap_push()/pop()
484    gdk_display_name                       gdk_get_display ()
485    gdk_wm_delete_window                   gdk_atom_intern ("WM_DELETE_WINDOW", FALSE)
486    gdk_wm_take_focus                      gdk_atom_intern ("WM_TAKE_FOCUS", FALSE)
487    gdk_wm_protocols                       gdk_atom_intern ("WM_PROTOCOLS", FALSE)
488    
489 * The handling of Colormaps and widgets has been changed:
490
491     - The default colormap for widgets is now the GdkRGB colormap, not
492       the system default colormap. If you try to use resources created for  
493       a widget (e.g., widget->style) with a window using the system
494       colormap, errors will result on some machines.
495
496     - gtk_widget_push/pop_colormap() only cause the colormap to be
497       explicitely set on toplevel widgets not on all widgets. The
498       colormap for other widgets (when not set using 
499       gtk_widget_set_colormap()), is determined by finding the nearest
500       ancestor with a colormap set on it explicitely, or if that
501       fails, the default colormap.
502
503 * The default selected day for GtkCalendar is now the current day in the
504   month, not the first day in the month. The current month and year
505   were already used.
506
507 * GDK is no longer put into threaded mode automatically when 
508   g_thread_init() has been called. In order to use the 
509   global GDK thread mutex with gdk_threads_enter() and 
510   gdk_threads_leave(), you must call gdk_threads_init() explicitely.
511
512   If you aren't using GDK and GTK+ functions from multiple threads,
513   there is no reason to call gdk_threads_init().
514
515 * The GtkPreviewInfo struct has had its visual and colormap fields
516   removed.  Also, gtk_preview_get_cmap() and gtk_preview_get_visual()
517   are deprecated, as GdkRgb works on any colormap and visual.  You no
518   longer need to gtk_widget_push_cmap (gtk_preview_get_cmap ()) in
519   your code.
520
521 * The GtkBox, GtkTable, and GtkAlignment widgets now call
522   gtk_widget_set_redraw_on_allocate (widget, FALSE); on themselves.
523   If you want to actually draw contents in a widget derived from
524   one of these widgets, you'll probably want to change this
525   in your init() function.
526
527 * A number of widgets are now NO_WINDOW widgets (most importantly
528   GtkButton, but also GtkRange and GtkNotebook)
529
530   This has a couple of effects:
531
532    - If you are deriving from one of these widgets, you need to
533      adapt your code appropriately -- for instance, drawing coordinates
534      start from widget->allocation.x, widget->allocation.y.
535
536    - If you are embedding one of these widgets in a custom widget,
537      you must make sure you call gtk_container_propagate_expose()
538      correctly, as you must for any NO_WINDOW widgets.
539
540   GtkFixed is a little special; it is now created by default as
541   a NO_WINDOW widget, but if you do 
542
543     gtk_fixed_set_has_window (fixed, TRUE);
544
545   after creating a fixed widget, it will create a window and
546   handle it properly.
547
548 * GtkLayout no longer has the xoffset, yoffset fields, which used
549   to store the difference between world and window coordinates for
550   layout->bin_window. These coordinate systems are now always
551   the same.
552
553 * gtk_paint_focus(), gtk_draw_focus() and GtkStyle::draw_focus()
554   have been changed a bit:
555
556    - A GtkStateType argument has been added to gtk_paint_focus()
557    - The default implementation of GtkStyle::draw_focus virtual
558      function now draws a focus rectangle whose width is 
559      determinted by the GtkWidget::focus-width style property.
560    - The rectangle passed in is the bounding box, instead of
561      the rectangle used in the gdk_draw_rectangle() call, so it is
562      no longer necessary to subtract 1 from the width and height.