Skip to content

Commit dcb40b5

Browse files
committed
[RTL] Fix meta hover signals not emitted.
1 parent 019889d commit dcb40b5

File tree

1 file changed

+29
-26
lines changed

1 file changed

+29
-26
lines changed

scene/gui/rich_text_label.cpp

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2981,6 +2981,35 @@ void RichTextLabel::gui_input(const Ref<InputEvent> &p_event) {
29812981
if (m.is_valid()) {
29822982
local_mouse_pos = get_local_mouse_position();
29832983
last_clamped_mouse_pos = local_mouse_pos.clamp(Vector2(), get_size());
2984+
2985+
Item *c_item = nullptr;
2986+
bool outside = false;
2987+
2988+
// Update meta hovering.
2989+
_find_click(main, local_mouse_pos, nullptr, nullptr, &c_item, nullptr, &outside, true);
2990+
Variant meta;
2991+
ItemMeta *item_meta;
2992+
ItemMeta *prev_meta = meta_hovering;
2993+
if (c_item && !outside && _find_meta(c_item, &meta, &item_meta)) {
2994+
if (meta_hovering != item_meta) {
2995+
if (meta_hovering) {
2996+
emit_signal(SNAME("meta_hover_ended"), current_meta);
2997+
}
2998+
meta_hovering = item_meta;
2999+
current_meta = meta;
3000+
emit_signal(SNAME("meta_hover_started"), meta);
3001+
if ((item_meta && item_meta->underline == META_UNDERLINE_ON_HOVER) || (prev_meta && prev_meta->underline == META_UNDERLINE_ON_HOVER)) {
3002+
queue_redraw();
3003+
}
3004+
}
3005+
} else if (meta_hovering) {
3006+
meta_hovering = nullptr;
3007+
emit_signal(SNAME("meta_hover_ended"), current_meta);
3008+
current_meta = false;
3009+
if (prev_meta->underline == META_UNDERLINE_ON_HOVER) {
3010+
queue_redraw();
3011+
}
3012+
}
29843013
}
29853014
}
29863015

@@ -3067,32 +3096,6 @@ void RichTextLabel::_update_selection() {
30673096
queue_accessibility_update();
30683097
queue_redraw();
30693098
}
3070-
3071-
// Update meta hovering.
3072-
_find_click(main, local_mouse_pos, nullptr, nullptr, &c_item, nullptr, &outside, true);
3073-
Variant meta;
3074-
ItemMeta *item_meta;
3075-
ItemMeta *prev_meta = meta_hovering;
3076-
if (c_item && !outside && _find_meta(c_item, &meta, &item_meta)) {
3077-
if (meta_hovering != item_meta) {
3078-
if (meta_hovering) {
3079-
emit_signal(SNAME("meta_hover_ended"), current_meta);
3080-
}
3081-
meta_hovering = item_meta;
3082-
current_meta = meta;
3083-
emit_signal(SNAME("meta_hover_started"), meta);
3084-
if ((item_meta && item_meta->underline == META_UNDERLINE_ON_HOVER) || (prev_meta && prev_meta->underline == META_UNDERLINE_ON_HOVER)) {
3085-
queue_redraw();
3086-
}
3087-
}
3088-
} else if (meta_hovering) {
3089-
meta_hovering = nullptr;
3090-
emit_signal(SNAME("meta_hover_ended"), current_meta);
3091-
current_meta = false;
3092-
if (prev_meta->underline == META_UNDERLINE_ON_HOVER) {
3093-
queue_redraw();
3094-
}
3095-
}
30963099
}
30973100

30983101
String RichTextLabel::get_tooltip(const Point2 &p_pos) const {

0 commit comments

Comments
 (0)