SUMMARY When we open a filter dialog to edit the filter parameters, we can still close the active image, leaving the filter dialog open. If we then change any parameter in the dialog, Krita crashes. This behaviour also happens with the layer properties dialogs. In some cases, changing the parameters doesn't provoke a crash, but pressing the accept button does. STEPS TO REPRODUCE 1. Open an image 2. Open a filter dialog or a layer properties dialog 3. Close the image when the dialog is open 4. Change some parameters in the dialog and/or press accept OBSERVED RESULT The dialog open to change an image, remains open when the image is closed EXPECTED RESULT Either the user shouldn't be able to close the image if a dialog that can change it is open, or that dialog should be closed if the image is closed. SOFTWARE/OS VERSIONS Operating System: Manjaro Linux KDE Plasma Version: 5.19.5 KDE Frameworks Version: 5.74.0 Qt Version: 5.15.1
Backtrace: [KCrash Handler] #4 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #5 0x00007f7ccc161859 in __GI_abort () at abort.c:79 #6 0x00007f7ccc5bcc39 in QMessageLogger::fatal(char const*, ...) const () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #7 0x00007f7ccc5bc042 in qt_assert_x(char const*, char const*, char const*, int) () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #8 0x00007f7cceda6d4b in KisWeakSharedPtr<KisImage>::operator-> (this=<optimized out>) at /home/boud/dev/4.3/libs/global/kis_shared_ptr.h:393 #9 0x00007f7ccef09e69 in KisFilterManager::apply (this=0x5653bc4d33f0, filterConfig=...) at /home/boud/dev/4.3/libs/ui/kis_filter_manager.cc:281 #10 0x00007f7ccede5f15 in KisDlgFilter::startApplyingFilter (this=0x5653beda0590, config=...) at /usr/include/c++/9/bits/atomic_base.h:318 #11 0x00007f7ccede632e in KisDlgFilter::updatePreview (this=0x5653beda0590) at /usr/include/c++/9/bits/atomic_base.h:318 #12 0x00007f7ccede70ba in KisDlgFilter::filterSelectionChanged (this=0x5653beda0590) at /home/boud/dev/4.3/libs/ui/dialogs/kis_dlg_filter.cpp:232 #13 0x00007f7ccc8115e0 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #14 0x00007f7cced6811e in KisFilterSelectorWidget::configurationChanged (this=<optimized out>) at /home/boud/dev/b-4.3/libs/ui/kritaui_autogen/IMAN36LHMA/moc_kis_filter_selector_widget.cpp:196 #15 KisFilterSelectorWidget::qt_static_metacall (_c=QMetaObject::InvokeMetaMethod, _a=<optimized out>, _id=<optimized out>, _o=<optimized out>) at /home/boud/dev/b-4.3/libs/ui/kritaui_autogen/IMAN36LHMA/moc_kis_filter_selector_widget.cpp:114 #16 KisFilterSelectorWidget::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/b-4.3/libs/ui/kritaui_autogen/IMAN36LHMA/moc_kis_filter_selector_widget.cpp:108 #17 0x00007f7ccc8115e0 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #18 0x00007f7ccdc85747 in KisConfigWidget::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/b-4.3/libs/image/kritaimage_autogen/EWIEGA46WW/moc_kis_config_widget.cpp:93 #19 0x00007f7ccc8115e0 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #20 0x00007f7ccd8e55bd in KisSignalCompressor::tryEmitSignalSafely (this=this@entry=0x5653bed9bec0) at /home/boud/dev/4.3/libs/global/kis_signal_compressor.cpp:190 #21 0x00007f7ccd8e57e8 in KisSignalCompressor::start (this=0x5653bed9bec0) at /home/boud/dev/4.3/libs/global/kis_signal_compressor.cpp:113 #22 0x00007f7ccddd6879 in KisConfigWidget::slotConfigChanged (this=<optimized out>) at /home/boud/dev/4.3/libs/image/kis_config_widget.cpp:38 #23 0x00007f7ccdc85704 in KisConfigWidget::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/b-4.3/libs/image/kritaimage_autogen/EWIEGA46WW/moc_kis_config_widget.cpp:97 #24 0x00007f7ccc8115e0 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #25 0x00007f7ca862c6b9 in KisASCCDLConfigWidget::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/b-4.3/plugins/filters/asccdl/kritaasccdl_autogen/EWIEGA46WW/moc_kis_wdg_asccdl.cpp:84 #26 0x00007f7ccc8115e0 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #27 0x00007f7ccba62f36 in KisColorButton::changed (this=<optimized out>, _t1=...) at /home/boud/dev/b-4.3/libs/widgets/kritawidgets_autogen/include/moc_kis_color_button.cpp:220 #28 0x00007f7ccba636d8 in KisColorButton::setColor (this=<optimized out>, c=...) at /home/boud/dev/4.3/libs/widgets/kis_color_button.cpp:166 #29 0x00007f7ca863054e in KisASCCDLConfigWidget::powerColorChanged (this=0x5653bed9be90, c=...) at /home/boud/dev/4.3/plugins/filters/asccdl/kis_wdg_asccdl.cpp:117 #30 0x00007f7ca862c6b9 in KisASCCDLConfigWidget::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/b-4.3/plugins/filters/asccdl/kritaasccdl_autogen/EWIEGA46WW/moc_kis_wdg_asccdl.cpp:84 #31 0x00007f7ccc8115e0 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #32 0x00007f7ccb9a13e6 in KisColorSelectorInterface::sigNewColor (this=this@entry=0x5653bf2d4e70, _t1=...) at /home/boud/dev/b-4.3/libs/widgets/kritawidgets_autogen/EWIEGA46WW/moc_KisColorSelectorInterface.cpp:167 #33 0x00007f7ccba39b2f in KisVisualColorSelector::slotCursorMoved (this=0x5653bf2d4e70, pos=...) at /home/boud/dev/4.3/libs/widgets/KisVisualColorSelector.cpp:609 #34 0x00007f7ccb9a6584 in KisVisualColorSelector::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/b-4.3/libs/widgets/kritawidgets_autogen/EWIEGA46WW/moc_KisVisualColorSelector.cpp:126 #35 0x00007f7ccc8115e0 in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #36 0x00007f7ccb9a1bf7 in KisVisualColorSelectorShape::sigCursorMoved (this=<optimized out>, _t1=...) at /home/boud/dev/b-4.3/libs/widgets/kritawidgets_autogen/EWIEGA46WW/moc_KisVisualColorSelectorShape.cpp:144 #37 0x00007f7ccd356dd1 in QWidget::event(QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #38 0x00007f7ccd313cc3 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #39 0x00007f7ccd31cec3 in QApplication::notify(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #40 0x00007f7ccf25184d in KisApplication::notify (this=<optimized out>, receiver=0x5653c0da7750, event=0x7ffe1e5b0470) at /home/boud/dev/4.3/libs/ui/KisApplication.cpp:688 #41 0x00007f7ccc7da6aa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #42 0x00007f7ccd31bfd7 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #43 0x00007f7ccd371ffd in ?? () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #44 0x00007f7ccd3754dc in ?? () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #45 0x00007f7ccd313cc3 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #46 0x00007f7ccd31cc70 in QApplication::notify(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #47 0x00007f7ccf25184d in KisApplication::notify (this=<optimized out>, receiver=0x5653beeba5f0, event=0x7ffe1e5b0970) at /home/boud/dev/4.3/libs/ui/KisApplication.cpp:688 #48 0x00007f7ccc7da6aa in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #49 0x00007f7cccc09f78 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5 #50 0x00007f7cccc0b5b5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5 #51 0x00007f7cccbe32cb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Gui.so.5 #52 0x00007f7cc6d3e99e in ?? () from /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 #53 0x00007f7cc9b39fbd in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #54 0x00007f7cc9b3a240 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #55 0x00007f7cc9b3a2e3 in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #56 0x00007f7ccc834e92 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #57 0x00007f7ccc7d91bb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #58 0x00007f7ccc7e1354 in QCoreApplication::exec() () from /lib/x86_64-linux-gnu/libQt5Core.so.5 #59 0x00005653b2881e63 in main (argc=<optimized out>, argv=0x7ffe1e5b1038) at /home/boud/dev/4.3/krita/main.cc:620 [Inferior 1 (process 5620) detached]
This should be fixed by making these non-modal dialogs canvas observers so they get notified when the current image is closed or changes, like the dockers are.
Git commit 6fc8f9693a47b2e1c0e5d41d2a61a397a246239e by Sharaf Zaman. Committed on 27/04/2021 at 10:27. Pushed by szaman into branch 'master'. Crashfix: Layer/filter properites dialog after canvas is closed We parent them properly, so they are removed when the canvas is removed M +1 -1 libs/ui/kis_filter_manager.cc M +1 -1 libs/ui/kis_layer_manager.cc https://invent.kde.org/graphics/krita/commit/6fc8f9693a47b2e1c0e5d41d2a61a397a246239e