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. :^)
This commit is contained in:
Andreas Kling 2019-10-27 11:10:32 +01:00
parent 8fa466e496
commit db5178fb8f
Notes: sideshowbarker 2024-07-19 11:31:26 +09:00

View File

@ -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);