Use same sorting method in emote popup as in the completion model

Fixes #1549
This commit is contained in:
Rasmus Karlsson 2020-02-15 15:49:06 +01:00
parent b93de7c0f6
commit 64c58e724a
4 changed files with 21 additions and 8 deletions

4
CHANGELOG.md Normal file
View file

@ -0,0 +1,4 @@
# Changelog
## Unversioned
- Minor: Emotes in the emote popup are now sorted in the same order as the tab completion (#1549)

View file

@ -38,13 +38,7 @@ bool CompletionModel::TaggedString::operator<(const TaggedString &that) const
return this->isEmote(); return this->isEmote();
} }
// try comparing insensitively, if they are the same then senstively return CompletionModel::compareStrings(this->string, that.string);
// (fixes order of LuL and LUL)
int k = QString::compare(this->string, that.string, Qt::CaseInsensitive);
if (k == 0)
return this->string > that.string;
return k < 0;
} }
// //
@ -191,4 +185,15 @@ void CompletionModel::refresh(const QString &prefix, bool isFirstWord)
} }
} }
bool CompletionModel::compareStrings(const QString &a, const QString &b)
{
// try comparing insensitively, if they are the same then senstively
// (fixes order of LuL and LUL)
int k = QString::compare(a, b, Qt::CaseInsensitive);
if (k == 0)
return a > b;
return k < 0;
}
} // namespace chatterino } // namespace chatterino

View file

@ -49,6 +49,8 @@ public:
void refresh(const QString &prefix, bool isFirstWord = false); void refresh(const QString &prefix, bool isFirstWord = false);
static bool compareStrings(const QString &a, const QString &b);
private: private:
TaggedString createUser(const QString &str); TaggedString createUser(const QString &str);

View file

@ -1,6 +1,7 @@
#include "EmotePopup.hpp" #include "EmotePopup.hpp"
#include "Application.hpp" #include "Application.hpp"
#include "common/CompletionModel.hpp"
#include "controllers/accounts/AccountController.hpp" #include "controllers/accounts/AccountController.hpp"
#include "debug/Benchmark.hpp" #include "debug/Benchmark.hpp"
#include "messages/Message.hpp" #include "messages/Message.hpp"
@ -37,7 +38,8 @@ namespace {
std::sort(vec.begin(), vec.end(), std::sort(vec.begin(), vec.end(),
[](const std::pair<EmoteName, EmotePtr> &l, [](const std::pair<EmoteName, EmotePtr> &l,
const std::pair<EmoteName, EmotePtr> &r) { const std::pair<EmoteName, EmotePtr> &r) {
return l.first.string < r.first.string; return CompletionModel::compareStrings(
l.first.string, r.first.string);
}); });
for (const auto &emote : vec) for (const auto &emote : vec)
{ {