[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();
                     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.