Comment 0 for bug 1290514

Revision history for this message
Jan-Marek Glogowski (jmglogow) wrote :

Distribution: Kubuntu 12.04
Package: qt4-x11 4:4.8.1-0ubuntu4.6
Program: LibreOffice 4.3 (current master build).

This bugs origin is a crash when using KDE4 native file picker dialogs from within LibreOffice [1].

There are several similar ones in all distributions.

In the backtrace you can see, that LO calls the Qt event dispatcher, which processes a draw event, which - at some point - waits for the clipboard using the Qt / LO event loop, which processes another (now nested) draw event -> crash.

This happens, because LO sets
  qApp->clipboard()->setProperty( "useEventLoopWhenWaiting", true );
because the X11 event processing in clipboardWaitForEvents would interfere with the LO X11 handling / locking.

QX11Data::clipboardWaitForEvents (gui/kernel/qclipboard_x11.cpp:520) actually installs the correct clipboard event filter in the qapp, which should just handle Clipboard events.

But actually the Qt internal glib event loop doesn't honor the QEventLoop::ExcludeSocketNotifiers (see src/corelib/kernel/qeventdispatcher_glib.cpp).

Originally I opened [2], because I didn't want to deep dive into the Qt codebase. Since I didn't get any usable replies and all my implemented workarounds in LibreOffice didn't work I tried to understand the backtrace from [2] and realized the missing QEventLoop::ExcludeSocketNotifiers handling in the Qt glib code. I opened [3] and pushed a patch for Qt review as [4].

[1] https://bugs.freedesktop.org/show_bug.cgi?id=69002
[2] https://bugreports.qt-project.org/browse/QTBUG-34614
[3] https://bugreports.qt-project.org/browse/QTBUG-37380
[4] https://codereview.qt-project.org/#change,80528