Browse Source

GTextEditor: Double-clicking on a span should select the span

This makes double-clicking on a C++ token in HackStudio select the
whole token, which is pretty nice. It's not perfect in all cases,
but a lot nicer than just expanding until we hit whitespace. :^)
Andreas Kling 5 years ago
parent
commit
db5178fb8f
1 changed files with 20 additions and 8 deletions
  1. 20 8
      Libraries/LibGUI/GTextEditor.cpp

+ 20 - 8
Libraries/LibGUI/GTextEditor.cpp

@@ -164,16 +164,28 @@ void GTextEditor::doubleclick_event(GMouseEvent& event)
     auto start = text_position_at(event.position());
     auto end = start;
     auto& line = m_lines[start.line()];
-    while (start.column() > 0) {
-        if (isspace(line.characters()[start.column() - 1]))
-            break;
-        start.set_column(start.column() - 1);
-    }
 
-    while (end.column() < line.length()) {
-        if (isspace(line.characters()[end.column()]))
+    if (m_spans.is_empty()) {
+        while (start.column() > 0) {
+            if (isspace(line.characters()[start.column() - 1]))
+                break;
+            start.set_column(start.column() - 1);
+        }
+
+        while (end.column() < line.length()) {
+            if (isspace(line.characters()[end.column()]))
+                break;
+            end.set_column(end.column() + 1);
+        }
+    } else {
+        for (auto& span : m_spans) {
+            if (!span.range.contains(start))
+                continue;
+            start = span.range.start();
+            end = span.range.end();
+            end.set_column(end.column() + 1);
             break;
-        end.set_column(end.column() + 1);
+        }
     }
 
     m_selection.set(start, end);