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

Yes, clearly time for a new entry again. As always, lots of things going on, we're still trying to get everything ready in time for a release in May. This entry will be a quick update of what happened since half of January. Those interested in the big picture / small summary might be interested in the slides of my short talk at FOSDEM 1.5 weeks ago. There isn't much new in there for the regular readers of these blog entries. Also, GLib 2.10.0 got released meanwhile, and we are already at GLib 2.10.1. Pango 1.12.0 is supposed to be released soon, lastest release is 1.11.99. Ok, on to the features:

  • GtkAssistant, the replacement for GnomeDruid*, landed on HEAD in January. Seems to be in good shape, packed with nice features and a fun test application.
  • Another new widget from libegg, now named GtkLinkButton, landed. After a short discussion a global hook function was added to set up the URI handler. Using this hook every platform can setup a nicely working URI handler.
  • A “touchscreen mode” was added to GTK+. It's an XSetting, and when enabled widgets can take this into account and change their behaviour, since manipulating items with a touchscreen is a little different than when using a mouse.
  • The DirectFB backend landed on HEAD! Sweet!
  • Notebook tab drag-and-drop. Yay! Finally! And it looks/works awesome too.
  • A scroll menu patch went in, which gets rid of the blank area which sometimes appeared in for example popup menus and annoyed/confused a lot of people.
  • Another nice little API addition: input shaping, which is really support for the seperate mask for input which is provided by XShape 1.1.
  • Rich text copy/paste, copy and paste text complete with all formatting and images to/from GtkTextViews. Landed today!
  • Short tree view update, it's now possible to provide your own positioning function for the search dialog, also you can provide your own entry (packed somewhere in your interface) to be used as search dialog. Selected rows are now also row hinted. There's a bunch of cool tree view stuff coming up, more on that later.
  • The recent files code is nearing completion and will undergo review soon. Hopefully it will land within the coming two weeks.
  • Lots of progress has been made on printing, detailed mail to gtk-devel-list.
  • (I'm still thinking about tooltips, proposal and discussion is here and will come up with an updated proposal soon. Really! Promised!)
  • And of course, bug fixes all over the place.

Sorry for the somewhat rushed entry, but need to go back coding. I really think this GTK+ release is going to rock, don't you?

could we just quit stressing and relax now?

yay, fosdem is already coming weekend. i will be there, probably mostly be hanging out in the gnome room (surprise!!) over day, and in some pub at night. also, i will be giving a talk on ridley and gtk+ 2.10 on sunday in the gnome room. i guess i will put the slides online after the conference and hope they will make up a next blog entry on ridley/gtk+2.10, since i didnt have time to write a normal one yet. my apologies to all people who responded to my tooltips mail on gtk-devel-list; i didnt have the time/inspiration yet to reply. i will soon! a little over two weeks ago i finally moved to my new place (away from my parents). it's almost done, today i finally arranged some better lighting from the ceiling and a new fridge arrived (you don't want to know how dirty the old ones were. well, actually, you don't want to know how dirty the entire kitchen was before i moved in. really). two more ikea boxes to put in the garbage container and then it's in a good enough shape for a while. living much closer to university means that you don't have to deal with the public transit system on a daily basis anymore. and i figured that that means less stress. the people here are so fucking stressed out that it is not even funny anymore (“want to be the first person to enter the train, even before all people who want to get out actually got out” or for a bicycle rider in leiden “let's try to run as many red lights as possible, so i will be home one full minute earlier”, i don't run red lights though). at least my stress level decreased.

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

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!]

Flow control: xon/xoff

