Tested a bit on macOS and Linux (Fedora 44 KDE, Wayland and XWayland). I might still update this later.
- Wayland: Pop-up windows
Hovering over the resources in Resources Manager gives instead of a tooltip
qt.qpa.wayland: Failed to create popup. Ensure popup QWidgetWindow(0x55a6ece08380, name="KoItemToolTipClassWindow") has a transientParent set., until clicking on the window. Same thing happens for the layers’ tooltips (NodeToolTipClassWindow).
On Qt6.8 the tooltip would pop-up and instantly close (bug 515578).
On Qt6.11 with XWayland, the tooltips work normally except for the bug where they resize oddly (bug 515577 - though they no longer stretch oddly with Qt6.11 on macOS).
- Wayland: MDI windows
The bug where the canvas doesn’t switch when switching tabs/subwindows is still present (bug 515438).
- Drag-and-drop in the Layers docker:
I managed to crash Krita while drag-and-dropping multiple layers selected with Ctrl (well, Cmd). Only on Qt6.11, but it could just be that it’s difficult to reproduce consistently.
Two different backtraces. (First backtrace is from my build, but also reproduced on this package.)
Layer moving crash backtrace 1
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_platform.dylib 0x19932d3e0 _platform_memmove + 288
1 kritaanimationdocker.so 0x135077660 QtPrivate::QPodArrayOps<KisNodeDummy*>::erase(KisNodeDummy**, long long) + 44 (qarraydataops.h:185) [inlined]
2 kritaanimationdocker.so 0x135077660 QList<KisNodeDummy*>::remove(long long, long long) + 84 (qlist.h:877) [inlined]
3 kritaanimationdocker.so 0x135077660 TimelineNodeListKeeper::slotBeginRemoveDummy(KisNodeDummy*) + 272 (timeline_node_list_keeper.cpp:210)
4 QtCore 0x10beba164 void doActivate<false>(QObject*, int, void**) + 1440
5 libkritaui.21.0.0.dylib 0x10712f254 void QMetaObject::activate<void, KisNodeDummy*>(QObject*, QMetaObject const*, int, void*, KisNodeDummy* const&) + 24 (qobjectdefs.h:319) [inlined]
6 libkritaui.21.0.0.dylib 0x10712f254 KisDummiesFacadeBase::sigBeginRemoveDummy(KisNodeDummy*) + 60 (moc_kis_dummies_facade_base.cpp:218)
7 libkritaui.21.0.0.dylib 0x107282464 KisDummiesFacadeBase::slotContinueRemoveNode(KisSharedPtr<KisNode>) + 128 (kis_dummies_facade_base.cpp:222)
8 libkritaui.21.0.0.dylib 0x1072852c0 boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>::operator()(KisDummiesFacadeBase*, KisSharedPtr<KisNode>) const + 48 (mem_fn_template.hpp:165) [inlined]
9 libkritaui.21.0.0.dylib 0x1072852c0 void boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>::operator()<boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::rrlist1<KisSharedPtr<KisNode>>>(boost::_bi::type<void>, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>&, boost::_bi::rrlist1<KisSharedPtr<KisNode>>&, int) + 92 (bind.hpp:298)
10 libkritaui.21.0.0.dylib 0x1072851e8 void boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>::operator()<KisSharedPtr<KisNode>>(KisSharedPtr<KisNode>&&) + 12 (bind.hpp:1285) [inlined]
11 libkritaui.21.0.0.dylib 0x1072851e8 decltype(std::declval<boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>&>()(std::declval<KisSharedPtr<KisNode>>())) std::__1::__invoke[abi:ne190102]<boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>&, KisSharedPtr<KisNode>>(boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>&, KisSharedPtr<KisNode>&&) + 12 (invoke.h:149) [inlined]
12 libkritaui.21.0.0.dylib 0x1072851e8 void std::__1::__invoke_void_return_wrapper<void, true>::__call[abi:ne190102]<boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>&, KisSharedPtr<KisNode>>(boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>&, KisSharedPtr<KisNode>&&) + 12 (invoke.h:224) [inlined]
13 libkritaui.21.0.0.dylib 0x1072851e8 std::__1::__function::__alloc_func<boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>, std::__1::allocator<boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>>, void (KisSharedPtr<KisNode>)>::operator()[abi:ne190102](KisSharedPtr<KisNode>&&) + 12 (function.h:171) [inlined]
14 libkritaui.21.0.0.dylib 0x1072851e8 std::__1::__function::__func<boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>, std::__1::allocator<boost::_bi::bind_t<void, boost::_mfi::mf1<void, KisDummiesFacadeBase, KisSharedPtr<KisNode>>, boost::_bi::list2<boost::_bi::value<KisDummiesFacadeBase*>, boost::arg<1>>>>, void (KisSharedPtr<KisNode>)>::operator()(KisSharedPtr<KisNode>&&) + 40 (function.h:313)
15 libkritaui.21.0.0.dylib 0x107284348 std::__1::__function::__value_func<void (KisSharedPtr<KisNode>)>::operator()[abi:ne190102](KisSharedPtr<KisNode>&&) const + 24 (function.h:430) [inlined]
16 libkritaui.21.0.0.dylib 0x107284348 std::__1::function<void (KisSharedPtr<KisNode>)>::operator()(KisSharedPtr<KisNode>) const + 24 (function.h:989) [inlined]
17 libkritaui.21.0.0.dylib 0x107284348 decltype(std::declval<std::__1::function<void (KisSharedPtr<KisNode>)>&>()(std::declval<KisSharedPtr<KisNode>&>())) std::__1::__invoke[abi:ne190102]<std::__1::function<void (KisSharedPtr<KisNode>)>&, KisSharedPtr<KisNode>&>(std::__1::function<void (KisSharedPtr<KisNode>)>&, KisSharedPtr<KisNode>&) + 44 (invoke.h:149) [inlined]
18 libkritaui.21.0.0.dylib 0x107284348 decltype(auto) std::__1::__apply_tuple_impl[abi:ne190102]<std::__1::function<void (KisSharedPtr<KisNode>)>&, std::__1::tuple<KisSharedPtr<KisNode>>&, 0ul>(std::__1::function<void (KisSharedPtr<KisNode>)>&, std::__1::tuple<KisSharedPtr<KisNode>>&, std::__1::__tuple_indices<0ul>) + 44 (tuple:1354) [inlined]
19 libkritaui.21.0.0.dylib 0x107284348 decltype(auto) std::__1::apply[abi:ne190102]<std::__1::function<void (KisSharedPtr<KisNode>)>&, std::__1::tuple<KisSharedPtr<KisNode>>&>(std::__1::function<void (KisSharedPtr<KisNode>)>&, std::__1::tuple<KisSharedPtr<KisNode>>&) + 44 (tuple:1358) [inlined]
20 libkritaui.21.0.0.dylib 0x107284348 KisSynchronizedConnection<KisSharedPtr<KisNode>>::deliverEventToReceiver() + 304 (KisSynchronizedConnection.h:234)
21 libkritaglobal.21.0.0.dylib 0x10596b8bc KisSynchronizedConnectionBase::event(QEvent*) + 144 (KisSynchronizedConnection.cpp:101)
22 QtWidgets 0x10a844b3c QApplicationPrivate::notify_helper(QObject*, QEvent*) + 336
23 QtWidgets 0x10a845bbc QApplication::notify(QObject*, QEvent*) + 468
24 libkritaui.21.0.0.dylib 0x1076843f4 KisApplication::processPostponedSynchronizationEvents() + 544 (KisApplication.cpp:959)
25 libkritaui.21.0.0.dylib 0x10768ff98 KisApplication::notify(QObject*, QEvent*) + 392 (KisApplication.cpp:925)
26 QtCore 0x10be661b0 QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) + 172
27 QtGui 0x109a80be4 QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) + 2044
Layer moving crash backtrace 2
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libkritaimage.21.0.0.dylib 0x1031159f8 KisBaseNode::getKeyframeChannel(QString const&) const + 24
1 kritaanimationdocker.so 0x131696140 KisAnimTimelineFramesModel::Private::frameExists(int, int) const + 76
2 kritaanimationdocker.so 0x131699710 KisAnimTimelineFramesModel::flags(QModelIndex const&) const + 84
3 QtCore 0x10691cfcc void indexesFromRange<QList<QModelIndex>>(QItemSelectionRange const&, QList<QModelIndex>&) + 540
4 QtCore 0x106926a68 QItemSelectionModel::selectedIndexes() const + 124
5 QtWidgets 0x1053a39d0 QTableView::selectedIndexes() const + 108
6 kritaanimationdocker.so 0x1316a9fe4 KisAnimTimelineFramesView::slotTryTransferSelectionBetweenRows(int, int) + 116
7 QtCore 0x106721c50 void doActivate<false>(QObject*, int, void**) + 1420
8 kritaanimationdocker.so 0x131668c00 KisAnimTimelineFramesModel::requestTransferSelectionBetweenRows(int, int) + 68
9 kritaanimationdocker.so 0x131695a00 KisAnimTimelineFramesModel::slotCurrentNodeChanged(KisSharedPtr<KisNode>) + 556
10 kritaanimationdocker.so 0x13166877c KisAnimTimelineFramesModel::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) + 128
11 QtCore 0x106721c50 void doActivate<false>(QObject*, int, void**) + 1420
12 libkritaui.21.0.0.dylib 0x1024b2328 KisNodeManager::sigNodeActivated(KisSharedPtr<KisNode>) + 52
13 libkritaui.21.0.0.dylib 0x1026c6bbc KisNodeManager::slotSomethingActivatedNodeImpl(KisSharedPtr<KisNode>) + 584
14 libkritaui.21.0.0.dylib 0x1026beb48 KisNodeManager::slotNonUiActivatedNode(KisSharedPtr<KisNode>) + 208
15 libkritaui.21.0.0.dylib 0x1024b171c 0x102480000 + 202524
16 QtCore 0x106721c50 void doActivate<false>(QObject*, int, void**) + 1420
17 libkritaui.21.0.0.dylib 0x1024a7654 KisDummiesFacadeBase::sigActivateNode(KisSharedPtr<KisNode>) + 52
18 libkritaui.21.0.0.dylib 0x102608ca4 KisDummiesFacadeBase::slotNodeActivationRequested(KisSharedPtr<KisNode>, QFlags<KisNodeAdditionFlag>) + 188
19 libkritaui.21.0.0.dylib 0x10260c11c 0x102480000 + 1622300
20 libkritaui.21.0.0.dylib 0x10260c040 0x102480000 + 1622080
21 libkritaui.21.0.0.dylib 0x10260af6c 0x102480000 + 1617772
22 libkritaglobal.21.0.0.dylib 0x101e86e6c KisSynchronizedConnectionBase::event(QEvent*) + 140
23 QtWidgets 0x1050acac0 QApplicationPrivate::notify_helper(QObject*, QEvent*) + 336
24 QtWidgets 0x1050adb40 QApplication::notify(QObject*, QEvent*) + 468
25 libkritaui.21.0.0.dylib 0x102a39eec KisApplication::processPostponedSynchronizationEvents() + 520
26 libkritaui.21.0.0.dylib 0x102a46830 KisApplication::notify(QObject*, QEvent*) + 388
27 QtCore 0x1066cde44 QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) + 172
28 QtGui 0x1042db174 QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) + 2032
On Linux, I also got some warnings and a segfault.
ASSERT (krita): "!m_d->dummiesList.contains(dummy)" in file /builds/graphics/krita/plugins/dockers/animation/timeline_node_list_keeper.cpp, line 191
WARNING: TimelineFramesModel::slotCurrentNodeChanged: node not found!
QAbstractItemModel::endInsertRows: Invalid index ( 2 , 0 ) in model KisAnimTimelineFramesModel(0x55cd4a975480)
Segmentation fault
Other observations of issues compared to Qt6.8.
Actual bugs:
Since Qt6.9:
- Selecting a font in Text Properties doesn’t work. Since MR!2509 the dropdown works, and a font can be selected, but it doesn’t update the text for some reason.
- On macOS, the pop-up (KisResourceItemViewer) for switching between thumbnail and details view in the Resource Manager etc is cut off, so it’s impossible to switch to details view. But it’s fine on Linux (Qt6.11).
New log warnings, harmless(?) but annoying
Since Qt6.9:
- macOS only(?).
QBackingStoreDefaultCompositor: unknown combination of color spaces QColorSpace(QColorSpace::SRgb, QColorSpace::Primaries::SRgb, QColorSpace::TransferFunction::SRgb) -> QColorSpace(QColorSpace::DisplayP3, QColorSpace::Primaries::DciP3D65, QColorSpace::TransferFunction::SRgb) logged constantly when the Text Properties Docker is visible. Warning comes from our Qt patches. Easy fix, just if-def out the surface format change in KisQQuickWidget.cpp.
- New Qt warning, lots of
QObject::disconnect: wildcard call disconnects from destroyed signal.
- New Qt warning,
QMimeXMLProvider: MimeType is ambiguous between application/x-krita and application/zip when opening .kra. Problem is shared-mime-info doesn’t list .kra as a subclass of .zip, but this seems to be because there’s also a KOffice type of .kra with a different magic?
- macOS only. New Qt warning. On exit,
qt.qpa.menus: QPlatformMenuItem(0x60000adae500) does not belong to <QCocoaNSMenu:blah> spam for every KActionMenu. Probably a bug in KWidgetsAddons related to the destruction of the KActionMenu, it happens with Kate [KDE Advanced Text Editor] too.
Since 6.11:
qt.qml.propertyCache.append: Member focusPolicy of the object SliderSpinBoxManipulator_QMLTYPE_76 overrides a member of the base object. Consider renaming it or adding final or override specifier
qt.qml.propertyCache.append: Member focusPolicy of the object SliderSpinBoxContentItem_QMLTYPE_67 overrides a member of the base object. Consider renaming it or adding final or override specifier
Haven’t looked into that. There are other QML warnings (binding loop property) that happen on older Qt, but this one’s new.