summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2019-06-14 00:46:32 +0000
committerMichael Weghorn <m.weghorn@posteo.de>2019-06-18 07:36:13 +0200
commitd7b88e962f8907b00eef648e7d69f2cd20f51ac8 (patch)
tree82b690c58eb64f5ea5362b98fe8d78076fd31652
parent3ff31faa48c12c33c9c3fafae8fc35201fa5d614 (diff)
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 <glogow@fbihome.de> (cherry picked from commit 77a3c443d35c7d966217f02ea9189cb1819c7828) Reviewed-on: https://gerrit.libreoffice.org/74082 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> (cherry picked from commit 1a1e13333e8145c7a78ddb23b540b0832cadd446) Reviewed-on: https://gerrit.libreoffice.org/74193
-rw-r--r--configure.ac4
-rw-r--r--vcl/qt5/Qt5Frame.cxx26
2 files changed, 27 insertions, 3 deletions
diff --git a/configure.ac b/configure.ac
index da4ee3eb1a95..0ff53b7aa6f7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -11297,7 +11297,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 2f548fc6eae3..1ded558d0664 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 <Qt5Widget.hxx>
@@ -46,6 +47,7 @@
#if QT5_USING_X11
#include <QtX11Extras/QX11Info>
+#include <xcb/xproto.h>
#endif
#include <saldatabasic.hxx>
@@ -1177,9 +1179,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