From 0164c6ff9a736f35e50e24361ee63b19556b8885 Mon Sep 17 00:00:00 2001 From: crupest Date: Thu, 21 Oct 2021 22:26:40 +0800 Subject: ... --- src/osx/gui/InputMethod.mm | 15 ++++---- src/osx/gui/InputMethodPrivate.h | 2 ++ src/osx/gui/Window.mm | 75 ++++++++++++++++++++++------------------ src/osx/gui/WindowPrivate.h | 1 + 4 files changed, 51 insertions(+), 42 deletions(-) (limited to 'src/osx/gui') 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* OsxInputMethodContext::CompositionEvent() { } IEvent* 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 composition_event_; Event composition_end_event_; Event 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(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( + _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( + _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: -- cgit v1.2.3