Skip to content

Goodbye GTK+ 2, Hello GTK+ 3

With the release of Xojo 2017 Release 2 we have updated our Linux Desktop framework to use GTK+ 3 instead of GTK+ 2. For those not familiar with Linux, GTK+ is a User Interface (i.e. UI) toolkit, much like Cocoa is for macOS and Win32 controls (or WinForms.NET or WPF) is for Windows. GTK+ 2 has been supplying the user interface for Xojo Desktop apps for Linux since we first targeted Linux over a decade ago. It has since been deprecated in favor of GTK+ 3 for quite some time now and GTK+ 2 is typically not installed by default on most Linux distros these days, which makes deploying Xojo Desktop apps on Linux more painful. Unfortunately GTK+ 3 is not ABI compatible with GTK+ 2 so we could not migrate to using GTK+ 3 without completely ditching GTK+ 2.

Let’s take a closer look at what this means for your Linux apps:

Target 2017r1.1 (and prior) requirements 2017r2 requirements
Linux console/web apps Ubuntu 10.04, CentOS 6.0, etc. No change
Linux (x86, x86-64) Desktop apps Ubuntu 10.04, CentOS 6.0, etc.

  • GTK+ 2.20
  • libwebkitgtk-1.0.0 (for HTMLViewer)
Ubuntu 12.04, CentOS 7.0, etc.

  • GTK+ 3.4.1
  • libwebkitgtk-3.0.0 (for HTMLViewer)
Linux Pi (ARM) Desktop apps Raspian Wheezy

  • GTK+ 2.20
Raspian Wheezy (no change)

  • GTK+ 3.4.1

Besides the benefit of not having to tell your end users to install GTK+ 2 on their particular Linux distro, here are some other notable items affected by the GTK+ 3 transition:

Feature GTK+ 2 GTK+ 3
  • No inherent scaling
  • Scales automatically on integral scale factors (i.e. 1x, 2x, 3x, etc.)
  • Child controls do not clip on a transparent parent control (like a Canvas)
  • Child controls properly clip on all parent controls
  • Default control sizes have generally increased, depending on theme/distro
  • Ability to style controls using CSS, for example:
    In ~/config/gtk-3.0/gtk.cssGtkButton {
    padding: 1px;
  • Border can be removed
  • Depending on GTK+ 3 version the border cannot be removed (i.e. Ubuntu 12.04 yes, Ubuntu 15.10 no)

While there’s a short list of actual differences, there have been numerous changes underneath made during this transition. For example, features that we had to custom code because GTK+ 2 did not offer them but GTK+ 3 did. Updating to GTK+ 3 is the final piece to our cross-platform HiDPI support for Desktop apps. Until the day comes when we have to say goodbye to GTK+ 3 (GTK+ 4 is already in the works), we welcome its inclusion in Xojo with a long overdue “Hello”!