[Libreoffice] Solving an introduced runtime dependency on unreleased Qt version (KDE4 vcl backend)
Lubos Lunak
l.lunak at suse.cz
Tue Nov 22 09:26:47 PST 2011
This might be also also for packagers, do we have a place where to reach
them?
Since 3.4 at least, when run with KDE4 integration, LO kind of happens to
have a runtime dependency on a yet unreleased Qt version, otherwise LO will
abort during some reasonably commonplace operations, such as drag&drop of
cells in Calc (https://bugs.freedesktop.org/show_bug.cgi?id=40298).
The primary reason for this is that historically Qt used to be a toolkit for
single-threaded use, building more of thread-safety over the time, and the
widgets are not supposed to be used from more threads even by now, AFAIK.
That doesn't quite fit with LO, which occassionally will do UI stuff even
from other threads. In a nutshell, drag&drop is handled in LO by a separate
thread and can result in some UI changes, such as drawing a progressbar. I
some time ago noticed the progressbar wasn't themed properly by the KDE4
backend (possibly for this reason) and fixed that. But the QPixmap class
actually checks whether it's used from the main thread or not and that's what
triggers the bug linked to above.
Now, the catch is that I of course noticed the bugreport and fixed it, but I
use a development snapshot of Qt (to-become 4.8), which does not work with
the latest 4.7.4 release or older. We've already made LO releases with this
problem and e.g. the latest openSUSE release has this problem too.
The only actual problem appears to be the check in QPixmap, as the feature of
the 4.8 snapshot that enabled me to avoid the problem pretty much only gives
a way to avoid the check, as long as XInitThreads() has been called. Qt4.8
documentation still does not mark the class as reentrant or thread-safe, but
given the change I don't see why it shouldn't be reentrant. So my fix for
openSUSE will be to backport the Qt change to the shipped Qt package.
I'm not sure what to do about upstream LO though. The ideal solution is for
everybody to get an updated Qt package, but I don't know what packagers think
about that. I could also change the progressbar integration fix to somehow
detect when it is safe to use, but that may be just papering the problem
over, as I cannot guarantee there are no other ways to trigger the Qt check.
I also don't know how exactly thread safety is supposed to work in LO, so I
cannot quite guess. I've been told that VCL only works with Solar mutex
grabbed, which means that Qt usage from it should be safe, if the way to
avoid the QPixmap check is avoided. But there are other UI elements in LO,
such as the fpicker, which AFAIK are not triggered using VCL and I don't know
how that is supposed to work.
What do you suggest to do about it?
PS: I've attached a backport of the Qt change to
https://bugs.freedesktop.org/show_bug.cgi?id=40298 .
--
Lubos Lunak
l.lunak at suse.cz
More information about the LibreOffice
mailing list