From f2b2e3142fc700f3a92a62e723dfb4e5da27869f Mon Sep 17 00:00:00 2001 From: Leon Richardt Date: Sun, 18 Aug 2019 21:37:20 +0200 Subject: [PATCH] Implement simpler fix for emote completion bug This commit implements a simpler fix for the problem described in #1209. The setting's signal is connected to a reset of `completionInProgress_` so that the completion model is updated on the next word already. This commit also removes the older approach tackling this issue. --- src/widgets/helper/ResizingTextEdit.cpp | 10 +++++----- src/widgets/helper/ResizingTextEdit.hpp | 2 -- src/widgets/settingspages/GeneralPage.cpp | 18 ++---------------- src/widgets/splits/Split.cpp | 17 ----------------- src/widgets/splits/Split.hpp | 3 ++- 5 files changed, 9 insertions(+), 41 deletions(-) diff --git a/src/widgets/helper/ResizingTextEdit.cpp b/src/widgets/helper/ResizingTextEdit.cpp index 22f66d55a..cee49139d 100644 --- a/src/widgets/helper/ResizingTextEdit.cpp +++ b/src/widgets/helper/ResizingTextEdit.cpp @@ -16,6 +16,11 @@ ResizingTextEdit::ResizingTextEdit() QObject::connect(this, &QTextEdit::textChanged, this, &QWidget::updateGeometry); + // Whenever the setting for emote completion changes, force a + // refresh on the completion model the next time "Tab" is pressed + getSettings()->prefixOnlyEmoteCompletion.connect( + [this] { this->completionInProgress_ = false; }); + this->setFocusPolicy(Qt::ClickFocus); } @@ -260,11 +265,6 @@ void ResizingTextEdit::insertFromMimeData(const QMimeData *source) } } -void ResizingTextEdit::resetCompletionInProgress() -{ - this->completionInProgress_ = false; -} - QCompleter *ResizingTextEdit::getCompleter() const { return this->completer_; diff --git a/src/widgets/helper/ResizingTextEdit.hpp b/src/widgets/helper/ResizingTextEdit.hpp index 7f4907d01..ff79cddb4 100644 --- a/src/widgets/helper/ResizingTextEdit.hpp +++ b/src/widgets/helper/ResizingTextEdit.hpp @@ -20,8 +20,6 @@ public: pajlada::Signals::NoArgSignal focused; pajlada::Signals::NoArgSignal focusLost; - void resetCompletionInProgress(); - void setCompleter(QCompleter *c); QCompleter *getCompleter() const; diff --git a/src/widgets/settingspages/GeneralPage.cpp b/src/widgets/settingspages/GeneralPage.cpp index 10aa2aced..64365e0ac 100644 --- a/src/widgets/settingspages/GeneralPage.cpp +++ b/src/widgets/settingspages/GeneralPage.cpp @@ -8,12 +8,10 @@ #include "singletons/Fonts.hpp" #include "singletons/Paths.hpp" #include "singletons/Theme.hpp" +#include "singletons/WindowManager.hpp" #include "util/FuzzyConvert.hpp" #include "util/Helpers.hpp" -#include "widgets/Notebook.hpp" -#include "widgets/Window.hpp" #include "widgets/helper/Line.hpp" -#include "widgets/splits/Split.hpp" #define CHROME_EXTENSION_LINK \ "https://chrome.google.com/webstore/detail/chatterino-native-host/" \ @@ -286,22 +284,10 @@ void GeneralPage::initLayout(SettingsLayout &layout) [](int index) { return index; }, [](auto args) { return args.index; }, false); - auto emoteCompletionCheckbox = layout.addCheckbox( + layout.addCheckbox( "Only search for emote autocompletion at the start of emote names", s.prefixOnlyEmoteCompletion); - // Get the currently active split - // XXX: Is there a better way to do this? - auto selectedSplit = - static_cast( - getApp()->windows->getMainWindow().getNotebook().getSelectedPage()) - ->getBaseNode() - ->getSplit(); - - // Update emote completion mode when checkbox state is changed - QObject::connect(emoteCompletionCheckbox, &QCheckBox::stateChanged, - selectedSplit, &Split::updateEmoteCompletion); - layout.addSpacing(16); layout.addSeperator(); diff --git a/src/widgets/splits/Split.cpp b/src/widgets/splits/Split.cpp index 13670b5f3..d610b5226 100644 --- a/src/widgets/splits/Split.cpp +++ b/src/widgets/splits/Split.cpp @@ -669,23 +669,6 @@ void Split::reloadChannelAndSubscriberEmotes() twitchChannel->refreshChannelEmotes(); } -void Split::updateEmoteCompletion() -{ - if (getSettings()->prefixOnlyEmoteCompletion) - { - this->input_->ui_.textEdit->getCompleter()->setFilterMode( - Qt::MatchStartsWith); - } - else - { - this->input_->ui_.textEdit->getCompleter()->setFilterMode( - Qt::MatchContains); - } - - // Reset the completion status so a refresh will be triggered on next "Tab" - this->input_->ui_.textEdit->resetCompletionInProgress(); -} - template static Iter select_randomly(Iter start, Iter end, RandomGenerator &g) { diff --git a/src/widgets/splits/Split.hpp b/src/widgets/splits/Split.hpp index 894da1a0c..edfca352e 100644 --- a/src/widgets/splits/Split.hpp +++ b/src/widgets/splits/Split.hpp @@ -8,6 +8,8 @@ #include #include #include +#include + namespace chatterino { class ChannelView; @@ -129,7 +131,6 @@ public slots: void showViewerList(); void openSubPage(); void reloadChannelAndSubscriberEmotes(); - void updateEmoteCompletion(); }; } // namespace chatterino