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 +#include #include #include #include @@ -70,7 +71,7 @@ auto EmojiInputDialog::supported_emoji() -> Vector 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 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 +#include namespace GUI { @@ -15,8 +16,8 @@ class EmojiInputDialog final : public Dialog { struct Emoji { u32 code_point { 0 }; - Optional name; RefPtr