bin/check-elf-dynamic-objects | 8 +++--- config_host/config_vclplug.h.in | 2 + configure.ac | 16 +++++++----- vcl/inc/qt5/Qt5Frame.hxx | 22 ++++++++++++++++ vcl/qt5/Qt5Frame.cxx | 52 +++++++++++++++++++++++++++++++++++----- vcl/unx/kde5/KDE5SalFrame.cxx | 17 ------------- vcl/unx/kde5/KDE5SalFrame.hxx | 5 --- 7 files changed, 84 insertions(+), 38 deletions(-)
New commits: commit bed632513d7e2495b5f7622c214f0163d75babff Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Sat Jun 15 07:28:07 2019 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jun 18 07:36:18 2019 +0200 check-elf-dynamic-objects: Update 'qt5whitelist' This needs 'libgobject-2.0.so.0' and 'libxcb.so.1' as well now, since a6201725d760cbce832d4de029b418bb7334df6a ("Don't link avmediagst with gtk3 and qt5") and 77a3c443d35c7d966217f02ea9189cb1819c7828 ("tdf#125921 Qt5 set WM_CLASS for top level windows"). Reviewed-on: https://gerrit.libreoffice.org/74085 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> (cherry picked from commit 365df1880a5bfacf25beddefc9206a783e6a4877) Reviewed-on: https://gerrit.libreoffice.org/74089 Change-Id: I453cede879eda8470a45c48f789a0419866fcb79 Reviewed-on: https://gerrit.libreoffice.org/74194 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> Tested-by: Jenkins diff --git a/bin/check-elf-dynamic-objects b/bin/check-elf-dynamic-objects index a2bb41b3548b..8848207855f5 100755 --- a/bin/check-elf-dynamic-objects +++ b/bin/check-elf-dynamic-objects @@ -97,7 +97,7 @@ gstreamerwhitelist="libgstpbutils-1.0.so.0 libgstvideo-1.0.so.0 libgstbase-1.0.s gtk2whitelist="libgtk-x11-2.0.so.0 libgdk-x11-2.0.so.0 libpangocairo-1.0.so.0 libfribidi.so.0 libatk-1.0.so.0 libcairo.so.2 libgio-2.0.so.0 libpangoft2-1.0.so.0 libpango-1.0.so.0 libfontconfig.so.1 libfreetype.so.6 libgdk_pixbuf-2.0.so.0 libgobject-2.0.so.0 libglib-2.0.so.0 libgmodule-2.0.so.0 libgthread-2.0.so.0 libdbus-glib-1.so.2 libdbus-1.so.3" gtk3whitelist="libgtk-3.so.0 libgdk-3.so.0 libcairo-gobject.so.2 libpangocairo-1.0.so.0 libfribidi.so.0 libatk-1.0.so.0 libcairo.so.2 libgio-2.0.so.0 libpangoft2-1.0.so.0 libpango-1.0.so.0 libfontconfig.so.1 libfreetype.so.6 libgdk_pixbuf-2.0.so.0 libgobject-2.0.so.0 libglib-2.0.so.0 libgmodule-2.0.so.0 libgthread-2.0.so.0 libdbus-glib-1.so.2 libdbus-1.so.3" kde4whitelist="libkio.so.5 libkfile.so.4 libkdeui.so.5 libkdecore.so.5 libQtNetwork.so.4 libQtGui.so.4 libQtCore.so.4 libglib-2.0.so.0" -qt5whitelist="libQt5Core.so.5 libQt5Gui.so.5 libQt5Network.so.5 libQt5Widgets.so.5 libQt5X11Extras.so.5 libcairo.so.2 libglib-2.0.so.0" +qt5whitelist="libQt5Core.so.5 libQt5Gui.so.5 libQt5Network.so.5 libQt5Widgets.so.5 libQt5X11Extras.so.5 libcairo.so.2 libglib-2.0.so.0 libxcb.so.1" kf5whitelist="libKF5ConfigCore.so.5 libKF5CoreAddons.so.5 libKF5I18n.so.5 libKF5KIOCore.so.5 libKF5KIOFileWidgets.so.5 libKF5KIOWidgets.so.5 libKF5WindowSystem.so.5" avahiwhitelist="libdbus-glib-1.so.2 libdbus-1.so.3 libgobject-2.0.so.0 libgmodule-2.0.so.0 libgthread-2.0.so.0 libglib-2.0.so.0 libavahi-common.so.3 libavahi-client.so.3" kerberoswhitelist="libgssapi_krb5.so.2 libcom_err.so.2 libkrb5.so.3" @@ -131,7 +131,7 @@ local file="$1" ;; */libvclplug_kde5lo.so|*/libkde5be1lo.so) if [ "$ENABLE_KDE5" = TRUE ]; then - whitelist="${whitelist} ${qt5whitelist} ${kf5whitelist} libxcb.so.1" + whitelist="${whitelist} ${qt5whitelist} ${kf5whitelist}" fi ;; */libvclplug_gtklo.so|*/libqstart_gtklo.so|*/updater) @@ -147,13 +147,13 @@ local file="$1" ;; */libvclplug_gtk3_kde5lo.so) if [ "$ENABLE_GTK3_KDE5" = TRUE ]; then - whitelist="${whitelist} ${x11whitelist} ${gtk3whitelist} ${qt5whitelist} ${kf5whitelist} libxcb.so.1" + whitelist="${whitelist} ${x11whitelist} ${gtk3whitelist} ${qt5whitelist} ${kf5whitelist}" fi ;; */lo_kde5filepicker) if [ "$ENABLE_GTK3_KDE5" = TRUE ]; then whitelist="${whitelist} ${x11whitelist} ${gtk3whitelist} ${qt5whitelist} \ - ${kf5whitelist} libxcb.so.1" + ${kf5whitelist}" fi ;; */libdesktop_detectorlo.so|*/ui-previewer|*/oosplash|*/gengal.bin) commit d7b88e962f8907b00eef648e7d69f2cd20f51ac8 Author: Jan-Marek Glogowski <glo...@fbihome.de> AuthorDate: Fri Jun 14 00:46:32 2019 +0000 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jun 18 07:36:13 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> (cherry picked from commit 77a3c443d35c7d966217f02ea9189cb1819c7828) Reviewed-on: https://gerrit.libreoffice.org/74082 Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> (cherry picked from commit 1a1e13333e8145c7a78ddb23b540b0832cadd446) Reviewed-on: https://gerrit.libreoffice.org/74193 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 commit 3ff31faa48c12c33c9c3fafae8fc35201fa5d614 Author: Jan-Marek Glogowski <glo...@fbihome.de> AuthorDate: Fri Jun 14 02:08:22 2019 +0000 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jun 18 07:36:08 2019 +0200 KDE5 move screensafer inhibiting code into Qt5 There will presumably be more X11 specific code later to implement some "fix" for tdf#119202. Moving the screensafer inhibitor is rather uncontroversial in comparion, so start with it and use it to carry the matching configure.ac changes. A little "nightmare" are all the clashing X11 / Qt type undefs, but I couldn't find a better solution while the inhibitor continues to include the X11 headers in it's header. Reviewed-on: https://gerrit.libreoffice.org/74015 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de> (cherry picked from commit b5323c72ff7e5bcde34089e49fe98e589dcc5acb) Change-Id: I55c89c76726d30a890178488484e954207267e89 Reviewed-on: https://gerrit.libreoffice.org/74081 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> (cherry picked from commit 9c37c306158267d942a0a1debc3845db1c923ceb) Reviewed-on: https://gerrit.libreoffice.org/74192 diff --git a/config_host/config_vclplug.h.in b/config_host/config_vclplug.h.in index be9c136245ee..21200e57c9bd 100644 --- a/config_host/config_vclplug.h.in +++ b/config_host/config_vclplug.h.in @@ -12,4 +12,6 @@ Settings about which X11 desktops have support enabled. #define ENABLE_KDE5 0 #define ENABLE_GTK3_KDE5 0 +#define QT5_USING_X11 0 + #endif diff --git a/configure.ac b/configure.ac index 26afca7b4535..da4ee3eb1a95 100644 --- a/configure.ac +++ b/configure.ac @@ -11296,6 +11296,12 @@ then QT5_CFLAGS=$(printf '%s' "$QT5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") QT5_LIBS="-L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network" + if test "$USING_X11" = TRUE; then + QT5_LIBS="$QT5_LIBS -lQt5X11Extras" + QT5_USING_X11=1 + AC_DEFINE(QT5_USING_X11) + fi + dnl Check for Meta Object Compiler AC_PATH_PROGS( MOC5, [moc-qt5 moc], no, [`dirname $qt5_libdir`/bin:$QT5DIR/bin:$PATH] ) @@ -11384,12 +11390,8 @@ then AC_MSG_ERROR([KF5 libraries not found. Please specify the root of your KF5 installation by exporting KF5DIR before running "configure".]) fi - if test "$USING_X11" = TRUE; then - PKG_CHECK_MODULES(KF5_XCB,[xcb],,[AC_MSG_ERROR([XCB not installed])]) - fi - - KF5_CFLAGS="-I$kf5_incdir -I$kf5_incdir/KCoreAddons -I$kf5_incdir/KI18n -I$kf5_incdir/KConfigCore -I$kf5_incdir/KWindowSystem -I$kf5_incdir/KIOCore -I$kf5_incdir/KIOWidgets -I$kf5_incdir/KIOFileWidgets -I$qt5_incdir -I$qt5_incdir/QtCore -I$qt5_incdir/QtGui -I$qt5_incdir/QtWidgets -I$qt5_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT $KF5_XCB_CFLAGS" - KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network $KF5_XCB_LIBS" + KF5_CFLAGS="-I$kf5_incdir -I$kf5_incdir/KCoreAddons -I$kf5_incdir/KI18n -I$kf5_incdir/KConfigCore -I$kf5_incdir/KWindowSystem -I$kf5_incdir/KIOCore -I$kf5_incdir/KIOWidgets -I$kf5_incdir/KIOFileWidgets -I$qt5_incdir -I$qt5_incdir/QtCore -I$qt5_incdir/QtGui -I$qt5_incdir/QtWidgets -I$qt5_incdir/QtNetwork -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT" + KF5_LIBS="-L$kf5_libdir -lKF5CoreAddons -lKF5I18n -lKF5ConfigCore -lKF5WindowSystem -lKF5KIOCore -lKF5KIOWidgets -lKF5KIOFileWidgets -L$qt5_libdir -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Network" KF5_CFLAGS=$(printf '%s' "$KF5_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") if test "$USING_X11" = TRUE; then diff --git a/vcl/inc/qt5/Qt5Frame.hxx b/vcl/inc/qt5/Qt5Frame.hxx index 26d44cb80c8e..58b72e484afe 100644 --- a/vcl/inc/qt5/Qt5Frame.hxx +++ b/vcl/inc/qt5/Qt5Frame.hxx @@ -19,6 +19,8 @@ #pragma once +#include <config_vclplug.h> + #include <salframe.hxx> #include <vclpluginapi.h> @@ -30,6 +32,22 @@ #include <QtCore/QObject> +#if QT5_USING_X11 +#include <unx/screensaverinhibitor.hxx> +// any better way to get rid of the X11 / Qt type clashes? +#undef Bool +#undef CursorShape +#undef Expose +#undef KeyPress +#undef KeyRelease +#undef FocusIn +#undef FocusOut +#undef FontChange +#undef None +#undef Status +#undef Unsorted +#endif + class Qt5DragSource; class Qt5DropTarget; class Qt5Graphics; @@ -86,6 +104,10 @@ class VCLPLUG_QT5_PUBLIC Qt5Frame : public QObject, public SalFrame sal_uInt32 m_nRestoreScreen; QRect m_aRestoreGeometry; +#if QT5_USING_X11 + ScreenSaverInhibitor m_ScreenSaverInhibitor; +#endif + void Center(); Size CalcDefaultSize(); void SetDefaultSize(); diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx index f5f7e52b2764..2f548fc6eae3 100644 --- a/vcl/qt5/Qt5Frame.cxx +++ b/vcl/qt5/Qt5Frame.cxx @@ -44,6 +44,10 @@ #include <QtWidgets/QMenuBar> #include <QtWidgets/QMainWindow> +#if QT5_USING_X11 +#include <QtX11Extras/QX11Info> +#endif + #include <saldatabasic.hxx> #include <window.h> #include <vcl/layout.hxx> @@ -693,11 +697,25 @@ void Qt5Frame::ShowFullScreen(bool bFullScreen, sal_Int32 nScreen) } } -void Qt5Frame::StartPresentation(bool) +void Qt5Frame::StartPresentation(bool bStart) { - // meh - so there's no Qt platform independent solution - defer to - // KDE5 impl. For everyone else: - // https://forum.qt.io/topic/38504/solved-qdialog-in-fullscreen-disable-os-screensaver +// meh - so there's no Qt platform independent solution +// https://forum.qt.io/topic/38504/solved-qdialog-in-fullscreen-disable-os-screensaver +#if QT5_USING_X11 + boost::optional<unsigned int> aRootWindow; + boost::optional<Display*> aDisplay; + + if (QX11Info::isPlatformX11()) + { + aRootWindow = QX11Info::appRootWindow(); + aDisplay = QX11Info::display(); + } + + m_ScreenSaverInhibitor.inhibit(bStart, "presentation", QX11Info::isPlatformX11(), aRootWindow, + aDisplay); +#else + (void)bStart; +#endif } void Qt5Frame::SetAlwaysOnTop(bool bOnTop) diff --git a/vcl/unx/kde5/KDE5SalFrame.cxx b/vcl/unx/kde5/KDE5SalFrame.cxx index c195b641e119..728ca1461537 100644 --- a/vcl/unx/kde5/KDE5SalFrame.cxx +++ b/vcl/unx/kde5/KDE5SalFrame.cxx @@ -20,11 +20,9 @@ #include <memory> #include <QtGui/QColor> #include <QtWidgets/QStyle> -#include <QtCore/QDebug> #include <QtWidgets/QToolTip> #include <QtWidgets/QApplication> #include <QtWidgets/QMenuBar> -#include <QtX11Extras/QX11Info> #include <KConfig> #include <KConfigGroup> @@ -222,19 +220,4 @@ void KDE5SalFrame::ReleaseGraphics(SalGraphics* pSalGraph) m_bGraphicsInUse = false; } -void KDE5SalFrame::StartPresentation(bool bStart) -{ - // disable screensaver for running preso - boost::optional<unsigned int> aWindow; - boost::optional<Display*> aDisplay; - if (QX11Info::isPlatformX11()) - { - aWindow = QX11Info::appRootWindow(); - aDisplay = QX11Info::display(); - } - - m_ScreenSaverInhibitor.inhibit(bStart, "presentation", QX11Info::isPlatformX11(), aWindow, - aDisplay); -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/unx/kde5/KDE5SalFrame.hxx b/vcl/unx/kde5/KDE5SalFrame.hxx index 441039829846..4b609bdf85a2 100644 --- a/vcl/unx/kde5/KDE5SalFrame.hxx +++ b/vcl/unx/kde5/KDE5SalFrame.hxx @@ -21,10 +21,7 @@ #include <memory> -#undef Status - #include <qt5/Qt5Frame.hxx> -#include <unx/screensaverinhibitor.hxx> #include "KDE5SalGraphics.hxx" @@ -35,7 +32,6 @@ class KDE5SalFrame : public Qt5Frame { private: std::unique_ptr<KDE5SalGraphics> m_pKDE5Graphics; - ScreenSaverInhibitor m_ScreenSaverInhibitor; bool m_bGraphicsInUse; public: @@ -45,7 +41,6 @@ public: virtual void ReleaseGraphics(SalGraphics* pGraphics) override; virtual void UpdateSettings(AllSettings& rSettings) override; - virtual void StartPresentation(bool bStart) override; virtual LanguageType GetInputLanguage() override { return LANGUAGE_SYSTEM; } virtual SalPointerState GetPointerState() override { return SalPointerState(); } virtual KeyIndicatorState GetIndicatorState() override { return KeyIndicatorState(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits