[RTL] Fix meta hover signals not emitted.

This commit is contained in:
Pāvels Nadtočajevs
2025-11-05 12:33:45 +02:00
parent 019889d1da
commit dcb40b52ac

View File

@ -2981,6 +2981,35 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) {
if (m.is_valid()) {
local_mouse_pos = get_local_mouse_position();
last_clamped_mouse_pos = local_mouse_pos.clamp(Vector2(), get_size());
Item *c_item = nullptr;
bool outside = false;
// Update meta hovering.
_find_click(main, local_mouse_pos, nullptr, nullptr, &c_item, nullptr, &outside, true);
Variant meta;
ItemMeta *item_meta;
ItemMeta *prev_meta = meta_hovering;
if (c_item && !outside && _find_meta(c_item, &meta, &item_meta)) {
if (meta_hovering != item_meta) {
if (meta_hovering) {
emit_signal(SNAME("meta_hover_ended"), current_meta);
}
meta_hovering = item_meta;
current_meta = meta;
emit_signal(SNAME("meta_hover_started"), meta);
if ((item_meta && item_meta->underline == META_UNDERLINE_ON_HOVER) || (prev_meta && prev_meta->underline == META_UNDERLINE_ON_HOVER)) {
queue_redraw();
}
}
} else if (meta_hovering) {
meta_hovering = nullptr;
emit_signal(SNAME("meta_hover_ended"), current_meta);
current_meta = false;
if (prev_meta->underline == META_UNDERLINE_ON_HOVER) {
queue_redraw();
}
}
}
}
@ -3067,32 +3096,6 @@ void RichTextLabel::_update_selection() {
queue_accessibility_update();
queue_redraw();
}
// Update meta hovering.
_find_click(main, local_mouse_pos, nullptr, nullptr, &c_item, nullptr, &outside, true);
Variant meta;
ItemMeta *item_meta;
ItemMeta *prev_meta = meta_hovering;
if (c_item && !outside && _find_meta(c_item, &meta, &item_meta)) {
if (meta_hovering != item_meta) {
if (meta_hovering) {
emit_signal(SNAME("meta_hover_ended"), current_meta);
}
meta_hovering = item_meta;
current_meta = meta;
emit_signal(SNAME("meta_hover_started"), meta);
if ((item_meta && item_meta->underline == META_UNDERLINE_ON_HOVER) || (prev_meta && prev_meta->underline == META_UNDERLINE_ON_HOVER)) {
queue_redraw();
}
}
} else if (meta_hovering) {
meta_hovering = nullptr;
emit_signal(SNAME("meta_hover_ended"), current_meta);
current_meta = false;
if (prev_meta->underline == META_UNDERLINE_ON_HOVER) {
queue_redraw();
}
}
}
String RichTextLabel::get_tooltip(const Point2 &p_pos) const {