[graphics/krita/krita/6.0] libs/flake/tools: Add segment deselection

Dmitry Kazakov <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 1ccf3b9d150d6a5d3cf164c153c1a4751330df08 by Dmitry Kazakov, on behalf of Luna Lovecraft.
Committed on 27/07/2026 at 11:46.
Pushed by dkazakov into branch 'krita/6.0'.

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/1ccf3b9d150d6a5d3cf164c153c1a4751330df08

diff --git a/libs/flake/tools/KoPathTool.cpp b/libs/flake/tools/KoPathTool.cpp
index 759e3fbdc85..3ab4822eaef 100644
--- a/libs/flake/tools/KoPathTool.cpp
+++ b/libs/flake/tools/KoPathTool.cpp
@@ -570,6 +570,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()) {
 
@@ -577,8 +579,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));
@@ -590,7 +599,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.