We’ve been working on gtkmm 3 increasingly since sometime in 2009 and today we have finally declared it stable. gtkmm 3.0.0 is out. We last did an ABI-breaking parallel-installable stable version in April 2004 for gtkmm 2.4.0 so we’ll probably have to live with this for a while.

We didn’t fullfil all our amibions, due to lack of time, but we did fix many annoyances that had built up over the years. And luckily GTK+ 3 turned out to contain far more interesting changes than initially planned, most of which are now available via gtkmm-3.0.

Personally, I’m glad that it’s done. It’s been a long hard slog over the past year, made possible by my company Openismus GmbH, just to keep up with the (nevertheless necessary) API churn during the unstable GTK+ 3 development cycle. That hasn’t left me much time for any other software development, but now I feel free.

To port to gtkmm-3.0 you should first try to build your application with gtkmm-2.4 but without using deprecated API. The deprecated API generally has documentation suggesting what new API you

should use instead. These gtkmm-3.0 porting hints might also be helpful:

Some new/changed API in gtkmm-3.0, though this list is far from complete:

Gtk:

Adjustment is now used via RefPtr.

AppChooser, AppChooserButton, AppChooserDialog.

Box, ButtonBox, IconView, Paned, ProgressBar, ScaleButton, ScrollBar and Separator now derive from Orientable.

All widgets derive from Buildable.

Several widgets derive from Scrollable.

CellArea and CellAreaBox

ComboBox now derives from CellLayout.

IconSet is now used via RefPtr.

StyleContext, StyleProvider, and CssProvider, replacing Style and Rc.

Grid

NumerableIcon.

Switch

Widget::on_expose_event() is now Widget::on_draw().

Gdk:

Added DeviceManager.

Removed Drawable, Pixmap and Bitmap.

Cursor is now used via RefPtr.

RGBA replaces Color, though Color still exists because it is used by TextView. We hope to deprecated Color completely in gtkmm 3.2.

Removed Colormap and its general awkardness.

General:

Use std::vector in several methods instead of the intermediate *Handle types to make the API clearer.

Change all operator void* to operator const void*, with a BoolExpr typede and extra documentation. This avoids an unintentional implicit cast to int, and is generally considered good practice in C++. The new C++ standard allows the use of the explicit keyword here instead, but that is not yet widespread.

Many existing classes have many new methods.

gtkmm-3.0 currently has no deprecated API. Not even API that was added and then deprecated during GTK+ 3.0.

See also the list of new API in gtkmm 3.0.

Thanks to everyone who helped.