Archive for January, 2006

GTK+ 2.10 / Project Ridley Progress Blog (Episode 3)

Wednesday, January 18th, 2006

Here (finally!) is a new episode of the irregular GTK+ 2.10 progress blog. More than three months passed since the latest blog entry (posted on October, 4th, last year), my apologies for that, I was just really busy with some projects at university, etc, etc. I think almost everybody noticed the totally cool optimization frenzy at the end of last year. This moved the focus to pango and glib for a while and because of that Project Ridley stalled a bit. However, this doesn't mean nothing happened at the GTK+ front! And we're getting back to Ridley now, really. Well, let's start then with the optimizations, since people focussed on that for a while. A lot of time was spent on profiling pango, I think Federico's “Profiling the file chooser” blog entries give a nice summary on that: [part 5] [part 6] [part 7] [part 8] [part 9]. Most of the improvements landed in pango CVS HEAD, for all to test and try out. And there are also some tarballs out there: ftp://ftp.gtk.org/pub/gtk/v2.9/. Other news in optimizations, the g_slice_*() allocator made its way into GLib CVS. This allocator is faster than malloc() and provides a performance win over allocating with mem chunks. You can read more about this in Tim Janik's blog: [part 1] [part 2]. Also, a lot of GTK+ code has been changed to take advantage of this new slice allocator. The new allocator can of course be found in GLib HEAD, and there are also tarballs already! Same place as the pango tarballs above, grab and test! Next to moving code in GTK+ over to the new allocator, work has also been done on reducing the signal overhead. Alright, those were the optimizations, now on to other GTK+ stuff. A lot of changes went into the GTK+ module, mostly fixing bugs, adding little features and API additions, refining the file chooser and other widgets, etc, etc. Of course mentioning everything is undoable, fortunately you can all read the ChangeLog for that. A few things deserve to be highlighted of course:

  • Lots of stuff happened in the win32 port, among those commits are a win32 implementation of GtkStatusIcon and improved clipboard support.
  • Talking about ports, a port of GTK+ to native OSX has been committed to the HEAD branch! More information and build instructions can be found over here.
  • It is now possible to turn off all animations in GTK+ by setting the gtk-enable-animations XSetting to FALSE.
  • Button press timeouts are not hardcoded anymore and can now be configured using the gtk-timeout-initial and gtk-timeout-repeat XSettings.
  • We now have “symbolic themable colors!”. Huh? A piece in Jonathan's blog will probably help you understand what it is all about.
  • Support for closing and migrating to other displays (in the X11 sense) has been greatly improved.
  • There's an implementation of an asynchronous file chooser (just the file chooser everybody knows, but with updated backends) in the kris-async-branch of GTK+. Why asynchronous? Because the currenct file chooser totally freezes when you try to, for example, browse unreachable ftp sites, and with the asynchronous file chooser this doesn't happen anymore. Hooray! Though some more solid testing would be appreciated!
  • Themability improvements like new style properties in the notebook, the pixbuf engine can now theme expanders and resize grips.
  • The GtkTreeModelSort and GtkTreeModelFilter (and especially the filter) have undergone a lot of fixage. If your application is using one of these models, be sure to test it with GTK+ HEAD soon!

Let's have a quick peek at the upcoming features, so you have something to look forward to until the next blog entry appears (which might be quite a while, as we noticed ;). Mostly complete:

  • The GtkAssistant. Part of Project Ridley, goal is to move GnomeDruid to GTK+ (#115348).
  • A hyperlink button. #314808
  • Notebook Drag and Drop.
  • GtkRecentChooser and related recent files code.

Work started:

  • Putting libglade inside GTK+. More in #172535.

Prototypes/ideas available, but a lot left to be done: (but still in GTK+ 2.10 hopefully, and if you want to be sure, help out!)

  • Printing. Cairo in CVS now has fallbacks for all drawing code, so that all operations work when exporting to pdf. This is a major milestone in getting cairo ready to replace libgnomeui. Application authors might want to start taking a look at cairo for printing, to make sure it works well for them.

    And GTK+ developers too, Jonathan Blandford is going to start up the work on the printing dialog again, after it went silent in the weeks after the 2005 GNOME Summit. Do you care about printing? Want to help? You know who to talk to ;).

  • A canvas. As part of Project Ridley we want to replace GnomeCanvas with some cairoified canvas, and put that canvas in GTK+ of course. You can play with goocanvas. There are some threads on gtk-devel-list here (achtung! this thread spans several months!), here and here. A lot of work is needed here still.

There is a lot left though. For more information on Project Ridley, see the wiki page. [oh right, and what am i doing myself? slacking? no no no, i am slowly starting working on treeview again, need to get the bug count under control. and i promised to do something about the tooltips situation in gtk+, i hope to write some mail to gtk-devel-list soon, really! promised!]