The week in qooxdoo (2009-05-29)

Welcome to latest installment of our weekly activity report. Several of us continue to be engaged in a big in-house qooxdoo project, at least part-time. Here is what else happened.



The resource key in decoration and icon themes was too limited. It was only possible to set exactly one resource directory. It has been replaced by the new alias key, which expects a map as value. The map keys are the alias names and the values the corresponding resource directories.

Just as ordinary qooxdoo classes, themes do support mixins. However it is not possible for mixins to override existing keys. To allow explicit overriding of keys theme mixins can now be included using the patch key.


The “Uniform”, “Single”, “Double” and “Beveled” decorators now also support setting the background image position.

New features

  • It is now possible to change the position of the icon of a TabButton in the TabView widget.
  • We have added a new event (beforeContextmenuOpen) which is fired before a context menu is shown (#1257).
  • If the size of the DOM element for an inline application is not set and the dynamicX/Y settings are used, an error is thrown (#2342).


For a complete list of bugs fixed during the last working week, use this bugzilla query.


Cache Stuff

The default path of the cache folder has been changed, it’s now in a system-dependent temp directory. The system-dependent temp directory will be something like /tmp on *ix systems, %HOMEDRIVE%%HOMEPATH%\Local Settings\temp on Windows XP, and something even more intuitive like /var/folders/-t/-tPw69jr2RWkyU+1YrJNvU+++TM/-Tmp- on MacOSX. You can always override this default by setting the CACHE macro in the let section of your local config.json file. The reason to introduce this was simply to support multi-application development on the same machine, getting the cache out of the way in the individual application, and benefit from cache re-use across applications.

The new default location takes advantage of another novelty, the TMPDIR system macro. System macros introduce a new breed of macros that can be referenced without ever being explicitly defined in a configuration file, since the system, i.e. the generator, will provide a definition for them. Let’s see how they evolve.

If you allow multiple applications to access the same cache, there is a chance that you have classes with same names from different applications. In order to accommodate this, id’s for cache objects have been changed to better reflect the context they come from. So for instance, if you are using the same qooxdoo installation for multiple applications, you will get the benefit of cached framework classes across applications. If, on the other hand, you fancy to use different qooxdoo installations on the same machine, e.g. with different versions, their cache items will be different, and will not be used interchangeably.


A new key packages/loader-with-boot, if set to false, allows you to separate loader information from class code. (This will only make sense to people who actually need it, so don’t worry about it).



There are two new releases available of the HtmlArea: 0.3 and 0.4. Check out the corresponding blog post for detailed information.

In short: the new 0.3 release works together with 0.8.2 and newer while the 0.4 release targets the 0.7.4 release. (Yes, the lower HtmlArea version works with the higher qooxdoo version, and vice versa).

Community Changes

We did a bit of tweaking of our online presence at this week. The aim is to gain some overall performance. Our demo site was offloaded to a separate port, which should both benefit demo delivery and performance improvements for our other online offerings, like this blog service. The change is supposed to be transparent (well, quite), so don’t update your bookmarks. All demo-related links and bookmarks are supposed to remain stable, and we might shuffle things around again in the future.

Left-handed Martin

As it so happens, fellow core developer and baseball catcher hotshot Martin broke his right hand the other day, defending his team’s victory on the field. He’s sorely missed. All the best, Martin!

That’s it for this time. There is another holiday upcoming, so we’ll back for daily business on Tuesday. – Have a good time!

Double release of HtmlArea

What’s better than one release? Yepp, getting two release out of the door :)

This way we want to offer a stable release for both qooxdoo codebases.
Version 0.3 is based on the current 0.8.2 release and version 0.4 is targeted for the legacy release 0.7.4.
Both versions are mainly bugfixing releases with the aim to stabilize the component.

After the release the code base of the 0.3 version will replace the current trunk (0.4 based) to continue the development on a 0.8 base.

Special thanks to Petr Kobalicek for contributing code and helping with the migration to 0.8 and to John Spackman for hunting some bugs and starting to work on the HtmlEditor contribution.

Interesting links:

Give it a try and let us know if you like.

The week in qooxdoo (2009-05-22)

Welcome to another weekly status update. This has been quite a short working week for most of the core developers here at 1&1. Due to yesterday’s national holiday, many chose to take this Friday off for a long weekend.


For the next few weeks and months we will increasingly be involved in supporting in-house qooxdoo app development. This is a great thing to happen, as this kind of consulting is an invaluable feedback channel for getting to know real-life framework use as well as experiencing missing or impractical features. The possibilities to use qooxdoo as the framework of choice for many different scenarios within the enterprise have increased much over time, last year’s 0.8 release clearly being a landmark.

Of course, this engagement has to be taken into account for the mid to long term release planning. Therefore, the roadmap has been adjusted accordingly. Over the next few months working towards a 0.9 release (targeting October 2009) and finally a 1.0 release still by the end of the year clearly lets us continue and intensify our efforts to stabilize proper API – while carefully deprecating inconsistent or impractical API. You are requested to actively support this process of making the framework more mature by submitting your input about problematic API as well as new or extended features that are expected to require the API to be adjusted.

Form API

As promised last week, we added a manual for the new form API to the wiki. If you see some missing parts in the documentation, feel free so send in feedback (mailing list or bug tracking preferred). Please keep in mind, though, that there are a number of new features still to come, particularly to allow for convenient form serialization, etc.


During the process of moving to the new form API, much attention was paid to properly deprecate the existing API. We added some initial documentation to the wiki about how to deprecate different types of changes. This document is not only interesting for those who plan to deprecate things for themselves, but also for all developers who want to know what can be deprecated and what can’t and why.


The Inspector got a small but handy new feature: The Widgets window can now optionally display the “external” parent/child hierarchy of the inspected application, i.e. only those child widgets added by the application developer through the parent’s add() method as opposed to all the children including internal child controls created by the parent widget itself.

In order to achieve this, the getChild() methods of qx.ui.container.Scroll, qx.ui.core.ScrollPane and qx.ui.virtual.core.Pane have been deprecated in favor of the getChildren() method now implemented by all widgets with a public add() method.

Flash Widget

As mentioned in the last weekly blog post we were about to fix the reload issues of the re-introduced Flash widget. Unfortunately, the first attempt of implementation, i.e. to change the visibility method, would have created more problems than it could have probably solved. So we decide to revert to the old implementation and fix this issue with another idea.

By writing an unit test for Flash’s ExternalInterface in order to check the two-way communication between ActionScript and JavaScript, we founded out that the ExternalInterface is no longer accessible when the browser gets minimized, another tab gets opened or the user locks the screen. Any Flash experts out there that could provide some input for fixing this issue? Is this a limitation of the browser integration of the Flash plugin? Workarounds? Any help is appreciated.


As always here is the bugzilla query for past week’s bug fixes.

Data binding

The new data binding feature, which was introduced as an experimental layer in the last release, gathers quite some interest. It is great to see many users work intensively with it and send back feedback and requests. Of course, there can never be enough feedback on such an important concept and its corrresponding API and implementation. If you haven’t tried out qooxdoo’s data binding, please do so. It is to dramatically influence the way we all write qooxdoo applications in the future.

One of the most active users is Christian Boulanger, who started just recently to add data binding to Table as well as TreeVirtual. His implementation is part of his contrib project qcl. He also provided a nice online demo, so check it out. Martin, creator and maintainer of qooxdoo’s data binding layer, is going to have a closer look and eventually collaborate with Christian to come up with an implementation that fits the existing framework feature. Keep up the good work, Christian.

Community Choice Award

Oops, you forgot to vote for qooxdoo to receive one of the 2009 SourceForge Community Choice Awards? No worries, just click on the image below and submit the subsequent form. We thought that qooxdoo best fits into the following two categories, so it would be great you would choose them as well to have votes to cumulate:

  • qooxdoo for Best Visual Design
  • qooxdoo for Most Likely to Change the Way You Do Everything :-)

