Mx 1.1.0 (“Discovery”)

Mx is a widget toolkit using Clutter that provides a set of standard interface elements, including buttons, progress bars, scroll bars and others. It also provides useful interfaces and utilities, such as Clipboard and Icon Theme support. Styling is achieved using a CSS style configuration file. It is used to implement the user experience shell in MeeGo Netbook.

  • This is the first release in the unstable development series.
  • As this is a development release, it should not be used in production environments.
  • Installing the contents of this release will overwrite the files from the installation of the current stable release of Mx.

Some of the new features include some visual changes:

Shadows in MxEntry and MxScrollView:

New MxModalFrame for a window modal container, which darkens and blurs the window:


Changes since 1.0.0:

  • Updated documentation
  • Fix compilation with recent versions of GTK+
  • Require GTK+ 2.20
  • MxWidget: Move padding into the correct struct
  • Reduce the libtool version age to indicate ABI change
  • Fix GtkLightSwitch size and remove labels
  • Focusable: don’t accept focus on hidden actors
  • Allow spacing to be set from CSS in MxTable and MxBoxLayout
  • MxOffScreen: Add “redirect-enabled” property
  • MxOffScreen: Add accumulation buffer capability
  • MxOffScreen: Provide an accessor to the fbo
  • BoxLayout: add “scroll-to-focused” property
  • Add MxSettings and support for reading xsettings
  • Use CoglSubtexture rather than internal subtexture implementation
  • ScrollView: add shadows to the inside of a scrollview when scrolling
  • Viewport: respect fill, alignment and padding properties
  • Window: respect ClutterStage:user-resizable property
  • Improvements to MxIconTheme
  • Support pixel (px) and point (pt) font size values in CSS
  • MxModalFrame: new widget to implement modal dialogs

Updated Translations:

  • Turkish (Ahmet Özgür Erdemli)
  • Asturian (astur)

Many thanks to:

  • Chris Lord
  • Neil Roberts
  • Thomas Wood
  • iain


Sources are available from

or from git:

git clone git://


Documentation for the unstable branch of Mx is currently available at:


Issues and feature requests should be filed in bugzilla:

Universal Access Settings

Jon McCann was recently working with the accessibility folks to come up with a new design for accessibility settings in GNOME 3.0. The results of the discussions are linked to on the Settings/Universal Access wiki page.

To help clean up some of the current settings panels, I have been implementing the mockup that Jon worked on. The current state is available in the latest Gnome unstable release, which is available in Rawhide for people running Fedora. Unfortunately Ubuntu have decided not to ship development packages of this Gnome release for people to test, so here are some screenshots of what is available so far:

Some features will need integration with the new Gnome Shell, and these are “grayed out” for now. Clearly there is some work to be done to make sure it conforms to the new Human Interface Guidelines and generally looks visually appealing. Unfortunately, there isn’t a large team of people working on Control Center right now, so it would be great if anyone can help out testing, fixing and improving! If you think you may be able to help out, the best way to get in touch is to pop in to the #control-center channel of If you feel like diving straight in, the UI file for Universal Access is here. Send any changes back to the mail list or pop by IRC!

Mx Toolkit 1.0.3

Bee over waterlily by aussiegall

I just released a Mx 1.0.3 (“Honey Dew”), with improved documentation and support for compiling GSEAL_ENABLED in GTK+.

Also with this release, I’m pleased to announce Mx is now hosted on!

MeeGo Zones

One thing everyone might not have noticed in the new MeeGo 1.0 for netbooks is the nice new zones panel, which I had the pleasure of working on. One of the neat things is that you can drag and drop windows between zones, and there are some nice animations as this all happens. I wrote about how I implemented the animations back in December last year, although I couldn’t mention what it was for at the time!

Unfortunately I didn’t get time to do a video yet, but here’s a screenshot showing the drag and drop in motion:

Meego™ and Mx 1.0

Meego™ 1.0 for Netbooks is now available, with a revamped user experience based on Clutter/Mx. The Mx toolkit now sports a number of widgets and classes, as I mentioned in my previous post. The API reference documentation is now also available online, or can be built from the source code using the –enable-gtk-doc configuration option. Source code is available from git or source tarballs.

Mx Widget Gallery

