[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - 3 commits - bin/check-elf-dynamic-objects config_host/config_vclplug.h.in configure.ac vcl/inc vcl/qt5 vcl/unx

Michael Weghorn (via logerrit) logerrit at kemper.freedesktop.org
Tue Jun 18 05:36:51 UTC 2019


 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.weghorn at posteo.de>
AuthorDate: Sat Jun 15 07:28:07 2019 +0200
Commit:     Michael Weghorn <m.weghorn at 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.weghorn at 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.weghorn at 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 <glogow at fbihome.de>
AuthorDate: Fri Jun 14 00:46:32 2019 +0000
Commit:     Michael Weghorn <m.weghorn at 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 <glogow at fbihome.de>
    (cherry picked from commit 77a3c443d35c7d966217f02ea9189cb1819c7828)
    Reviewed-on: https://gerrit.libreoffice.org/74082
    Reviewed-by: Michael Weghorn <m.weghorn at 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 <glogow at fbihome.de>
AuthorDate: Fri Jun 14 02:08:22 2019 +0000
Commit:     Michael Weghorn <m.weghorn at 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 <glogow at 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.weghorn at 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(); }


More information about the Libreoffice-commits mailing list