Sunday, December 6, 2009

Arora 0.10.2!

Packages are available on

Over the past year when compiling with Qt 4.6 Arora had been using a number of new API's. Shortly before 4.6.0 was released all the new API's went through several rounds of API reviews and were improved. Shortly after the changes were made Arora's code has been updated to reflect the new api. This is also why 0.10.1 doesn't build on the older Qt 4.6 release candidate for those who have seen that build errors. With Qt 4.6.0 released there is the need for a new minor package of Arora that includes updates to the final Qt 4.6 api and I included one segfault fix. The changelog is nice and small :)

- Fix build breakage due to final API changes in Qt 4.6.0
- A segfault that could occur when opening a URL on a new window from the command-line.

I also though I should try to list some of the new features users will be getting once they upgrade to Qt 4.6.0 (Arora needs to be compiled against 4.6 also)

In Arora itself:
- The about dialog will now include the webkit version (532.4 in Qt 4.6.0 btw)
- On KDE you will find icons in the menu's
- Adblock will hide element's that are blocked
- The history of the back and forward buttons will be saved across sessions and when you re-open a closed tab.
- Javascript that is hanging the browser will be caught
- You can right click on any form and add it to the search box
- You can choose the default text encoding
- Use the keyboard to navigate links with Access keys
- The ability to highlight everything found when searching the page

In QtWebKit and Qt you will find many more updates that are worth talking about. QtWebKit has improved a lot in the last year. The rendering is a lot better, more tests are passing, using less memory, all new inspector features, and more. Qt's network has got an upgrade and includes pipelining, the ability to set the number of connections, and other improvements that make it faster. For more details checkout the Qt 4.6.0 changelog QtWebKit 4.6 feature wiki page


Sunday, November 22, 2009

QtWebKit and XSLT

Qt 4.6 is getting closer and there is a couple of optional features in Arora that are only enabled when building against the upcoming version, most of which have been blogged about. These basically required specific APIs to be available in QtWebKit. There are, however, certain new things in QtWebKit that did not need any additional work in Arora itself and work out of the box when running Qt 4.6. One of them is basic XSLT support.