Mx Toolkit 1.0

The first stable release of the Mx widget toolkit was quietly released a few days ago. Mx is a traditional GUI toolkit, built upon Clutter technology. This enables smooth animations and special effects through hardware accelerated graphics (OpenGL).

The 1.0 release brings API and ABI stability to Mx and a good deal of bug fixes. The source code is available from, along with some of the other optional supporting packages such as clutter-gesture and clutter-imcontext. The 1.0 release is tagged and there is a branch that will carry bug fixes for this release. I’ve also made tarballs available in my personal directory on To build with minimal requirements, you may want to disable the optional dependencies from the configure script (–without-clutter-imcontext –without-clutter-gesture –without-startup-notification –without-dbus).

Here’s a list of some of the features that made it into 1.0:

  • Widgets: Window, Button, ComboBox, Entry, Frame, Icon, Label, Menu, ProgressBar, PathBar, ScrollBar, Slider, Toggle, Toolbar and Tooltip
  • Layout Containers: Grid, Table, Box, ScrollView, Viewport
  • Advanced Actors: Offscreen, DeformWaves, DeformBowTie, DeformPageTurn
  • Data views: ItemView, ListView
  • Utility objects: Application, Action, Clipboard, IconTheme, Style, TextureCache, ButtonGroup,
  • Other features: Drag and drop, keyboard navigation, CSS styling

As with any 1.0 release, there are bound to be bugs that haven’t been caught yet, so if you find any, please file them in the bugzilla located on (the Mx product can be found under “Meego Projects”).

Many thanks to all those involved in the making of Mx 1.0!

JHBuild Tip

I use “jhbuild shell” quite a lot to allow me to have separate build and testing environments when developing software. I also have multiple JHBuild environments and it can sometimes be hard to know which environment I am working in. Thankfully, it’s fairly easy to modify the command prompt to let you know that you’re in a jhbuild shell. I have something similar to this in my ~/.bashrc :

if [ “x$CERTIFIED_GNOMIE” = “xyes” ];
PS1=”[\u@\h \W (jhbuild)]\\$ ”

Monet Update

I’ve added some quite interesting features to Monet recently. Monet is my effort at a replacement for Gtk+ theming, and also a generic widget drawing architecture using cairo that can be used by different toolkits.

The first thing is a new MnConfig object, which is responsible for loading configuration files for Monet (i.e. “themes”). These are written in XML format. It’s fairly similar to SVG, but with several extensions to make it easier to identify the various widgets and states.

For example, the following code:

<widget type="button">
 <rect x="0.5" y="0.5" width="-1" height="-1" stroke-width="1" stroke="#988c7c" corner-radius="4">
   <gradient x1="0" y1="0" x2="0" y1="50">
     <stop color="#fcfbfa" position="1"/>
     <stop color="#e7e2da" position="0"/>
 <rect x="1.5" y="1.5" width="-3" height="-3" stroke-width="1" stroke="#fff" corner-radius="3"></rect>

renders buttons that look like this:

Obviously the XML format is not complete yet, and there support needs to be added for expressions such as x=”width / 2″. I also want to keep the drawing aspect as close to SVG as convenience allows.

As far as API goes, there are currently two important objects:

  • MnStyle implements drawing all the widgets. It includes all the top level widget drawing, such as mn_style_paint_button. It will also have a set of more generic drawing operations to implement stylised shadows, lines, arrows, etc.
  • MnConfig will load a description of how to draw the widgets (as described above). This will allow theme designers full control over the look and feel for widgets. By using a XML based description it means that theme authors no longer have to understand C and GTK+ before they can write themes! Hylke has volunteered to look at writing a visual editor too, which will be really important for wider adoption.

There is still a way to go before Monet is production ready, but there is a GTK+2 theme engine available to test it out with. For now this provides a compatibility layer, but I hope in the future, many toolkits will be able to use Monet directly.

If you want to check out the progress, all the code is available in the monet-xml branch of the git repository at, but do bear in mind it still needs a lot of work before it’s ready for every day use!

Gnome 2.30 in London

We’re going to be celebrating Gnome 2.30 in the usual manner in London. If you’d like to come along, please be sure to add your name to the wiki page so we can gauge numbers.