diff options
Diffstat (limited to 'src/osx')
-rw-r--r-- | src/osx/gui/InputMethod.mm | 15 | ||||
-rw-r--r-- | src/osx/gui/InputMethodPrivate.h | 2 | ||||
-rw-r--r-- | src/osx/gui/Window.mm | 75 | ||||
-rw-r--r-- | src/osx/gui/WindowPrivate.h | 1 |
4 files changed, 51 insertions, 42 deletions
diff --git a/src/osx/gui/InputMethod.mm b/src/osx/gui/InputMethod.mm index ec8d194c..56ac2c56 100644 --- a/src/osx/gui/InputMethod.mm +++ b/src/osx/gui/InputMethod.mm @@ -28,19 +28,14 @@ void OsxInputMethodContextPrivate::RaiseCompositionEvent() { composition_event_. void OsxInputMethodContextPrivate::RaiseTextEvent(StringView text) { text_event_.Raise(text); } void OsxInputMethodContextPrivate::PerformSel(SEL sel) { - [window_->p_->GetNSWindow() performSelector:sel]; + // [window_->p_->GetNSWindow() performSelector:sel]; } -void OsxInputMethodContextPrivate::Activate() { - auto input_context = [[window_->p_->GetNSWindow() contentView] inputContext]; - Ensures(input_context); - [input_context activate]; -} +void OsxInputMethodContextPrivate::Activate() { is_enabled_ = true; } void OsxInputMethodContextPrivate::Deactivate() { - auto input_context = [[window_->p_->GetNSWindow() contentView] inputContext]; - Ensures(input_context); - [input_context deactivate]; + input_method_context_->CompleteComposition(); + is_enabled_ = false; } } @@ -90,4 +85,6 @@ IEvent<std::nullptr_t>* OsxInputMethodContext::CompositionEvent() { } IEvent<StringView>* OsxInputMethodContext::TextEvent() { return &p_->text_event_; } + +bool OsxInputMethodContext::IsEnabled() { return p_->is_enabled_; } } diff --git a/src/osx/gui/InputMethodPrivate.h b/src/osx/gui/InputMethodPrivate.h index d2fccb43..b0d7e4f8 100644 --- a/src/osx/gui/InputMethodPrivate.h +++ b/src/osx/gui/InputMethodPrivate.h @@ -57,6 +57,8 @@ class OsxInputMethodContextPrivate { Event<std::nullptr_t> composition_event_; Event<std::nullptr_t> composition_end_event_; Event<StringView> text_event_; + + bool is_enabled_ = false; }; } // namespace details } // namespace cru::platform::gui::osx diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm index 136c3064..f64c096a 100644 --- a/src/osx/gui/Window.mm +++ b/src/osx/gui/Window.mm @@ -293,39 +293,6 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho - (BOOL)canBecomeKeyWindow { return YES; } - -- (void)keyDown:(NSEvent*)event { - cru::log::TagDebug(u"CruWindow", u"Recieved key down."); - - cru::platform::gui::KeyModifier key_modifier; - if (event.modifierFlags & NSEventModifierFlagControl) - key_modifier |= cru::platform::gui::KeyModifiers::ctrl; - if (event.modifierFlags & NSEventModifierFlagOption) - key_modifier |= cru::platform::gui::KeyModifiers::alt; - if (event.modifierFlags & NSEventModifierFlagShift) - key_modifier |= cru::platform::gui::KeyModifiers::shift; - auto c = cru::platform::gui::osx::KeyCodeFromOsxToCru(event.keyCode); - - _p->OnKeyDown(c, key_modifier); - - [super keyDown:event]; -} - -- (void)keyUp:(NSEvent*)event { - cru::log::TagDebug(u"CruWindow", u"Recieved key up."); - - cru::platform::gui::KeyModifier key_modifier; - if (event.modifierFlags & NSEventModifierFlagControl) - key_modifier |= cru::platform::gui::KeyModifiers::ctrl; - if (event.modifierFlags & NSEventModifierFlagOption) - key_modifier |= cru::platform::gui::KeyModifiers::alt; - if (event.modifierFlags & NSEventModifierFlagShift) - key_modifier |= cru::platform::gui::KeyModifiers::shift; - auto c = cru::platform::gui::osx::KeyCodeFromOsxToCru(event.keyCode); - - _p->OnKeyUp(c, key_modifier); - [super keyUp:event]; -} @end @implementation CruView { @@ -459,6 +426,48 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho _p->OnMouseWheel(static_cast<float>(event.scrollingDeltaY), p, key_modifier); } +- (void)keyDown:(NSEvent*)event { + cru::log::TagDebug(u"CruWindow", u"Recieved key down."); + + cru::platform::gui::KeyModifier key_modifier; + if (event.modifierFlags & NSEventModifierFlagControl) + key_modifier |= cru::platform::gui::KeyModifiers::ctrl; + if (event.modifierFlags & NSEventModifierFlagOption) + key_modifier |= cru::platform::gui::KeyModifiers::alt; + if (event.modifierFlags & NSEventModifierFlagShift) + key_modifier |= cru::platform::gui::KeyModifiers::shift; + auto c = cru::platform::gui::osx::KeyCodeFromOsxToCru(event.keyCode); + + _p->OnKeyDown(c, key_modifier); + + if (dynamic_cast<cru::platform::gui::osx::OsxInputMethodContext*>( + _p->GetWindow()->GetInputMethodContext()) + ->IsEnabled()) { + [[self inputContext] handleEvent:event]; + } +} + +- (void)keyUp:(NSEvent*)event { + cru::log::TagDebug(u"CruWindow", u"Recieved key up."); + + cru::platform::gui::KeyModifier key_modifier; + if (event.modifierFlags & NSEventModifierFlagControl) + key_modifier |= cru::platform::gui::KeyModifiers::ctrl; + if (event.modifierFlags & NSEventModifierFlagOption) + key_modifier |= cru::platform::gui::KeyModifiers::alt; + if (event.modifierFlags & NSEventModifierFlagShift) + key_modifier |= cru::platform::gui::KeyModifiers::shift; + auto c = cru::platform::gui::osx::KeyCodeFromOsxToCru(event.keyCode); + + _p->OnKeyUp(c, key_modifier); + + if (dynamic_cast<cru::platform::gui::osx::OsxInputMethodContext*>( + _p->GetWindow()->GetInputMethodContext()) + ->IsEnabled()) { + [[self inputContext] handleEvent:event]; + } +} + - (BOOL)hasMarkedText { return _input_context_text != nil; } diff --git a/src/osx/gui/WindowPrivate.h b/src/osx/gui/WindowPrivate.h index 076b59d9..68440fe0 100644 --- a/src/osx/gui/WindowPrivate.h +++ b/src/osx/gui/WindowPrivate.h @@ -57,6 +57,7 @@ class OsxWindowPrivate { CGLayerRef GetDrawLayer() { return draw_layer_; } + OsxWindow* GetWindow() { return osx_window_; } NSWindow* GetNSWindow() { return window_; } private: |