summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2018-12-13 21:16:13 +0100
committerGitHub <noreply@github.com>2018-12-13 21:16:13 +0100
commit01fa0673a4165d3245d6b22e99b0e4ea99d19c5b (patch)
tree1f55f3c3a1c4093f1fd2cb0b04af94a35bf978ed
parent1a02aa9b52ee6ac8d8f340e729a4dbe751637966 (diff)
parent14c0b75b634f9542083dc547e41cc93355b4219b (diff)
Merge pull request #22870 from semtri/godot-issue-7620
Fix richtextlabel meta links shouldn't open when swiping to scroll
-rw-r--r--scene/gui/rich_text_label.cpp28
-rw-r--r--scene/gui/rich_text_label.h1
2 files changed, 23 insertions, 6 deletions
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index 490013d813..db890bf1c8 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -777,6 +777,7 @@ void RichTextLabel::_update_scroll() {
main->first_invalid_line = 0; //invalidate ALL
_validate_line_caches(main);
}
+ scroll_updated = true;
}
void RichTextLabel::_notification(int p_what) {
@@ -929,6 +930,7 @@ void RichTextLabel::_gui_input(Ref<InputEvent> p_event) {
if (true) {
if (b->is_pressed() && !b->is_doubleclick()) {
+ scroll_updated = false;
int line = 0;
Item *item = NULL;
@@ -937,12 +939,7 @@ void RichTextLabel::_gui_input(Ref<InputEvent> p_event) {
if (item) {
- Variant meta;
- if (!outside && _find_meta(item, &meta)) {
- //meta clicked
-
- emit_signal("meta_clicked", meta);
- } else if (selection.enabled) {
+ if (selection.enabled) {
selection.click = item;
selection.click_char = line;
@@ -991,6 +988,24 @@ void RichTextLabel::_gui_input(Ref<InputEvent> p_event) {
} else if (!b->is_pressed()) {
selection.click = NULL;
+
+ if (!b->is_doubleclick() && !scroll_updated) {
+ int line = 0;
+ Item *item = NULL;
+
+ bool outside;
+ _find_click(main, b->get_position(), &item, &line, &outside);
+
+ if (item) {
+
+ Variant meta;
+ if (!outside && _find_meta(item, &meta)) {
+ //meta clicked
+
+ emit_signal("meta_clicked", meta);
+ }
+ }
+ }
}
}
}
@@ -2324,6 +2339,7 @@ RichTextLabel::RichTextLabel() {
updating_scroll = false;
scroll_active = true;
scroll_w = 0;
+ scroll_updated = false;
vscroll = memnew(VScrollBar);
add_child(vscroll);
diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h
index c2e5712b9d..7c30738e2d 100644
--- a/scene/gui/rich_text_label.h
+++ b/scene/gui/rich_text_label.h
@@ -225,6 +225,7 @@ private:
bool scroll_following;
bool scroll_active;
int scroll_w;
+ bool scroll_updated;
bool updating_scroll;
int current_idx;
int visible_line_count;