What's new for developers, system administrators and distributors

GNOME 3.12 introduces a number of new features and enhancements for those working with GNOME technologies.

New GTK+ Widgets

The GTK+ toolkit has three new interface widgets for 3.12:

  • GtkActionBar: a new container, which has a centered child like GtkHeaderBar. This is intended for use at the bottom of widgets for presenting actions for selected content.

  • GtkPopover: a new widget that can be used for transient views, as an alternative to menus or dialogs.

  • GtkFlowBox: a container that displays its children as a reflowing grid, which can be oriented horizontally or vertically.

Integrated Notifications API

GNOME 3.12 includes a new notifications API. Included in GIO and called GNotification, the new API replaces libnotify, so that developers no longer need to link against it. (GNotification can fall back to the org.freedesktop.Notifications D-Bus interface.)

The new API neatly integrates with GTK+, and works in conjunction with GApplication and GAction. It provides many of libnotify's capabilities plus some new ones, such as the ability for notifications to persist after an application exits. It also makes it possible to restart an application when a notification is activated by the user.

More details on how to use the GNotification API can be found on the How Do I page.

Powerful New Process Launching API

A new, powerful process launching API is included in 3.12, called GSubprocess. The new API allows the gapplication command line utility to be used for launching applications. Applications can be instructed to open files or trigger actions when launched. It is also possible to list the available applications and actions, and the command line utility comes complete with bash completion.

GApplication now also supports command line handling, including the convenient --gapplication-service option.

Improved Developer Documentation

3.12 includes a raft of improvements to GTK+'s API reference documentation. The documentation has been restructured to have a more logical order. Synopsis sections have been uncluttered for easier reading, and widget screenshots have all been updated.

Documentation markup has also been improved across a number of libraries. GTK+, GLib, GDK-Pixbuf and Clutter have all been converted to use Markdown. This results in a less cluttered appearance and easier maintenance at source.

Finally, formatting improvements have been made for all documentation, which make it more attractive and easier to read.

Wayland Available for Testing

A huge amount of progress has been made towards full Wayland integration for 3.12. This includes the creation of a new libinput library and new functionality for login and session management. Developers who are interested in Wayland, or who want to test their software in a Wayland environment, can try the latest development work.

To run gnome-shell under Wayland, execute the following command in a terminal:

gnome-session --session=gnome-wayland

It is also possible to run individual applications on Wayland by specifying the GDK_BACKEND. Run the following command, substituting application-name for the name of the application's executable:

GDK_BACKEND=wayland application-name

If an application fails to run on Wayland, it will try to fall back to X11.

Further details about GNOME on Wayland can be found on the GNOME Wayland wiki page.

Tracker Updates

Tracker the search engine, search tool and metadata storage system, comes with a long list of improvements for 3.12:

  • A new library called libmediaart has been created from Tracker code to handle art associated with multimedia files. libmediaart allows art stored in media files to be cached, and provides a consistent way to look up art and reduce cache sizes for artists, albums and media items. (libmediaart is not intended to generate thumbnails.)

  • Another new library, called libtracker-control, has been added for managing search miners.

  • New passive extraction features allow specified metadata extraction (e.g. image orientation) by listening to signals on resource changes. Previously, inserting information about a resource was done in one step. This feature means that file data (e.g. file name, size, etc) is inserted even if specific metadata isn't.

  • It is now possible to prioritize RDF types when indexing: this enables indexing to be tuned for specific situations.

  • The tracker:normalize() and tracker:unaccent() SPARQL functions are now supported.

  • A new command called tracker-sparql --tree will display the database ontology. This will help developers to get a clear picture of the class hierarchy.

  • Encoding detection is now supported for metadata with ICU.

  • Tracker store's GraphUpdated signal delay is now configurable. This signal is used to provide notifications of resource changes in the database (e.g. new file added). Previously, the delay was always one second.

Grilo Extensions with Lua

The Grilo media discovery framework now allows online media sources to be added using Lua's powerful yet simple pattern matching abilities. More details, including examples, can be found in Bastien Nocera's blog post on the subject.

Mature Client-Side Decorations

Client-side decorations allow application windows to take over functions from the window manager. These were first introduced last cycle, with the new GtkHeaderBar widget. Since then, GtkHeaderBar has matured greatly. The widget now has a consistent height, and windows can be moved by dragging the header bar on touch devices. Header bars can also include application menus as well as a variety of window controls in addition to the standard close button.

Improved Python Bindings

GNOME's Python bindings have been improved for 3.12:

  • Python doc strings for functions now show accurate call signatures including argument and return type information.

  • There is now an implicit None default for tail-end function arguments.

  • All callback connection functions now accept a variable number of user-data arguments.

  • New demos show how to use CSS in GTK+ from Python.

  • Calling GObject.threads_init is no longer required for multi-threaded programming.

Additionally, there have been many memory and performance improvements.

Enhanced Portability

Portability across different UNIX operating systems has been greatly improved for 3.12. Over 150 FreeBSD issues have been reported and fixed, and test builds are also running regularly. Work for other operating systems is ongoing. A new supported platforms policy has also been introduced for GLib.

More details about these efforts can be found in Ryan Lortie's blog post on the subject.

Other Improvements

Other improvements for developers and sysadmins in 3.12 include:

  • Most GTK+ containers now draw backgrounds.

  • Model-based menus can now hide items based on specified conditions.

  • GtkBox now supports a centered child, in the same way as GtkHeaderBar.

  • High DPI density displays are now supported in Clutter, using the same setting shared by GTK+ and the GNOME Settings Daemon.