It has just come to my attention that i forgot to blog about gtk2.10/ridley for like, more than a month. Sorry. However it is not going to happen today, maybe some other day. I am wondering whether there are even more (I know a few persons with this problem) irssi/screen users who are experiencing random freezes. What basically happens is that irssi blocks on a write call, which is, according to a friend of mine, caused by some bug in screen. I've never found a solution for this problem and I wonder if there even is one (a solution that is, there is a problem for sure). I hope the mighty lazyweb has an answer. Lately I am spending way too much time reading istheshit.net and uncyclopedia. Though it wasn't that bad today. It looks like I am getting nothing done, but but but, there is one positive accomplishment: I managed to build a new fileserver and migrate to it (after 3 or 4 months of comtemplating which components to buy). I now have a fun little fanless Epia board, in a big ATX case. Ripped a stack of CDs last weekend, since I finally had the space again to store new mp3s. My Opeth “mood” turned into a nofx “mood”. I wonder what's next. Oh, and the new System Of A Down album appears to be out, totally need to get it tomorrow.

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

Hello and welcome to the second episode of this irregular GTK+ 2.10 progress blog. It has been about two weeks since the last entry already, and some progress has been made in several areas. For people tracking GTK+ 2.10 progress for the various new API calls, this small change will be important: GtkCellRendererKeys has been renamed to GtkCellRendererAccel. We did this to make it more consistent with the terminology used throughout GTK+. Ross Burton announced that he is working on a stylus mode for GTK+. A must for handhelds devices, tablet notebooks, etc. You can find his announcement on gtk-devel-list, and there's also a Wiki page over at live.gnome.org. Work has also continued on the recent files implementation, Emmanuele Bassi has been researching the Windows-way of storing recently opened files. Of course we want to be sure that the recent files API can be implemented nicely on Windows platforms. You can read about his findings in his post to gtk-devel-list. Federico is still going strong making the file chooser ultrafast. Learn more about file chooser optimizations in the lastest episodes of “Profiling the file chooser”: [part 2] [part 3] [part 4]. And there's a new cool offscreen rendering demo from Alex Larsson! Watch!. Last but not least, the usual share of bugfixes, small updates (also a bunch of win32 updates), etc. [I have been slacking. I will get to treeview-feature-hacking soon! Really!]

GTK+ 2.10 / Project Ridley Progress Blog (aka GtkGtk links)

During the last GTK+ meeting I got the idea that it might be nice to have a development blog about GTK+ 2.10 and Project Ridley. Some people shared my opinion that this might be a nice idea, but didn't feel the need to set up a separate blog for this. So, I decided to volunteer to write this up, and hope to post regular updates on the progress of GTK+ 2.10 and Project Ridley here. Of course that does not go without saying that GTK+ 2.10 is not, and will not be, the same as Project Ridley. One of the most interesting changes is probably the addition of GtkStatusIcon, a cross-platform API for “tray icons”. It has been based on EggStatusIcon, and in the progress of integrating in into GTK+ some small features have been added. There's a single API issue, namely notification. Those interested can find the header file of GtkStatusIcon here. Another thing which has been moved over from libegg to GTK+ is a cell renderer for displaying and editing accelerators/keybindings, now known as GtkCellRendererKeys. Also, support was added for extra virtual modifiers, so users can use the extra modified keys on their keyboards (like the Windows and Apple keys) when creating new keybindings. That work was discussed in here. Owen worked on a patch to rework the Unicode hex input code. With this new input code you can input a hex Unicode sequence in the following way: start by pressing Ctrl-Shift-U, and with Ctrl-Shift still held enter a sequence of hex digits. If you release one of the Ctrl or Shift keys or press on space, the character will be committed. More information on this patch is here. Alex Larsson has been working on rendering widgets to offscreen buffers, something we are going to use in the new canvas. You can read more about this in his recent blog entry. Don't miss out the demo! Federico returned to hacking GtkFileChooser and did some interesting optimizations. At last, we also got a bunch of new stock items: GTK_STOCK_CONNECT, GTK_STOCK_DISCONNECT and GTK_STOCK_SELECT_ALL. I hope to get another entry out within two weeks. Any comments on how to make entries like this more useful are always appreciated.

