Hi!
Here’s the weekly summary of Qt related changes to WebKit trunk. Big changes include Yael’s patch for WebSockets support, the beginnings of QtScript on top of JavaScriptCore’s C API, Maemo 5 tweaks and layout test fixes:
- Janne added the necessary meta-data to make QtWebKit play nicely with Symbian backups (34077).
- I did some code cleanups in RenderThemeQt and fixed a bug with combo boxes not showing up in Maemo5 (34088).
- Holger fixed a regression in the JavaScript prompt handling (30914).
- Jedrzej landed the first files for building QtScript on top of JavaScriptCore’s C API (32565).
- Diego added history support to the Qt DRT, we now pass the
http/tests/history layout tests! (34167)
- Daniel fixed a bug with the height of button elements (29564).
- Kent fixed support for ES5 style introspection with QMetaObject methods (34087).
- Yael implemented the Qt part of WebSocket support, we now pass
websocket/tests in the layout tests (34180).
- Diego fixed more worker layout tests by adding support for counting worker threads in the Qt DRT (34221).
- Holger found a neat way to speed up the conversion from KURL to QUrl (33873).
- Trond fixed an endless loop in QWebPage printing (r53997).
- Kenneth fixed incorrect fonts on comboboxes on Maemo5 and Symbian (r53999).
- Andreas upstreamed Ralf and Robert’s kinetic scrolling support for QWebView using
QAbstractKineticScroller (34267).
- Benjamin implemented support for the
display() method in the Qt DRT (34258).
- Oswald speed up the conversion between
WebCore::String and QString by avoiding QString::fromUtf16() (r54060).
- Kenneth landed a patch to disable auto-uppercasing and text prediction for password input fields (r54064).
- Kenneth also continued to clean up the QtLauncher for a future merge with QGVLauncher
- Andreas and Kenneth submitted tweaks to the look’n'feel of QtLauncher on Maemo5.
This week has been a very busy week! Here’s a list of the landed changes that affect the Qt port, in chronological order:
- Tor Arne has ported the Qt build of DumpRenderTree to run on Windows. (r53526, r53543).
- Luiz continued with cleaning up the combobox popup handling.(33418).
- Ben from the Google Team fixed a bug where touch events weren’t sent to iframes (33894).
- No’am landed support in the Qt bindings that allows passing pixmaps and images as arguments in signals/slots/properties, which can then easily be turned into image elements or data urls. (32461).
- Benjamin cleaned up the QWebPage autotest (32216).
- On Thursday we landed No’am’s implementation of GraphicsLayer. This accelerates the composition of layers with animated opacity or transform attributes, through content caching in pixmaps. Layers are mapped to
QGraphicsItems with enabled CacheMode and the animation is driven by the Qt Animation Framework.The feature is disabled by default currently as it’s not stable yet, but it’s a fantastic start! (33514).
- Diego continued implementing missing functions in the Qt DRT (33945).
- Jakub fixed a crash with video elements and phonon (33842).
- Girish fixed a bug with combobox popups in transformed QGraphicsWebViews (r53703, 33887).
- Robert fixed 5 layout tests by fixing support for
window.close() and window.closed() in the Qt DRT (32953).
- Kent fixed bugs with
Object.getOwnPropertyDescriptor (33948, 33946).
Here’s the weekly summary of the Qt related changes that landed in WebKit trunk this week:
- Daniel and Robert added support for the XSS auditor to the Qt DRT (33419).
- Simon removed unnecessary memory allocations of QPainterPath from WebCore::Path (33466).
- Zoltan continued to make the world a subclass of
FastMallocBase.
- Diego fixed support for user stylesheet locations in the Qt DRT (33617).
- Andreas fixed the scrolling performance on pages with embedded widgets (33373).
- Jocelyn reworked the qmake based build system to separate the generated files from the regular build, fixing longstanding dependency issues (33542).
- Diego added a missing implementation of
fileSystemPath() to the Qt build of KURL (33614).
- Jakub fixed a bug with XSL stylesheet loading.
- Ben fixed support for touch events in
document.createEvent() (33605) as well as the detection of touch events as user gestures (33597).
- Kim fixed support for touch event coordinates in zoomed and scrolled pages (32899).
- Petri fixed an incorrect touch layout test (33465).
- The Szeged hackers continue to rock our world by keeping the bot green green green!
That’s all for this week, folks :). If I have missed anything or you’d like to mention something in the next digest, please send me an email.
BTW, if you’d like to join the development, please subscribe to the webkit-dev and the webkit-qt mailing lists. You can also join our weekly meeting point on IRC in #qtwebkit on freenode every Monday at 15:00. There’s no fixed agenda, but instead there’s a good chance that most developers will be around, if you’re looking for code reviews, etc. in a particular area. See you there!
I’d like to give you a brief summary of the commits that were landed in the Qt parts of WebKit in the first week this year:
- Lots of improvements on the DRT testing tool: Enter key fixes (Jakub), Drag and Drop support (Yael) and Zoom support (Kim, Diego, Afonso). All of these changes improve the layout test coverage.
- Jakub added support for sliders to RenderThemeQt.
- Andreas fixed a crash with input methods on startup.
- Kim fixed the semantics of touch events to match the iPhone and Android behaviour better.
- Luiz and Kenneth landed more code that’ll make it possible in the future to handle list popups in the application.
- Norbert landed a workaround for an RVCT bug that makes the trunk build again on Symbian.
- Yael continued work on the network state notifier implementation (using Qt Bearer Management).
I don’t mean “on the road” too literal, but I think we’re on track for a good release, as the following summary of recent changes shows:
- Kenneth and Antonio fixed the inconsistent behaviour of
setHtml() to sometimes change the history and sometimes not. Simply put, setHtml() should not have any side-effects to the back-forward history.
- Joe, Kristian and Janne fixed support for input methods on S60, so for example logging into facebook from Anomaly on a 5800 Xpressmusic works.
- Alexis renamed
QWebGraphicsItem to QGraphicsWebView, and Raider is now called Twix
- J-P Nurmi fixed support for plugins returned by
QWebPluginFactory when used with QGraphicsWebView in a canvas: QGraphicsWidget to the rescue.
- Girish joined the jungle of WebKit hacking and landed initial support for windowless plugins on X11!
- Jocelyn found out why nspluginwrapper wasn’t working properly on Linux and fixed it.
- After a long period of review (sorry buddy) we finally landed Jakubs split of the XSLT processor in WebCore to support libxslt as well as QXmlPatterns.
- Carol fixed various bugs in GraphicsContextQt for better CSS shadow support.
- Holger landed his rewrite of
ImageDecoderQt that significantly improves the memory footprint. You can find some background for his work at http://trac.webkit.org/wiki/QtWebKitPerformanceWork
Not all of the above changes are in Qt’s 4.6 branch yet, as we’re trying to reduce the number of changes for the upcoming beta. But rest assured they’ll be in the final release. In the meantime you can always check out from WebKit’s trunk
I for one am now looking forward to meet many of you readers at the upcoming Developer Days in Munich and San Francisco.
I’ll make this short and sweet and to the point :). Many things happened in the past few weeks in the land of the QtWebKit port:
- Kenneth and Antonio landed the first version of
QWebGraphicsItem, a simple class that mimics the QWebView API and makes it easy to embed WebKit into the GraphicsView. The API and class name are still subject to change, but we’d love to hear feedback and suggestions, especially from people who have implemented the same thing
- Jocelyn submitted
QWebInspector, a simple container that gives you control over embedding the web inspector into your application. The API is deliberately minimal to avoid exposing internals.
- Tor Arne used his scripting skillz to migrate QtWebKit bugs from our internal company bug tracker into the public WebKit bugzilla. An important milestone towards a more transparent development process on our side.
- Yongjun, Janne and Norbert keep on submitting Symbian porting fixes. RVCT builds and runs out of the trunk and WINSCW is very close.
- We have updated the copy of WebKit in Qt 4.6 a few times and will continue to do so in the coming weeks towards the 4.6 release. Espen and Janne are also working on getting those WebKit and QtScript Symbian builds into the nightly Qt/S60 snapshots. UPDATE:The latest Qt/S60 nightly includes QtWebKit and QtScript now.
Generally speaking we’re in bugfixing mode. We had to slip in the above few features, but we consider them the exception to the rule. Until 4.6 we’d like to hold off any other changes that affect the API, unless they are actually API bugs or the result of review of new 4.6 API.
In the past few weeks the development of the Qt port of WebKit has seen a lot of progress. I would like to highlight a few items:
- Kent, Olivier, Jedrzej, Benjamin, Tor Arne and Ariya have been hacking away on the new backend for QtScript to use JavaScriptCore. We’re down to only a handful of issues (~10, so both hands are needed).
- Since Akademy the entire team has been cleaning up the layout tests and the DumpRenderTree tool, to get the test infrastructure back in shape.
- Gabor, Rapcsanyi and Zoltan from the University of Szeged have been working hard on bringing the build bot for the Qt WebKit port back online. Since last weekend it’s finally back online in green (yay) at the bot farm at http://build.webkit.org/waterfall!
- In a multi-platform marathon Tor Arne has been working on cleaning up the WebCore plugins code to eliminate duplicated code between the ports and to unify the behaviour in things like startup sequence and error handling.
- While we’re at plugins, Jakob from the Arora team has started developing a settings API for plugins, to enable/disable them or to specify preferences.
- Laszlo and Norbert continue to submit patch after patch for the S60 port, it’s progressing nicely!
In between we had a little team barbeque here in Oslo, celebrating our recent hackeries with food and games:



