Bug 391705 - Crash on new document after a new window had been created and closed
Summary: Crash on new document after a new window had been created and closed
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: General (show other bugs)
Version: git master (please specify the git hash!)
Platform: unspecified All
: NOR crash
Target Milestone: ---
Assignee: Halla Rempt
URL:
Keywords: regression, release_blocker
Depends on:
Blocks:
 
Reported: 2018-03-11 10:18 UTC by mvowada
Modified: 2018-03-14 13:24 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
(Video) (461.82 KB, video/mp4)
2018-03-11 10:18 UTC, mvowada
Details

Note You need to log in before you can comment on or make changes to this bug.
Description mvowada 2018-03-11 10:18:49 UTC
Created attachment 111318 [details]
(Video)

(krita-4.1.0-pre-alpha-21a86cd-x86_64.appimage - Ubuntu 14.04 Unity) 
Steps to reproduce (see video):

    1) start Krita (no open documents)
    2) "Window" > "New window" + close it
    3) "File" + "New"

Actual Results: crash
Comment 1 Alvin Wong 2018-03-11 11:40:28 UTC
I tested with krita-nightly-x64-v4.0.0.51-611-g45709b74de on Windows and I can reliably produce a crash on creating a new document after having opened and closed a new window.

Backtrace:

Qt5Core.dll!0x238bb0           QObject::objectName+0x0
libkritaui.dll!0x128c1e        KisActionManager::actionByName(QString const&) const at kis_action_manager.cpp:166
libkritaui.dll!0x181a94        KisToolPaint::KisToolPaint(KoCanvasBase*, QCursor const&) at kis_tool_paint.cc:114
libkritaui.dll!0x17223e        KisToolFreehand::KisToolFreehand(KoCanvasBase*, QCursor const&, KUndo2MagicString const&) at kis_tool_freehand.cc:69
kritatooldyna.dll!0x271a       KisToolDyna::KisToolDyna(KoCanvasBase*) at kis_tool_dyna.cpp:49
kritatooldyna.dll!0x5f01       KisToolDynaFactory::createTool(KoCanvasBase*) at kis_tool_dyna.h:173
libkritaflake.dll!0x46ce4      ToolHelper::createTool(KoCanvasBase*) const at KoToolManager_p.cpp:121
libkritaflake.dll!0x4953a      KoToolManager::createTools(KoCanvasController*, ToolHelper*) at KoToolManager.cpp:410
libkritaflake.dll!0x49a94      KoToolManager::Private::createCanvasData(KoCanvasController*, KoInputDevice const&) at KoToolManager.cpp:486
libkritaflake.dll!0x4c801      KoToolManager::Private::attachCanvas(KoCanvasController*) at KoToolManager.cpp:784
libkritaflake.dll!0x4cda7      KoToolManager::addController(KoCanvasController*) at KoToolManager.cpp:276
libkritaui.dll!0x2cac88        KisView::setViewManager(KisViewManager*) at KisView.cpp:324
libkritaui.dll!0x2a8410        KisMainWindow::showView(KisView*) at KisMainWindow.cpp:564
libkritaui.dll!0x2a5cfd        KisMainWindow::addView(KisView*) at KisMainWindow.cpp:541
libkritaui.dll!0x2a5e75        KisMainWindow::addViewAndNotifyLoadingCompleted(KisDocument*) at KisMainWindow.cpp:860
libkritaui.dll!0x341ccc        KisPart::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) at moc_KisPart.cpp:142
Qt5Core.dll!0x23b41a           QMetaObject::activate+0x7fa
libkritaui.dll!0x32f491        KisOpenPane::documentSelected(KisDocument*) at moc_KisOpenPane.cpp:237
Qt5Core.dll!0x23b41a           QMetaObject::activate+0x7fa
Qt5Widgets.dll!0x100402        QAbstractButton::toggled+0x212
Qt5Widgets.dll!0x1006d3        QAbstractButton::toggled+0x4e3
Qt5Widgets.dll!0x44ddb         QWidget::event+0xc4b
Qt5Widgets.dll!0x7b5c          QApplicationPrivate::notify_helper+0x9c
Qt5Widgets.dll!0x104f3         QApplication::notify+0x1a13
libkritaui.dll!0x27cc76        KisApplication::notify(QObject*, QEvent*) at KisApplication.cpp:601
Qt5Core.dll!0x210768           QCoreApplication::notifyInternal2+0x198
Qt5Widgets.dll!0x5b2df         QDesktopWidget::qt_metacall+0x4fff
Qt5Widgets.dll!0x7b5c          QApplicationPrivate::notify_helper+0x9c
Qt5Widgets.dll!0xedd0          QApplication::notify+0x2f0
libkritaui.dll!0x27cc76        KisApplication::notify(QObject*, QEvent*) at KisApplication.cpp:601
Qt5Core.dll!0x210768           QCoreApplication::notifyInternal2+0x198
Qt5Gui.dll!0x35d93             QGuiApplicationPrivate::processKeyEvent+0x1b3
Qt5Gui.dll!0x3ad65             QGuiApplicationPrivate::processWindowSystemEvent+0xe5
Qt5Gui.dll!0x11ca0             QWindowSystemInterface::sendWindowSystemEvents+0x370
Qt5Core.dll!0x268006           QEventDispatcherWin32Private::sendTimerEvent+0x666
USER32.dll!0xb85d              UserCallWinProcCheckWow+0x2ad
USER32.dll!0xb1ef              DispatchMessageWorker+0x19f
Qt5Core.dll!0x2672fb           QEventDispatcherWin32::processEvents+0x5cb
qwindows.dll!0x5ef35           qt_plugin_instance+0x28e5
Qt5Core.dll!0x20ee4f           QEventLoop::exec+0x13f
Qt5Widgets.dll!0x1dfaf9        QDialog::exec+0x1d9
libkritaui.dll!0x2a4a0f        KisMainWindow::slotFileNew() at KisMainWindow.cpp:1417
libkritaui.dll!0x2b34fd        KisMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) at moc_KisMainWindow.cpp:295
Qt5Core.dll!0x23b41a           QMetaObject::activate+0x7fa
Qt5Widgets.dll!0x3e7e          QAction::activate+0xfe
Qt5Widgets.dll!0x48b3          QAction::event+0x23
Qt5Widgets.dll!0x7b5c          QApplicationPrivate::notify_helper+0x9c
Qt5Widgets.dll!0xedd0          QApplication::notify+0x2f0
libkritaui.dll!0x27cc76        KisApplication::notify(QObject*, QEvent*) at KisApplication.cpp:601
Qt5Core.dll!0x210768           QCoreApplication::notifyInternal2+0x198
Qt5Gui.dll!0x6c70e             QShortcutMap::dispatchEvent+0xee
Qt5Gui.dll!0x6c922             QShortcutMap::tryShortcut+0x1b2
Qt5Gui.dll!0x17950             QWindowSystemInterface::handleShortcutEvent+0x170
Qt5Gui.dll!0x35c75             QGuiApplicationPrivate::processKeyEvent+0x95
Qt5Gui.dll!0x3ad65             QGuiApplicationPrivate::processWindowSystemEvent+0xe5
Qt5Gui.dll!0x11ca0             QWindowSystemInterface::sendWindowSystemEvents+0x370
Qt5Core.dll!0x268006           QEventDispatcherWin32Private::sendTimerEvent+0x666
USER32.dll!0xb85d              UserCallWinProcCheckWow+0x2ad
USER32.dll!0xb1ef              DispatchMessageWorker+0x19f
Qt5Core.dll!0x2672fb           QEventDispatcherWin32::processEvents+0x5cb
qwindows.dll!0x5ef35           qt_plugin_instance+0x28e5
Qt5Core.dll!0x20ee4f           QEventLoop::exec+0x13f
Qt5Core.dll!0x2177a7           QCoreApplication::exec+0x77
krita.exe!0x613b               main at main.cc:349
krita.exe!0x13f7               __tmainCRTStartup+0x247
krita.exe!0x14fb               WinMainCRTStartup+0x1b
KERNEL32.DLL!0x11fe4           BaseThreadInitThunk+0x14
ntdll.dll!0x6efc1              RtlUserThreadStart+0x21
Comment 2 Halla Rempt 2018-03-11 11:48:22 UTC
I can reproduce it as well. I'll build the intel-3 branch and test in that too,since that has some fixes for handling multiple windows.

