1) Start a stroke with a brush tool (do not release the mouse) 2) Press 'Q'. -> assert The switching of the tools should not be available during the stroke. And/or we should handle it somehow differently.
Confirmed: ASSERT (krita): "mode() == KisTool::PAINT_MODE" in file /home/boud/kde/src/2.8/krita/ui/tool/kis_tool_freehand.cc, line 217 KCrash: Application 'krita' crashing... KCrash: Attempting to start /usr/lib64/kde4/libexec/drkonqi from kdeinit sock_file=/home/boud/.kde4/socket-linux-s0cw/kdeinit4__0 QSocketNotifier: Invalid socket 33 and type 'Read', disabling.. Thread 1 (Thread 0x7fa820dee8c0 (LWP 25379)): [KCrash Handler] #5 0x00007fa817d76849 in raise () from /lib64/libc.so.6 #6 0x00007fa817d77cd8 in abort () from /lib64/libc.so.6 #7 0x00007fa818dff204 in qt_message_output(QtMsgType, char const*) () from /usr/lib64/libQtCore.so.4 #8 0x00007fa818dff389 in ?? () from /usr/lib64/libQtCore.so.4 #9 0x00007fa818dffb94 in qFatal(char const*, ...) () from /usr/lib64/libQtCore.so.4 #10 0x00007fa81f9e93f4 in kis_assert_common (assertion=<optimized out>, file=<optimized out>, line=217, throwException=<optimized out>) at /home/boud/kde/src/2.8/krita/image/kis_assert.cpp:64 #11 0x00007fa81ffcd7c4 in KisToolProxy::forwardToTool (this=this@entry=0x5a35660, state=state@entry=KisToolProxy::END, action=action@entry=KisTool::Primary, event=event@entry=0x7fffc678d940, docPoint=...) at /home/boud/kde/src/2.8/krita/ui/canvas/kis_tool_proxy.cpp:166 #12 0x00007fa81ffcdb79 in KisToolProxy::forwardEvent (this=0x5a35660, state=state@entry=KisToolProxy::END, action=action@entry=KisTool::Primary, event=event@entry=0x7fffc678d940, originalEvent=originalEvent@entry=0x7fffc678d940, lastTabletEvent=lastTabletEvent@entry=0x0, canvasOriginWorkaround=...) at /home/boud/kde/src/2.8/krita/ui/canvas/kis_tool_proxy.cpp:119 #13 0x00007fa82026396a in KisToolInvocationAction::end (this=0x5a36030, event=0x7fffc678d940) at /home/boud/kde/src/2.8/krita/ui/input/kis_tool_invocation_action.cpp:101 #14 0x00007fa82026cd79 in KisShortcutMatcher::tryEndRunningShortcut (this=this@entry=0x5a35bf0, button=<optimized out>, event=event@entry=0x7fffc678d940) at /home/boud/kde/src/2.8/krita/ui/input/kis_shortcut_matcher.cpp:410 #15 0x00007fa82026d77a in KisShortcutMatcher::buttonReleased (this=this@entry=0x5a35bf0, button=Qt::LeftButton, event=event@entry=0x7fffc678d940) at /home/boud/kde/src/2.8/krita/ui/input/kis_shortcut_matcher.cpp:194 #16 0x00007fa820260bf9 in KisInputManager::eventFilter (this=0x5a35b00, object=<optimized out>, event=0x7fffc678d940) at /home/boud/kde/src/2.8/krita/ui/input/kis_input_manager.cpp:560 #17 0x00007fa818f09216 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /usr/lib64/libQtCore.so.4 #18 0x00007fa819b9688c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQtGui.so.4 #19 0x00007fa819b9cfad in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQtGui.so.4 #20 0x00007fa81f605947 in KoApplication::notify (this=<optimized out>, receiver=0x5a36540, event=0x7fffc678d940) at /home/boud/kde/src/2.8/libs/main/KoApplication.cpp:549 #21 0x00007fa818f090ad in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQtCore.so.4 #22 0x00007fa819b9c763 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /usr/lib64/libQtGui.so.4 #23 0x00007fa819c0df7b in ?? () from /usr/lib64/libQtGui.so.4 #24 0x00007fa819c0c9ec in QApplication::x11ProcessEvent(_XEvent*) () from /usr/lib64/libQtGui.so.4 #25 0x00007fa819c341f0 in ?? () from /usr/lib64/libQtGui.so.4 #26 0x00007fa818f07d0f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQtCore.so.4 #27 0x00007fa818f08005 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQtCore.so.4 #28 0x00007fa81a038cdc in QDialog::exec() () from /usr/lib64/libQtGui.so.4 #29 0x00007fa81a057930 in ?? () from /usr/lib64/libQtGui.so.4 #30 0x00007fa81a057a9f in QMessageBox::critical(QWidget*, QString const&, QString const&, QFlags<QMessageBox::StandardButton>, QMessageBox::StandardButton) () from /usr/lib64/libQtGui.so.4 #31 0x00007fa81f9e92ac in kis_assert_common (assertion=<optimized out>, file=<optimized out>, line=204, throwException=<optimized out>) at /home/boud/kde/src/2.8/krita/image/kis_assert.cpp:61 #32 0x00007fa81ffcd77c in KisToolProxy::forwardToTool (this=this@entry=0x5a35660, state=state@entry=KisToolProxy::CONTINUE, action=action@entry=KisTool::Primary, event=event@entry=0x7fffc678e760, docPoint=...) at /home/boud/kde/src/2.8/krita/ui/canvas/kis_tool_proxy.cpp:159 #33 0x00007fa81ffcdb79 in KisToolProxy::forwardEvent (this=0x5a35660, state=state@entry=KisToolProxy::CONTINUE, action=action@entry=KisTool::Primary, event=event@entry=0x7fffc678e760, originalEvent=originalEvent@entry=0x7fffc678e760, lastTabletEvent=lastTabletEvent@entry=0x0, canvasOriginWorkaround=...) at /home/boud/kde/src/2.8/krita/ui/canvas/kis_tool_proxy.cpp:119 #34 0x00007fa8202623da in KisToolInvocationAction::inputEvent (this=0x5a36030, event=0x7fffc678e760) at /home/boud/kde/src/2.8/krita/ui/input/kis_tool_invocation_action.cpp:116 #35 0x00007fa82026ca80 in KisShortcutMatcher::mouseMoved (this=this@entry=0x5a35bf0, event=event@entry=0x7fffc678e760) at /home/boud/kde/src/2.8/krita/ui/input/kis_shortcut_matcher.cpp:222 #36 0x00007fa820260921 in KisInputManager::eventFilter (this=0x5a35b00, object=<optimized out>, event=0x7fffc678e760) at /home/boud/kde/src/2.8/krita/ui/input/kis_input_manager.cpp:601 #37 0x00007fa818f09216 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /usr/lib64/libQtCore.so.4 #38 0x00007fa819b9688c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQtGui.so.4 #39 0x00007fa819b9cfad in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQtGui.so.4 #40 0x00007fa81f605947 in KoApplication::notify (this=<optimized out>, receiver=0x5a36540, event=0x7fffc678e760) at /home/boud/kde/src/2.8/libs/main/KoApplication.cpp:549 #41 0x00007fa818f090ad in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/libQtCore.so.4 #42 0x00007fa819b9c763 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /usr/lib64/libQtGui.so.4 #43 0x00007fa819c0df7b in ?? () from /usr/lib64/libQtGui.so.4 #44 0x00007fa819c0c9ec in QApplication::x11ProcessEvent(_XEvent*) () from /usr/lib64/libQtGui.so.4 #45 0x00007fa819c341f0 in ?? () from /usr/lib64/libQtGui.so.4 #46 0x00007fa818f07d0f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQtCore.so.4 #47 0x00007fa818f08005 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQtCore.so.4 #48 0x00007fa818f0d13b in QCoreApplication::exec() () from /usr/lib64/libQtCore.so.4 #49 0x00007fa8207c2b45 in kdemain (argc=<optimized out>, argv=<optimized out>) at /home/boud/kde/src/2.8/krita/main.cc:99 #50 0x00007fa817d62be5 in __libc_start_main () from /lib64/libc.so.6 #51 0x00000000004009f1 in _start () at ../sysdeps/x86_64/start.S:122
Git commit cbfaf5109069747618c140f0dc60997a0cba896e by Dmitry Kazakov. Committed on 25/12/2013 at 07:53. Pushed by dkazakov into branch 'master'. Remove an assert when switching a tool while doing a stroke Well, using macro for this purpose might be a bit ugly, but this is the best thing we can do until we invent some strategy-based event handling for the tools. Ideally, every tool should provide a set of strategies for each of the action. Such strategy could be registered in the tool proxy on KisTool::activate() and deregistered on KisTool::deactivate(). But we are on a long way till that. M +2 -2 krita/plugins/tools/defaulttools/kis_tool_colorpicker.cc M +1 -1 krita/plugins/tools/defaulttools/kis_tool_fill.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_gradient.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_line.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_measure.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_move.cc M +2 -2 krita/plugins/tools/selectiontools/kis_tool_select_brush.cc M +2 -2 krita/plugins/tools/selectiontools/kis_tool_select_outline.cc M +2 -2 krita/plugins/tools/tool_crop/kis_tool_crop.cc M +8 -0 krita/ui/tool/kis_tool.h M +2 -2 krita/ui/tool/kis_tool_freehand.cc M +1 -1 krita/ui/tool/kis_tool_polyline_base.cpp M +2 -2 krita/ui/tool/kis_tool_rectangle_base.cpp http://commits.kde.org/calligra/cbfaf5109069747618c140f0dc60997a0cba896e
Git commit 8bcfadfb2a691f682c22e8bf488ec581654ad906 by Dmitry Kazakov. Committed on 25/12/2013 at 07:53. Pushed by dkazakov into branch 'calligra/2.8'. Remove an assert when switching a tool while doing a stroke Well, using macro for this purpose might be a bit ugly, but this is the best thing we can do until we invent some strategy-based event handling for the tools. Ideally, every tool should provide a set of strategies for each of the action. Such strategy could be registered in the tool proxy on KisTool::activate() and deregistered on KisTool::deactivate(). But we are on a long way till that. M +2 -2 krita/plugins/tools/defaulttools/kis_tool_colorpicker.cc M +1 -1 krita/plugins/tools/defaulttools/kis_tool_fill.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_gradient.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_line.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_measure.cc M +2 -2 krita/plugins/tools/defaulttools/kis_tool_move.cc M +2 -2 krita/plugins/tools/selectiontools/kis_tool_select_brush.cc M +2 -2 krita/plugins/tools/selectiontools/kis_tool_select_outline.cc M +2 -2 krita/plugins/tools/tool_crop/kis_tool_crop.cc M +8 -0 krita/ui/tool/kis_tool.h M +2 -2 krita/ui/tool/kis_tool_freehand.cc M +1 -1 krita/ui/tool/kis_tool_polyline_base.cpp M +2 -2 krita/ui/tool/kis_tool_rectangle_base.cpp http://commits.kde.org/calligra/8bcfadfb2a691f682c22e8bf488ec581654ad906