Bug 328956 - Pressing 'q' while making a stroke asserts in the Mouse Move event handler
Summary: Pressing 'q' while making a stroke asserts in the Mouse Move event handler
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Usability (show other bugs)
Version: git master (please specify the git hash!)
Platform: unspecified Linux
: NOR normal
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-12-18 09:17 UTC by Dmitry Kazakov
Modified: 2013-12-28 14:58 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dmitry Kazakov 2013-12-18 09:17:52 UTC
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.
Comment 1 Halla Rempt 2013-12-18 11:03:54 UTC
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
Comment 2 Dmitry Kazakov 2013-12-25 07:55:19 UTC
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
Comment 3 Dmitry Kazakov 2013-12-28 14:58:27 UTC
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