Changes in GTK+ 3.10

GDK has been changed to allow only a single screen per display. Only the X11 backend had multiple screens before, and multi-screen setups (not multi-monitor!) are very rare nowadays. If you really need multiple X screens, open them as separate displays.

The behavior of GtkBox::expand has been changed to never propagate up. Previously, this was happening inconsistently. If you want the expand to propagate, use the GtkWidget h/v expand properties. If you experience sizing problems with widgets in ported code, carefully check the expand and fill flags of your boxes.

GtkBin no longer provides default implementations for get_height_for_width, subclasses now have to provide their own implementation if they need height-for-width functionality.

Widget state propagation has been changed. Historically, all of active, prelight, selected, insensitive, inconsistent and backdrop have been propagated to children. This has now been restricted to just the insensitive and backdrop states. This mostly affects theming.

The way widget drawing happens has changed. Earlier versions handled one expose event per GdkWindow, each with a separate cairo_t. Now we only handle the expose event on the toplevel and reuse the same cairo_t (with the right translation and clipping) for the entire widget hierarchy, recursing down via the GtkWidget::draw signal. Having all rendering in the same call tree allows effects like opacity and offscreen rendering of entire widget sub-hierarchies. Generally this should not require any changes in widgets, but code looking at e.g. the current expose event may see different behavior than before.

The Gtk+ scrolling implementation has changed. gdk_window_scroll() and gdk_window_move_region() no longer copy the region on the window, but rather invalidate the entire scrolled region. This is slightly slower, but allowed us to implement a offscreen surface scrolling method which better fits modern hardware. Most scrolling widgets in Gtk+ have been converted to use this model for scrolling, but external widgets implementing scrolling using GdkWindow may see some slowdown.