diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp index df458e85d7..0b9f5d1177 100644 --- a/src/plugins/platforms/xcb/qxcbscreen.cpp +++ b/src/plugins/platforms/xcb/qxcbscreen.cpp @@ -531,6 +531,7 @@ void QXcbScreen::windowShown(QXcbWindow *window) { // Freedesktop.org Startup Notification if (!connection()->startupId().isEmpty() && window->window()->isTopLevel()) { + window->setStartupId(connection()->startupId()); sendStartupMessage(QByteArrayLiteral("remove: ID=") + connection()->startupId()); connection()->clearStartupId(); } diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index c65fab449f..021ae98741 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -273,6 +273,8 @@ static QWindow *childWindowAt(QWindow *win, const QPoint &p) static const char *wm_window_type_property_id = "_q_xcb_wm_window_type"; static const char *wm_window_role_property_id = "_q_xcb_wm_window_role"; +static const char *wm_window_startup_id = "_NET_STARTUP_ID"; + QXcbWindow::QXcbWindow(QWindow *window) : QPlatformWindow(window) @@ -1667,6 +1669,11 @@ void QXcbWindow::setWmWindowRoleStatic(QWindow *window, const QByteArray &role) window->setProperty(wm_window_role_property_id, role); } +void QXcbWindow::setStartupId(QWindow *window, const QByteArray &id) +{ + window->setProperty(wm_window_startup_id, id); +} + uint QXcbWindow::visualIdStatic(QWindow *window) { if (window && window->handle()) diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h index cb8af9e666..50de02e4d4 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.h +++ b/src/plugins/platforms/xcb/qxcbwindow.h @@ -182,6 +182,8 @@ public: virtual void create(); virtual void destroy(); + void setStartupId(const QByteArray &id); + static QString windowTitle(const QXcbConnection *conn, xcb_window_t window); public Q_SLOTS: