Skip to content

Fix rare ToolTipManager crash on exit

Dāvis Mosāns requested to merge davism/dolphin:tooltip into master

If tooltips are enabled and you hover over item while immediately closing Dolphin sometimes it would crash because native parent might have been destroyed before DolphinView

Noticed this crash

#0  0x00007f4114f115a4 in QWidget::windowHandle() const () from /usr/lib/libQt5Widgets.so.5
#1  0x00007f411668d164 in DolphinView::slotItemHovered (this=0x5643387deee0, index=47) at /mnt/Dati/Git/KDE/dolphin/src/views/dolphinview.cpp:1228
#2  0x00007f4116698fea in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (DolphinView::*)(int)>::call(f=(void (DolphinView::*)(DolphinView * const, int)) 0x7f411668d034 <DolphinView::slotItemHovered(int)>, o=0x5643387deee0, arg=0x7ffd91bf5800) at /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#3  0x00007f4116698440 in QtPrivate::FunctionPointer<void (DolphinView::*)(int)>::call<QtPrivate::List<int>, void> (f=(void (DolphinView::*)(DolphinView * const, int)) 0x7f411668d034 <DolphinView::slotItemHovered(int)>, o=0x5643387deee0, arg=0x7ffd91bf5800) at /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#4  0x00007f4116696bc8 in QtPrivate::QSlotObject<void (DolphinView::*)(int), QtPrivate::List<int>, void>::impl (which=1, this_=0x564338a1a1e0, r=0x5643387deee0, a=0x7ffd91bf5800, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#5  0x00007f41144a5251 in QtPrivate::QSlotObjectBase::call (a=<optimized out>, r=<optimized out>, this=<optimized out>, this=<optimized out>, r=<optimized out>, a=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#6  doActivate<false> (sender=0x564338adb0b0, signal_index=9, argv=0x7ffd91bf5800) at kernel/qobject.cpp:3886
#7  0x00007f41165bfeb2 in KItemListController::itemHovered (this=0x564338adb0b0, _t1=47) at /usr/src/debug/build/src/dolphinprivate_autogen/Z3MQH7AOBD/moc_kitemlistcontroller.cpp:527
#8  0x00007f41166201eb in KItemListController::hoverMoveEvent (this=0x564338adb0b0, event=0x7ffd91bf5bf0, transform=...) at /mnt/Dati/Git/KDE/dolphin/src/kitemviews/kitemlistcontroller.cpp:896
#9  0x00007f411662141b in KItemListController::processEvent (this=0x564338adb0b0, event=0x7ffd91bf5bf0, transform=...) at /mnt/Dati/Git/KDE/dolphin/src/kitemviews/kitemlistcontroller.cpp:1181
#10 0x00007f4116630235 in KItemListView::event (this=0x5643388e2490, event=0x7ffd91bf5bf0) at /mnt/Dati/Git/KDE/dolphin/src/kitemviews/kitemlistview.cpp:990
#11 0x00007f4114eeaa7c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#12 0x00007f4114474b28 in QCoreApplication::notifyInternal2 (receiver=0x5643388e2490, event=0x7ffd91bf5bf0) at kernel/qcoreapplication.cpp:1064
#13 0x00007f4115204dce in ?? () from /usr/lib/libQt5Widgets.so.5
#14 0x00007f411520946d in ?? () from /usr/lib/libQt5Widgets.so.5
#15 0x00007f41152221d7 in ?? () from /usr/lib/libQt5Widgets.so.5
#16 0x00007f411521242c in QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent*) () from /usr/lib/libQt5Widgets.so.5
#17 0x00007f41152107ff in QGraphicsScene::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
#18 0x00007f4114eeaa7c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#19 0x00007f4114474b28 in QCoreApplication::notifyInternal2 (receiver=0x564338941e00, event=0x7ffd91bf5fb0) at kernel/qcoreapplication.cpp:1064
#20 0x00007f411522f638 in QGraphicsViewPrivate::mouseMoveEventHandler(QMouseEvent*) () from /usr/lib/libQt5Widgets.so.5
#21 0x00007f4114f2164f in QWidget::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
#22 0x00007f4114fc5bf3 in QFrame::event(QEvent*) () from /usr/lib/libQt5Widgets.so.5
#23 0x00007f4114474792 in QCoreApplicationPrivate::sendThroughObjectEventFilters (receiver=0x564338998360, event=0x7ffd91bf6580) at kernel/qcoreapplication.cpp:1190
#24 0x00007f4114eeaa6c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#25 0x00007f4114ef0289 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#26 0x00007f4114474b28 in QCoreApplication::notifyInternal2 (receiver=0x564338998360, event=0x7ffd91bf6580) at kernel/qcoreapplication.cpp:1064
#27 0x00007f4114eee287 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () from /usr/lib/libQt5Widgets.so.5
#28 0x00007f4114f3f345 in ?? () from /usr/lib/libQt5Widgets.so.5
#29 0x00007f4114f410ee in ?? () from /usr/lib/libQt5Widgets.so.5
#30 0x00007f4114eeaa7c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#31 0x00007f4114474b28 in QCoreApplication::notifyInternal2 (receiver=0x5643388a0f80, event=0x7ffd91bf68e0) at kernel/qcoreapplication.cpp:1064
#32 0x00007f411484901c in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/libQt5Gui.so.5
#33 0x00007f4114832965 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Gui.so.5
#34 0x00007f410e520de0 in ?? () from /usr/lib/libQt5XcbQpa.so.5
#35 0x00007f4112020c6b in g_main_dispatch (context=0x7f4108005010) at ../glib/glib/gmain.c:3417
#36 g_main_context_dispatch (context=0x7f4108005010) at ../glib/glib/gmain.c:4135
#37 0x00007f4112077001 in g_main_context_iterate.constprop.0 (context=context@entry=0x7f4108005010, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4211
#38 0x00007f411201e392 in g_main_context_iteration (context=0x7f4108005010, may_block=1) at ../glib/glib/gmain.c:4276
#39 0x00007f41144bf27c in QEventDispatcherGlib::processEvents (this=0x5643385bdee0, flags=...) at kernel/qeventdispatcher_glib.cpp:423
#40 0x00007f411446d2ec in QEventLoop::exec (this=0x7ffd91bf6c80, flags=...) at ../../include/QtCore/../../src/corelib/global/qflags.h:69
#41 0x00007f4114477dd9 in QCoreApplication::exec () at ../../include/QtCore/../../src/corelib/global/qflags.h:121
#42 0x0000564338257cf6 in main (argc=1, argv=0x7ffd91bf6f18) at /mnt/Dati/Git/KDE/dolphin/src/main.cpp:250

Looks like nativeParentWidget() returns nullptr https://doc.qt.io/qt-5/qwidget.html#nativeParentWidget

Seems this MR fixes it.

Merge request reports