Code Monkey home page Code Monkey logo

wayland-archived's Introduction

Liri Wayland

ZenHub.io

License GitHub release Build Status GitHub issues Maintained

Wayland client and server libraries for Liri OS.

Features

This project includes:

  • Qt-style API for Wayland clients
  • Client and server extensions for screenshots, screencast, applicaion manager, task manager and output management
  • XWayland support
  • Screen configuration
  • Qt-style API for libinput
  • QPA plugin
  • QtWaylandClient fullscreen shell integration
  • Pluggable hardware abstraction with support for:
    • DRM/KMS

Dependencies

Compiler requirements:

Qt >= 5.9.0 with at least the following modules is required:

And the following modules:

The following modules and their dependencies are required:

If you enable DRM/KMS device integration you also need:

If you enable XWayland support you also need:

Installation

Qbs is a new build system that is much easier to use compared to qmake or CMake.

If you want to learn more, please read the Qbs manual, especially the setup guide and how to install artifacts from the installation guide.

From the root of the repository, run:

qbs setup-toolchains --type gcc /usr/bin/g++ gcc
qbs setup-qt /usr/bin/qmake-qt5 qt5
qbs config profiles.qt5.baseProfile gcc

Then, from the root of the repository, run:

qbs -d build -j $(nproc) profile:qt5 # use sudo if necessary

To the qbs call above you can append additional configuration parameters:

  • modules.lirideployment.prefix:/path/to/prefix where most files are installed (default: /usr/local)
  • modules.lirideployment.dataDir:path/to/lib where data files are installed (default: /usr/local/share)
  • modules.lirideployment.libDir:path/to/lib where libraries are installed (default: /usr/local/lib)
  • modules.lirideployment.qmlDir:path/to/qml where QML plugins are installed (default: /usr/local/lib/qml)
  • modules.lirideployment.pluginsDir:path/to/plugins where Qt plugins are installed (default: /usr/local/lib/plugins)
  • modules.lirideployment.qbsModulesDir:path/to/qbs where Qbs modules are installed (default: /usr/local/share/qbs/modules)

See lirideployment.qbs for more deployment-related parameters.

You can also specify the following options:

  • products.kms.condition:false: Do not build KMS EGL device integration.
  • products.lirixwaylandplugin.condition:false: Do not build XWayland support.
  • products.fullscreen-shell.condition:false: Do not build fullscreen-shell integration.
  • products.lirieglfs.condition:false: Do not build QPA plugin.

Environment variables

The liri QPA plugin supports different graphics hardware through EGL device integration plugins.

The environment variables that can influence the QPA plugin are the same as those of eglfs.

Logging categories

Qt 5.2 introduced logging categories and Liri takes advantage of them to make debugging easier.

Please refer to the Qt documentation to learn how to enable them.

Available categories

  • Server-side:

    • liri.wlserver: Core compositor classes
    • liri.wlserver.qml: Liri.WaylandServer QML plugin
    • liri.wlserver.outputmanagement: The liri_outputmanagement protocol
    • liri.wlserver.gtkshell: The gtk_shell protocol
    • liri.wlserver.gtkshell.trace: The gtk_shell protocol trace
    • liri.wlserver.screencaster: The liri_screencaster protocol
    • liri.wlserver.screenshooter: The liri_screenshooter protocol
    • liri.wlserver.taskmanager: The liri_windows
    • liri.xwayland: xwayland
    • liri.xwayland.trace: xwayland protocol trace
  • Client-side:

    • liri.wlclient.registry: Registry
    • liri.wlclient.shmpool: Shared memory pool
    • liri.wlcient.cursortheme: Cursor theme
    • liri.wlclient.fullscreenshell: Full screen shell
  • Platform:

    • liri.qpa.deviceintegration: Device integration
    • liri.qpa.input: Input management on device integration plugins
  • EGL Device Integrations:

    • liri.qpa.kms: KMS/DRM EGL device integration
    • liri.qpa.vthandler: Vt handler

Licensing

Licensed under the terms of the GNU General Public License version 3.

wayland-archived's People

Contributors

cxl000 avatar ibelieve avatar n3rdopolis avatar plfiorini avatar schnitzeltony avatar sebasje avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

wayland-archived's Issues

Simplify screen management

Since Qt 5.9 we can assign the screen to a Window from QML, we don't need ExtendedOutput anymore.

Remove ScreenManager, all backend code and add a proxy between QPlatformScreen and QML and replace it with ScreenModel a model that can read the screen configuration from a JSON file if provided otherwise from QGuiApplication.

This simplifies the screen management code quite a lot as everything is in one place.

Most of the ExtendedOutput code is no longer needed: since Qt 5.9 Window has a screen property that we can set from QML and the power state will now be provided by ScreenModel.

Support HiDPI based on resolution

Physical size is sometimes wrong leading to HiDPI being enabled when it shouldn't.
Always assume device pixel ratio 1 if the resolution is full hd or lower.

Ubuntu Wayland

For years we met and suggested to join but well I just commented to contextualize, now we are developing our own desktop environments and I would like to know if Ubuntu, Devuan and Debian can be used this project and what would be the dependencies?

Hack for missing private include dirs

Qt has broken CMake modules for QtWaylandClient, QtWaylandCompositor, QtQml and QtQuick when it comes to private include dirs.

Since upstream is not going to fix it soon we have to waste our time crafting an hack to allow ourselves to build our own software.

Let users exluce QtWayland client extensions from the build

QtWayland client extensions are:

  • Client side decoration plugin
  • fullscreen shell integration for sessions nested into another compositor such as weston

Those plugins require private QtWayland client API but Debian forbids those (see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=894472), they don't want private APIs in their distribution.

I don't see the Qt guys making these APIs public in the near future so we should find a way to make Liri Shell build on Debian since we want Liri stuff to be in most distributions.

Since those plugins are not vital we should add an option to exclude them from the build.

Boot2Qt: file contains links to build host sysroot

