What is GTK+?

GTK+ is a highly usable, feature rich toolkit for creating graphical user interfaces which boasts cross platform compatibility and an easy to use API. GTK+ it is written in C, but has bindings to many other popular programming languages such as C++, Python and C# among others. GTK+ is licensed under the GNU LGPL 2.1 allowing development of both free and proprietary software with GTK+ without any license fees or royalties.

Get an overview of GTK+. Understand who started it, the basic architecture and why we use the license we do.

GTK+ has been involved in many projects and some big platforms. To see what people think of GTK+ and how it has been used in commercial projects, read the success stories...

To find out how more about what GTK+ can do for you, visit our features page. If you want to contribute, you are more than welcome.

Recent news

GTK+ 2.20 Released

April 1, 2010

GTK+ 2.20 adds new functionality while maintaining source and binary compatibility with GTK+ 2.18. Highlights of new features and improvements in GTK+ 2.20 are:

Noteworthy changes:

  • GtkSpinner, GtkCellRendererSpinner – A new widget that renders a ’spinner’ animation to indicate ongoing activity. The corresponding cell renderer renders the same animation inside a treeview
  • GtkOffscreenWindow – A new toplevel container widget to manage offscreen rendering of child widgets
  • GtkNotebook – You can now show ‘action widgets’ in the space that is not occupied by tabs. This functionality is also available in GtkBuilder via the ‘action-start’ and ‘action-end’ child types.
  • Filechooser – GtkFileSystemModel has been reimplemented, for major speedup and simplifications.
  • Keyboard handling – The compose sequences understood by the builtin input method have been synced with X.org, and the additional sequences have been rationalized
  • Mnemonic underlines – Can now optionally be hidden until the Alt key is pressed, this can be turned on with the gtk-auto-mnemonics setting
  • Keyboard accelerators – The Super, Meta and Hyper modifiers are working more reliably
  • GDK – There is a new function to get the ‘primary’ monitor in multi-monitor setups: gdk_screen_get_primary_monitory.
  • gdk-pixbuf – Embedded color profiles in png and tiff images can be stored and retrieved. Support for the QTIF image format has been added
  • Win32 – XP themes have been disabled since they don’t work
  • OS X – GTK+ uses standard Mac keyboard shortcuts (Cmd-X/Cmd-C instead of Ctrl-X/Ctrl-C, etc). The handling of multi-monitor setups has been greatly improved
  • Introspection support – Introspection data is now included in GTK+ itself. As a consequence, a dependency on gobject-introspection has been added


GLib 2.24.0 released

April 1, 2010

GLib 2.22 is a stable release adding an incremental improvement in functionality over GLib 2.20 while maintaining binary and source compatibility. Major changes include:

  • The requirements for g_thread_init() have been relaxed slightly, it can be called multiple times, and does not have to be the first call. GObject now links to GThread and threads are enabled automatically when g_type_init() is called. Thread-safety issuesvwith boxed types in GObject have been fixed. The -pthread flag has been added to all gmodule .pc files, because it is not generally permissible to load modules that are linked against libpthread if the program has not been compiled with threading support.
  • GType now has a G_DEFINE_INTERFACE convenience macro
  • GIO supports lazy loading of GIO modules, and there is a new gio-querymodule utility that goes along with this. Packagers will need to adapt to this.
  • GIO uses splice(2) to transfer data between file descriptors without extraneous copies.
  • The GVariant variant datatype has been added.


GTK+ 2.18 stable release

September 25, 2009

GTK+ 2.18 adds new functionality while maintaining source and binary compatibility with GTK+ 2.16. Highlights of new features and improvements in GTK+ 2.18 are:

GtkInfoBar
A new widget to show a transient ‘message area’ inside a content pane. The API is similar to GtkDialog and supports theming for different message types (warnings, errors, etc)

GtkBuilder

  • Scale marks can be specified in builder markup
  • GtkAssistant action widgets can be added in builder markup

GtkLabel
GtkLabel can show embedded URLs, much like SexyUrlLabe

GtkEntry
GtkEntry has been refactored to follow the model-view pattern, with GtkEntryBuffer as model. One intended use case for this is to support ’secure memory’ for password entries

File chooser

  • Backup files are hidden by default
  • GTK+ remembers the sorting state of the file list
  • File sizes are shown by default
  • The ‘Create Folder’ button can be disabled with the the ::create-folders property

Printing support

  • GTK+ supports authentication against CUPS servers
  • A backend for the PAPI printing system has been added
  • The file and lpr backends can print multiple pages per sheet
  • The file backend can produce svg files
  • GTK+ supports printing an application-defined ’selection’ in addition to the usual page ranges
  • The print dialog can optinally include the page setup controls, avoiding the need for a separate page setup dialog in many situations

Theming support

  • The bullet character used in invisible entries can be set by themes with the ::invisible-char style property
  • The file chooser can show different icons for xdg user dirs. The icon names are folder-documents, folder-download, folder-music, folder-pictures, folder-publicshare, folder-templates and folder-video
  • The GtkInfoBar uses symbolic colors for theming its background color depending on the message type. The color names are info_fg_color, info_bg_color, warning_fg_color”, warning_bg_color, etc.

GDK changes
GDK has been rewritten to use ‘client-side windows’. This means that GDK maintains its own window hierarchy and only uses X windows where it is necessary or explicitly requested. Some of the benefits of this change are

  • Reduced flicker
  • The ability to do transformed and animated rendering of widgets
  • Easier embedding of GTK+ widgets, e.g. into Clutter scene graphs
  • See gdk-demo for some simple examples of client-side windows in action. See the documentation for information about possible problems when moving to client-side windows.

For more details and lists of fixed bugs, see the
announcements for the 2.17.x development releases: 2.17.0, 2.17.1, 2.17.2, 2.17.3, 2.17.4, 2.17.5, 2.17.6, 2.17.8, 2.17.9, 2.17.10, 2.17.11


GLib 2.22 Stable Release

September 23, 2009

GLib 2.22 is a stable release adding an incremental improvement in functionality over GLib 2.20 while maintaining binary and source compatibility.

Major new features include:

  • GArray, GPtrArray, GByteArray, GTree and GMappedFile can be reference counted.
  • GLib can be forced to reload the XDG user directory mapping.
  • The GLib mainloop supports per-thread default contexts.
  • GIO now provides types and methods for IP addresses and UNIX domain socket addresses.
  • GResolver provides asynchronous and cancellable APIs for resolving hostnames, reverse lookup of IP addresses and resolving SRV records.
  • Support for network IO has been added to GIO, including low-level socket API and high-level API for network connections and services.
  • GIOStream and its subclasses have gained support for read-write access.
  • GIO supports starting and stopping of drives, which can be used in connection with external hard disk enclosures, disk arrays, iSCSI devices, etc.
  • GIO supports user interaction during unmount and eject operations.
  • GIO can store and retrieve per-file metadata.

For more details and lists of fixed bugs, see the announcements of the 2.21.x development releases: 2.21.0, 2.21.1, 2.21.2, 2.21.3, 2.21.4, 2.21.5 and 2.21.6


GTK+ 2.17.8 unstable release

August 17, 2009

This is a development release leading up to GTK+ 2.18.

Overview of Changes from GTK+ 2.17.7

  • Client-side windows
    • – various fixes to expose handlings
    • fix memory leaks
  • Minor API additions

    • New setter as part of the GSEAL effort: gtk_widget_set_allocation

11 bugs fixed in this release!


For older news, visit our archives.