Also unset QT_SCALE_FACTOR
ClosedPublic

Authored by davidedmundson on Apr 3 2019, 7:03 PM.

Details

Summary

Qt scaling and kwin on X11 is never going to work so it is disabled.

However, Qt uses multiple environment variables for subtly different
internal things. We don't set QT_SCALE_FACTOR in Plasma, using different ones.

An XFCE user was setting this, which kinda makes sense if your DE doesn't
have an appropriate UI.

I don't think it's relevant for main_wayland as wl_output.scale should
trump the environment variable.

BUG: 406195

Diff Detail

Repository
R108 KWin
Branch
origin-master (branched from master)
Lint
Lint OK
Unit
No Unit Test Coverage
Build Status
Buildable 10407
Build 10425: arc lint + arc unit
davidedmundson created this revision.Apr 3 2019, 7:03 PM
Restricted Application added a project: KWin. · View Herald TranscriptApr 3 2019, 7:03 PM
Restricted Application added a subscriber: kwin. · View Herald Transcript
davidedmundson requested review of this revision.Apr 3 2019, 7:03 PM
zzag added a subscriber: zzag.Apr 3 2019, 7:16 PM

Why does KWin hang when that environment variable is set?

Relevant backtrace:

(gdb) bt
#0  0x00007f525bebc444 in _int_malloc () at /usr/lib/libc.so.6
#1  0x00007f525bebdada in malloc () at /usr/lib/libc.so.6
#2  0x00007f525bec149f in strdup () at /usr/lib/libc.so.6
#3  0x00007f5256363c26 in FcValueSave () at /usr/lib/libfontconfig.so.1
#4  0x00007f525634fe0c in  () at /usr/lib/libfontconfig.so.1
#5  0x00007f52563507b2 in  () at /usr/lib/libfontconfig.so.1
#6  0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#7  0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#8  0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#9  0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#10 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#11 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#12 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#13 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#14 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#15 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#16 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#17 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#18 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#19 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#20 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#21 0x00007f52563507ce in  () at /usr/lib/libfontconfig.so.1
#22 0x00007f5256350a1f in FcConfigSubstituteWithPat () at /usr/lib/libfontconfig.so.1
#23 0x00007f5256471eb1 in  () at /usr/lib/libQt5XcbQpa.so.5
#24 0x00007f525647285b in  () at /usr/lib/libQt5XcbQpa.so.5
#25 0x00007f525ca5293c in  () at /usr/lib/libQt5Gui.so.5
#26 0x00007f525ca53332 in QFontDatabase::findFont(QFontDef const&, int) () at /usr/lib/libQt5Gui.so.5
#27 0x00007f525ca3bf2d in QFontEngineMulti::loadEngine(int) () at /usr/lib/libQt5Gui.so.5
#28 0x00007f525ca3cb8f in QFontEngineMulti::ensureEngineAt(int) () at /usr/lib/libQt5Gui.so.5
#29 0x00007f525ca3cd54 in QFontEngineMulti::glyphIndex(unsigned int) const () at /usr/lib/libQt5Gui.so.5
#30 0x00007f525ca47a9c in QFontMetrics::boundingRect(QChar) const () at /usr/lib/libQt5Gui.so.5
#31 0x00007f525e739880 in KDecoration2::DecorationSettings::<lambda()>::operator()(void) const (__closure=0x7ffe6f13d6c8)
    at /home/vlad/Workspace/KDE/src/kde/workspace/kdecoration/src/decorationsettings.cpp:34
#32 0x00007f525e739a85 in KDecoration2::DecorationSettings::DecorationSettings(KDecoration2::DecorationBridge*, QObject*)
    (this=0x558f29c08540, bridge=0x558f29cc6220, parent=0x0) at /home/vlad/Workspace/KDE/src/kde/workspace/kdecoration/src/decorationsettings.cpp:48
