diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2014-03-10 15:05:22 +0000 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2014-03-14 23:44:12 +0100 |
commit | cc8d566d74a2e0b969b92d9cf22cc95a3bf31a98 (patch) | |
tree | a916b545f9d37ab8b100cc373ccc3aa9bde17b43 /configure.ac | |
parent | 516a8dedac9c3cb77cd26a740cf793b1cab920d0 (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
Change-Id: I5cad30ead74571e49a075c084cca7a19acff7523
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 92ca7dd700ab..cbe3f3b41eb4 100644 --- a/configure.ac +++ b/configure.ac @@ -11050,7 +11050,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" @@ -11137,8 +11137,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++]) @@ -11160,11 +11161,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) |