no popups when Virtual Keyboard is included on RPI4
-
Hi,
I'm developing a Qt Wayland Compositor to launch applications on Raspberry Pi 4 with its official display, and I also need support for Virtual Keyboard (compositor-side). The back-end is eglfs.I'm starting with the
server-side-decoration
example, which is close to my needs, mixing it withpure-qml
to add Virtual Keyboard support.The virtual keyboard works as expected (
QT_IM_MODULE=qtvirtualkeyboard
is set for the compositor), but the popups (e.g. the entries of a dropdown menu) stop working. Or better: just a small 1x1 box is show at the top-left corner of the application. If I disable the loading of the virtual keyboard, they work fine again.In the logs I get:
virtual void QWaylandXdgPopupPrivate::xdg_popup_grab(QtWaylandServer::xdg_popup::Resource*, wl_resource*, uint32_t) Not implemented virtual void QWaylandXdgPopupPrivate::xdg_popup_destroy(QtWaylandServer::xdg_popup::Resource*) Not implemented
In the code I've included the virtual keyboard in the CMakeLists.txt file (find_package, target_link_libraries and resources) and then I have added this
keyboard.qml
file:import QtQuick import QtQuick.VirtualKeyboard InputPanel { visible: active y: active ? parent.height - height : parent.height anchors.left: parent.left anchors.right: parent.right }
The main.qml is quite simple; the path to the keyboard loader is
WaylandCompositor -> WaylandOutput.window=Window -> WaylandMouseTracker -> Loader
.The complete code:
import QtQuick import QtQuick.Window import QtQuick.Layouts import QtWayland.Compositor import QtWayland.Compositor.XdgShell WaylandCompositor { id: compositor WaylandOutput { id: output property bool isNestedCompositor: Qt.platform.pluginName.startsWith("wayland") || Qt.platform.pluginName === "xcb" sizeFollowsWindow: output.isNestedCompositor window: Window { id: win width: 800 height: 480 visible: true WaylandMouseTracker { id: mouseTracker anchors.fill: parent windowSystemCursorEnabled: output.isNestedCompositor Rectangle { id: background anchors.fill: parent gradient: "MorpheusDen" } Repeater { model: shellSurfaces // ![decoration] Column { id: chrome width: shellSurfaceItem.implicitWidth Rectangle { visible: modelData.toplevel.decorationMode === XdgToplevel.ServerSideDecoration width: parent.width height: 30 gradient: "HeavyRain"; Text { text: modelData.toplevel.title anchors.centerIn: parent } Item { anchors.right: parent.right width: 30 height: 30 Text { text: "X"; anchors.centerIn: parent } TapHandler { onTapped: modelData.toplevel.sendClose() } } DragHandler { target: chrome } } ShellSurfaceItem { id: shellSurfaceItem moveItem: parent shellSurface: modelData onSurfaceDestroyed: shellSurfaces.remove(index) } } // ![decoration] } // Virtual Keyboard // ![keyboard] Loader { anchors.fill: parent source: "keyboard.qml" } // ![keyboard] } } } // ![XdgShell] XdgShell { onToplevelCreated: (toplevel, xdgSurface) => shellSurfaces.append({shellSurface: xdgSurface}); } XdgDecorationManagerV1 { preferredMode: XdgToplevel.ServerSideDecoration } // ![XdgShell] ListModel { id: shellSurfaces } TextInputManager {} QtTextInputMethodManager {} }
When I click a dropdown menu, the result is this (notice the pixels at the top-left corner of the application window); the virtual keyboard was correctly closed:
Any idea about what I'm doing wrong?
Thanks in advance!
-
Hello,
I ran into the same log error messages, when handling a ComboBox in a Qt program running on a custom Compositor. @ulmstefan any outcome to this?