WARNING: liri-wayland-0.9.0+gitAUTOINC+b70488d460-r0 do_install: /home/plfiorini/git/liri/meta-liri/build-intel-corei7-64/tmp/work/corei7-64-lirios-linux/liri-wayland/0.9.0+gitAUTOINC+b70488d460-r0/image/usr/lib/cmake/LiriPlatform/LiriPlatformTargets.cmake contains links to build host sysroot!
ERROR: liri-wayland-0.9.0+gitAUTOINC+b70488d460-r0 do_install: One or more files contain links to build host sysroot /home/plfiorini/git/liri/meta-liri/build-intel-corei7-64/tmp/sysroots
ERROR: liri-wayland-0.9.0+gitAUTOINC+b70488d460-r0 do_install: Function failed: do_install (log file is located at /home/plfiorini/git/liri/meta-liri/build-intel-corei7-64/tmp/work/corei7-64-lirios-linux/liri-wayland/0.9.0+gitAUTOINC+b70488d460-r0/temp/log.do_install.13764)
ERROR: Logfile of failure stored in: /home/plfiorini/git/liri/meta-liri/build-intel-corei7-64/tmp/work/corei7-64-lirios-linux/liri-wayland/0.9.0+gitAUTOINC+b70488d460-r0/temp/log.do_install.13764
ERROR: Task 2337 (/home/plfiorini/git/liri/meta-liri/sources/meta-qt5-extra/recipes-liri/liri-wayland/liri-wayland_git.bb, do_install) failed with exit code '1'

Build failure with new cmake or ECM

Looks like cmake is looking for a target to build the XML protocol file although it's not needed.

Build error with Raspberry Pi 2 images:

| [ 58%] Automatic moc for target fullscreen-shell
| cd /home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/work/cortexa7hf-neon-vfpv4-lirios-linux-gnueabi/liri-wayland/0.10.0+gitAUTOINC+b506a5412f-r0/build/plugins/shellintegrations/fullscreen-shell && /home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/sysroots/x86_64-linux/usr/bin/cmake -E cmake_autogen /home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/work/cortexa7hf-neon-vfpv4-lirios-linux-gnueabi/liri-wayland/0.10.0+gitAUTOINC+b506a5412f-r0/build/plugins/shellintegrations/fullscreen-shell/CMakeFiles/fullscreen-shell_automoc.dir/ ""
| make[2]: Leaving directory `/home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/work/cortexa7hf-neon-vfpv4-lirios-linux-gnueabi/liri-wayland/0.10.0+gitAUTOINC+b506a5412f-r0/build'
| [ 58%] Built target fullscreen-shell_automoc
| make -f plugins/shellintegrations/fullscreen-shell/CMakeFiles/fullscreen-shell.dir/build.make plugins/shellintegrations/fullscreen-shell/CMakeFiles/fullscreen-shell.dir/depend
| make[2]: Entering directory `/home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/work/cortexa7hf-neon-vfpv4-lirios-linux-gnueabi/liri-wayland/0.10.0+gitAUTOINC+b506a5412f-r0/build'
| make[2]: *** No rule to make target `/usr/share/wayland-protocols/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml', needed by `plugins/shellintegrations/fullscreen-shell/wayland-fullscreen-shell-unstable-v1-client-protocol.h'.  Stop.
| make[2]: Leaving directory `/home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/work/cortexa7hf-neon-vfpv4-lirios-linux-gnueabi/liri-wayland/0.10.0+gitAUTOINC+b506a5412f-r0/build'
| ERROR: oe_runmake failed
| make[1]: *** [plugins/shellintegrations/fullscreen-shell/CMakeFiles/fullscreen-shell.dir/all] Error 2
| make[1]: Leaving directory `/home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/work/cortexa7hf-neon-vfpv4-lirios-linux-gnueabi/liri-wayland/0.10.0+gitAUTOINC+b506a5412f-r0/build'
| make: *** [all] Error 2
| ERROR: Function failed: do_compile (log file is located at /home/plfiorini/git/liri/meta-liri/build-raspberrypi2/tmp/work/cortexa7hf-neon-vfpv4-lirios-linux-gnueabi/liri-wayland/0.10.0+gitAUTOINC+b506a5412f-r0/temp/log.do_compile.2078)

port back to CMake

If I am not mistaken this is the last package that needs backport for building liri-shell in qbs-less environment (e.g Openembedded)

lirios-wayland fails to compile with QtWayland 5.12

I thought it was an upstream issue, as a QtWayland header is including a non-existing header that looks like it should be in QtWayland, but https://bugreports.qt.io/browse/QTBUG-71452 was closed

The error I get is

compiling fullscreenshellsurface.cpp
ERROR: /usr/bin/g++ -O2 -Wall -Wextra -m32 -pipe -fexceptions -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -DNDEBUG -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_SERVICE_SUPPORT_LIB -DQT_WAYLANDCLIENT_LIB -I/srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell -I/srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67 -I/opt/include -I/opt/include/QtCore -I/opt/mkspecs/linux-g++ -I/srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67/qt.headers -I/opt/include/QtCore/5.12.0 -I/opt/include/QtCore/5.12.0/QtCore -I/opt/include/QtDBus -I/opt/include/QtGui -I/opt/include/QtGui/5.12.0 -I/opt/include/QtGui/5.12.0/QtGui -I/opt/include/QtServiceSupport -I/opt/include/QtServiceSupport/5.12.0 -I/opt/include/QtServiceSupport/5.12.0/QtServiceSupport -I/opt/include/QtWaylandClient -I/opt/include/QtWaylandClient/5.12.0 -I/opt/include/QtWaylandClient/5.12.0/QtWaylandClient -std=c++11 -o /srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67/3a52ce780950d4d9/fullscreenshellsurface.cpp.o -c /srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellsurface.cpp

ERROR: In file included from /srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellsurface.cpp:24:
/opt/include/QtWaylandClient/5.12.0/QtWaylandClient/private/qwaylandscreen_p.h:58:10: fatal error: QtWaylandClient/private/qwayland-xdg-output-unstable-v1.h: No such file or directory
 #include <QtWaylandClient/private/qwayland-xdg-output-unstable-v1.h>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
ERROR: Process failed with exit code 1.
The following products could not be built for configuration default:
eglfs-kms-integration, fullscreen-shell

Not sure how to generate the QtWaylandClient/private/qwayland-xdg-output-unstable-v1.h header?

Creating a wayland compositor for raspberry pi

Hello. I have a raspberry pi and I want to create my own compositor for him. I have already created what I need using Qt Wayland Compositor, but it does not support GTK and XWayland. Is it possible to use Liri Wayland in such case?

lirios-wayland no longer builds with qtbase 5.11 branch after changes

I think something changed in Qt 5.11 related to private headers, because QtWayland wasn't building for a while last week, until they fixed it (I think with https://code.qt.io/cgit/qt/qtbase.git/commit/?id=9f1568d18c36186c239138306442de2508c79bc0 )

I am getting a header related issue building lirios-wayland now