So far, QtWebKit did not have any support for XSLT. Other WebKit ports have been using the libxslt library to handle XSL transformations, but for QtWebKit such a dependency would not have been possible and the XSLT processor in WebCore had been disabled in the build system (it didn't even compile). But since Qt developed its own XSLT processor in the QtXmlPatterns module, it's been possible to make QtWebKit use that. After a bit of abstraction work, the main patch landed in r48826.

Here is the other side of the medal: the set of XSLT features that are supported in QtWebKit supports corresponds to what is available in QtXmlPatterns, which is quite limited. Most of websites, which make use of XSLT to e.g. transform XML to a human-readable XHTML document, will most likely not work properly. This is, however, a good starting point towards better website compatibility. And at least most of the W3C Schools examples work just fine:



Wednesday, October 28, 2009

Haiku Qt Port

Over on OS News there is a story about Qt 4 being ported to Haiku and has a nice screenshot of Arora running. There is even a package you can download and try out. Looking at the screenshot there are various things in the style that are falling back to the Qt default, no doubt as time goes by the port will be improved and Qt applications including Arora will integrate better and better with the desktop. Congratulations on the new port!

Monday, October 5, 2009

Arora 0.10.1!

Packages are available on

Two major issues combined with some late translations resulted in several evenings concentrating on fixing bugs that could go in a .1 release. The results of which are Arora 0.10.1. Enjoy!

The major issues:
Issue 666: Some sites like were showing a "SSL handshake failure". With the new NetworkAccessManagerProxy the signals were being sent to the proxy and not the primary networkaccessmanager.
Issue 683: Arora crashes when using privacy mode.
When switching to private mode the primary networkaccessmanagers swaps cookiejar's which caused a segfault. Introduce a CookieJarProxy class which will pass the cookie requests to the primary networkaccessmanager's cookiejar.

Add Portuguese translation from Américo Monteiro
Updated Turkish translation from Mehmet Nur Olcay
Issue 682,677: Fix several FR spelling mistakes.

Fixed Issues:
Issue 79: Only tab down the completer when the popup is visible.
Issue 221: When using Qt 4.6 hardcode a webpage to have a white background even when using a dark theme.
Issue 472: Set the url on the location bar that matches the webview that we are loading the url in, not in the current location bar which might not be the correct one.
Issue 637: Startup Crash with Qt 4.5.0 (not with any other Qt version)
Issue 679: Selecting Show only one close button instead of one for each tab requires an application restart to be applied.
Issue 676: Fix's login saving and improve the Wallet password dialog when finding the login name.
Rather than using the document.form[0].name use document.form[0].elements["name"] this allows the name to contain things such as []'s without causing a problem.

Friday, October 2, 2009

Arora 0.10.0!

Source and Windows binary packages (with Qt 4.5.3) are available on OS X binaries will be up later tonight. Kubuntu/Ubuntu users will find packages in Karmic shortly.

First off a big thanks to everyone who contributed to this release:

Benjamin C Meyer Benjamin C Meyer

Jakub Wieczorek Jakub Wieczorek

Diego Iastrubni Diego Iastrubni

Christopher Eby Christopher Eby

Kristof Bal Kristof Bal

Tor Arne Vestbø Tor Arne Vestbø

Tom Gundersen Tom Gundersen

John Wimer John Wimer

Jocelyn Turcotte Jocelyn Turcotte

Jakub Lužný Jakub Lužný

Gegesy Zsombor Gegesy Zsombor

Christian Franke Christian Franke

axasia axasia

0.10.0 has a lot of improvements, many of which have been blogged about the past few weeks. The biggest two are the addition of AdBlock and password saving / wallet. While browsers like Konqueror and Opera let the user block things manually, Arora might be the first browser to ship with a subscription blocking system and not as an extra install. [See below were a user will comment about the browser that had adblock subscriptions all the way back in the 90's] These days many browsers are funded by companies that are ad based in one form or another such as Firefox and Chrome who are funded by Google. As Arora is not funded by an ad based company we can happily incorporate features like ad blocking and Flash blocking to give our users what they want while Firefox and Chrome can never add those features.

We went through and implemented a lot of older issues. For those of you with Google accounts the issues are sorted by the number of stars a issue has so if you find a bug/feature important click the star on the left to vote for it so we know what you find important.

After getting directory listing in the last release we got a nice little patch that adds the ability to hide and show hidden files when browsing a directory.

Two older feature requests, #40 and #85 add support for keyboard shortcuts on the location bar such as ctrl-enter to append .com. If there are keyboard shortcuts that you expected Arora to have, but did not find open a issue and we will see what we can do.

The full changelog:

- Issue #24: Add support for AdBlock
- Issue #40: Support several common modifiers in the location bar for modifying the typed in url.
ctrl-enter - append .com
ctrl-shift-enter - append .org
shift-enter - append .net
- Issue #79: Trap tab key to cycle through potential URLs in the location bar.
- Issue #85: Alt+Enter on the location bar opens the url in a new tab.
- Issue #119: Add Password Management / AutoFill
- Issue #411: Save and restore the tab back/forward history
- Issue #630: Limit download progress updates to 5 per second to reduces CPU use from 18% to 3% when downloading.
- Issue #650: Save the toolbar location allowing the toolbars to be next to each other
- Add ctrl-z shortcut to undo the closing of the last tab.
- Behave better when access keys are enabled by adding a slight delay to make sure that the ctrl is actually for access keys and not for another shortcut such as ctrl-tab or ctrl-a
- When arora crashed on the previous startup give the user a way to bypass the failsafe and restore their session if they really want.
- Add the ability to set the length of a session cookie
- Enable DNS prefetching and WebKit version in the about dialog when building against Qt 4.6.
- Remember what tab you were on when you close the settings dialog
- Add a browse button next to the style sheet line edit to help users find files and automatically translate them into url's.
- Add icons to the menu actions on freedesktop systems.
- Show the configure search engines action in the tools menu
- Change default bookmarks to only have a link to htpp://
Removed all of Qt development type entries
From discussion on and also the Kubuntu guys strip the bookmarks in their release so it make sense.
- Move the Preferences menu item to Tools/Options
- Set placeholder text for the start page search box
- Add a checkbox to hide/show hidden files in the directory listing.
- Change the about dialog text so it can be selected with a mouse so users can copy the application version.
- Allow urls to be dropped on the bookmark bar and bookmark menu

Behind the scenes
- Force the history completer to be LTR: same as the url line.
- Create a new stills class, NetworkAcessManagerProxy that is useful for tracking what QWebPage a QWebReply came from.
- Load QWebView settings when the View is created so m_enableAccessKeys will be read from settings
- Rename lineedit -> locationbar functions & variables
- Enhance SingleApplication so that the host can send messages back to the second application.
On Windows this is used to send the window id back to the application that was just started
so it can raise the arora window to the front.
- Fix some old MSVC compile warnings
- Make it possible to retranslate the bookmarks toolbar title
- Set the maximumPagesInCache to 3 (default is 0) and provide a way for users to set this value through QSettings.
- Add a path from the users directory to the locale search path
- Added RTL support for the start page
- Add support for multiple directories to LanguageManager.
- Fix the naming of the QAction m_toolsEnableInspector to m_toolsEnableInspectorAction to be consistent with the rest of the code
- Add new TreeSortFilterProxyModel class to utils that will only filter child nodes in a QAbstractItemModel. (under the BSD license)
- Rename getConfigFile to dataFilePath
- Rename dataDirectory to installedDataDirectory to give a much better description of what it does
- Add missing drop functionality to the ModelMenu class. The implementation is symetric to the ModelToolBar class.
- ModelMenu can now accept drops (both moving and copying) and can apply them to the underlying model.
- Refactor BookmarksToolBar by making it inherit from ModelToolBar.
- Add new ModelToolBar class, that is a subclass of QToolBar and an equivalent of ModelMenu for toolbars. It can be used to populate a toolbar with actions based on a given model.
- Fix character encoding in directory listing.
- Clean up the private browsing message box to make it easier to translate.

Build system
- Allow building against a shadow-built WebKit trunk
- Ignore more misc generated build files on windows
- Add Git hook to check commits for the proper copyright year
- Ignore the doc directory which is generated by doxygen
- Check for spaces at the start and end of an expression
- Re-enable sharing the temporary compilation objects for all subprojects. Use the 'ordered' configuration to make sure that we walk through the subdirectories one by one and not all simultaneously when building in parallel.

Monday, September 28, 2009


This past week the adblock branch was finally merged into Arora's master branch. A way to block content was one of the first issues opened (issue #24) and was the issue with the most stars/votes. After a lot of work and research the end results speaks for itself.

A big thanks goes out to Zsombor Gegesy who did a lot of initial development and through his efforts we learned a fair amount about what was needed and what solutions users would not accept. While various browsers have had systems for blocking content the Adblock Plus FireFox plugin has really set the standard for what users expect. A primary feature of Adblock Plus has been the idea of a subscription. Arora's AdBlock attempts to be compatible to the current Adblock Plus system and system supports subscribing to Adblock Plus subscriptions (even supporting abp:// links) and the Adblock Plus rule set.

Adblock is two different blocking systems. The first is network and blocks the downloading of content. The second is about hiding/removing items on the web page. Qt 4.5 users will get the network side in the next Arora release, but for the dom manipulation we currently use QWebElement which is part of 4.6 (if someone wants to make a patch to do this in Javascript the patch would be accepted). Currently the AdBlock in Arora is very simple, but it is enough to be usable and to get feedback on so it was merged in. By default AdBlock is not enabled, but can be easily enabled through the Tools/AdBlock dialog. The major missing features are:
  • The list of items blocked on the current page wasn't ready to be merged in before the string freeze so it will be in the next release.
  • A few AdblockPlus Rule options are not yet supported.
  • When you right click to block something on a webpage it does not show a nice wizard, but just ads the url to the custom rule list.

If you are interested in helping out on these or other AdBlock feature in Arora stop by #arora on All of the AdBlock code in Arora is released under the BSD license and we welcome contributions from other projects that would like to share this feature in their QtWebKit project.

AdBlock will be part of the next Arora release 0.10.0 which will be released Wednesday night / Thursday morning. If you want to help and contribute a translation make sure to submit it before Wednesday.

Thursday, September 24, 2009

Saving Passwords

An early feature request has been for the ability to save passwords so you don't have to re-type in your user name and password all the time when you login to websites. This evening I merged in the autofill branch which add this functionality to Arora. When you log into a website it will ask you if you want to save the form. Then when you go back to that website it will automatically fill in the form for you.

The patch is really just the start of this feature. At the moment it simply saves forms to a file in the Arora data directory, but going forward it would be good to hook into the existing wallets and at least on Linux there is talk of a dbus spec so we would use KWallet or GnomeKeyRing depending on the desktop we are logged into. Also this feature fully works in Qt 4.5 so everyone can start using it immediately.*

While investigating this feature I discovered that for many users they didn't necessarily want a password manager, but they needed the browser to behave better with how they browsed. When a user logs into most sites the authentication cookie is a session cookie and until they restart their browser they are logged in. This creates two problems:

1) Users that frequently have to restart their browser (such as when I am hacking on QtWebKit) have to re-login over and over even though they logged in just five or ten minutes before. Even with a wallet this is very annoying.

2) Users who have browsers open for a very long time (weeks!) have session cookies that pile up and are never deleted.

