@@ -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
30983101String RichTextLabel::get_tooltip (const Point2 &p_pos) const {
0 commit comments