diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2014-03-10 15:05:22 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-03-22 15:09:25 +0000 |
commit | f13a93eef2b860ce14d036e6657a6ed8dbfe3651 (patch) | |
tree | 0e7f914ae45da5fc537b806ba71bc6ff9a15dc44 /configure.ac | |
parent | 7f16f6b83cb0f4db3fd301304d55c599ff0a2edd (diff) |
KDE4: add Qt4 glib ExcludeSocket runtime check
Add a runtime check and configure warning to disable KDE4 native
file pickers, if the Qt4 glib dispatcher doesn't honor the
QEventLoop::ExcludeSocketNotifiers flag.
This way polling the QClipboard using the event loop won't
crash LibreOffice with recursive paint events,
See https://bugreports.qt-project.org/browse/QTBUG-37380
(cherry picked from commit cc8d566d74a2e0b969b92d9cf22cc95a3bf31a98)
Change-Id: I48795deef82eaf6f95a4e518baea66c52f0b7400
Reviewed-on: https://gerrit.libreoffice.org/8708
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/configure.ac b/configure.ac index 50f116224fda..f36cbaf747e2 100644 --- a/configure.ac +++ b/configure.ac @@ -11126,7 +11126,7 @@ if test "$test_kde4" = "yes" -a "$ENABLE_KDE4" = "TRUE"; then fi qt_test_include="Qt/qobject.h" - qt_test_library="libQtCore.so" + qt_test_library="libQtNetwork.so" kde_test_include="kwindowsystem.h" kde_test_library="libsolid.so" @@ -11213,8 +11213,9 @@ the root of your Qt installation by exporting QT4DIR before running "configure". AC_MSG_ERROR([KDE4 libraries not found. Please specify the root of your KDE4 installation by exporting KDE4DIR before running "configure".]) fi - KDE4_CFLAGS="`pkg-config --cflags QtCore` `pkg-config --cflags QtGui` -I$kde_incdir -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT" - KDE4_LIBS="-L$kde_libdir -L$qt_lib_dir -lkio -lkfile -lkdeui -lkdecore -lQtCore -lQtGui" + PKG_CHECK_MODULES([QT4],[QtNetwork QtGui]) + KDE4_CFLAGS="-I$kde_incdir $QT4_CFLAGS -DQT_CLEAN_NAMESPACE -DQT_THREAD_SUPPORT" + KDE4_LIBS="-L$kde_libdir -lkio -lkfile -lkdeui -lkdecore -L$qt_lib_dir $QT4_LIBS" KDE4_CFLAGS=$(printf '%s' "$KDE4_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") AC_LANG_PUSH([C++]) @@ -11236,11 +11237,47 @@ int main(int argc, char **argv) { # Sets also KDE_GLIB_CFLAGS/KDE_GLIB_LIBS if successful. PKG_CHECK_MODULES(KDE_GLIB,[glib-2.0 >= 2.4], [ - KDE_HAVE_GLIB=1 - AC_DEFINE(KDE_HAVE_GLIB,1) - KDE_GLIB_CFLAGS=$(printf '%s' "$KDE_GLIB_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") + KDE_HAVE_GLIB=1 + AC_DEFINE(KDE_HAVE_GLIB,1) + KDE_GLIB_CFLAGS=$(printf '%s' "$KDE_GLIB_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g") + + AC_LANG_PUSH([C++]) + save_CXXFLAGS=$CXXFLAGS + CXXFLAGS="$CXXFLAGS $KDE4_CFLAGS" + save_LIBS=$LIBS + LIBS="$LIBS $KDE4_LIBS" + AC_MSG_CHECKING([whether Qt has fixed ExcludeSocketNotifiers]) + + # Prepare meta object data + TSTBASE="tst_exclude_socket_notifiers" + TSTMOC="${SRC_ROOT}/vcl/unx/kde4/${TSTBASE}" + ln -fs "${TSTMOC}.hxx" + $MOC4 "${TSTBASE}.hxx" -o "${TSTBASE}.moc" + + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include "tst_exclude_socket_notifiers.moc" + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + exit(tst_processEventsExcludeSocket()); + return 0; +} + ]])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([native KDE4 file pickers will be disabled at runtime - fix your Qt4 library!]) + ]) + + # Remove meta object data + rm -f "${TSTBASE}."* + + LIBS=$save_LIBS + CXXFLAGS=$save_CXXFLAGS + AC_LANG_POP([C++]) ], - AC_MSG_WARN([[No Glib found, KDE4 support will not integrate with Qt's Glib event loop support]])) + AC_MSG_WARN([[No Glib found, KDE4 support will not use native file pickers!]])) fi AC_SUBST(KDE4_CFLAGS) AC_SUBST(KDE4_LIBS) |