For those users I have added the ability to specify what a cookie session is.

*And in the far future when we drop 4.5 we can convert a bunch of large ugly javascript into nice simpler QWebElement code :)

Tuesday, September 22, 2009

Icons In the Menu's

One of the things that I heard when asking how to improve the KDE4 integration was that without icons in the menus it didn't look like a KDE application. Happily in Qt 4.6 there is a collection of new functions that have been added to QIcon. In particular QIcon::fromTheme() was the function I needed to populate Arora's menus with the correct icons from the current KDE and Gnome theme.



Restoring Back/Forward History

When Arora restores the last session (either as the selected preference on startup or selecting the action from the history menu) Arora will load the urls in the tabs, but will doesn't load the back/forward history. The same also happens when you restore the last closed tab (ctrl-t-shift) or re-open one of the previous closed tabs from the history menu. This was feature request 411 and while QtWebKit couldn't do it in the past QWebHistory just recently got two new functions: saveState() and restoreState() which make it possible to have this functionality and the webHistory branch was merged in today and will be part of the next release.

Thursday, September 17, 2009

Hanging Javascript

Occasionally you run across a web page that has some Javascript that can run for a long time, potentially hanging the browser. In Qt 4.6 there is a new function QWebPage::shouldInterruptJavaScript which by default pops up a dialog so the user can stop the JavaScript that is causing the issue. Of course no new feature blog is complete without a screenshot:

