Merge pull request #36229 from dreamsComeTrue/rich-text-label-key-events

RichTextLabel: proper handling of internal key events
This commit is contained in:
Rémi Verschelde 2020-02-17 09:56:38 +01:00 committed by GitHub
commit c92c434299
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1208,49 +1208,59 @@ void RichTextLabel::_gui_input(Ref<InputEvent> p_event) {
if (k.is_valid()) { if (k.is_valid()) {
if (k->is_pressed() && !k->get_alt() && !k->get_shift()) { if (k->is_pressed() && !k->get_alt() && !k->get_shift()) {
bool handled = true; bool handled = false;
switch (k->get_scancode()) { switch (k->get_scancode()) {
case KEY_PAGEUP: { case KEY_PAGEUP: {
if (vscroll->is_visible_in_tree()) if (vscroll->is_visible_in_tree()) {
vscroll->set_value(vscroll->get_value() - vscroll->get_page()); vscroll->set_value(vscroll->get_value() - vscroll->get_page());
handled = true;
}
} break; } break;
case KEY_PAGEDOWN: { case KEY_PAGEDOWN: {
if (vscroll->is_visible_in_tree()) if (vscroll->is_visible_in_tree()) {
vscroll->set_value(vscroll->get_value() + vscroll->get_page()); vscroll->set_value(vscroll->get_value() + vscroll->get_page());
handled = true;
}
} break; } break;
case KEY_UP: { case KEY_UP: {
if (vscroll->is_visible_in_tree()) if (vscroll->is_visible_in_tree()) {
vscroll->set_value(vscroll->get_value() - get_font("normal_font")->get_height()); vscroll->set_value(vscroll->get_value() - get_font("normal_font")->get_height());
handled = true;
}
} break; } break;
case KEY_DOWN: { case KEY_DOWN: {
if (vscroll->is_visible_in_tree()) if (vscroll->is_visible_in_tree()) {
vscroll->set_value(vscroll->get_value() + get_font("normal_font")->get_height()); vscroll->set_value(vscroll->get_value() + get_font("normal_font")->get_height());
handled = true;
}
} break; } break;
case KEY_HOME: { case KEY_HOME: {
if (vscroll->is_visible_in_tree()) if (vscroll->is_visible_in_tree()) {
vscroll->set_value(0); vscroll->set_value(0);
handled = true;
}
} break; } break;
case KEY_END: { case KEY_END: {
if (vscroll->is_visible_in_tree()) if (vscroll->is_visible_in_tree()) {
vscroll->set_value(vscroll->get_max()); vscroll->set_value(vscroll->get_max());
handled = true;
}
} break; } break;
case KEY_INSERT: case KEY_INSERT:
case KEY_C: { case KEY_C: {
if (k->get_command()) { if (k->get_command()) {
selection_copy(); selection_copy();
} else { handled = true;
handled = false;
} }
} break; } break;
default: handled = false;
} }
if (handled) if (handled)