linking libLiriEglFSDeviceIntegration.so.0.0.0
compiling main.cpp
ERROR: /usr/bin/g++ -O2 -Wall -Wextra -m32 -pipe -fexceptions -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -DNDEBUG -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_SERVICE_SUPPORT_LIB -DQT_WAYLANDCLIENT_LIB -I/srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell -I/srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67 -I/opt/include -I/opt/include/QtCore -I/opt/mkspecs/linux-g++ -I/srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67/qt.headers -I/opt/include/QtCore/5.11.1 -I/opt/include/QtCore/5.11.1/QtCore -I/opt/include/QtDBus -I/opt/include/QtGui -I/opt/include/QtGui/5.11.1 -I/opt/include/QtGui/5.11.1/QtGui -I/opt/include/QtServiceSupport -I/opt/include/QtServiceSupport/5.11.1 -I/opt/include/QtServiceSupport/5.11.1/QtServiceSupport -I/opt/include/QtWaylandClient -I/opt/include/QtWaylandClient/5.11.1 -I/opt/include/QtWaylandClient/5.11.1/QtWaylandClient -std=c++11 -o /srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67/3a52ce780950d4d9/main.cpp.o -c /srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/main.cpp

ERROR: In file included from /srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/main.cpp:26:0:
/srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellintegration.h:27:54: fatal error: QtWaylandClient/private/qwayland-wayland.h: No such file or directory
 #include <QtWaylandClient/private/qwayland-wayland.h>
                                                      ^
compilation terminated.

Proper handling of EGL 1.5

EGL 1.5 allows us to specify which platform we want, otherwise autodetection will fail.
For now we have a workaround that sets the the relative env var but in the long term we want something like this: libretro/RetroArch@fcccc9d

Latest eglfs from Qt allows device integrations to open the display in a custom way, we can implement it there.

fullscreen shell integration

Implement a fullscreen shell integration for the wayland QPA plugin in order to replace the EGL device integration for the liri QPA plugin.

The reason is that a shell integration extends the wayland QPA plugin that has all the groundwork done for us, while the EGL device integration requires writing everything from scratch and that has proven to be difficult.

Parse error at "IID"

-- The C compiler identification is Clang 3.9.1
-- The CXX compiler identification is Clang 3.9.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for __GLIBC__
-- Looking for __GLIBC__ - found
-- Performing Test _OFFT_IS_64BIT
-- Performing Test _OFFT_IS_64BIT - Success
-- Found QtWaylandScanner: /usr/lib64/qt5/bin/qtwaylandscanner  
-- Found OpenGL: /usr/lib64/libGL.so  
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Found EGL: /usr/lib64/libEGL.so (found version "1.5") 
-- Could NOT find BcmHost (missing:  BcmHost_LIBRARY BcmHost_INCLUDE_DIR) 
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so
-- Looking for XOpenDisplay in /usr/lib64/libX11.so;/usr/lib64/libXext.so - found
-- Looking for gethostbyname

-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Found X11: /usr/lib64/libX11.so
-- Found Wayland_Client: /usr/lib64/libwayland-client.so (found version "1.12.0") 
-- Found Wayland_Server: /usr/lib64/libwayland-server.so (found version "1.12.0") 
-- Found Wayland_Cursor: /usr/lib64/libwayland-cursor.so (found version "1.12.0") 
-- Found Wayland_Egl: /usr/lib64/libwayland-egl.so (found version "13.0.3") 
-- Found Wayland: /usr/lib64/libwayland-client.so;/usr/lib64/libwayland-server.so;/usr/lib64/libwayland-cursor.so;/usr/lib64/libwayland-egl.so (found suitable version "1.12.0", minimum required is "1.6.0") found components:  Client Server Cursor Egl 
-- Checking for module 'wayland-protocols'
--   Found wayland-protocols, version 1.7
-- Checking for module 'libsystemd-daemon'
--   No package 'libsystemd-daemon' found
-- Checking for module 'libsystemd'
--   Found libsystemd, version 232
-- Checking for module 'xkbcommon'
--   Found xkbcommon, version 0.7.0
-- Found XCB_XCB: /usr/lib64/libxcb.so (found version "1.11.1") 
-- Found XCB_RENDER: /usr/lib64/libxcb-render.so (found version "1.11.1") 
-- Found XCB_SHAPE: /usr/lib64/libxcb-shape.so (found version "1.11.1") 
-- Found XCB_XFIXES: /usr/lib64/libxcb-xfixes.so (found version "1.11.1") 
-- Found XCB_COMPOSITE: /usr/lib64/libxcb-composite.so (found version "1.11.1") 
-- Found XCB_CURSOR: /usr/lib64/libxcb-cursor.so (found version "0.1.3") 
-- Found XCB: /usr/lib64/libxcb.so;/usr/lib64/libxcb-render.so;/usr/lib64/libxcb-shape.so;/usr/lib64/libxcb-xfixes.so;/usr/lib64/libxcb-composite.so;/usr/lib64/libxcb-cursor.so (found version "1.11.1") found components:  XCB XFIXES CURSOR COMPOSITE RENDER SHAPE 
-- Found Libdrm: /usr/lib64/libdrm.so (found version "2.4.75") 
-- Found gbm: /usr/lib64/libgbm.so (found version "13.0.3") 
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Found UDev: /lib64/libudev.so (found version "232") 
-- Found Libinput: /usr/lib64/libinput.so (found suitable version "1.6.1", minimum required is "0.12") 
-- Found GLib: /usr/lib64/libglib-2.0.so (found version "2.50.2") 
-- Found Libdl: /usr/lib64/libdl.so  
-- Found Qt5FontDatabaseSupport: /usr/lib64/libQt5FontDatabaseSupport.a (found version "5.8.0") 
-- Found Qt5ThemeSupport: /usr/lib64/libQt5ThemeSupport.a (found version "5.8.0") 
-- Found Qt5ServiceSupport: /usr/lib64/libQt5ServiceSupport.a (found version "5.8.0") 
-- Found Qt5EventDispatcherSupport: /usr/lib64/libQt5EventDispatcherSupport.a (found version "5.8.0") 
-- Found Qt5PlatformCompositorSupport: /usr/lib64/libQt5PlatformCompositorSupport.a (found version "5.8.0") 
-- Found Qt5EglSupport: /usr/lib64/libQt5EglSupport.a (found version "5.8.0") 
-- Found Freetype: /usr/lib64/libfreetype.so (found version "2.7.1") 
-- Found Fontconfig: /usr/lib64/libfontconfig.so (found version "2.12.1") 
-- 
-- The following features have been enabled:

 * Wayland-Client , Required for protocols
 * Wayland-Server , Required for protocols
 * Wayland-Cursor , Required for changing cursors
 * Wayland-Egl , Required for hardware integration
 * Wayland-Protocols , Required for protocols
 * systemd , Required for systemd integration
 * xkbcommon , Required for keymap support

