TextEdit & LineEdit caret blink timers run only when focused (fixes #31936)

This commit is contained in:
PouleyKetchoupp 2019-09-04 13:06:15 +02:00
parent 750f8d4926
commit 5fdea32622
2 changed files with 39 additions and 16 deletions

View file

@ -872,7 +872,9 @@ void LineEdit::_notification(int p_what) {
} break; } break;
case NOTIFICATION_FOCUS_ENTER: { case NOTIFICATION_FOCUS_ENTER: {
if (!caret_blink_enabled) { if (caret_blink_enabled) {
caret_blink_timer->start();
} else {
draw_caret = true; draw_caret = true;
} }
@ -886,6 +888,10 @@ void LineEdit::_notification(int p_what) {
} break; } break;
case NOTIFICATION_FOCUS_EXIT: { case NOTIFICATION_FOCUS_EXIT: {
if (caret_blink_enabled) {
caret_blink_timer->stop();
}
OS::get_singleton()->set_ime_position(Point2()); OS::get_singleton()->set_ime_position(Point2());
OS::get_singleton()->set_ime_active(false); OS::get_singleton()->set_ime_active(false);
ime_text = ""; ime_text = "";
@ -1053,11 +1059,15 @@ bool LineEdit::cursor_get_blink_enabled() const {
void LineEdit::cursor_set_blink_enabled(const bool p_enabled) { void LineEdit::cursor_set_blink_enabled(const bool p_enabled) {
caret_blink_enabled = p_enabled; caret_blink_enabled = p_enabled;
if (p_enabled) {
caret_blink_timer->start(); if (has_focus()) {
} else { if (p_enabled) {
caret_blink_timer->stop(); caret_blink_timer->start();
} else {
caret_blink_timer->stop();
}
} }
draw_caret = true; draw_caret = true;
} }
@ -1072,10 +1082,12 @@ void LineEdit::cursor_set_blink_speed(const float p_speed) {
void LineEdit::_reset_caret_blink_timer() { void LineEdit::_reset_caret_blink_timer() {
if (caret_blink_enabled) { if (caret_blink_enabled) {
caret_blink_timer->stop();
caret_blink_timer->start();
draw_caret = true; draw_caret = true;
update(); if (has_focus()) {
caret_blink_timer->stop();
caret_blink_timer->start();
update();
}
} }
} }

View file

@ -1738,7 +1738,9 @@ void TextEdit::_notification(int p_what) {
} break; } break;
case NOTIFICATION_FOCUS_ENTER: { case NOTIFICATION_FOCUS_ENTER: {
if (!caret_blink_enabled) { if (caret_blink_enabled) {
caret_blink_timer->start();
} else {
draw_caret = true; draw_caret = true;
} }
@ -1751,6 +1753,10 @@ void TextEdit::_notification(int p_what) {
} break; } break;
case NOTIFICATION_FOCUS_EXIT: { case NOTIFICATION_FOCUS_EXIT: {
if (caret_blink_enabled) {
caret_blink_timer->stop();
}
OS::get_singleton()->set_ime_position(Point2()); OS::get_singleton()->set_ime_position(Point2());
OS::get_singleton()->set_ime_active(false); OS::get_singleton()->set_ime_active(false);
ime_text = ""; ime_text = "";
@ -4396,11 +4402,14 @@ bool TextEdit::cursor_get_blink_enabled() const {
void TextEdit::cursor_set_blink_enabled(const bool p_enabled) { void TextEdit::cursor_set_blink_enabled(const bool p_enabled) {
caret_blink_enabled = p_enabled; caret_blink_enabled = p_enabled;
if (p_enabled) { if (has_focus()) {
caret_blink_timer->start(); if (p_enabled) {
} else { caret_blink_timer->start();
caret_blink_timer->stop(); } else {
caret_blink_timer->stop();
}
} }
draw_caret = true; draw_caret = true;
} }
@ -4817,10 +4826,12 @@ int TextEdit::get_max_chars() const {
void TextEdit::_reset_caret_blink_timer() { void TextEdit::_reset_caret_blink_timer() {
if (caret_blink_enabled) { if (caret_blink_enabled) {
caret_blink_timer->stop();
caret_blink_timer->start();
draw_caret = true; draw_caret = true;
update(); if (has_focus()) {
caret_blink_timer->stop();
caret_blink_timer->start();
update();
}
} }
} }