diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-11-18 19:21:18 +0100 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-11-18 19:21:18 +0100 |
commit | 15fb341eb4fb8d5fb83936a5ba4b6a565afa22cb (patch) | |
tree | 9ce296ce053640f617271a5d3c4069bbd54f141d /DevTools | |
parent | d5afc58744d3bdcdb0783f1a838db3ccfea8ca16 (diff) | |
download | serenity-15fb341eb4fb8d5fb83936a5ba4b6a565afa22cb.zip |
HackStudio: Always re-match curlies/parens after a re-highlight
While you are typing in HackStudio, we re-lex the C++ as you type,
so this means we also need to keep re-checking for matching curlies and
parentheses at the cursor.
Fixes #769 (although it's not optional, because it's too cool. :^)
Diffstat (limited to 'DevTools')
-rw-r--r-- | DevTools/HackStudio/Editor.cpp | 30 | ||||
-rw-r--r-- | DevTools/HackStudio/Editor.h | 3 | ||||
-rw-r--r-- | DevTools/HackStudio/main.cpp | 1 |
3 files changed, 24 insertions, 10 deletions
diff --git a/DevTools/HackStudio/Editor.cpp b/DevTools/HackStudio/Editor.cpp index 921416ede0..a999f5bd82 100644 --- a/DevTools/HackStudio/Editor.cpp +++ b/DevTools/HackStudio/Editor.cpp @@ -172,17 +172,8 @@ void Editor::mousemove_event(GMouseEvent& event) GApplication::the().hide_tooltip(); } -void Editor::cursor_did_change() +void Editor::highlight_matching_curlies_or_parens() { - if (m_has_brace_buddies) { - if (m_brace_buddies[0].index >= 0 && m_brace_buddies[0].index < document().spans().size()) - document().set_span_at_index(m_brace_buddies[0].index, m_brace_buddies[0].span_backup); - if (m_brace_buddies[1].index >= 0 && m_brace_buddies[1].index < document().spans().size()) - document().set_span_at_index(m_brace_buddies[1].index, m_brace_buddies[1].span_backup); - m_has_brace_buddies = false; - update(); - } - enum class Direction { Forward, Backward, @@ -254,3 +245,22 @@ void Editor::cursor_did_change() } } } + +void Editor::cursor_did_change() +{ + if (m_has_brace_buddies) { + if (m_brace_buddies[0].index >= 0 && m_brace_buddies[0].index < document().spans().size()) + document().set_span_at_index(m_brace_buddies[0].index, m_brace_buddies[0].span_backup); + if (m_brace_buddies[1].index >= 0 && m_brace_buddies[1].index < document().spans().size()) + document().set_span_at_index(m_brace_buddies[1].index, m_brace_buddies[1].span_backup); + m_has_brace_buddies = false; + update(); + } + highlight_matching_curlies_or_parens(); +} + +void Editor::notify_did_rehighlight() +{ + m_has_brace_buddies = false; + highlight_matching_curlies_or_parens(); +} diff --git a/DevTools/HackStudio/Editor.h b/DevTools/HackStudio/Editor.h index 0b67cc788a..52786574cc 100644 --- a/DevTools/HackStudio/Editor.h +++ b/DevTools/HackStudio/Editor.h @@ -15,6 +15,8 @@ public: EditorWrapper& wrapper(); const EditorWrapper& wrapper() const; + void notify_did_rehighlight(); + private: virtual void focusin_event(CEvent&) override; virtual void focusout_event(CEvent&) override; @@ -23,6 +25,7 @@ private: virtual void cursor_did_change() override; void show_documentation_tooltip_if_available(const String&, const Point& screen_location); + void highlight_matching_curlies_or_parens(); explicit Editor(GWidget* parent); diff --git a/DevTools/HackStudio/main.cpp b/DevTools/HackStudio/main.cpp index 3ca86d6c13..eb5ff776e3 100644 --- a/DevTools/HackStudio/main.cpp +++ b/DevTools/HackStudio/main.cpp @@ -488,6 +488,7 @@ static void rehighlight() spans.append(span); } current_editor().document().set_spans(spans); + static_cast<Editor&>(current_editor()).notify_did_rehighlight(); current_editor().update(); } |