aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.DS_Storebin0 -> 6148 bytes
-rw-r--r--demos/input_method/CMakeLists.txt14
-rw-r--r--src/osx/gui/InputMethod.mm11
-rw-r--r--src/osx/gui/UiApplication.mm10
-rw-r--r--src/osx/gui/Window.mm13
-rw-r--r--src/osx/gui/WindowPrivate.h4
6 files changed, 39 insertions, 13 deletions
diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 00000000..dc6511b8
--- /dev/null
+++ b/.DS_Store
Binary files differ
diff --git a/demos/input_method/CMakeLists.txt b/demos/input_method/CMakeLists.txt
index 98e36e29..4c94bcbd 100644
--- a/demos/input_method/CMakeLists.txt
+++ b/demos/input_method/CMakeLists.txt
@@ -1,2 +1,14 @@
-add_executable(demo_input_method main.cpp)
+
+if(NOT APPLE)
+ add_executable(demo_input_method main.cpp)
+else()
+ add_executable(demo_input_method MACOSX_BUNDLE main.cpp)
+ set_target_properties(demo_input_method PROPERTIES
+ BUNDLE TRUE
+ MACOSX_BUNDLE_GUI_IDENTIFIER life.crupest.cru.demo_input_method
+ MACOSX_BUNDLE_BUNDLE_NAME demo_input_method
+ )
+endif()
+
target_link_libraries(demo_input_method PRIVATE cru_demo_base)
+
diff --git a/src/osx/gui/InputMethod.mm b/src/osx/gui/InputMethod.mm
index 2331d8b7..2c4ac643 100644
--- a/src/osx/gui/InputMethod.mm
+++ b/src/osx/gui/InputMethod.mm
@@ -3,6 +3,7 @@
#import <AppKit/AppKit.h>
#include "InputMethodPrivate.h"
#include "WindowPrivate.h"
+#include "cru/common/Logger.hpp"
#include "cru/osx/Convert.hpp"
#include "cru/osx/gui/Window.hpp"
@@ -54,9 +55,15 @@ OsxInputMethodContext::OsxInputMethodContext(OsxWindow* window)
OsxInputMethodContext::~OsxInputMethodContext() {}
-void OsxInputMethodContext::EnableIME() { p_->Activate(); }
+void OsxInputMethodContext::EnableIME() {
+ log::Debug(u"Enable IME.");
+ p_->Activate();
+}
-void OsxInputMethodContext::DisableIME() { p_->Deactivate(); }
+void OsxInputMethodContext::DisableIME() {
+ log::Debug(u"Disable IME.");
+ p_->Deactivate();
+}
bool OsxInputMethodContext::ShouldManuallyDrawCompositionText() { return true; }
diff --git a/src/osx/gui/UiApplication.mm b/src/osx/gui/UiApplication.mm
index 11763af6..d6cf14f3 100644
--- a/src/osx/gui/UiApplication.mm
+++ b/src/osx/gui/UiApplication.mm
@@ -17,7 +17,7 @@
#include <unordered_map>
#include <vector>
-@interface AppDelegate : NSObject <NSApplicationDelegate>
+@interface CruAppDelegate : NSObject <NSApplicationDelegate>
- (id)init:(cru::platform::gui::osx::details::OsxUiApplicationPrivate*)p;
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender;
- (void)applicationWillTerminate:(NSNotification*)notification;
@@ -32,7 +32,7 @@ class OsxUiApplicationPrivate {
public:
explicit OsxUiApplicationPrivate(OsxUiApplication* osx_ui_application)
: osx_ui_application_(osx_ui_application) {
- app_delegate_ = [[AppDelegate alloc] init:this];
+ app_delegate_ = [[CruAppDelegate alloc] init:this];
}
CRU_DELETE_COPY(OsxUiApplicationPrivate)
@@ -44,7 +44,7 @@ class OsxUiApplicationPrivate {
private:
OsxUiApplication* osx_ui_application_;
- AppDelegate* app_delegate_;
+ CruAppDelegate* app_delegate_;
std::vector<std::function<void()>> quit_handlers_;
long long current_timer_id_ = 1;
@@ -67,6 +67,8 @@ void OsxUiApplicationPrivate::CallQuitHandlers() {
OsxUiApplication::OsxUiApplication()
: OsxGuiResource(this), p_(new details::OsxUiApplicationPrivate(this)) {
+ [NSApplication sharedApplication];
+
// Add stdio logger.
log::Logger::GetInstance()->AddSource(std::make_unique<log::StdioLogSource>());
@@ -165,7 +167,7 @@ void OsxUiApplication::UnregisterWindow(OsxWindow* window) {
}
}
-@implementation AppDelegate {
+@implementation CruAppDelegate {
cru::platform::gui::osx::details::OsxUiApplicationPrivate* _p;
}
diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm
index 56a1405d..8e21518e 100644
--- a/src/osx/gui/Window.mm
+++ b/src/osx/gui/Window.mm
@@ -149,14 +149,14 @@ bool OsxWindow::IsVisible() {
void OsxWindow::SetVisible(bool is_visible) {
if (p_->window_) {
if (is_visible) {
- [p_->window_ orderFront:p_->window_];
+ [p_->window_ orderFront:nil];
} else {
- [p_->window_ orderOut:p_->window_];
+ [p_->window_ orderOut:nil];
}
} else {
if (is_visible) {
CreateWindow();
- [p_->window_ orderFront:p_->window_];
+ [p_->window_ orderFront:nil];
}
}
}
@@ -220,6 +220,7 @@ void OsxWindow::CreateWindow() {
NSWindowStyleMask style_mask = CalcWindowStyleMask(p_->frame_);
p_->window_ = [[CruWindow alloc] init:p_.get() contentRect:content_rect style:style_mask];
+ Ensures(p_->window_);
[p_->window_ setDelegate:p_->window_delegate_];
@@ -281,11 +282,14 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho
defer:false];
_p = p;
- [self setIgnoresMouseEvents:FALSE];
[self setAcceptsMouseMovedEvents:YES];
return self;
}
+
+- (BOOL)canBecomeKeyWindow {
+ return YES;
+}
@end
@implementation CruView {
@@ -340,6 +344,7 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho
- (void)mouseDown:(NSEvent*)event {
// cru::log::TagDebug(u"CruView", u"Recieved mouse down.");
+ [[self window] makeKeyWindow];
cru::platform::gui::KeyModifier key_modifier;
if (event.modifierFlags & NSEventModifierFlagControl)
diff --git a/src/osx/gui/WindowPrivate.h b/src/osx/gui/WindowPrivate.h
index 7b788ba6..e3b93f8a 100644
--- a/src/osx/gui/WindowPrivate.h
+++ b/src/osx/gui/WindowPrivate.h
@@ -68,8 +68,8 @@ class OsxWindowPrivate {
bool frame_;
Rect content_rect_;
- NSWindow* window_;
- CruWindowDelegate* window_delegate_;
+ NSWindow* window_ = nil;
+ CruWindowDelegate* window_delegate_ = nil;
CGLayerRef draw_layer_;