-- The following OPTIONAL packages have been found:

 * OpenGL , The OpenGL libraries , <http://www.opengl.org>
 * OpenGLES , The OpenGLES libraries , <http://www.khronos.org/opengles>
 * PkgConfig

-- The following REQUIRED packages have been found:

 * ECM (required version >= 1.4.0)
 * Qt5Core
 * Qt5DBus
 * Qt5Gui
 * Qt5Network (required version >= 5.8.0)
 * Qt5Qml
 * Qt5Quick
 * Qt5WaylandClient
 * Qt5WaylandCompositor
 * QtWaylandScanner , Executable that converts XML protocol files to C++ code , <http://qt.io>
 * EGL , A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG. , <https://www.khronos.org/egl/>
 * X11
   Required for X11 EGL device integration and XWayland
 * Wayland (required version >= 1.6.0) , C library implementation of the Wayland protocol: a protocol for a compositor to talk to its clients , <http://wayland.freedesktop.org>
   Required to build Green Island
 * XCB , X protocol C-language Binding , <http://xcb.freedesktop.org>
 * Libdrm , Userspace interface to kernel DRM services. , <https://wiki.freedesktop.org/dri/>
   Required for DRM/KMS support
 * gbm , Mesa gbm library. , <http://www.mesa3d.org>
   Required for DRM/KMS support
 * UDev , Library to access udev device information. , <http://www.freedesktop.org/software/systemd/libudev/>
   Required for input handling from the QPA plugin
 * Libinput (required version >= 0.12) , Library to handle input devices in Wayland compositors and to provide a generic X.Org input driver. , <http://www.freedesktop.org/wiki/Software/libinput/>
   Required for input handling from the QPA plugin
 * GLib , GLib provides the core application building blocks for libraries and applications written in C. , <https://developer.gnome.org/glib/>
 * Libdl , Programming interface to dynamic linking loader.
   Required to load GL functions
 * Qt5FontDatabaseSupport , Qt FontDatabaseSupport module. , <http://www.qt.io>
 * Qt5ThemeSupport , Qt ThemeSupport module. , <http://www.qt.io>
 * Qt5ServiceSupport , Qt ThemeSupport module. , <http://www.qt.io>
 * Qt5EventDispatcherSupport , Qt EventDispatcherSupport module. , <http://www.qt.io>
 * Qt5PlatformCompositorSupport , Qt ThemeSupport module. , <http://www.qt.io>
 * Qt5EglSupport , Qt ThemeSupport module. , <http://www.qt.io>
 * Freetype , A font rendering engine , <http://www.freetype.org>
   Required by the QPA plugin
 * Fontconfig , Library for configuring and customizing font access. , <http://www.freedesktop.org/wiki/Software/fontconfig>
   Required by the QPA plugin
 * WaylandScanner , Executable that converts XML protocol files to C code , <http://wayland.freedesktop.org>
 * Qt5Test
 * Qt5Widgets (required version >= 5.8.0)
 * Qt5QuickTest
 * Qt5 (required version >= 5.8.0)

-- The following OPTIONAL packages have not been found:

 * BcmHost , Broadcom OpenGLES graphics libraries. , <http://www.broadcom.com/>

-- Configuring done
-- Generating done
-- Build files have been written to: /home/omv/liri-wayland/BUILD/liri-wayland-0.9.0.1-20170209
[omv@bongie liri-wayland-0.9.0.1-20170209]$ 
[omv@bongie liri-wayland-0.9.0.1-20170209]$ make
Scanning dependencies of target material_automoc
[  0%] Automatic moc for target material
Generating moc source materialdecoration.moc
/home/omv/liri-wayland/BUILD/liri-wayland-0.9.0.1-20170209/decorations/material/materialdecoration.cpp:320: Parse error at "IID"
AUTOGEN: error: process for /home/omv/liri-wayland/BUILD/liri-wayland-0.9.0.1-20170209/decorations/material/materialdecoration.moc failed:
/home/omv/liri-wayland/BUILD/liri-wayland-0.9.0.1-20170209/decorations/material/materialdecoration.cpp:320: Parse error at "IID"

Generating moc source material_automoc.dir/moc_materialdecora_XNDUMGAUIGOKA6.cpp
Generating moc compilation material_automoc.cpp
moc failed...
make[2]: *** [decorations/material/CMakeFiles/material_automoc.dir/build.make:58: decorations/material/CMakeFiles/material_automoc] Error 1
make[1]: *** [CMakeFiles/Makefile2:206: decorations/material/CMakeFiles/material_automoc.dir/all] Error 2
make: *** [Makefile:161: all] Error 2

Probe EGL integration plugins

Probe plugins before loading them and find one that works instead of giving up early on.
Also add a priority to plugins so for instance we can try eglfs_kms_egldevice (reserved to systems with the NVIDIA proprietary driver) before eglfs_kms (which uses gbm and should work on all MESA systems, including NVIDIA with nouveau).

XWayland

Finish XWayland support.
We have a QML plugin now but it's not very stable.

Move stuff to liri-shell

We don't want to maintain API compatibility for the QML plugins.
Move the following classes to Liri.Shell:

  • ChromeItem
  • HotSpot
  • KeyEventFilter

liri-wayland doesn't compile due to EGL issues with qt 5.8

I have my qtbase 5.8 branch (not 5.8.0, not sure what the difference is) compiled with egl, using the following options

../configure -confirm-license -opensource -qpa wayland -egl -prefix $INSTALLDIR -release -dbus -no-gtk -system-sqlite -no-warnings-are-errors -no-separate-debug-info -nomake tests -nomake examples -libinput

Upon building, I am getting these build errors, even after trying to add an include of EGL/egl.h to plugins/egldeviceintegration/wayland/eglfswaylandintegration.h

[ 96%] Built target lirixwaylandplugin
In file included from /opt/include/QtPlatformHeaders/QEGLNativeContext:1:0,
                 from /srcbuild/lirios-wayland/plugins/egldeviceintegration/wayland/eglfswaylandintegration.cpp:32:
/opt/include/QtPlatformHeaders/qeglnativecontext.h:56:34: error: expected ‘)’ before ‘ctx’
     QEGLNativeContext(EGLContext ctx, EGLDisplay dpy)
                                  ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h:61:5: error: ‘EGLContext’ does not name a type
     EGLContext context() const { return m_context; }
     ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h:62:5: error: ‘EGLDisplay’ does not name a type
     EGLDisplay display() const { return m_display; }
     ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h:65:5: error: ‘EGLContext’ does not name a type
     EGLContext m_context;
     ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h:66:5: error: ‘EGLDisplay’ does not name a type
     EGLDisplay m_display;
     ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h: In constructor ‘QEGLNativeContext::QEGLNativeContext()’:
/opt/include/QtPlatformHeaders/qeglnativecontext.h:52:11: error: class ‘QEGLNativeContext’ does not have any field named ‘m_context’
         : m_context(0),
           ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h:53:11: error: class ‘QEGLNativeContext’ does not have any field named ‘m_display’
           m_display(0)
           ^
/srcbuild/lirios-wayland/plugins/egldeviceintegration/wayland/eglfswaylandintegration.cpp: In member function ‘virtual QPlatformOpenGLContext* Liri::Platform::EglFSWaylandIntegration::createPlatformOpenGLContext(QOpenGLContext*)’:
/srcbuild/lirios-wayland/plugins/egldeviceintegration/wayland/eglfswaylandintegration.cpp:217:99: error: no matching function for call to ‘QEGLNativeContext::QEGLNativeContext(EGLContext, void*&)’
     nativeHandle = QVariant::fromValue<QEGLNativeContext>(QEGLNativeContext(ctx->eglContext(), dpy));
                                                                                                   ^
In file included from /opt/include/QtPlatformHeaders/QEGLNativeContext:1:0,
                 from /srcbuild/lirios-wayland/plugins/egldeviceintegration/wayland/eglfswaylandintegration.cpp:32:
/opt/include/QtPlatformHeaders/qeglnativecontext.h:51:5: note: candidate: QEGLNativeContext::QEGLNativeContext()
     QEGLNativeContext()
     ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h:51:5: note:   candidate expects 0 arguments, 2 provided
/opt/include/QtPlatformHeaders/qeglnativecontext.h:49:8: note: candidate: constexpr QEGLNativeContext::QEGLNativeContext(const QEGLNativeContext&)
 struct QEGLNativeContext
        ^
/opt/include/QtPlatformHeaders/qeglnativecontext.h:49:8: note:   candidate expects 1 argument, 2 provided
/opt/include/QtPlatformHeaders/qeglnativecontext.h:49:8: note: candidate: constexpr QEGLNativeContext::QEGLNativeContext(QEGLNativeContext&&)
/opt/include/QtPlatformHeaders/qeglnativecontext.h:49:8: note:   candidate expects 1 argument, 2 provided
plugins/egldeviceintegration/wayland/CMakeFiles/wayland.dir/build.make:134: recipe for target 'plugins/egldeviceintegration/wayland/CMakeFiles/wayland.dir/eglfswaylandintegration.cpp.o' failed
make[2]: *** [plugins/egldeviceintegration/wayland/CMakeFiles/wayland.dir/eglfswaylandintegration.cpp.o] Error 1
CMakeFiles/Makefile2:566: recipe for target 'plugins/egldeviceintegration/wayland/CMakeFiles/wayland.dir/all' failed
make[1]: *** [plugins/egldeviceintegration/wayland/CMakeFiles/wayland.dir/all] Error 2
Makefile:149: recipe for target 'all' failed

Screen resolution change

We have client and server side APIs, the QPA plugin has support for it but it doesn't seem to be reliable.

NVIDIA support

eglfs has support for NVIDIA drivers but we are not using it so we need to synchronize our QPA plugin with upstream.

  • Install Liri OS on a machine with NVIDIA
  • Test one of the QtWayland examples on the system to see if everything works
  • Synchronize our QPA plugin with eglfs
  • Test Liri OS with NVIDIA support

XWayland QML plugin wrapper

Install the QML plugin even if liri-wayland is built without XWayland support to avoid conditional loading.

HotSpot

Currently we install an event handle on the output window to handle hot spots.
A better way is to create an Item without contents that handles hover events, a compositor would then add a child visual Item to make the hot spot noticeable.

Build failure with Qt 5.10

ERROR: /usr/bin/g++ -g -O0 -Wall -Wextra -m64 -pipe -fexceptions -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII '-DLIRIWAYLAND_VERSION="0.9.0.1"' -DQT_BUILD_LIRILIBINPUT_LIB -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_GUI_LIB -I/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriLibInput -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriLibInput/0.9.0.1 -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriLibInput/0.9.0.1/LiriLibInput -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriLibInput/0.9.0.1/LiriLibInput/private -I/usr/include -I/usr/include/LiriLogind -I/usr/include/LiriLogind/0.9.0.1 -I/usr/include/LiriLogind/0.9.0.1/LiriLogind -I/usr/include/LiriLogind/0.9.0.1/LiriLogind/private -I/usr/include/qt -I/usr/include/qt/QtCore -I/usr/lib/qt/mkspecs/linux-g++ -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/LiriLibInput.24883f86/qt.headers -I/usr/include/qt/QtCore/5.10.0 -I/usr/include/qt/QtCore/5.10.0/QtCore -I/usr/include/qt/QtDBus -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriUDev -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriUDev/0.9.0.1 -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriUDev/0.9.0.1/LiriUDev -I/home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/include/LiriUDev/0.9.0.1/LiriUDev/private -I/usr/include/qt/QtGui -I/usr/include/qt/QtGui/5.10.0 -I/usr/include/qt/QtGui/5.10.0/QtGui -I/home/solaraquarion/build/liri-wayland-git/src/wayland/src/eglfsxkb -std=c++0x -o /home/solaraquarion/build/liri-wayland-git/src/wayland/build/default/LiriLibInput.24883f86/.obj/3a52ce780950d4d9/libinputgesture.cpp.o -c /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp

ERROR: /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp: In member function ‘void Liri::Platform::LibInputGesture::handlePinchBegin(libinput_event_gesture*)’:
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:51:25: error: no matching function for call to ‘QWindowSystemInterface::handleGestureEvent(std::nullptr_t, const quint64&, Qt::NativeGestureType, QPointF&, QPointF&)’
pos, pos);
^
In file included from /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:28:0:
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate: static void QWindowSystemInterface::handleGestureEvent(QWindow*, QTouchDevice*, ulong, Qt::NativeGestureType, QPointF&, QPointF&)
static void handleGestureEvent(QWindow window, QTouchDevice device, ulong timestamp, Qt::NativeGestureType type,
^~~~~~~~~~~~~~~~~~
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate expects 6 arguments, 5 provided
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp: In member function ‘void Liri::Platform::LibInputGesture::handlePinchEnd(libinput_event_gesture
)’:
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:61:25: error: no matching function for call to ‘QWindowSystemInterface::handleGestureEvent(std::nullptr_t, const quint64&, Qt::NativeGestureType, QPointF&, QPointF&)’
pos, pos);
^
In file included from /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:28:0:
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate: static void QWindowSystemInterface::handleGestureEvent(QWindow
, QTouchDevice*, ulong, Qt::NativeGestureType, QPointF&, QPointF&)
static void handleGestureEvent(QWindow window, QTouchDevice device, ulong timestamp, Qt::NativeGestureType type,
^~~~~~~~~~~~~~~~~~
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate expects 6 arguments, 5 provided
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp: In member function ‘void Liri::Platform::LibInputGesture::handlePinchUpdate(libinput_event_gesture
)’:
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:74:32: error: no matching function for call to ‘QWindowSystemInterface::handleGestureEventWithRealValue(std::nullptr_t, const quint64&, Qt::NativeGestureType, const double&, QPointF&, QPointF&)’
scale, pos, pos);
^
In file included from /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:28:0:
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:230:17: note: candidate: static void QWindowSystemInterface::handleGestureEventWithRealValue(QWindow
, QTouchDevice*, ulong, Qt::NativeGestureType, qreal, QPointF&, QPointF&)
static void handleGestureEventWithRealValue(QWindow window, QTouchDevice device, ulong timestamp, Qt::NativeGestureType type,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:230:17: note: candidate expects 7 arguments, 6 provided
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:78:36: error: no matching function for call to ‘QWindowSystemInterface::handleGestureEventWithRealValue(std::nullptr_t, const quint64&, Qt::NativeGestureType, const double&, QPointF&, QPointF&)’
angle, pos, pos);
^
In file included from /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:28:0:
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:230:17: note: candidate: static void QWindowSystemInterface::handleGestureEventWithRealValue(QWindow
, QTouchDevice
, ulong, Qt::NativeGestureType, qreal, QPointF&, QPointF&)
static void handleGestureEventWithRealValue(QWindow window, QTouchDevice device, ulong timestamp, Qt::NativeGestureType type,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:230:17: note: candidate expects 7 arguments, 6 provided
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp: In member function ‘void Liri::Platform::LibInputGesture::handleSwipeBegin(libinput_event_gesture
)’:
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:88:25: error: no matching function for call to ‘QWindowSystemInterface::handleGestureEvent(std::nullptr_t, const quint64&, Qt::NativeGestureType, QPointF&, QPointF&)’
pos, pos);
^
In file included from /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:28:0:
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate: static void QWindowSystemInterface::handleGestureEvent(QWindow
, QTouchDevice*, ulong, Qt::NativeGestureType, QPointF&, QPointF&)
static void handleGestureEvent(QWindow window, QTouchDevice device, ulong timestamp, Qt::NativeGestureType type,
^~~~~~~~~~~~~~~~~~
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate expects 6 arguments, 5 provided
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp: In member function ‘void Liri::Platform::LibInputGesture::handleSwipeEnd(libinput_event_gesture
)’:
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:98:25: error: no matching function for call to ‘QWindowSystemInterface::handleGestureEvent(std::nullptr_t, const quint64&, Qt::NativeGestureType, QPointF&, QPointF&)’
pos, pos);
^
In file included from /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:28:0:
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate: static void QWindowSystemInterface::handleGestureEvent(QWindow
, QTouchDevice*, ulong, Qt::NativeGestureType, QPointF&, QPointF&)
static void handleGestureEvent(QWindow window, QTouchDevice device, ulong timestamp, Qt::NativeGestureType type,
^~~~~~~~~~~~~~~~~~
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate expects 6 arguments, 5 provided
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp: In member function ‘void Liri::Platform::LibInputGesture::handleSwipeUpdate(libinput_event_gesture
)’:
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:109:25: error: no matching function for call to ‘QWindowSystemInterface::handleGestureEvent(std::nullptr_t, const quint64&, Qt::NativeGestureType, QPointF&, QPointF&)’
pos, pos);
^
In file included from /home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinputgesture.cpp:28:0:
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate: static void QWindowSystemInterface::handleGestureEvent(QWindow
, QTouchDevice*, ulong, Qt::NativeGestureType, QPointF&, QPointF&)
static void handleGestureEvent(QWindow *window, QTouchDevice *device, ulong timestamp, Qt::NativeGestureType type,
^~~~~~~~~~~~~~~~~~
/usr/include/qt/QtGui/5.10.0/QtGui/qpa/qwindowsysteminterface.h:228:17: note: candidate expects 6 arguments, 5 provided
ERROR: Process failed with exit code 1.
The following products could not be built for configuration default:
LiriWaylandClient-qbs
LiriWaylandClient-pkgconfig
LiriWaylandClient-cmake
LiriWaylandClientHeaders
LiriWaylandClient
LiriEglFS-qbs
LiriEglFS-pkgconfig
LiriEglFS
LiriLibInput-qbs
LiriLibInput-pkgconfig
LiriLibInput
LiriWaylandServer-qbs
LiriWaylandServer-pkgconfig
LiriWaylandServer
LiriUDev-qbs
LiriUDev-pkgconfig
liriwaylandserverplugin
liriwaylandserverprivateplugin
lirixwaylandplugin
materialdecorationplugin
kms
lirieglfs
fullscreen-shell
tst_wl_libinput
==> ERROR: A failure occurred in build().
Aborting...

lirios-wayland compiles but doesn't let dependants compile

I might be using qbs wrong?

trying to compile lirios-workspace and it can't find /opt/lib/libLiriWaylandClient0.0.0.so.3
because it's installed as
/opt/lib/libLiriWaylandClient.so -> libLiriWaylandClient.so.0.0.0
/opt/lib/libLiriWaylandClient.so.0 -> libLiriWaylandClient.so.0.0.0
/opt/lib/libLiriWaylandClient.so.0.0 -> libLiriWaylandClient.so.0.0.0

It seems the .qbs file is wrong

cat /opt/share/qbs/modules/LiriWaylandClient/LiriWaylandClient.qbs
import qbs 1.0

Module {
    property stringList cppIncludePaths: ["/opt/include","/opt/include/LiriWaylandClient","/opt/include/LiriWaylandClient/0.9.0.1","/opt/include/QtCore","/opt/include/QtCore/5.8.1","/opt/include/QtCore/5.8.1/QtCore","/opt/include/QtGui","/opt/include/QtGui/5.8.1","/opt/include/QtGui/5.8.1/QtGui"]
    property stringList cppDynamicLibraries: ["/opt/lib/libLiriWaylandClient0.0.0.so.3","/opt/lib/libQt5Core.so.5.8.1","/opt/lib/libQt5Gui.so.5.8.1","/opt/lib/i386-linux-gnu/libwayland-client.so","/opt/lib/i386-linux-gnu/libwayland-cursor.so"]

    Depends { name: "cpp" }

    cpp.defines: []
    cpp.commonCompilerFlags: ["-Wno-deprecated-declarations"]
    cpp.includePaths: {
        if (qbs.sysroot !== undefined)
            return cppIncludePaths.map(function(item) { return qbs.sysroot + item; });
        return cppIncludePaths;
    }
    cpp.dynamicLibraries: {
        if (qbs.sysroot !== undefined)
            return cppDynamicLibraries.map(function(item) { return qbs.sysroot + item; });
        return cppDynamicLibraries;
    }
    cpp.linkerFlags: []
}

I am compiling with

qbs setup-toolchains --type gcc /usr/bin/g++ gcc
qbs setup-qt /opt/bin/qmake qt5
qbs config profiles.qt5.baseProfile gcc
qbs resolve profile:qt5 qbs.buildVariant:release qbs.installRoot:$INSTALLDIR
qbs build -j $BUILD_CPU_COUNT --no-install profile:qt5
qbs install --no-build -v

Build error

I followed the compilation instructions but I get the following error:

ERROR: /usr/bin/clang++ -g -O0 -Wall -Wextra -target x86_64-pc-linux-gnu -pipe -fexceptions -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_SERVICE_SUPPORT_LIB -DQT_WAYLANDCLIENT_LIB -I/home/gdefermin/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell -I/home/gdefermin/lirios-wayland/build/default/fullscreen-shell.0dc7dd67 -I/usr/include/qt -I/usr/include/qt/QtCore -I/usr/lib/qt/mkspecs/linux-g++ -I/home/gdefermin/lirios-wayland/build/default/fullscreen-shell.0dc7dd67/qt.headers -I/usr/include/qt/QtCore/5.11.0 -I/usr/include/qt/QtCore/5.11.0/QtCore -I/usr/include/qt/QtDBus -I/usr/include/qt/QtGui -I/usr/include/qt/QtGui/5.11.0 -I/usr/include/qt/QtGui/5.11.0/QtGui -I/usr/include/qt/QtServiceSupport -I/usr/include/qt/QtServiceSupport/5.11.0 -I/usr/include/qt/QtServiceSupport/5.11.0/QtServiceSupport -I/usr/include/qt/QtWaylandClient -I/usr/include/qt/QtWaylandClient/5.11.0 -I/usr/include/qt/QtWaylandClient/5.11.0/QtWaylandClient -std=c++11 -o /home/gdefermin/lirios-wayland/build/default/fullscreen-shell.0dc7dd67/3a52ce780950d4d9/fullscreenshellsurface.cpp.o -c /home/gdefermin/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellsurface.cpp

ERROR: /home/gdefermin/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellsurface.cpp:46:50: error: no member named 'output' in 'QPlatformScreen'
                             m_window->screen()->output());
                             ~~~~~~~~~~~~~~~~~~  ^