In the recent pre-release of Qt for S60 we have included a build of WebKit that compiles and runs on S60. This pre-release is an important milestone for this porting effort that started about half a year ago. Hence, I would like to briefly highlight a few things about it:
The main work is finding good solutions for quirks in the toolchain. That includes the ARM RVCT compiler and the Metrowerks compiler used by the emulator on Windows, both with their own unique set of challenges.
The team working on this consists of Norbert Leser and Laszlo Gombos from the Nokia Browser Team in Boston as well as Janne Koskinen from Digia and Kristian Amlie from the QtSoftware Team here in Oslo. In addition Ariya wrote the little but super-cool anomaly demo browser, which is included in the Qt/S60 Tower release. The port is still in early stages, but it’s looking quite good already and rather performant.
We’ve been maintaining the patches in separate repositories and we’ve been pushing patches in small steps upstream for a few months now. There’s still a lot to go, but things are progressing. And the result is looking really cool
Today we’re proud to announce the winners of the Trolltech Open Source Development Award!
A while ago Espen announced the finalists for the award. The vote is over now and the ballots were counted (electronically).
The third place goes straight to the editor of choice: VIM. Much of Qt’s source code and documentation was loaded, edited, syntax highlighted and saved by Vim, without using the CTRL or X key at all. :wq!
Once platform dependent code is written it may be necessary to implement similar functionality on the remaining platforms. This pattern is typical for Trolltech engineers and therefore the choice of Synergy for the second place comes natural. The lines between different operating systems blur when we use the same keyboard and mouse on Mac OS X, Windows or Linux. That’s very much in the spirit of Qt. As a bonus we have less keyboards and mice to clean from dust and coffee stains.
Once the code is written we submit it and move on to the next task. Unless the unthinkable happens and a bug slipped in. In the hypothetical case of a dangling pointer or memory corruption we might require our winning tool, Valgrind. We don’t need to sprinkle printf() statements into the code anymore, we don’t even need to recompile. We just run the program under Valgrind and it points straight to yoursomeone else’s source code. Hurray!
Here are the reactions from some Trolltech engineers on the results:
As part of Qt 4.4 we have now made our very first release!
Shortly before the release we finished merging all our changes back to the Subversion trunk branch, where we are working directly now. We will continue to maintain and bugfix the code in the Qt 4.4.x release series, but we try to make the changes in trunk first and then backport changes as they fit.
Our current goal is to catch up with the architectural changes that happened in trunk and maintain the layout tests. Holger for example fixed the HTML Canvas after some internal API changes. Ariya started working on Netscape plugins for Windows and Tor Arne I heard is polishing a secret feature he’s been semi-secretly working on for a while now in not-so-secret trunk. I heard rumors that he’s going to secretly blog about the secret feature soon, so stay tuned.
Big props also to Marc and the guys at Collabora for landing the initial support for Netscape plugins for the X11 Qt and Gtk ports in WebKit trunk! Great job!
On the application side Urs Wolfer’s Google Summer of Code project for integrating QtWebKit into KDE has been accepted. Congrats Urs! Feel free to stop by in #webkit and bug us if you have questions