Don’t forget to show your friends and colleagues how you feel about your favorite project! Get the word out using your social network. If you like you can add a nomination button to your website using this code:

Thanks for your vote. See you around next time.

The week in qooxdoo (2009-05-15)

Welcome to another round of news and tidbits from the qooxdoo team.



Since version 0.8 of qooxdoo we have the Grid decorator. The Grid decorator can be used to set an image background, which scales the inner parts but leaves the border images intact. The grid is very powerful but in some cases it might not be necessary to resize the widget in both dimension. For the special case, where a widget is only stretched in one dimension we have added the HBox and VBox decorators. They use three images and only scale the middle image. In comparison to the Grid decorator, the HBox/VBox decorators require 6 DOM elements less.

Flash Widget

The first stable implementation for the Flash widget is finished. This implementation is marked as experimental, because the API could change until the implementation is finalized. We also implemented a demo that shows some features, e.g.  two-way communication with ActionScript and JavaScript.

During implementing the Flash demo an issue occurred with reloading plug-ins when the widget is hidden and afterwords shown (bug report #2367). We will fix this issue until next Friday, after intensive testing.

Null is not Null

A funny issue occurred this week, by running some unit test with IE. A null returned by the DOM isn’t the same like a null from JavaScript. If you run this code no error occurs:

var value = null;
alert(value instanceof Object);

But running this, which also set null to value:

var value = document.getElementById("NoElement");
alert(value instanceof Object);

Throws an exception “object required” in IE, so be careful with checking null values from DOM.

Form API

The finals steps have been made towards the new form API. In sum, 28 classes have been changed. 15 of them got an invalid state and with that also a special look and feel to visualize this state. Take a look at the final demo in the demobrowser. But those changes haven’t always resulted in a change in the user API. In some cases, only interfaces have been introduced to have the widgets on a consistent basis. To see a complete list of all widgets and the implemented interfaces, take a look at the pdf attached to the corresponding bug. We plan to have a wiki page about the form API ready next week which will show the changes we made and how you could benefit from the new API.

Bug fixes

It is now possible to set the center property on a TabButton widget (#2312). Thanks to Matthew who sent us a patch. The SlideBar now shows the correct icon for arrow up and arrow down if it is orientated vertically (#2362).

The search panel of the Apiviewer will scroll to the method, event or property the user searched for. This functionality got broken and is now working again.

Here is the canned query for past week’s bug fixes.



The generator spills out a new kind of warnings “Empty expansion for macro…”. This refers to configuration macros, the ones you define with the let key.  The motivation was that if you reference macros somewhere in a config file, but they are never assigned a value, this went unnoticed and could lead to nasty and hard to track error behaviour. But the new warning feature currently also leads to some spurious messages, in contexts where incomplete expansion of macros is perfectly acceptable (e.g. during inclusion of  external config files). So don’t faint :-) .


For those who like to read optional background material, there is a new and rather technical section in the  Generator Configuration Background page about how config files are processed.


SourceForge Community Choice Awards

qooxdoo took up on the challenge and has been nominated for a 2009 Community Choice Award in the following categories:

  • qooxdoo for Best Visual Design
  • qooxdoo for Most Likely to Change the Way You Do Everything :-)

You can nominate too, so don’t forget to show your friends how you feel about your favourite project! Get the word out using your social network. If you like you can add a nomination button to your website using the code below:

So much for today – see you around next time.