mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 07:08:10 +00:00
GTextEditor: Double-clicking on a word should select that word.
This commit is contained in:
parent
44673c4f3b
commit
e2e2c78332
2 changed files with 30 additions and 0 deletions
|
@ -11,6 +11,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
GTextEditor::GTextEditor(Type type, GWidget* parent)
|
GTextEditor::GTextEditor(Type type, GWidget* parent)
|
||||||
: GScrollableWidget(parent)
|
: GScrollableWidget(parent)
|
||||||
|
@ -129,6 +130,34 @@ GTextPosition GTextEditor::text_position_at(const Point& a_position) const
|
||||||
return { line_index, column_index };
|
return { line_index, column_index };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GTextEditor::doubleclick_event(GMouseEvent& event)
|
||||||
|
{
|
||||||
|
if (event.button() != GMouseButton::Left)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_in_drag_select = false;
|
||||||
|
|
||||||
|
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()]))
|
||||||
|
break;
|
||||||
|
end.set_column(end.column() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_selection.set(start, end);
|
||||||
|
set_cursor(end);
|
||||||
|
update();
|
||||||
|
did_update_selection();
|
||||||
|
}
|
||||||
|
|
||||||
void GTextEditor::mousedown_event(GMouseEvent& event)
|
void GTextEditor::mousedown_event(GMouseEvent& event)
|
||||||
{
|
{
|
||||||
if (event.button() == GMouseButton::Left) {
|
if (event.button() == GMouseButton::Left) {
|
||||||
|
|
|
@ -125,6 +125,7 @@ private:
|
||||||
virtual void mousedown_event(GMouseEvent&) override;
|
virtual void mousedown_event(GMouseEvent&) override;
|
||||||
virtual void mouseup_event(GMouseEvent&) override;
|
virtual void mouseup_event(GMouseEvent&) override;
|
||||||
virtual void mousemove_event(GMouseEvent&) override;
|
virtual void mousemove_event(GMouseEvent&) override;
|
||||||
|
virtual void doubleclick_event(GMouseEvent&) override;
|
||||||
virtual void keydown_event(GKeyEvent&) override;
|
virtual void keydown_event(GKeyEvent&) override;
|
||||||
virtual void focusin_event(CEvent&) override;
|
virtual void focusin_event(CEvent&) override;
|
||||||
virtual void focusout_event(CEvent&) override;
|
virtual void focusout_event(CEvent&) override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue