aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-10-21 22:26:40 +0800
committercrupest <crupest@outlook.com>2021-10-21 22:26:40 +0800
commit0164c6ff9a736f35e50e24361ee63b19556b8885 (patch)
tree208694c0cc495b2778346edc2ef37096e205ca84 /src
parente998a88b5ad6cc260836b3374e882e2ef67d5d35 (diff)
downloadcru-0164c6ff9a736f35e50e24361ee63b19556b8885.tar.gz
cru-0164c6ff9a736f35e50e24361ee63b19556b8885.tar.bz2
cru-0164c6ff9a736f35e50e24361ee63b19556b8885.zip
...
Diffstat (limited to 'src')
-rw-r--r--src/osx/gui/InputMethod.mm15
-rw-r--r--src/osx/gui/InputMethodPrivate.h2
-rw-r--r--src/osx/gui/Window.mm75
-rw-r--r--src/osx/gui/WindowPrivate.h1
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: