diff --git a/src/core/libraries/ime/ime.cpp b/src/core/libraries/ime/ime.cpp index bc6234db7..1297093bf 100644 --- a/src/core/libraries/ime/ime.cpp +++ b/src/core/libraries/ime/ime.cpp @@ -65,7 +65,7 @@ public: return Error::OK; } - std::unique_lock lock{g_ime_state.queue_mutex}; + std::unique_lock lock{g_ime_state.queue_mutex}; while (!g_ime_state.event_queue.empty()) { OrbisImeEvent event = g_ime_state.event_queue.front(); diff --git a/src/core/libraries/ime/ime_common.h b/src/core/libraries/ime/ime_common.h index c1b18422d..fbd2ee35b 100644 --- a/src/core/libraries/ime/ime_common.h +++ b/src/core/libraries/ime/ime_common.h @@ -12,6 +12,7 @@ constexpr u32 ORBIS_IME_MAX_TEXT_LENGTH = 2048; constexpr u32 ORBIS_IME_DIALOG_MAX_TEXT_LENGTH = 2048; +/* template constexpr std::underlying_type_t generate_full_mask() { static_assert(std::is_enum_v, "E must be an enum type."); @@ -27,6 +28,26 @@ constexpr std::underlying_type_t generate_full_mask() { return mask; } +*/ + +template +const std::underlying_type_t generate_full_mask() { + static_assert(std::is_enum_v, "E must be an enum type."); + static_assert(magic_enum::customize::enum_range::is_flags, + "E must be marked as is_flags = true."); + + using U = std::underlying_type_t; + const auto values = magic_enum::enum_values(); + U mask = 0; + + // Use index-based loop for better constexpr compatibility + for (std::size_t i = 0; i < values.size(); ++i) { + mask |= static_cast(values[i]); + } + + return mask; +} + enum class Error : u32 { OK = 0x0, @@ -96,7 +117,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u32 kValidImeOptionMask = generate_full_mask(); +const u32 kValidImeOptionMask = generate_full_mask(); enum class OrbisImeExtOption : u32 { DEFAULT = 0x00000000, @@ -126,7 +147,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u32 kValidImeDialogExtOptionMask = generate_full_mask(); +const u32 kValidImeDialogExtOptionMask = generate_full_mask(); enum class OrbisImeLanguage : u64 { DANISH = 0x0000000000000001, @@ -166,7 +187,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u64 kValidOrbisImeLanguageMask = generate_full_mask(); +const u64 kValidOrbisImeLanguageMask = generate_full_mask(); enum class OrbisImeDisableDevice : u32 { DEFAULT = 0x00000000, @@ -179,7 +200,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u32 kValidOrbisImeDisableDeviceMask = generate_full_mask(); +const u32 kValidOrbisImeDisableDeviceMask = generate_full_mask(); enum class OrbisImeInputMethodState : u32 { PREEDIT = 0x01000000, @@ -193,7 +214,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u32 kValidOrbisImeInputMethodStateMask = generate_full_mask(); +const u32 kValidOrbisImeInputMethodStateMask = generate_full_mask(); enum class OrbisImeInitExtKeyboardMode : u32 { ISABLE_ARABIC_INDIC_NUMERALS = 0x00000001, @@ -207,7 +228,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u32 kValidOrbisImeInitExtKeyboardModeMask = +const u32 kValidOrbisImeInitExtKeyboardModeMask = generate_full_mask(); enum class OrbisImeKeycodeState : u32 { @@ -239,7 +260,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u32 kValidOrbisImeKeycodeStateMask = generate_full_mask(); +const u32 kValidOrbisImeKeycodeStateMask = generate_full_mask(); enum class OrbisImeKeyboardOption : u32 { Default = 0, @@ -255,7 +276,7 @@ template <> struct magic_enum::customize::enum_range { static constexpr bool is_flags = true; }; -constexpr u32 kValidOrbisImeKeyboardOptionMask = generate_full_mask(); +const u32 kValidOrbisImeKeyboardOptionMask = generate_full_mask(); enum class OrbisImeKeyboardMode : u32 { Auto = 0,