Merge pull request #112428 from bruvzg/rtl_hover_fix

[RTL] Fix meta hover signals not emitted.
This commit is contained in:
Thaddeus Crews
2025-11-05 11:48:02 -06:00

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 {