#33 0x00007f525ff93d90 in QSharedPointer<KDecoration2::DecorationSettings>::create<KWin::Decoration::DecorationBridge*>(KWin::Decoration::DecorationBridge*&&)
    (arguments#0=@0x7ffe6f13d778: 0x558f29cc6220) at /usr/include/qt/QtCore/qsharedpointer_impl.h:445
#34 0x00007f525ff91a3c in KWin::Decoration::DecorationBridge::init() (this=0x558f29cc6220)
    at /home/vlad/Workspace/KDE/src/kde/workspace/kwin/decorations/decorationbridge.cpp:123
#35 0x00007f525fd99aa6 in KWin::Workspace::Workspace(QString const&) (this=0x558f29c7aea0, sessionKey=...)
    at /home/vlad/Workspace/KDE/src/kde/workspace/kwin/workspace.cpp:185
#36 0x00007f525fe75ac0 in KWin::Application::createWorkspace() (this=0x7ffe6f13e100) at /home/vlad/Workspace/KDE/src/kde/workspace/kwin/main.cpp:281
#37 0x00007f52601a470d in KWin::ApplicationX11::<lambda()>::<lambda()>::operator()(void) const (__closure=0x558f29cbc210)
    at /home/vlad/Workspace/KDE/src/kde/workspace/kwin/main_x11.cpp:253
#38 0x00007f52601a67ee in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, KWin::ApplicationX11::performStartup()::<lambda()>::<lambda()> >::call(KWin::ApplicationX11::<lambda()>::<lambda()> &, void **) (f=..., arg=0x7ffe6f13da50) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#39 0x00007f52601a66e0 in QtPrivate::Functor<KWin::ApplicationX11::performStartup()::<lambda()>::<lambda()>, 0>::call<QtPrivate::List<>, void>(KWin::ApplicationX11::<lambda()>::<lambda()> &, void *, void **) (f=..., arg=0x7ffe6f13da50) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#40 0x00007f52601a6556 in QtPrivate::QFunctorSlotObject<KWin::ApplicationX11::performStartup()::<lambda()>::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x558f29cbc200, r=0x7ffe6f13e100, a=0x7ffe6f13da50, ret=0x0)
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:439
#41 0x00007f525c5cf980 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/libQt5Core.so.5
#42 0x00007f525fd7e987 in KWin::Platform::screensQueried() (this=0x558f29bf3a80) at kwin_autogen/EWIEGA46WW/moc_platform.cpp:300
#43 0x00007f5254b3f61c in KWin::X11StandalonePlatform::init() (this=0x558f29bf3a80)
    at /home/vlad/Workspace/KDE/src/kde/workspace/kwin/plugins/platforms/x11/standalone/x11_platform.cpp:104
#44 0x00007f52601a495c in KWin::ApplicationX11::<lambda()>::operator()(void) const (__closure=0x558f29bf0b90)
    at /home/vlad/Workspace/KDE/src/kde/workspace/kwin/main_x11.cpp:266
#45 0x00007f52601a6920 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, KWin::ApplicationX11::performStartup()::<lambda()> >::call(KWin::ApplicationX11::<lambda()> &, void **) (f=..., arg=0x7ffe6f13dcc0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:146
#46 0x00007f52601a689a in QtPrivate::Functor<KWin::ApplicationX11::performStartup()::<lambda()>, 0>::call<QtPrivate::List<>, void>(KWin::ApplicationX11::<lambda()> &, void *, void **) (f=..., arg=0x7ffe6f13dcc0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:256
#47 0x00007f52601a678e in QtPrivate::QFunctorSlotObject<KWin::ApplicationX11::performStartup()::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=1, this_=0x558f29bf0b80, r=0x558f29bfbdd0, a=0x7ffe6f13dcc0, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:439
#48 0x00007f525c5cf980 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/libQt5Core.so.5
#49 0x00007f525d4a501f in KSelectionOwner::claimedOwnership() (this=0x558f29bfbdd0) at src/KF5WindowSystem_autogen/HBARIMPYTU/moc_kselectionowner.cpp:159
#50 0x00007f525d4b8345 in KSelectionOwner::Private::claimSucceeded() (this=0x558f29bfbdf0)
    at /home/vlad/Workspace/KDE/src/frameworks/kwindowsystem/src/platforms/xcb/kselectionowner.cpp:207
#51 0x00007f525d4b8475 in KSelectionOwner::Private::gotTimestamp() (this=0x558f29bfbdf0)
    at /home/vlad/Workspace/KDE/src/frameworks/kwindowsystem/src/platforms/xcb/kselectionowner.cpp:241
#52 0x00007f525d4b8ab2 in KSelectionOwner::filterEvent(void*) (this=0x558f29bfbdd0, ev_P=0x7f5250001710)
    at /home/vlad/Workspace/KDE/src/frameworks/kwindowsystem/src/platforms/xcb/kselectionowner.cpp:425
#53 0x00007f525d4b9475 in KSelectionOwner::Private::nativeEventFilter(QByteArray const&, void*, long*)
    (this=0x558f29bfbdf0, eventType=..., message=0x7f5250001710, result=0x7ffe6f13de88)
    at /home/vlad/Workspace/KDE/src/frameworks/kwindowsystem/src/platforms/xcb/kselectionowner.cpp:118
#54 0x00007f525c5a28bf in QAbstractEventDispatcher::filterNativeEvent(QByteArray const&, void*, long*) () at /usr/lib/libQt5Core.so.5
#55 0x00007f52563caab2 in QXcbConnection::handleXcbEvent(xcb_generic_event_t*) () at /usr/lib/libQt5XcbQpa.so.5
#56 0x00007f52563cb84e in QXcbConnection::processXcbEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5XcbQpa.so.5
#57 0x00007f52563f6d6e in  () at /usr/lib/libQt5XcbQpa.so.5
#58 0x00007f525c5a3a8c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#59 0x00007f525c5abde6 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
#60 0x00007f52601a5f35 in kdemain(int, char**) (argc=2, argv=0x7ffe6f13e2a8) at /home/vlad/Workspace/KDE/src/kde/workspace/kwin/main_x11.cpp:469
#61 0x0000558f28eb817b in main(int, char**) (argc=2, argv=0x7ffe6f13e2a8) at kwin_x11_dummy.cpp:3

(so for far it looks like an issue in the qpa, I might be completely wrong)

#30 0x00007f525ca47a9c in QFontMetrics::boundingRect(QChar) const () at /usr/lib/libQt5Gui.so.5

This will return something in logical pixels
Kwin will resize the decoration in device pixels

I can't tell you the exact loop but you've already got a corrupted state.

zzag accepted this revision.Apr 3 2019, 7:44 PM

#30 0x00007f525ca47a9c in QFontMetrics::boundingRect(QChar) const () at /usr/lib/libQt5Gui.so.5

Relevant code:

int gridUnit = QFontMetrics(font()).boundingRect(QLatin1Char('M')).height();

This will return something in logical pixels
Kwin will resize the decoration in device pixels

Hmm, KWin gets stuck in QFontMetrics::boundingRect, I don't see a loop here.

I can't tell you the exact loop but you've already got a corrupted state.

Agreed.

This revision is now accepted and ready to land.Apr 3 2019, 7:44 PM
zzag added a comment.Apr 3 2019, 7:51 PM

I wonder whether we should unset QT_SCREEN_SCALE_FACTORS as well.

This revision was automatically updated to reflect the committed changes.