From 99612207b7ddc1b4e9db06fbc7e7f11cfe4e51fa 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 --- 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 ab556ede0ca..b6e324fffbf 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -54,26 +54,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) @@ -339,8 +349,6 @@ void LineEdit::_input_event(InputEvent p_event) { } } - - selection.old_shift=k.mod.shift; update(); } @@ -577,7 +585,7 @@ void LineEdit::undo() { 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) @@ -820,7 +828,6 @@ void LineEdit::selection_clear() { selection.cursor_start=0; selection.enabled=false; selection.creating=false; - selection.old_shift=false; selection.doubleclick=false; update(); } @@ -946,7 +953,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 586a54e950a..fd8d7c03003 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -83,7 +83,6 @@ private: int cursor_start; bool enabled; bool creating; - bool old_shift; bool doubleclick; bool drag_attempt; } selection;