diff --git a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp index d3e680f9d1..b9a4f2d4ee 100644 --- a/Userland/Libraries/LibGUI/EmojiInputDialog.cpp +++ b/Userland/Libraries/LibGUI/EmojiInputDialog.cpp @@ -125,7 +125,13 @@ auto EmojiInputDialog::supported_emoji() -> Vector continue; u32 code_point = strtoul(basename.to_string().characters() + 2, nullptr, 16); + auto emoji = Unicode::find_emoji_for_code_points({ code_point }); + if (!emoji.has_value()) { + emoji = Unicode::Emoji {}; + emoji->group = Unicode::EmojiGroup::Unknown; + emoji->display_order = NumericLimits::max(); + } // FIXME: Also emit U+FE0F for single code point emojis, currently // they get shown as text glyphs if available. @@ -145,20 +151,14 @@ auto EmojiInputDialog::supported_emoji() -> Vector done(ExecResult::OK); }; - if (emoji.has_value()) + if (!emoji->name.is_empty()) button->set_tooltip(emoji->name); - code_points.empend(code_point, move(button), move(emoji)); + code_points.empend(move(button), emoji.release_value()); } 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 lhs.emoji.display_order < rhs.emoji.display_order; }); return code_points; @@ -188,13 +188,11 @@ void EmojiInputDialog::update_displayed_emoji() while (!found_match && (index < m_emojis.size())) { auto& emoji = m_emojis[index++]; - if (m_selected_category.has_value()) { - if (!emoji.emoji.has_value() || emoji.emoji->group != m_selected_category) - continue; - } + if (m_selected_category.has_value() && emoji.emoji.group != m_selected_category) + continue; - if (emoji.emoji.has_value()) - found_match = emoji.emoji->name.contains(m_search_box->text(), CaseSensitivity::CaseInsensitive); + if (!emoji.emoji.name.is_empty()) + 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 ef4d272258..70d6bc7c46 100644 --- a/Userland/Libraries/LibGUI/EmojiInputDialog.h +++ b/Userland/Libraries/LibGUI/EmojiInputDialog.h @@ -17,9 +17,8 @@ class EmojiInputDialog final : public Dialog { C_OBJECT(EmojiInputDialog); struct Emoji { - u32 code_point { 0 }; RefPtr