Sunday, August 30, 2009

Arora 0.9.0!

Source, Windows and OS X and binary packages are available on

First off a big thanks to everyone who contributed to this release:

Benjamin C Meyer Benjamin C Meyer

Jakub Wieczorek Jakub Wieczorek

Christopher Eby Christopher Eby

Zsombor Gegesy Zsombor Gegesy

Alexandre Dupas Alexandre Dupas

Tom Gundersen Tom Gundersen

Slim Amamou Slim Amamou

Simon Hausmann Simon Hausmann

Oscar Blumberg Oscar Blumberg

ondrejcernos ondrejcernos

Markus Goetz Markus Goetz

John Wimer John Wimer

Dominik Riebeling Dominik Riebeling

axasia axasia

While 0.8.0 had many new features the majority of changes in 0.9.0 are bug fixes. There were several more features that were near completion, but the Arora policy is to only merge a branch when it is ready. Given that we the project has near monthly releases this isn't as harsh as other project such as KDE that have a six month release cycle. With a longer release cycles developers are likely to try to push in incomplete features near freeze deadlines just to have them in while with a short release cycle they are more willing to wait another month knowing that their branch will be more stable when the users get it. The hopeful result is a better application that is more stable and feature complete.

Apart from the dozens of bug fixes, there are a few significant improvements, one of which are long awaited search keywords which allow you to define a set of keywords for each search engine and then use them in the location bar, following them with the phrase that you want to search for. The screenshots should explain it better than any words:

Another notable change in this release was dropping support for Qt 4.4. Arora now requires Qt 4.5. The main reasons were:
- The QtWebKit version in 4.4 is significantly slower then the one today and does not include many features such as plugin (aka flash) support and many WebKit bug fixes.
- Supporting 4.4 was requiring more and more ifdef's as Arora has incorporated new features in Qt and QtWebKit.
- With KDE 4.3 requiring Qt 4.5 it is very likely that distributions will already have 4.5 (or will shortly).
- We really want to encourage QtWebKit application users to be using newer versions of QtWebKit (and thus Qt)

The full changelog:

Drop support for Qt 4.4.

- Add support for search keywords in the location bar.
- POST support for OpenSearch suggestion requests.
- Add WebKit version to the About dialog [WebKit trunk only].
- Use HTTP pipelining for all network requests [Qt 4.6 only].

- Remember last used save directory.
- Added file dialog to download location settings.
- Restrict drag and drop to the same page unless a QWebView accepts it.
- Open an URL dropped on the tab bar as new tab or replace existing tab.
- Allow url to be dropped on the tab bar from other applications.
- Add a Select All action.
- Rather than not allowing setting or getting of any cookies in private mode create a blank cookie jar.
- Significantly speed up the cookie dialog by keeping a cached copy of all the cookies.
- Enhance the language manager to fallback to the country file if the country_language file doesn't exists.
- Add drag support for downloaded item in the download manager.
- Add Planet Qt to the default set of bookmarks.
- Remove the text wrapping option from the source viewer's menu and instead enable it by default.

- Avoid duplicated and contradictory rules on the cookie rule list.
- Change the shortcut for showing the bookmark toolbar as it was conflicting with the show bookmark dialog shortcut.
- Encode the user input before inserting it into an URL template.
- Fix a crash when cloning a blank tab.
- When the widget losses focus hide the access keys.
- Fix detection of flash on various websites when ClickToFlash is used.
- Avoid an infinite recursion when asking the desktop to open an URL.
- When the download manager prevents the application from closing add a new tab when there are none.
- Only show the url completer if the user is typing a url.
- Always add the Inspect Element Action to the context menu when the developer extra tools are enabled.
- Bookmarklets were not working properly.
- Work around for a segfault in Qt 4.5.2 where you go into privacy mode while a QNetworkReply is still working.
- Clarify the networkdisk cache behavior in the messagebox.
- Start page: Reduce the top margin to 100px from so it fits on a netbook screen.
- Hide the bookmarks toolbar by default.
- Turn off cookie tracking filtering by default because it breaks sites like
- Before clearing the cookie jar, load it so the exceptions and other settings are loaded.
- When removing cookies from the cookie jar via the cookie dialog notify the autosaver.
- When receiving a drop event on a bookmark folder, make sure that we don't drop a child bookmark.
- Avoid overwriting the user agent string in the WebPage autotest.
- Fix non-ASCII characters displayed garbled for Authors.

Behind the scenes
- Merge two blocks of code that deals with oneCloseButton policy.
- Make parentWindow() prettier.
- Simplify updates of actions in view menu.
- Save the window state when toggling the menu bar.
- Save UI changes in the active window before creating a new one.
- Move all network related files into one directory.

Build system
- When building on osx use qmake -r.
- Ignore generated files built on windows.

Sunday, August 9, 2009

WebKit Version

A missing feature of the QtWebKit API has been the ability to determine what version of WebKit you currently had. While you could parse it out of the user agent that was clumsy and in fact the version number in the user agent was hard coded into QtWebKit (and out of date!). Recently Robert Hogan wrote a patch for QtWebKit that not only properly determines the WebKit version, but also adds new API to QtWebKit to determine the values. This API will be part of Qt 4.6 and when building with WebKit trunk (and 4.6 once Qt master's copy of webkit is synced) Arora will show the current WebKit version in the about dialog.

Saturday, August 8, 2009

QNX, WebKit, and Arora

Recently on the Qt Labs blog Harald posted about a new port of Qt to QNX. On the blog there is a video where you can see QtWebKit rendering and today I got a email with a photo of Arora running on QNX. Because of Qt just like Arora builds on OS X, Windows, Linux and Embedded Linux Harald didn't have to make any changes to the code to build the binary. Although from the photo you can see that if for such a small device you would want to tweak the interface a bit or at least hide the toolbars and status bar from the view menu (which can also be hidden with ctrl-m).

Monday, July 20, 2009

Arora 0.8.0!

Source, Windows and OS X and binary packages are available on

First off a big thanks to everyone who contributed to this release:

Jakub Wieczorek Jakub Wieczorek

Benjamin C Meyer Benjamin C Meyer

Benjamin K. Stuhl Benjamin K. Stuhl

axasia axasia

Zsombor Gegesy Zsombor Gegesy

Tom Gundersen Tom Gundersen

jreznik jreznik

Jonas Gehring Jonas Gehring

Aurélien Gâteau Aurélien Gâteau

Shortly before 0.8.0 we had our 1000'th commit to Arora. A big thanks to everyone who helped make that possible.

Between 0.7.1 and today Qt 4.5.2 was release. There was a number of fixes in this release that effect Arora. For the complete list see the Qt 4.5.2 changelog Some highlights include:
  • A big QtWebKit Memory leak was fixed
  • Several QtWebKit security bugs were fixed
  • Several QtWebKit segfaults were fixed
  • Fixed a leak of file descriptors in QTemporaryFile::rename, introduced in 4.5.1. This was the bug that forced Arora to always turn off the disk cache when using Qt 4.5.1. With disk cache as you would expect Arora can perform much faster.
  • QNetworkCookie, Fixed parsing of multiple cookies separated by a newline (also introduced in 4.5.1). This is what broke many site logins such as facebook.

As you can see it is highly advisable to upgrade to Qt 4.5.2 on Linux if your distribution hasn't already. Both the Windows and OS X binary packages include Qt 4.5.2.

Lots of improvements and features were added in 0.8.0. We have been blogging about a number of the features, but here are two more:

In the current version of the Inspector you can now see the headers for a page. Because of this the Network monitor which was added just a little bit ago has been removed.

For those who still want to use the network monitor you can easily do it with git and revert 12ebaf4f60f804c0200a61e8fdbc62c935588184.

Another Qt 4.6 feature is the ability to highlight searches:

The full changelog:

- When the ctrl key is pressed show keyboard accelerators on the screen. [Qt 4.6 only].
- Location bar: implement full text search and more accurate sorting.
- Add a simple start page with a search box pointing at the active search engine.
- Allow to create new open search engines from any input forms displayed in websites [Qt 4.6 only].
- Add a menu to set the default text encoding for all rendering [Qt 4.6 only].
- Implement directory listing when accessing file:/// URLs that point to directories.
- When a POST request is about to be resent, warn user about that fact to make sure that the operation is intended.
- Add a checkable push button to the search bar that allows to highlight a specific string in a website [Qt 4.6 only].
- Add a setting that specifies if the url supplied by the user should be forwarded to the default search engine if it isn't valid.

- Show a more verbose message when the htmlToXBel tool is not installed.
- Show the complete tab title as tool tip to improve GUI usability for long website titles.
- Download manager: Create the download directory as needed.
- Location bar: If escape is pressed on location bar revert to the original URL, this emulates the firefox behaviour.
- Add Google "I'm Feeling Lucky" search engine to the default set.
- Drag & Drop: Add the ability to drop an url on the tab bar which will open it in a new tab.
- Drag & Drop: Allow dropping URLs on the location bar.
- When creating new windows, use the startup setting to decide if the homepage should be loaded.
- Remove the network monitor tool as the current Inspector now lets you see request headers and response headers.

- Fix several memory leaks: set the Qt::WA_DeleteOnClose flag on dialogs that are executed asynchronously.
- Download manager: Fix displaying file size when downloading huge files.
- Download manager: Give correct name to downloaded files with no suffix.
- Location bar: Fix background color when using Oxygen style.
- Bookmarks manager: Don't allow to edit the url in any nodes but normal bookmarks.
- Private browsing now disables the disk cache.

Behind the scenes
- Added custom network scheme handlers, i.e. a single one for listing local directories.
- Add a setting so the user can swap the location of the new and close tab buttons.
- Add the ability for a user to specify the userAgent through QSettings.
- Split up the bookmarks classes into separate files.
- Remake the bookmarks toolbar.
- Clean up the AddBookmarkDialog class.
- OpenSearch: Implement the Referrer extension.
- Implement the WebPage::linkedResources() method using the DOM API.
- Tweak the certToFormattedString() function.
- OpenSearch: localization improvements.

Build system
- Include an additional XML file in the installation, which will make Arora appear in Gnome Control Center on the list of available web browsers that can be set as default.
- Add man pages for the tools.
- webkit.pri now supports building QtWebKit as a framework on mac.