Summary: | Following Bug #408593, quick duplicating and moving layers now causes hanging | ||
---|---|---|---|
Product: | [Applications] krita | Reporter: | Paolo Puggioni <me> |
Component: | Layer Stack | Assignee: | Dmitry Kazakov <dimula73> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | askinner432, halla |
Priority: | NOR | ||
Version: | 4.2.2 | ||
Target Milestone: | --- | ||
Platform: | Appimage | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Attachments: | Quick video of the bug |
Description
Paolo Puggioni
2019-06-28 10:43:11 UTC
Assigning to Dmitry Git commit 21889437905f05266092c854beb3282dd5f4b7a4 by Dmitry Kazakov. Committed on 30/07/2019 at 14:16. Pushed by dkazakov into branch 'master'. Make Move Tool asynchronous Calling blockUntilOperationsFinished() from tool event handler makes KisShortcutMatcher to be entered recursively. It basically breaks events flow and makes KisShortcutMatcher crazy. I tried to move blocking into the shortcuts matcher itself (so that it could treat recursive entrance correctly), but it doesn't handle special cases like KisToolTransform::activate(), which should also block (if we keep them blocking). M +9 -1 libs/ui/tool/strokes/move_stroke_strategy.cpp M +6 -1 libs/ui/tool/strokes/move_stroke_strategy.h M +1 -0 plugins/tools/basictools/CMakeLists.txt A +60 -0 plugins/tools/basictools/KisMoveBoundsCalculationJob.cpp [License: GPL (v2+)] A +46 -0 plugins/tools/basictools/KisMoveBoundsCalculationJob.h [License: GPL (v2+)] M +54 -38 plugins/tools/basictools/kis_tool_move.cc M +4 -1 plugins/tools/basictools/kis_tool_move.h M +4 -1 plugins/tools/basictools/strokes/move_selection_stroke_strategy.cpp M +8 -1 plugins/tools/basictools/strokes/move_selection_stroke_strategy.h https://invent.kde.org/kde/krita/commit/21889437905f05266092c854beb3282dd5f4b7a4 Git commit 008503fb5c5590cfe74c73c1e1a76b26a944e309 by Dmitry Kazakov. Committed on 30/07/2019 at 14:16. Pushed by dkazakov into branch 'master'. Make shape painting tools unblocking (use strokes) Opening a waiting dialog may make the shortcuts matcher unhappy, so we should avoid that. Related: bug 409968, bug 408826 M +3 -4 libs/ui/tool/kis_tool_shape.cc M +1 -2 plugins/tools/basictools/kis_tool_ellipse.cc M +42 -25 plugins/tools/basictools/kis_tool_gradient.cc M +1 -3 plugins/tools/basictools/kis_tool_rectangle.cc M +0 -2 plugins/tools/tool_polygon/kis_tool_polygon.cc M +0 -3 plugins/tools/tool_polyline/kis_tool_polyline.cc https://invent.kde.org/kde/krita/commit/008503fb5c5590cfe74c73c1e1a76b26a944e309 The bug is now fixed in https://invent.kde.org/kde/krita/commit/21889437905f05266092c854beb3282dd5f4b7a4 *** Bug 408826 has been marked as a duplicate of this bug. *** Git commit d6f28168520f376a0c35b7c38f6590f48023d3e0 by Boudewijn Rempt, on behalf of Dmitry Kazakov. Committed on 31/07/2019 at 08:39. Pushed by rempt into branch 'krita/4.2'. Make Move Tool asynchronous Calling blockUntilOperationsFinished() from tool event handler makes KisShortcutMatcher to be entered recursively. It basically breaks events flow and makes KisShortcutMatcher crazy. I tried to move blocking into the shortcuts matcher itself (so that it could treat recursive entrance correctly), but it doesn't handle special cases like KisToolTransform::activate(), which should also block (if we keep them blocking). M +9 -1 libs/ui/tool/strokes/move_stroke_strategy.cpp M +6 -1 libs/ui/tool/strokes/move_stroke_strategy.h M +1 -0 plugins/tools/basictools/CMakeLists.txt A +60 -0 plugins/tools/basictools/KisMoveBoundsCalculationJob.cpp [License: GPL (v2+)] A +46 -0 plugins/tools/basictools/KisMoveBoundsCalculationJob.h [License: GPL (v2+)] M +54 -38 plugins/tools/basictools/kis_tool_move.cc M +4 -1 plugins/tools/basictools/kis_tool_move.h M +4 -1 plugins/tools/basictools/strokes/move_selection_stroke_strategy.cpp M +8 -1 plugins/tools/basictools/strokes/move_selection_stroke_strategy.h https://invent.kde.org/kde/krita/commit/d6f28168520f376a0c35b7c38f6590f48023d3e0 Git commit c9ed22b11d794d5c81e04a42e8b271bc041f4a36 by Boudewijn Rempt, on behalf of Dmitry Kazakov. Committed on 31/07/2019 at 08:39. Pushed by rempt into branch 'krita/4.2'. Make KisToolTransform fully asynchronous Now all initialization of the transform tool has been moved into the stroke's context. It means that the tool doesn't need to block event loop until it image is finished anymore. The fix uses he new features of the strokes framework, specifically mutated stroke jobs. M +2 -1 libs/command/kis_command_ids.h M +1 -0 libs/command/kundo2commandextradata.h M +1 -0 libs/image/CMakeLists.txt A +80 -0 libs/image/commands_new/KisHoldUIUpdatesCommand.cpp [License: GPL (v2+)] C +19 -7 libs/image/commands_new/KisHoldUIUpdatesCommand.h [from: libs/command/kundo2commandextradata.h - 051% similarity] M +40 -10 libs/image/commands_new/kis_saved_commands.cpp M +4 -0 libs/image/commands_new/kis_saved_commands.h M +4 -0 libs/image/kis_crop_saved_extra_data.h M +20 -0 libs/image/kis_image.cc M +29 -0 libs/image/kis_image.h M +7 -0 libs/image/kis_image_interfaces.h M +20 -5 libs/image/kis_stroke_strategy_undo_command_based.cpp M +23 -1 libs/image/kis_stroke_strategy_undo_command_based.h M +62 -249 plugins/tools/tool_transform2/kis_tool_transform.cc M +4 -32 plugins/tools/tool_transform2/kis_tool_transform.h M +1 -32 plugins/tools/tool_transform2/kis_tool_transform_config_widget.cpp M +93 -0 plugins/tools/tool_transform2/kis_transform_utils.cpp M +12 -0 plugins/tools/tool_transform2/kis_transform_utils.h M +222 -14 plugins/tools/tool_transform2/strokes/transform_stroke_strategy.cpp M +41 -6 plugins/tools/tool_transform2/strokes/transform_stroke_strategy.h M +18 -7 plugins/tools/tool_transform2/transform_transaction_properties.h https://invent.kde.org/kde/krita/commit/c9ed22b11d794d5c81e04a42e8b271bc041f4a36 Git commit df7f7a9ac7e49a44ef83062c19a3d62510a0ad49 by Boudewijn Rempt, on behalf of Dmitry Kazakov. Committed on 31/07/2019 at 08:39. Pushed by rempt into branch 'krita/4.2'. Make shape painting tools unblocking (use strokes) Opening a waiting dialog may make the shortcuts matcher unhappy, so we should avoid that. Related: bug 409968, bug 408826 M +3 -4 libs/ui/tool/kis_tool_shape.cc M +1 -2 plugins/tools/basictools/kis_tool_ellipse.cc M +42 -25 plugins/tools/basictools/kis_tool_gradient.cc M +1 -3 plugins/tools/basictools/kis_tool_rectangle.cc M +0 -2 plugins/tools/tool_polygon/kis_tool_polygon.cc M +0 -3 plugins/tools/tool_polyline/kis_tool_polyline.cc https://invent.kde.org/kde/krita/commit/df7f7a9ac7e49a44ef83062c19a3d62510a0ad49 Git commit dc6bf17a96556c930f63e4cfbd42591f79987573 by Boudewijn Rempt, on behalf of Dmitry Kazakov. Committed on 31/07/2019 at 08:39. Pushed by rempt into branch 'krita/4.2'. Make KisShortcutMatcher be more tolerant to recursive entering Some tools, e.g. text tool, may open a dialog right inside beginPrimaryAction() callback. It may make KisShortcutMatcher crazy, because all the modal dialogs have hey own event loop, therefore the state machine of the shortcuts matcher will be broken. This patch makes the matcher a bit more tolerant to such faults. It just manually checks if it is entered more that once, and resets the action in case a recursion is detected. Related: bug 409968, bug 408826 M +168 -30 libs/ui/input/kis_shortcut_matcher.cpp M +1 -0 libs/ui/input/kis_shortcut_matcher.h https://invent.kde.org/kde/krita/commit/dc6bf17a96556c930f63e4cfbd42591f79987573 |