gtkmm 3.0.0

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:


  • 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().


  • 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.


  • 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.

One thought on “gtkmm 3.0.0

Comments are closed.