Details
-
Bug
-
Resolution: Unresolved
-
P1: Critical
-
None
-
5.12.12
-
None
Description
In Krita, when I have a certain dock layout and I move a dock widget to a different dock area, I sometimes get a crash (https://bugs.kde.org/show_bug.cgi?id=449779). Here is the relevant backtrace:
Thread 1 received signal SIGSEGV, Segmentation fault. QDockAreaLayoutInfo::separatorRect (this=0x0, path=...) at D:\dev\krita\src-master-build\b_deps\ext_qt\s\qtbase\src\widgets\widgets\qdockarealayout.cpp:1389 1389 return separatorRect(index); (gdb) bt #0 QDockAreaLayoutInfo::separatorRect (this=0x0, path=...) at D:\dev\krita\src-master-build\b_deps\ext_qt\s\qtbase\src\widgets\widgets\qdockarealayout.cpp:1389 #1 0x00007ffe2df7e121 in QDockAreaLayoutInfo::separatorRect (this=<optimized out>, path=...) at D:\dev\krita\src-master-build\b_deps\ext_qt\s\qtbase\src\widgets\widgets\qdockarealayout.cpp:1387 #2 0x00007ffe2df7e19d in QDockAreaLayout::separatorRect (this=this@entry=0x11af5b60, path=...) at D:\dev\krita\src-master-build\b_deps\ext_qt\s\qtbase\src\widgets\widgets\qdockarealayout.cpp:2586 #3 0x00007ffe2e1b48de in QMainWindowLayoutSeparatorHelper<QMainWindowLayout>::adjustCursor (this=this@entry=0x11af5a40, pos=...) at D:/dev/krita/src-master-build/b_deps/ext_qt/s/qtbase/src/widgets/widgets/qmainwindowlayout_p.h:168 #4 0x00007ffe2e1b410f in QMainWindowLayoutSeparatorHelper<QMainWindowLayout>::windowEvent (this=0x11af5a40, event=event@entry=0x5fb6a0) at D:/dev/krita/src-master-build/b_deps/ext_qt/s/qtbase/src/widgets/widgets/qmainwindowlayout_p.h:209 #5 0x00007ffe2dfa54a6 in QMainWindow::event (this=this@entry=0x10723c50, event=event@entry=0x5fb6a0) at D:\dev\krita\src-master-build\b_deps\ext_qt\s\qtbase\src\widgets\widgets\qmainwindow.cpp:1304 #6 0x00007ffe6b7e534c in KMainWindow::event (this=0x10723c50, ev=0x5fb6a0) at D:\dev\krita\src-master\libs\widgetutils\xmlgui\kmainwindow.cpp:765 #7 0x00007ffe2de77bec in QApplicationPrivate::notify_helper (this=this@entry=0x2630390, receiver=receiver@entry=0x10723c50, e=e@entry=0x5fb6a0) at D:\dev\krita\src-master-build\b_deps\ext_qt\s\qtbase\src\widgets\kernel\qapplication.cpp:3650 #8 0x00007ffe2de80477 in QApplication::notify (this=this@entry=0x5ffb80, receiver=receiver@entry=0x194025f0, e=e@entry=0x5fba40) at D:\dev\krita\src-master-build\b_deps\ext_qt\s\qtbase\src\widgets\kernel\qapplication.cpp:3135
What happens is item.subinfo being null in QDockAreaLayoutInfo::separatorRect https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/widgets/qdockarealayout.cpp?h=v5.12.12#n1386 . The event that triggers this code path is a MouseHover event.
I suspect this is due to the redocking animation happening, and that item.subinfo is only being set after the animation is finished in https://code.qt.io/cgit/qt/qtbase.git/tree/src/widgets/widgets/qmainwindowlayout.cpp?h=v5.12.12#n2209 . QDockAreaLayoutInfo::separatorRect did not account for this and assumes that item.subinfo is always valid, but it's not.