[graphics/krita] libs/flake/tools: Add segment deselection
Dmitry Kazakov <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 8fe46edfa0c2bb8b0ebf3e9c9d361e1ec9e643db by Dmitry Kazakov, on behalf of Luna Lovecraft.
Committed on 27/07/2026 at 11:41.
Pushed by dkazakov into branch 'master'.
Add segment deselection
Now the user can Shift click a selected segment and it will be
deselected
M +12 -3 libs/flake/tools/KoPathTool.cpp
https://invent.kde.org/graphics/krita/-/commit/8fe46edfa0c2bb8b0ebf3e9c9d361e1ec9e643db
diff --git a/libs/flake/tools/KoPathTool.cpp b/libs/flake/tools/KoPathTool.cpp
index 7430c05fb02..45eb1250ecb 100644
--- a/libs/flake/tools/KoPathTool.cpp
+++ b/libs/flake/tools/KoPathTool.cpp
@@ -573,6 +573,8 @@ void KoPathTool::mousePressEvent(KoPointerEvent *event)
if (event->button() & Qt::LeftButton) {
+ bool shift_pressed = (event->modifiers() & Qt::ShiftModifier);
+
// check if we hit a path segment
if (m_activeSegment && m_activeSegment->isValid()) {
@@ -580,8 +582,15 @@ void KoPathTool::mousePressEvent(KoPointerEvent *event)
KoPathPointIndex index = shape->pathPointIndex(m_activeSegment->segmentStart);
KoPathSegment segment = shape->segmentByIndex(index);
- m_pointSelection.add(segment.first(), !(event->modifiers() & Qt::ShiftModifier));
- m_pointSelection.add(segment.second(), false);
+ // The segment is selected so now need to deselect it
+ if (m_pointSelection.contains(segment.first()) && m_pointSelection.contains(segment.second())
+ && shift_pressed) {
+ m_pointSelection.remove(segment.first());
+ m_pointSelection.remove(segment.second());
+ } else {
+ m_pointSelection.add(segment.first(), !shift_pressed);
+ m_pointSelection.add(segment.second(), false);
+ }
KoPathPointData data(shape, index);
m_currentStrategy.reset(new KoPathSegmentChangeStrategy(this, event->point, data, m_activeSegment->positionOnSegment));
@@ -593,7 +602,7 @@ void KoPathTool::mousePressEvent(KoPointerEvent *event)
if (shape && !selection->isSelected(shape)) {
- if (!(event->modifiers() & Qt::ShiftModifier)) {
+ if (!shift_pressed) {
selection->deselectAll();
}