configure.ac | 4 +++- vcl/qt5/Qt5Frame.cxx | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-)
New commits: commit 77a3c443d35c7d966217f02ea9189cb1819c7828 Author: Jan-Marek Glogowski <glo...@fbihome.de> AuthorDate: Fri Jun 14 00:46:32 2019 +0000 Commit: Jan-Marek Glogowski <glo...@fbihome.de> CommitDate: Sat Jun 15 02:37:28 2019 +0200 tdf#125921 Qt5 set WM_CLASS for top level windows Uses the same naming then the gtk3 backend, i.e. "libreoffice" for the instance name and different class names for the module windows, like "libreoffice-writer". These names are referenced in the desktop files a StartupWMClass and for example used to pin an app to the task bar. Change-Id: Ic9b8890536f6413ab59d2e0da866e2280ab3181a Reviewed-on: https://gerrit.libreoffice.org/74014 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de> diff --git a/configure.ac b/configure.ac index 42d4b8f5f7ea..dbced920a118 100644 --- a/configure.ac +++ b/configure.ac @@ -11145,7 +11145,9 @@ then QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network" if test "$USING_X11" = TRUE; then - QT5_LIBS="$QT5_LIBS -lQt5X11Extras" + PKG_CHECK_MODULES(QT5_XCB,[xcb],,[AC_MSG_ERROR([XCB not found, which is needed for correct app grouping in X11.])]) + QT5_CFLAGS="$QT5_CFLAGS $QT5_XCB_CFLAGS" + QT5_LIBS="$QT5_LIBS $QT5_XCB_LIBS -lQt5X11Extras" QT5_USING_X11=1 AC_DEFINE(QT5_USING_X11) fi diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx index 3951dbced768..49d68a1cd2f9 100644 --- a/vcl/qt5/Qt5Frame.cxx +++ b/vcl/qt5/Qt5Frame.cxx @@ -27,6 +27,7 @@ #include <Qt5MainWindow.hxx> #include <Qt5Menu.hxx> #include <Qt5SvpGraphics.hxx> +#include <Qt5System.hxx> #include <Qt5Tools.hxx> #include <Qt5Transferable.hxx> #include <Qt5Widget.hxx> @@ -47,6 +48,7 @@ #if QT5_USING_X11 #include <QtX11Extras/QX11Info> +#include <xcb/xproto.h> #endif #include <saldatabasic.hxx> @@ -1126,9 +1128,29 @@ void Qt5Frame::SetScreenNumber(unsigned int nScreen) } } -void Qt5Frame::SetApplicationID(const OUString&) +void Qt5Frame::SetApplicationID(const OUString& rWMClass) { - // So the hope is that QGuiApplication deals with this properly.. +#if QT5_USING_X11 + if (QGuiApplication::platformName() != "xcb" || !m_pTopLevel) + return; + + OString aResClass = OUStringToOString(rWMClass, RTL_TEXTENCODING_ASCII_US); + const char* pResClass + = !aResClass.isEmpty() ? aResClass.getStr() : SalGenericSystem::getFrameClassName(); + OString aResName = SalGenericSystem::getFrameResName(); + + // the WM_CLASS data consists of two concated cstrings, including the terminating '\0' chars + const uint32_t data_len = aResName.getLength() + 1 + strlen(pResClass) + 1; + char* data = new char[data_len]; + memcpy(data, aResName.getStr(), aResName.getLength() + 1); + memcpy(data + aResName.getLength() + 1, pResClass, strlen(pResClass) + 1); + + xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, m_pTopLevel->winId(), + XCB_ATOM_WM_CLASS, XCB_ATOM_STRING, 8, data_len, data); + delete[] data; +#else + (void)rWMClass; +#endif } // Drag'n'drop foo _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits