sabato 9 aprile 2016

Qt Virtual Keyboard support on Hawaii

Ever since Qt Virtual Keyboard was introduced a couple of years ago I desired to integrate it with Hawaii, especially considering the effort to make the whole workspace adapt to different devices started a while ago.

However Qt Virtual Keyboard was a value-add component for Qt Enterprise customers, until things changed recently.

As part of the recent licensing change announcement, Qt Virtual Keyboard is now available also with GPLv3 license for Open Source users in addition to commercial Qt licensees.

This move allowed me to finally integrate Qt Virtual Keyboard with Hawaii, which soon will also be available on SDDM.

Qt Virtual Keyboard will be included with Qt 5.7 but it's possible to build the sources from the git repository now, against Qt 5.6.

The virtual keyboard is an input method so activating it is as easy as setting an environment variable, as outlined in the deployment guide:

export QT_IM_MODULE=qtvirtualkeyboard

To make it easier and less error prone a setting for Hawaii has been added that you can enable from the keyboard settings.

On desktop systems the keyboard is resized so that it won't cover search and password text fields.

Obligatory screenshots below:

sabato 5 settembre 2015

SDDM 0.12.0 released

We are proud to announce the immediate availability of SDDM 0.12.0.

This release features working Wayland sessions for the first time, but the greeter is still running on Xorg.

This means that you will be able to login into a Wayland desktop environment without problems however the greeter screen still depends on X11.

Work on the Wayland support for the greeter has already been started and will likely be available with the next release.

Highlights of this release:
  • BACKWARDS-INCOMPATIBLE: SDDM now depends on Qt >= 5.3
  • BACKWARDS-INCOMPATIBLE: Display setup script is now killed if it hasn't finished within 30 seconds
  • LICENSING: The Maldives non-free background has been replaced by a CC-BY-SA alternative
  • WAYLAND: Wayland sessions support
  • CONFIG: New sddm.conf option `XephyrPath` (defaults to `/usr/bin/Xephyr`)
  • CONFIG: new sddm.conf option `ServerArguments` (defaults to `-nolisten tcp`)
  • CONFIG: new sddm.config option `DisplayStopCommand` (executes Xstop)
  • THEMES: Assorted improvements to the default theme
  • BUGFIX: Honor TryExec in Xsession desktop files
  • BUGFIX: Fix session startup on zsh
  • BUILD: Allow setting a custom `DBUS_CONFIG_FILENAME` at compile time
  • BUILD: Allow `SYSTEMD_SYSTEM_UNIT_DIR` to be overridden at compile time
  • BUILD: Allow `QT_IMPORTS_DIR` to be overridden at compile time
  • BUILD: No longer hardcode min/max UIDs, allow setting `UID_MIN` and `UID_MAX` at compile time
  • BUILD: Assorted FreeBSD fixes
  • BUILD: Fix build warnings with Qt 5.5
  • I18N: Added Arabic, contributed by Safa Alfulaij
  • I18N: Added Hungarian, contributed by @mortein79
  • I18N: Various i18n updates and improvements
  • I18N: Full right-to-left languages support
More information can be found here.
Sources and SHA1 hashes follow:

sabato 18 luglio 2015

How to make your Qt application icon appear on Wayland task managers

Several months ago I was redesigning the Hawaii launcher.

Now Green Island offers a class called ApplicationManager that emits signals when an application is registered or unregister (that is when a window of a certain class first appears or when the last one is closed).  This class is also exposed by a Wayland protocol for shells that are running in another process.

Soon I noticed that for some applications the launcher panel didn't show an icon and I realized there was something wrong with the app_id (also known as the class in wl_shell_surface).

The class name identifies the general class of applications and can be used by a task manager to know which desktop entry contains application information.

Unfortunately this is not as easy as it sounds because there is no way to tell that automatically.
So back in the day I had to set the class name to the executable name as you can see here.
This approach worked almost always because desktop entries were usually named after the executable.

However things changed recently, as a matter of fact desktop file names now follow the reverse DNS convention while executables keep being called like before.

This is now achieved by QtWayland with this commit reversing the QCoreApplication::organizationDomain property and appending the executable name. If the property is not set, QtWayland falls back to the old behavior.

The patch is available on Qt 5.4.2 and 5.5.0.

TL;DR: Rename your desktop files using the reverse DNS convention and set the organizationDomain properly.

QtAccountsService 0.6.0

We are proud to announce a new QtAccountsService release.
QtAccountsService is a Qt-style API for the AccountsService D-Bus service available for both C++ and QML.
Highlights of this release:
  • Use extra-cmake-modules
  • Use standard installation directories
  • Use new CMake macros to generate camel case headers
  • Link to Qt5 targets rather than using the old qt5_use_modules macro
  • Implemented UserAccount::setPassword
  • Export UsersModel to QML
  • Add a couple of small examples for C++ and QML

domenica 22 febbraio 2015

What's coming to Green Island: part 2

In the previous installment I forgot to post a screenshot of multiple output windows.

Here it is:

The first big chunk of code for multiple output support was recently merged into the qtwayland dev branch, but there is one more patch that is under review now.

Now I'm gonna talk about the recent development on Green Island.


Green Island now has:
  • a library that people can use to make their compositors reusing Green Island bits;
  • an executable named "greenisland" that links to the library and loads a separate QML based home screen;
  • an executable named "greenisland-launcher" that helps you run the compositor in several different environments;
  • a QML plugin that provides additional components such as the SurfaceRenderer for QML based home screens;


Green Island can run on a number of different setups: X11, Wayland, Raspberry Pi, KMS, you name it.

There is now a launcher that detects where it is running, sets environment variables and runs the actual compositor accordingly.


It's now possible to write custom home screens with QML.
The format is very simple but it might change slightly until the next iteration is released:
  • the home screen is a directory containing QML files and it's placed under $XDG_DATA_DIRS/greenisland (for example /usr/share/greenisland/org.vendor.coolhomescreen/)
  • the directory has a file called Compositor.qml and this is where you connect to the compositor and get events such as when a window is mapped or unmapped and create a QML window representation


Green Island supports the old wl-shell protocol as well as the new xdg-shell protocol that is now required for weston and Gtk+ clients.

Qt clients can also use xdg-shell but it's not the default, users need to set an environment variable to enable it.

For both protocols Green Island has its implementation which is independent from the one that comes from QtCompositor.

This allows me more freedom and frees me from the qtwayland release cycle.