From 18cb1f8e440a5759f37e3d0682b0ed9e3f5a38fe Mon Sep 17 00:00:00 2001 From: Ignacio Etcheverry Date: Sat, 18 Jun 2016 16:14:43 +0200 Subject: [PATCH] LineEdit: Fix and improve selection behaviour (cherry picked from commit 99612207b7ddc1b4e9db06fbc7e7f11cfe4e51fa) --- scene/gui/line_edit.cpp | 46 +++++++++++++++++++++++------------------ scene/gui/line_edit.h | 1 - 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index a71b4ba4032..4ebed379e39 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -46,26 +46,36 @@ void LineEdit::_input_event(InputEvent p_event) { if (b.pressed) { + shift_selection_check_pre(b.mod.shift); + set_cursor_at_pixel_pos(b.x); - if (b.doubleclick) { + if (b.mod.shift) { - selection.enabled=true; - selection.begin=0; - selection.end=text.length(); - selection.doubleclick=true; - } - - selection.drag_attempt=false; - - if ((cursor_posselection.end) || !selection.enabled) { - - selection_clear(); - selection.cursor_start=cursor_pos; + selection_fill_at_cursor(); selection.creating=true; - } else if (selection.enabled) { - selection.drag_attempt=true; + } else { + + if (b.doubleclick) { + + selection.enabled=true; + selection.begin=0; + selection.end=text.length(); + selection.doubleclick=true; + } + + selection.drag_attempt=false; + + if ((cursor_posselection.end) || !selection.enabled) { + + selection_clear(); + selection.cursor_start=cursor_pos; + selection.creating=true; + } else if (selection.enabled) { + + selection.drag_attempt=true; + } } // if (!editable) @@ -345,8 +355,6 @@ void LineEdit::_input_event(InputEvent p_event) { } } - - selection.old_shift=k.mod.shift; update(); } @@ -561,7 +569,7 @@ void LineEdit::paste_text() { void LineEdit::shift_selection_check_pre(bool p_shift) { - if (!selection.old_shift && p_shift) { + if (!selection.enabled && p_shift) { selection.cursor_start=cursor_pos; } if (!p_shift) @@ -803,7 +811,6 @@ void LineEdit::selection_clear() { selection.cursor_start=0; selection.enabled=false; selection.creating=false; - selection.old_shift=false; selection.doubleclick=false; update(); } @@ -929,7 +936,6 @@ void LineEdit::select(int p_from, int p_to) { selection.begin=p_from; selection.end=p_to; selection.creating=false; - selection.old_shift=false; selection.doubleclick=false; update(); } diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 207c6b115b8..2141946ae80 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -67,7 +67,6 @@ private: int cursor_start; bool enabled; bool creating; - bool old_shift; bool doubleclick; bool drag_attempt; } selection;