summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGUI/EmojiInputDialog.cpp
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2022-09-07 13:42:15 -0400
committerLinus Groh <mail@linusgroh.de>2022-09-08 23:12:31 +0100
commit273045d40e7145304c4f0aa2f808d4c1be0c6d8b (patch)
treedbcd6fd85708173d1dffaa1914513b74b2cfe070 /Userland/Libraries/LibGUI/EmojiInputDialog.cpp
parentc2148c7ddef5e5e9200fdebee89bafe6b311c28b (diff)
downloadserenity-273045d40e7145304c4f0aa2f808d4c1be0c6d8b.zip
LibGUI: Display emoji in the EmojiInputDialog in Unicode display order
Diffstat (limited to 'Userland/Libraries/LibGUI/EmojiInputDialog.cpp')
-rw-r--r--Userland/Libraries/LibGUI/EmojiInputDialog.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp
index cf20c31289..d300c2c588 100644
--- a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp
+++ b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp
@@ -6,6 +6,7 @@
*/
#include <AK/LexicalPath.h>
+#include <AK/QuickSort.h>
#include <AK/ScopeGuard.h>
#include <AK/StringBuilder.h>
#include <AK/Utf32View.h>
@@ -70,7 +71,7 @@ auto EmojiInputDialog::supported_emoji() -> Vector<Emoji>
continue;
u32 code_point = strtoul(basename.to_string().characters() + 2, nullptr, 16);
- auto name = Unicode::code_point_display_name(code_point);
+ auto emoji = Unicode::find_emoji_for_code_points({ code_point });
// FIXME: Also emit U+FE0F for single code point emojis, currently
// they get shown as text glyphs if available.
@@ -90,12 +91,22 @@ auto EmojiInputDialog::supported_emoji() -> Vector<Emoji>
done(ExecResult::OK);
};
- if (name.has_value())
- button->set_tooltip(name->to_titlecase());
+ if (emoji.has_value())
+ button->set_tooltip(emoji->name);
- code_points.empend(code_point, move(name), move(button));
+ code_points.empend(code_point, move(button), move(emoji));
}
+ quick_sort(code_points, [](auto const& lhs, auto const& rhs) {
+ if (lhs.emoji.has_value() && rhs.emoji.has_value())
+ return lhs.emoji->display_order < rhs.emoji->display_order;
+ if (lhs.emoji.has_value())
+ return true;
+ if (rhs.emoji.has_value())
+ return false;
+ return lhs.code_point < rhs.code_point;
+ });
+
return code_points;
}
@@ -123,8 +134,8 @@ void EmojiInputDialog::update_displayed_emoji()
while (!found_match && (index < m_emojis.size())) {
auto& emoji = m_emojis[index++];
- if (emoji.name.has_value())
- found_match = emoji.name->contains(m_search_box->text(), CaseSensitivity::CaseInsensitive);
+ if (emoji.emoji.has_value())
+ found_match = emoji.emoji->name.contains(m_search_box->text(), CaseSensitivity::CaseInsensitive);
else
found_match = m_search_box->text().is_empty();