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.
Please blog about gtkmm and gobject introspection.