From f602191778cce57a67fdeffe5f3cc0e1cd2c7b53 Mon Sep 17 00:00:00 2001 From: Johan Klokkhammer Helsing Date: Fri, 21 Dec 2018 15:24:49 +0100 Subject: Client xdg-shell v5: Fix crash when creating a popup without a valid parent Fixes: QTBUG-72696 Change-Id: I43f0a02a4447238aa93142981d22597c452790fd Reviewed-by: Paul Olav Tvete --- .../xdg-shell-v5/qwaylandxdgshellv5integration.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp') diff --git a/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp b/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp index 12cc95b15..410f27001 100644 --- a/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp +++ b/src/plugins/shellintegration/xdg-shell-v5/qwaylandxdgshellv5integration.cpp @@ -73,10 +73,15 @@ bool QWaylandXdgShellV5Integration::initialize(QWaylandDisplay *display) QWaylandShellSurface *QWaylandXdgShellV5Integration::createShellSurface(QWaylandWindow *window) { QWaylandInputDevice *inputDevice = window->display()->lastInputDevice(); - if (window->window()->type() == Qt::WindowType::Popup && inputDevice) - return m_xdgShell->createXdgPopup(window, inputDevice); - else - return m_xdgShell->createXdgSurface(window); + if (window->window()->type() == Qt::WindowType::Popup && inputDevice) { + if (auto *popup = m_xdgShell->createXdgPopup(window, inputDevice)) + return popup; + + qWarning(lcQpaWayland) << "Failed to create xdg-popup v5 for window" << window->window() + << "falling back to creating an xdg-surface"; + } + + return m_xdgShell->createXdgSurface(window); } void QWaylandXdgShellV5Integration::handleKeyboardFocusChanged(QWaylandWindow *newFocus, QWaylandWindow *oldFocus) { -- cgit v1.2.3