diff options
-rw-r--r-- | Userland/Libraries/LibGUI/EmojiInputDialog.cpp | 23 | ||||
-rw-r--r-- | Userland/Libraries/LibGUI/EmojiInputDialog.h | 3 |
2 files changed, 19 insertions, 7 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(); diff --git a/Userland/Libraries/LibGUI/EmojiInputDialog.h b/Userland/Libraries/LibGUI/EmojiInputDialog.h index 5374332325..d26c30cc16 100644 --- a/Userland/Libraries/LibGUI/EmojiInputDialog.h +++ b/Userland/Libraries/LibGUI/EmojiInputDialog.h @@ -7,6 +7,7 @@ #pragma once #include <LibGUI/Dialog.h> +#include <LibUnicode/Emoji.h> namespace GUI { @@ -15,8 +16,8 @@ class EmojiInputDialog final : public Dialog { struct Emoji { u32 code_point { 0 }; - Optional<String> name; RefPtr<Button> button; + Optional<Unicode::Emoji> emoji; }; public: |