1 error generated.
ERROR: Process failed with exit code 1.
The following products could not be built for configuration default:
LiriEdidSupport-private, LiriEdidSupportHeaders, LiriEglFSDeviceIntegration, LiriEglFSDeviceIntegration-qbs, LiriEglFSDeviceIntegrationHeaders, LiriEglFSKmsSupport, LiriEglFSKmsSupport-qbs, LiriEglFSKmsSupportHeaders, LiriKmsSupport-private, LiriKmsSupportHeaders, LiriLibInput-private, eglfs-kms-egldevice-integration, eglfs-kms-integration, fullscreen-shell, lirieglfs, tst_wl_libinput

I've tried using both gcc and clang to compile, but I always get the same error.

I'm using Arch Linux with kernel 4.1.12

» uname -a       
Linux arch-laptop 4.1.12-1-lts #1 SMP Tue Oct 27 17:21:25 CET 2015 x86_64 GNU/Linux

» pacman -Q {gcc,clang,qt5-base,qt5-declarative,qt5-wayland,liri-qbs-shared,libliri,qt5-udev,libinput,libdrm,mesa,xcb-util-cursor}
gcc 8.1.1+20180531-1
clang 6.0.0-1
qt5-base 5.11.0-1
qt5-declarative 5.11.0-1
qt5-wayland 5.11.0-1
liri-qbs-shared-git 20180526.131.c10289d-1
libliri-git 20180412.113.340f505-1
qt5-udev 1.0.0-1
libinput 1.11.0-1
libdrm 2.4.92-1
mesa 18.1.1-1
xcb-util-cursor 0.1.3-1

What surprises me the most is that your CI is compiling fine, so there must be something I'm doing wrong...

kms: Always create global cursor

Cursor events do not seem to be propagate because the cursor is not created in a clumsy attempt to hide the image, which should already be done by EglFSKmsCursor.

Remove Liri.PlatformExtensions

Decoration color can be changed directly from Fluid we don't need the complexity of the PlatformExtensions mechanism.

  • Expose colors as QWaylandAbstractDecoration properties
  • Remove material decoration shared library
  • Remove Liri.PlatformExtensions

commit b804de2303ca1bc6628f2ca30c4b232239183f56 in liri-wayland causes an odd cmake issue

Hi

Trying to configure liri-wayland since commit b804de2 and after results in the below cmake error, the commit before is fine, I tried to grep -iR QWaylandXCompositeEglClientBufferIntegrationPlugin in my source directory, and it was only in qtwayland...

Thanks

CMake Error at /opt/lib/cmake/Qt5WaylandCompositor/Qt5WaylandCompositor_QWaylandXCompositeEglClientBufferIntegrationPlugin.cmake:2 (add_library):
  add_library cannot create imported target
  "Qt5::QWaylandXCompositeEglClientBufferIntegrationPlugin" because another
  target with the same name already exists.
Call Stack (most recent call first):
  /opt/lib/cmake/Qt5WaylandCompositor/Qt5WaylandCompositorConfig.cmake:141 (include)
  /opt/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package)
  CMakeLists.txt:80 (find_package)


CMake Error at /opt/lib/cmake/Qt5WaylandCompositor/Qt5WaylandCompositor_QWaylandXCompositeGlxClientBufferIntegrationPlugin.cmake:2 (add_library):
  add_library cannot create imported target
  "Qt5::QWaylandXCompositeGlxClientBufferIntegrationPlugin" because another
  target with the same name already exists.
Call Stack (most recent call first):
  /opt/lib/cmake/Qt5WaylandCompositor/Qt5WaylandCompositorConfig.cmake:141 (include)
  /opt/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package)
  CMakeLists.txt:80 (find_package)

build failure