incrementally fixing incremental reflow

I *think* I fixed a bunch of scrolling issues in GtkTreeView. The patch (against GTK+ HEAD) is here. If you have time to test it against your application using TreeView, please do. If it breaks anything, please tell me (and it would be really great if you could provide me with a small testcase which isolates the problem). After some more testing this will hopefully land in GTK+ HEAD, so I can continue with the other bugs. The #gnome-nl people had some beer last Wednesday. Most people also watched the soccer match (against Finland). Some photos are here. Hopefully these do not have (fucked up) color profiles. Apparently there is still something wrong with the combination of my Mac mini, my 19″ CRT and photos with color profiles. (GUADEC photos are coming up soon, since this non-iPhoto gallery creation thing appears to work fine). Also bought a bunch of concert tickets today. Am going to see 'The Sex Pistols Experience', 'System Of A Down', and 'Anti-Flag'. Apparently Pennywise is coming to the Netherlands too, need to get tickets for that later. Also, NX really rocks. Try it. Luis: The Germans are not the only Europeans to pay people to check train tickets. In Netherlands we do so too. IIRC in Belgium too.

random stuff

Since I returned from GUADEC I have been trying to create a little video of the slides Glynn used for his talk at GUADEC (“101 Things to Know about GNOME”). It's almost done, just need to get the music in place, render it and convert it to theora/vorbis. We'll tell you once it's online. Last week I have been using Apple's keynote for the first time. IT IS AMAZING. Want to have some animations? Easy. Nice slide transition? No problem. And the most amazing thing (in my opinion) are the 'guides' which mark, for example, the center of the slide. These guides pop up when moving objects. I hope the people writing a presentation app for gnome look a bit at keynote to get some inspiration and ideas. Oh, yeah, before I forget. I am going to maintain GtkTreeView, starting today. My goal is to reduce the current bugcount of 152 bugs to something below 80 before GTK+ 2.8 is released. I hope that a) I will succeed and b) it will make people happy. Some random messages: – Last Sunday/Monday we celebrated that my parents have been married for 25 years. – I bought some new CDs: At The Drive-In — This station is non-operational and some live recording from the Sex Pistols. – My @babi-pangang.org mail address has been doing weird this weekend and maybe even some days before that. It seems to be fine again now. (In the unlikely event that you happened to mail me and the mail bounced or I just didn't reply. Please mail again).

SPECIAL ANNOUNCEMENT FOR THE GNOME-NL PEOPLE

Morgen (woensdag 8 juni) vanaf ongeveer 19:00, in kroegje Stairway to Heaven te Utrecht. Bier. After-GUADEC geblaat.

and why the fuck did At The Drive-In ever break up??

guadec and motivation

GUADEC was insanely great! Thanks to all people who made this happen! More on GUADEC including photos later, first want to braindump a list of stuff which I want to check out/hack on in non-particular order before I forget everything:

  • Xgl, the demo at GUADEC was seriously impressive. I need to compile it, play with it, figure out the relation between Xgl and luminocity. Once I understand the stack, I want to implement something like expose.
  • I I found out about the NSViewAnimation class on OSX. (Also look at the NSAnimation class it inherits from). Maybe it would be fun to have some API like this in X/GNOME, so need to look at this more closely.
  • I also had a little talk with Miguel, and I should also have a new look at the managed C/C++ stuff using another route than translating WHIRL to IL. In the new route we would use the intermediate language GCC 4 is using and translate that to IL. We could probably plug this all in GCC, but I am not sure since I am not really familiar with GCC internals. Needs research.
  • I want to try to give TreeView some love before gtk+ 2.8 is released. At GUADEC Jonathan and I figured that there are 152 bugs filed against TreeView!
  • My own dumb personal project which I hack on when I feel like it.
  • Oh, and my bachelorproject which I would like to finish by the end of the summer.

Hrm, I guess this will keep me busy for a while.