Application: Krita (krita), signal: Segmentation fault
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x7f1381022900 (LWP 7831))]

Thread 13 (Thread 0x7f1328ff9700 (LWP 7851)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f1328ff9700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 12 (Thread 0x7f13297fa700 (LWP 7850)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f13297fa700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 11 (Thread 0x7f1329ffb700 (LWP 7849)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f1329ffb700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 10 (Thread 0x7f132a7fc700 (LWP 7848)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f132a7fc700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 9 (Thread 0x7f132affd700 (LWP 7847)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f132affd700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 8 (Thread 0x7f132b7fe700 (LWP 7846)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f132b7fe700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 7 (Thread 0x7f132bfff700 (LWP 7845)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f132bfff700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 6 (Thread 0x7f1330b7a700 (LWP 7844)):
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:225
#1  0x00007f137e3ec5b6 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e7dfa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f1330b7a700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 5 (Thread 0x7f1332cd6700 (LWP 7843)):
#0  0x00007f137dad674d in poll () at ../sysdeps/unix/syscall-template.S:84
#1  0x00007f1375cf238c in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f1375cf249c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f137e61f5cb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137e5c664a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007f137e3e6554 in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f135ec04a35 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#7  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007f137755a6ba in start_thread (arg=0x7f1332cd6700) at pthread_create.c:333
#9  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 4 (Thread 0x7f134265d700 (LWP 7841)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007f137e3ec67b in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137f51f52a in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#3  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f137755a6ba in start_thread (arg=0x7f134265d700) at pthread_create.c:333
#5  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 3 (Thread 0x7f1341e5c700 (LWP 7835)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007f137e3ec67b in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f137e3e51ef in QSemaphore::tryAcquire(int, int) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f137b67aff3 in KisTileDataSwapper::waitForWork (this=<optimized out>) at /home/boud/dev/krita/libs/image/tiles3/swap/kis_tile_data_swapper.cpp:86
#4  0x00007f137b67b1ea in KisTileDataSwapper::run (this=0x7f137bb76f80 <(anonymous namespace)::Q_QGS_s_instance::innerFunction()::holder+64>) at /home/boud/dev/krita/libs/image/tiles3/swap/kis_tile_data_swapper.cpp:92
#5  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f137755a6ba in start_thread (arg=0x7f1341e5c700) at pthread_create.c:333
#7  0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 2 (Thread 0x7f1359923700 (LWP 7833)):
#0  0x00007f1375cef3b0 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007f1375cf18bb in g_main_context_prepare () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f1375cf22bb in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f1375cf249c in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007f137e61f5cb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007f137e5c664a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f137e3e6554 in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007f13777862c5 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5
#8  0x00007f137e3eb6eb in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#9  0x00007f137755a6ba in start_thread (arg=0x7f1359923700) at pthread_create.c:333
#10 0x00007f137dae241d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109

Thread 1 (Thread 0x7f1381022900 (LWP 7831)):
[KCrash Handler]
#6  0x00007f137e5f2477 in QObject::objectName() const () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007f13807dcf4f in KisActionManager::actionByName (this=this@entry=0x7ae6850, name=...) at /home/boud/dev/krita/libs/ui/kis_action_manager.cpp:166
#8  0x00007f138084b3dc in KisToolPaint::KisToolPaint (this=0xafab320, canvas=0xb5a1390, cursor=...) at /home/boud/dev/krita/libs/ui/tool/kis_tool_paint.cc:114
#9  0x00007f138084d6fe in KisToolShape::KisToolShape (this=0xafab320, canvas=<optimized out>, cursor=...) at /home/boud/dev/krita/libs/ui/tool/kis_tool_shape.cc:58
#10 0x00007f13808517c5 in KisToolPolylineBase::KisToolPolylineBase (this=0xafab320, canvas=<optimized out>, type=KisToolPolylineBase::PAINT, cursor=...) at /home/boud/dev/krita/libs/ui/tool/kis_tool_polyline_base.cpp:45
#11 0x00007f1346a55cc3 in KisToolPolyline::KisToolPolyline (this=0xafab320, canvas=0xb5a1390) at /home/boud/dev/krita/plugins/tools/tool_polyline/kis_tool_polyline.cc:40
#12 0x00007f1346a55681 in KisToolPolylineFactory::createTool (this=<optimized out>, canvas=0xb5a1390) at /home/boud/dev/krita/plugins/tools/tool_polyline/kis_tool_polyline.h:64
#13 0x00007f137ac51065 in ToolHelper::createTool (this=this@entry=0x8574270, canvas=<optimized out>) at /home/boud/dev/krita/libs/flake/KoToolManager_p.cpp:121
#14 0x00007f137ac53bf9 in KoToolManager::createTools (this=0x7f137afbf860 <_ZZN12_GLOBAL__N_116Q_QGS_s_instance13innerFunctionEvE6holder>, controller=controller@entry=0xb5a1360, tool=0x8574270) at /home/boud/dev/krita/libs/flake/KoToolManager.cpp:410
#15 0x00007f137ac5404f in KoToolManager::Private::createCanvasData (this=this@entry=0x7b9cf90, controller=0xb5a1360, device=...) at /home/boud/dev/krita/libs/flake/KoToolManager.cpp:486
#16 0x00007f137ac57c75 in KoToolManager::Private::attachCanvas (this=0x7b9cf90, controller=0xb5a1360) at /home/boud/dev/krita/libs/flake/KoToolManager.cpp:784
#17 0x00007f137ac581a7 in KoToolManager::addController (this=0x7f137afbf860 <_ZZN12_GLOBAL__N_116Q_QGS_s_instance13innerFunctionEvE6holder>, controller=controller@entry=0xb5a1360) at /home/boud/dev/krita/libs/flake/KoToolManager.cpp:276
#18 0x00007f13809db79a in KisView::setViewManager (this=this@entry=0x9bcfd00, view=<optimized out>) at /home/boud/dev/krita/libs/ui/KisView.cpp:324
#19 0x00007f13809b1a2b in KisMainWindow::showView (this=0x650b130, imageView=0x9bcfd00) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:564
#20 0x00007f13809ae95a in KisMainWindow::addView (this=this@entry=0x650b130, view=view@entry=0x9bcfd00) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:541
#21 0x00007f13809aea82 in KisMainWindow::addViewAndNotifyLoadingCompleted (this=0x650b130, document=<optimized out>) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:860
#22 0x00007f13809c7a88 in KisPart::startCustomDocument (this=<optimized out>, doc=<optimized out>) at /home/boud/dev/krita/libs/ui/KisPart.cpp:469
#23 0x00007f1380a58fcc in KisPart::qt_static_metacall (_o=<optimized out>, _c=<optimized out>, _id=<optimized out>, _a=<optimized out>) at /home/boud/dev/build/libs/ui/moc_KisPart.cpp:142
#24 0x00007f137e5f5489 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#25 0x00007f1380a480ef in KisOpenPane::documentSelected (this=<optimized out>, _t1=0xab78f10) at /home/boud/dev/build/libs/ui/moc_KisOpenPane.cpp:237
#26 0x00007f137e5f5489 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#27 0x00007f137f3ff9e2 in QAbstractButton::clicked(bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#28 0x00007f137f3ffc14 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#29 0x00007f137f400895 in QAbstractButton::click() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#30 0x00007f137f348727 in QWidget::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#31 0x00007f137f308acc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#32 0x00007f137f311d46 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#33 0x00007f138097c4a7 in KisApplication::notify (this=<optimized out>, receiver=0xa62d900, event=0x7ffdba5fd3d0) at /home/boud/dev/krita/libs/ui/KisApplication.cpp:602
#34 0x00007f137e5c83c8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#35 0x00007f137f364993 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#36 0x00007f137f308acc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#37 0x00007f137f310417 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#38 0x00007f138097c4a7 in KisApplication::notify (this=<optimized out>, receiver=0xadf8040, event=0x7ffdba5fd3d0) at /home/boud/dev/krita/libs/ui/KisApplication.cpp:602
#39 0x00007f137e5c83c8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#40 0x00007f137eb5da48 in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#41 0x00007f137eb62e25 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#42 0x00007f137eb3c8fb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#43 0x00007f13681311ab in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#44 0x00007f137e5c664a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#45 0x00007f137f4f7627 in QDialog::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#46 0x00007f13809ad326 in KisMainWindow::slotFileNew (this=<optimized out>) at /home/boud/dev/krita/libs/ui/KisMainWindow.cpp:1417
#47 0x00007f13809bd7c8 in KisMainWindow::qt_static_metacall (_o=0x650b130, _c=<optimized out>, _id=<optimized out>, _a=0x7ffdba5fd8d0) at /home/boud/dev/build/libs/ui/moc_KisMainWindow.cpp:295
#48 0x00007f137e5f5489 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#49 0x00007f137f3024a2 in QAction::triggered(bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#50 0x00007f137f304c10 in QAction::activate(QAction::ActionEvent) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#51 0x00007f137f305634 in QAction::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#52 0x00007f137f308acc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#53 0x00007f137f310417 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#54 0x00007f138097c4a7 in KisApplication::notify (this=<optimized out>, receiver=0x9b70a40, event=0x7ffdba5fdc10) at /home/boud/dev/krita/libs/ui/KisApplication.cpp:602
#55 0x00007f137e5c83c8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#56 0x00007f137eb8efb6 in QShortcutMap::dispatchEvent(QKeyEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#57 0x00007f137eb8f069 in QShortcutMap::tryShortcut(QKeyEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#58 0x00007f137eb40956 in QWindowSystemInterface::handleShortcutEvent(QWindow*, unsigned long, int, QFlags<Qt::KeyboardModifier>, unsigned int, unsigned int, unsigned int, QString const&, bool, unsigned short) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#59 0x00007f137eb5da94 in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#60 0x00007f137eb62e25 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#61 0x00007f137eb3c8fb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#62 0x00007f13681311ab in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#63 0x00007f137e5c664a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#64 0x00007f137e5cf854 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#65 0x0000000000405473 in main (argc=1, argv=0x7ffdba5fe5e8) at /home/boud/dev/krita/krita/main.cc:349
Comment 3 Alvin Wong 2018-03-11 11:49:57 UTC
I got a different crash if I closed the first window instead of the new window:

python36.dll!0x3f7df           PyInterpreterState_Clear+0x257
python36.dll!0x182cef          PyGILState_Ensure+0x33
QtCore.pyd!0x1b98dc            PyInit_QtCore+0x1113f
krita.pyd!0x3f575              sipDockWidget::qt_metacast(char const*) at sipkritapart0.cpp:28049
libkritaui.dll!0x2a4e43        QObject::inherits(char const*) const at qobject.h:416
libkritaui.dll!0x2a4e43         (inlined by) KisMainWindow::forceDockTabFonts() at KisMainWindow.cpp:1924
libkritaui.dll!0x2b3667        KisMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) at moc_KisMainWindow.cpp:315
Qt5Core.dll!0x23b41a           QMetaObject::activate+0x7fa
libkritaui.dll!0x2a5d1e        KisMainWindow::restoringDone() at moc_KisMainWindow.cpp:484
libkritaui.dll!0x2a5d1e         (inlined by) KisMainWindow::addView(KisView*) at KisMainWindow.cpp:543
libkritaui.dll!0x2a5e75        KisMainWindow::addViewAndNotifyLoadingCompleted(KisDocument*) at KisMainWindow.cpp:860
libkritaui.dll!0x341ccc        KisPart::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) at moc_KisPart.cpp:142
Qt5Core.dll!0x23b41a           QMetaObject::activate+0x7fa
libkritaui.dll!0x32f491        KisOpenPane::documentSelected(KisDocument*) at moc_KisOpenPane.cpp:237
Qt5Core.dll!0x23b41a           QMetaObject::activate+0x7fa
Qt5Widgets.dll!0x100402        QAbstractButton::toggled+0x212
Qt5Widgets.dll!0x1006d3        QAbstractButton::toggled+0x4e3
Qt5Widgets.dll!0x44ddb         QWidget::event+0xc4b
Qt5Widgets.dll!0x7b5c          QApplicationPrivate::notify_helper+0x9c
Qt5Widgets.dll!0x104f3         QApplication::notify+0x1a13
libkritaui.dll!0x27cc76        KisApplication::notify(QObject*, QEvent*) at KisApplication.cpp:601
Qt5Core.dll!0x210768           QCoreApplication::notifyInternal2+0x198
Qt5Widgets.dll!0x5b2df         QDesktopWidget::qt_metacall+0x4fff
Qt5Widgets.dll!0x7b5c          QApplicationPrivate::notify_helper+0x9c
Qt5Widgets.dll!0xedd0          QApplication::notify+0x2f0
libkritaui.dll!0x27cc76        KisApplication::notify(QObject*, QEvent*) at KisApplication.cpp:601
Qt5Core.dll!0x210768           QCoreApplication::notifyInternal2+0x198
Qt5Gui.dll!0x35d93             QGuiApplicationPrivate::processKeyEvent+0x1b3
Qt5Gui.dll!0x3ad65             QGuiApplicationPrivate::processWindowSystemEvent+0xe5
Qt5Gui.dll!0x11ca0             QWindowSystemInterface::sendWindowSystemEvents+0x370
Qt5Core.dll!0x268006           QEventDispatcherWin32Private::sendTimerEvent+0x666
USER32.dll!0xb85d              UserCallWinProcCheckWow+0x2ad
USER32.dll!0xb1ef              DispatchMessageWorker+0x19f
Qt5Core.dll!0x2672fb           QEventDispatcherWin32::processEvents+0x5cb
qwindows.dll!0x5ef35           qt_plugin_instance+0x28e5
Qt5Core.dll!0x20ee4f           QEventLoop::exec+0x13f
Qt5Widgets.dll!0x1dfaf9        QDialog::exec+0x1d9
libkritaui.dll!0x2a4a0f        KisMainWindow::slotFileNew() at KisMainWindow.cpp:1417
libkritaui.dll!0x2b34fd        KisMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) at moc_KisMainWindow.cpp:295
Qt5Core.dll!0x23b41a           QMetaObject::activate+0x7fa
Qt5Widgets.dll!0x3e7e          QAction::activate+0xfe
Qt5Widgets.dll!0x48b3          QAction::event+0x23
Qt5Widgets.dll!0x7b5c          QApplicationPrivate::notify_helper+0x9c
Qt5Widgets.dll!0xedd0          QApplication::notify+0x2f0
libkritaui.dll!0x27cc76        KisApplication::notify(QObject*, QEvent*) at KisApplication.cpp:601
Qt5Core.dll!0x210768           QCoreApplication::notifyInternal2+0x198
Qt5Gui.dll!0x6c70e             QShortcutMap::dispatchEvent+0xee
Qt5Gui.dll!0x6c922             QShortcutMap::tryShortcut+0x1b2
Qt5Gui.dll!0x17950             QWindowSystemInterface::handleShortcutEvent+0x170
Qt5Gui.dll!0x35c75             QGuiApplicationPrivate::processKeyEvent+0x95
Qt5Gui.dll!0x3ad65             QGuiApplicationPrivate::processWindowSystemEvent+0xe5
Qt5Gui.dll!0x11ca0             QWindowSystemInterface::sendWindowSystemEvents+0x370
Qt5Core.dll!0x268006           QEventDispatcherWin32Private::sendTimerEvent+0x666
USER32.dll!0xb85d              UserCallWinProcCheckWow+0x2ad
USER32.dll!0xb1ef              DispatchMessageWorker+0x19f
Qt5Core.dll!0x2672fb           QEventDispatcherWin32::processEvents+0x5cb
qwindows.dll!0x5ef35           qt_plugin_instance+0x28e5
Qt5Core.dll!0x20ee4f           QEventLoop::exec+0x13f
Qt5Core.dll!0x2177a7           QCoreApplication::exec+0x77
krita.exe!0x613b               main at main.cc:349
krita.exe!0x13f7               __tmainCRTStartup+0x247
krita.exe!0x14fb               WinMainCRTStartup+0x1b
KERNEL32.DLL!0x11fe4           BaseThreadInitThunk+0x14
ntdll.dll!0x6efc1              RtlUserThreadStart+0x21
Comment 4 Halla Rempt 2018-03-11 12:13:16 UTC
No, this also happens in the rmept/intel-3 branch.
Comment 5 Dmitry Kazakov 2018-03-14 08:02:20 UTC
Hi, Boud!

I still cannot see how the issue can happen. Could you check two things:

1) Clear the **installation** folder (not the build one) and try again?
2) Try applying this patch and see if pressing "Ignore" helps? 
https://phabricator.kde.org/P176

I tried the following ways to reproduce the issue:
1) Built master and 21a86cd locally, no crash
2) Built master and 21a86cd in the appimage docker, no crash
3) Ran the appimage for 21a86cd, crash happens :(
Comment 6 Halla Rempt 2018-03-14 09:42:36 UTC
Okay, the issue is that scripts create actions, and those actions are added to each main window as the mainwindow is created. Then when a mainwindow is deleted, those actions are deleted (because they are reparented to the main window's action manager...), and the other main window now has a pointer to a deleted action.
Comment 7 Halla Rempt 2018-03-14 09:56:48 UTC
Git commit e443dc644943b76ebc7f8d8060d626c435409ace by Boudewijn Rempt.
Committed on 14/03/2018 at 09:55.
Pushed by rempt into branch 'master'.

Rename KisViewPlugin to KisActionPlugin

These plugins are not created per-view, but per-mainwindow, and exist
so every main window can have its own actions, so this makes the naming
more clear.

M  +1    -1    libs/ui/CMakeLists.txt
R  +7    -7    libs/ui/KisActionPlugin.cpp [from: libs/ui/kis_view_plugin.cpp - 078% similarity]
R  +4    -4    libs/ui/KisActionPlugin.h [from: libs/ui/kis_view_plugin.h - 087% similarity]
M  +1    -1    plugins/dockers/throttle/ThrottlePlugin.h
M  +1    -1    plugins/extensions/animationrenderer/AnimationRenderer.cpp
M  +2    -2    plugins/extensions/animationrenderer/AnimationRenderer.h
M  +1    -1    plugins/extensions/bigbrother/bigbrother.cc
M  +2    -2    plugins/extensions/bigbrother/bigbrother.h
M  +1    -1    plugins/extensions/buginfo/buginfo.cpp
M  +2    -2    plugins/extensions/buginfo/buginfo.h
M  +1    -1    plugins/extensions/clonesarray/clonesarray.cpp
M  +2    -2    plugins/extensions/clonesarray/clonesarray.h
M  +1    -1    plugins/extensions/colorrange/colorrange.cc
M  +2    -2    plugins/extensions/colorrange/colorrange.h
M  +1    -1    plugins/extensions/colorspaceconversion/colorspaceconversion.cc
M  +2    -2    plugins/extensions/colorspaceconversion/colorspaceconversion.h
M  +1    -1    plugins/extensions/histogram/histogram.cc
M  +2    -2    plugins/extensions/histogram/histogram.h
M  +1    -1    plugins/extensions/imagesize/imagesize.cc
M  +2    -2    plugins/extensions/imagesize/imagesize.h
M  +1    -1    plugins/extensions/imagesplit/imagesplit.cpp
M  +2    -2    plugins/extensions/imagesplit/imagesplit.h
M  +1    -1    plugins/extensions/layergroupswitcher/layergroupswitcher.cpp
M  +2    -2    plugins/extensions/layergroupswitcher/layergroupswitcher.h
M  +1    -1    plugins/extensions/layersplit/layersplit.cpp
M  +2    -2    plugins/extensions/layersplit/layersplit.h
M  +1    -1    plugins/extensions/metadataeditor/metadataeditor.cc
M  +2    -2    plugins/extensions/metadataeditor/metadataeditor.h
M  +1    -1    plugins/extensions/modify_selection/modify_selection.cc
M  +2    -2    plugins/extensions/modify_selection/modify_selection.h
M  +1    -1    plugins/extensions/offsetimage/offsetimage.cpp
M  +2    -2    plugins/extensions/offsetimage/offsetimage.h
M  +1    -1    plugins/extensions/pykrita/plugin/plugin.cpp
M  +2    -2    plugins/extensions/pykrita/plugin/plugin.h
M  +1    -1    plugins/extensions/qmic/QMic.cpp
M  +2    -2    plugins/extensions/qmic/QMic.h
M  +1    -1    plugins/extensions/resourcemanager/resourcemanager.cpp
M  +2    -2    plugins/extensions/resourcemanager/resourcemanager.h
M  +1    -1    plugins/extensions/rotateimage/rotateimage.cc
M  +2    -2    plugins/extensions/rotateimage/rotateimage.h
M  +1    -1    plugins/extensions/separate_channels/kis_separate_channels_plugin.cc
M  +2    -2    plugins/extensions/separate_channels/kis_separate_channels_plugin.h
M  +1    -1    plugins/extensions/shearimage/shearimage.cc
M  +2    -2    plugins/extensions/shearimage/shearimage.h
M  +1    -1    plugins/extensions/waveletdecompose/waveletdecompose.cpp
M  +2    -2    plugins/extensions/waveletdecompose/waveletdecompose.h

https://commits.kde.org/krita/e443dc644943b76ebc7f8d8060d626c435409ace
Comment 8 Halla Rempt 2018-03-14 09:56:58 UTC
Git commit a59e3f6b8fd93827cafdb455ee5fe2e08fef7516 by Boudewijn Rempt.
Committed on 14/03/2018 at 09:56.
Pushed by rempt into branch 'krita/4.0'.

Rename KisViewPlugin to KisActionPlugin

These plugins are not created per-view, but per-mainwindow, and exist
so every main window can have its own actions, so this makes the naming
more clear.
(cherry picked from commit e443dc644943b76ebc7f8d8060d626c435409ace)

M  +1    -1    libs/ui/CMakeLists.txt
R  +7    -7    libs/ui/KisActionPlugin.cpp [from: libs/ui/kis_view_plugin.cpp - 078% similarity]
R  +4    -4    libs/ui/KisActionPlugin.h [from: libs/ui/kis_view_plugin.h - 087% similarity]
M  +1    -1    plugins/dockers/throttle/ThrottlePlugin.h
M  +1    -1    plugins/extensions/animationrenderer/AnimationRenderer.cpp
M  +2    -2    plugins/extensions/animationrenderer/AnimationRenderer.h
M  +1    -1    plugins/extensions/bigbrother/bigbrother.cc
M  +2    -2    plugins/extensions/bigbrother/bigbrother.h
M  +1    -1    plugins/extensions/buginfo/buginfo.cpp
M  +2    -2    plugins/extensions/buginfo/buginfo.h
M  +1    -1    plugins/extensions/clonesarray/clonesarray.cpp
M  +2    -2    plugins/extensions/clonesarray/clonesarray.h
M  +1    -1    plugins/extensions/colorrange/colorrange.cc
M  +2    -2    plugins/extensions/colorrange/colorrange.h
M  +1    -1    plugins/extensions/colorspaceconversion/colorspaceconversion.cc
M  +2    -2    plugins/extensions/colorspaceconversion/colorspaceconversion.h
M  +1    -1    plugins/extensions/histogram/histogram.cc
M  +2    -2    plugins/extensions/histogram/histogram.h
M  +1    -1    plugins/extensions/imagesize/imagesize.cc
M  +2    -2    plugins/extensions/imagesize/imagesize.h
M  +1    -1    plugins/extensions/imagesplit/imagesplit.cpp
M  +2    -2    plugins/extensions/imagesplit/imagesplit.h
M  +1    -1    plugins/extensions/layergroupswitcher/layergroupswitcher.cpp
M  +2    -2    plugins/extensions/layergroupswitcher/layergroupswitcher.h
M  +1    -1    plugins/extensions/layersplit/layersplit.cpp
M  +2    -2    plugins/extensions/layersplit/layersplit.h
M  +1    -1    plugins/extensions/metadataeditor/metadataeditor.cc
M  +2    -2    plugins/extensions/metadataeditor/metadataeditor.h
M  +1    -1    plugins/extensions/modify_selection/modify_selection.cc
M  +2    -2    plugins/extensions/modify_selection/modify_selection.h
M  +1    -1    plugins/extensions/offsetimage/offsetimage.cpp
M  +2    -2    plugins/extensions/offsetimage/offsetimage.h
M  +1    -1    plugins/extensions/pykrita/plugin/plugin.cpp
M  +2    -2    plugins/extensions/pykrita/plugin/plugin.h
M  +1    -1    plugins/extensions/qmic/QMic.cpp
M  +2    -2    plugins/extensions/qmic/QMic.h
M  +1    -1    plugins/extensions/resourcemanager/resourcemanager.cpp
M  +2    -2    plugins/extensions/resourcemanager/resourcemanager.h
M  +1    -1    plugins/extensions/rotateimage/rotateimage.cc
M  +2    -2    plugins/extensions/rotateimage/rotateimage.h
M  +1    -1    plugins/extensions/separate_channels/kis_separate_channels_plugin.cc
M  +2    -2    plugins/extensions/separate_channels/kis_separate_channels_plugin.h
M  +1    -1    plugins/extensions/shearimage/shearimage.cc
M  +2    -2    plugins/extensions/shearimage/shearimage.h
M  +1    -1    plugins/extensions/waveletdecompose/waveletdecompose.cpp
M  +2    -2    plugins/extensions/waveletdecompose/waveletdecompose.h

https://commits.kde.org/krita/a59e3f6b8fd93827cafdb455ee5fe2e08fef7516
Comment 9 Halla Rempt 2018-03-14 13:24:18 UTC
Git commit e9b0661657f67ac4d1186641a78357f695a9a717 by Boudewijn Rempt.
Committed on 14/03/2018 at 13:24.
Pushed by rempt into branch 'master'.

Create actions per-window instead of per-application

Note that this changes the libkis scripting api. The Extension
class now has two methods: setup and createActions. Old code
was like this:

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from krita import *

def hello():
    QMessageBox.information(QWidget(), "Test", "Hello World")

class HelloExtension(Extension):

  def __init__(self, parent):
      super().__init__(parent)

  def setup(self):
      action = Krita.createAction("Hello")
      action.triggered.connect(hello)

Krita.instance().addExtension(HelloExtension(Krita.instance()))

New code is like this:

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from krita import *

def hello():
    QMessageBox.information(QWidget(), "Test", "Hello World")

class HelloExtension(Extension):

  def __init__(self, parent):
      super().__init__(parent)

  def setup(self):
      pass

  def createActions(self, window):
      action = window.createAction("Hello")
      action.triggered.connect(hello)

Krita.instance().addExtension(HelloExtension(Krita.instance()))

This also adds a new parameter to createAction: the menu location. This
is a path separated by /, for instance tools/scripts. Note that this
path must exist, otherwise a crash will happen. The paths are defined in
krita4.xmlgui...

Note: we're still leaking Action objects created in Window::createAction;
that's the next fix.

CCMAIL:kimageshop@kde.org

M  +1    -1    krita/krita4.xmlgui
M  +0    -11   libs/libkis/Action.cpp
M  +0    -12   libs/libkis/Action.h
M  +22   -14   libs/libkis/Extension.h
M  +10   -20   libs/libkis/Krita.cpp
M  +4    -10   libs/libkis/Krita.h
M  +5    -2    libs/libkis/Mainpage.dox
M  +35   -1    libs/libkis/Window.cpp
M  +17   -0    libs/libkis/Window.h
M  +0    -1    libs/ui/CMakeLists.txt
M  +0    -11   libs/ui/KisPart.cpp
M  +0    -11   libs/ui/KisPart.h
M  +0    -10   libs/ui/KisViewManager.cpp
M  +0    -3    libs/ui/KisViewManager.h
D  +0    -90   libs/ui/kis_script_manager.cpp
D  +0    -52   libs/ui/kis_script_manager.h
M  +2    -2    plugins/extensions/pykrita/plugin/plugin.cpp
M  +1    -2    plugins/extensions/pykrita/sip/krita/Action.sip
M  +1    -0    plugins/extensions/pykrita/sip/krita/Extension.sip
M  +0    -1    plugins/extensions/pykrita/sip/krita/Krita.sip
M  +1    -0    plugins/extensions/pykrita/sip/krita/Window.sip
M  +4    -1    plugins/python/assignprofiledialog/assignprofiledialog.py
M  +4    -1    plugins/python/colorspace/colorspace.py
M  +4    -1    plugins/python/documenttools/documenttools.py
M  +4    -1    plugins/python/exportlayers/exportlayers.py
M  +4    -1    plugins/python/filtermanager/filtermanager.py
M  +4    -2    plugins/python/hello/hello.py
M  +4    -1    plugins/python/highpass/highpass.py
M  +4    -1    plugins/python/scripter/scripter.py
M  +7    -9    plugins/python/tenbrushes/tenbrushes.py
M  +7    -7    plugins/python/tenscripts/tenscripts.py

https://commits.kde.org/krita/e9b0661657f67ac4d1186641a78357f695a9a717
Comment 10 Halla Rempt 2018-03-14 13:24:40 UTC
Git commit 3de294bc464390acc33be19aa89a74ebfb18963e by Boudewijn Rempt.
Committed on 14/03/2018 at 13:24.
Pushed by rempt into branch 'krita/4.0'.

Create actions per-window instead of per-application

Note that this changes the libkis scripting api. The Extension
class now has two methods: setup and createActions. Old code
was like this:

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from krita import *

def hello():
    QMessageBox.information(QWidget(), "Test", "Hello World")

class HelloExtension(Extension):

  def __init__(self, parent):
      super().__init__(parent)

  def setup(self):
      action = Krita.createAction("Hello")
      action.triggered.connect(hello)

Krita.instance().addExtension(HelloExtension(Krita.instance()))

New code is like this:

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from krita import *

def hello():
    QMessageBox.information(QWidget(), "Test", "Hello World")

class HelloExtension(Extension):

  def __init__(self, parent):
      super().__init__(parent)

  def setup(self):
      pass

  def createActions(self, window):
      action = window.createAction("Hello")
      action.triggered.connect(hello)

Krita.instance().addExtension(HelloExtension(Krita.instance()))

This also adds a new parameter to createAction: the menu location. This
is a path separated by /, for instance tools/scripts. Note that this
path must exist, otherwise a crash will happen. The paths are defined in
krita4.xmlgui...

Note: we're still leaking Action objects created in Window::createAction;
that's the next fix.

CCMAIL:kimageshop@kde.org
(cherry picked from commit e9b0661657f67ac4d1186641a78357f695a9a717)

M  +1    -1    krita/krita4.xmlgui
M  +0    -11   libs/libkis/Action.cpp
M  +0    -12   libs/libkis/Action.h
M  +22   -14   libs/libkis/Extension.h
M  +10   -20   libs/libkis/Krita.cpp
M  +4    -10   libs/libkis/Krita.h
M  +5    -2    libs/libkis/Mainpage.dox
M  +35   -1    libs/libkis/Window.cpp
M  +17   -0    libs/libkis/Window.h
M  +0    -1    libs/ui/CMakeLists.txt
M  +0    -11   libs/ui/KisPart.cpp
M  +0    -11   libs/ui/KisPart.h
M  +0    -10   libs/ui/KisViewManager.cpp
M  +0    -3    libs/ui/KisViewManager.h
D  +0    -90   libs/ui/kis_script_manager.cpp
D  +0    -52   libs/ui/kis_script_manager.h
M  +2    -2    plugins/extensions/pykrita/plugin/plugin.cpp
M  +1    -2    plugins/extensions/pykrita/sip/krita/Action.sip
M  +1    -0    plugins/extensions/pykrita/sip/krita/Extension.sip
M  +0    -1    plugins/extensions/pykrita/sip/krita/Krita.sip
M  +1    -0    plugins/extensions/pykrita/sip/krita/Window.sip
M  +4    -1    plugins/python/assignprofiledialog/assignprofiledialog.py
M  +4    -1    plugins/python/colorspace/colorspace.py
M  +4    -1    plugins/python/documenttools/documenttools.py
M  +4    -1    plugins/python/exportlayers/exportlayers.py
M  +4    -1    plugins/python/filtermanager/filtermanager.py
M  +4    -2    plugins/python/hello/hello.py
M  +4    -1    plugins/python/highpass/highpass.py
M  +4    -1    plugins/python/scripter/scripter.py
M  +7    -9    plugins/python/tenbrushes/tenbrushes.py
M  +7    -7    plugins/python/tenscripts/tenscripts.py

https://commits.kde.org/krita/3de294bc464390acc33be19aa89a74ebfb18963e