Fetching origin
==> Validating source files with md5sums...
wayland ... Skipped
==> Removing existing $srcdir/ directory...
==> Extracting sources...
-> Creating working copy of wayland git repo...
Cloning into 'wayland'...
done.
Switched to a new branch 'makepkg'
==> Starting prepare()...
==> Starting pkgver()...
==> Removing existing $pkgdir/ directory...
==> Starting build()...
Profile 'gcc' created for '/usr/bin/g++'.
Creating profile 'qt5'.
Setting profile 'gcc' as the base profile for this profile.
Skipping prl file '/usr/lib/libQt5dtkwidget.prl', because it cannot be opened (No such file or directory).
Skipping prl file '/usr/lib/libQt5AV.prl', because it cannot be opened (No such file or directory).
Skipping prl file '/usr/lib/libQt5WebKit.prl', because it cannot be opened (No such file or directory).
Skipping prl file '/usr/lib/libQt5AVWidgets.prl', because it cannot be opened (No such file or directory).
Skipping prl file '/usr/lib/libQt5Fluid.prl', because it cannot be opened (No such file or directory).
Skipping prl file '/usr/lib/libQt5WebKitWidgets.prl', because it cannot be opened (No such file or directory).
Skipping prl file '/usr/lib/libQt5dtkcore.prl', because it cannot be opened (No such file or directory).
Build graph does not yet exist for configuration 'default'. Starting from scratch.
Resolving project for configuration default
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
SOFT ASSERT: varValue in language/evaluatorscriptclass.cpp:597
ERROR: /usr/share/qbs/imports/LiriModuleProject.qbs:86:5 Error while handling product 'LiriEglFSKmsSupport-pkgconfig':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriEglFSKmsSupport-pkgconfig'.
/usr/share/qbs/imports/LiriModuleProject.qbs:86:5 Error while handling product 'LiriEglFSDeviceIntegration-pkgconfig':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriEglFSDeviceIntegration-pkgconfig'.
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.qbs:3:1 Error while handling product 'eglfs-kms-integration':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'eglfs-kms-integration'.
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/plugins/platforms/eglfs/eglfs-plugin.qbs:3:1 Error while handling product 'lirieglfs':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'lirieglfs'.
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:44:5 Error while handling product 'LiriLibInput':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:57:9 Dependency 'LiriLogind' not found for product 'LiriLibInput'.
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.qbs:27:5 Error while handling product 'LiriEglFSKmsSupport':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriEglFSKmsSupport'.
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/plugins/platforms/eglfs/eglfsdeviceintegration.qbs:32:5 Error while handling product 'LiriEglFSDeviceIntegration':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriEglFSDeviceIntegration'.
/usr/share/qbs/imports/LiriModuleProject.qbs:149:5 Error while handling product 'LiriLibInput-cmake':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriLibInput-cmake'.
/usr/share/qbs/imports/LiriModuleProject.qbs:149:5 Error while handling product 'LiriEglFSKmsSupport-cmake':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriEglFSKmsSupport-cmake'.
/home/solaraquarion/build/liri-wayland-git/src/wayland/tests/manual/libinput/libinput.qbs:3:1 Error while handling product 'tst_wl_libinput':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'tst_wl_libinput'.
/usr/share/qbs/imports/LiriModuleProject.qbs:149:5 Error while handling product 'LiriEglFSDeviceIntegration-cmake':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriEglFSDeviceIntegration-cmake'.
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/eglfs_kms_egldevice.qbs:3:1 Error while handling product 'eglfs-kms-egldevice-integration':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'eglfs-kms-egldevice-integration'.
/usr/share/qbs/imports/LiriModuleProject.qbs:86:5 Error while handling product 'LiriLibInput-pkgconfig':
/home/solaraquarion/build/liri-wayland-git/src/wayland/src/libinput/libinput.qbs:82:13 Dependency 'LiriLogind' not found for product 'LiriLibInput-pkgconfig'.

lirios-wayland's fullscreen shell integration doesn't build

Hi

When trying to build lirios-wayland, it seems the fullscreen shell integration does not build, this is with Qt 5.11, and not sure how long it's been happening... (as the qbs install command silently fails with my scripts)

I am getting the following output running

qbs build -j 2 --no-install profile:qt5
linking libliriwaylandserverplugin.so
compiling fullscreenshellintegration.cpp
ERROR: /usr/bin/g++ -O2 -Wall -Wextra -m32 -pipe -fexceptions -fvisibility=hidden -fvisibility-inlines-hidden -fPIC -DNDEBUG -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_SERVICE_SUPPORT_LIB -DQT_WAYLANDCLIENT_LIB -I/srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell -I/srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67 -I/opt/include -I/opt/include/QtCore -I/opt/mkspecs/linux-g++ -I/srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67/qt.headers -I/opt/include/QtCore/5.11.1 -I/opt/include/QtCore/5.11.1/QtCore -I/opt/include/QtDBus -I/opt/include/QtGui -I/opt/include/QtGui/5.11.1 -I/opt/include/QtGui/5.11.1/QtGui -I/opt/include/QtServiceSupport -I/opt/include/QtServiceSupport/5.11.1 -I/opt/include/QtServiceSupport/5.11.1/QtServiceSupport -I/opt/include/QtWaylandClient -I/opt/include/QtWaylandClient/5.11.1 -I/opt/include/QtWaylandClient/5.11.1/QtWaylandClient -std=c++11 -o /srcbuild/lirios-wayland/default/fullscreen-shell.0dc7dd67/3a52ce780950d4d9/fullscreenshellsurface.cpp.o -c /srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellsurface.cpp

ERROR: /srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellsurface.cpp: In member function ‘virtual void QtWaylandClient::FullScreenShellSurface::setType(Qt::WindowType, QtWaylandClient::QWaylandWindow*)’:
/srcbuild/lirios-wayland/src/plugins/shellintegrations/fullscreen-shell/fullscreenshellsurface.cpp:46:50: error: ‘class QPlatformScreen’ has no member named ‘output’
                              m_window->screen()->output());
                                                  ^~~~~~
ERROR: Process failed with exit code 1.

Thanks

xdg_shell v6

We need to support xdg_shell v6 for Gtk+ applications.
This must be supported by QtWaylandCompositor, especially since QtWaylandClient already support the protocol for Qt clients.

Upstream work in progress patch: https://codereview.qt-project.org/#/c/178677/

We could write it ourselves but due to a bug in Qt 5.8.0 we can't have shell integrations outside the qtwayland source tree. The bug is fixed by this patch for 5.8.1 that is not reviewed yet: https://codereview.qt-project.org/#/c/183744/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.