Skip to content

Commit e4e18ca

Browse files
tcl3trflynn89
authored andcommitted
UI/AppKit: Support dead keys on MacOS
1 parent 35254d1 commit e4e18ca

File tree

2 files changed

+78
-4
lines changed

2 files changed

+78
-4
lines changed

UI/AppKit/Interface/LadybirdWebView.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
@end
4040

41-
@interface LadybirdWebView : NSView <NSMenuDelegate>
41+
@interface LadybirdWebView : NSView <NSMenuDelegate, NSTextInputClient>
4242

4343
- (instancetype)init:(id<LadybirdWebViewObserver>)observer;
4444
- (instancetype)initAsChild:(id<LadybirdWebViewObserver>)observer

UI/AppKit/Interface/LadybirdWebView.mm

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ - (void)setWebViewCallbacks
321321
if (self == nil) {
322322
return;
323323
}
324-
NSEvent* event = Ladybird::key_event_to_ns_event(key_event);
324+
auto* event = Ladybird::key_event_to_ns_event(key_event);
325325

326326
self.event_being_redispatched = event;
327327
[NSApp sendEvent:event];
@@ -1072,8 +1072,7 @@ - (void)keyDown:(NSEvent*)event
10721072
return;
10731073
}
10741074

1075-
auto key_event = Ladybird::ns_event_to_key_event(Web::KeyEvent::Type::KeyDown, event);
1076-
m_web_view_bridge->enqueue_input_event(move(key_event));
1075+
[self interpretKeyEvents:@[ event ]];
10771076
}
10781077

10791078
- (void)keyUp:(NSEvent*)event
@@ -1123,6 +1122,81 @@ - (void)cursorUpdate:(NSEvent*)event
11231122
// prevent this from happening. See: https://stackoverflow.com/a/20197686
11241123
}
11251124

1125+
- (BOOL)canBecomeKeyView
1126+
{
1127+
return YES;
1128+
}
1129+
1130+
#pragma mark - NSResponder
1131+
1132+
- (BOOL)acceptsFirstResponder
1133+
{
1134+
return YES;
1135+
}
1136+
1137+
#pragma mark - NSTextInputClient
1138+
1139+
- (void)insertText:(id)string replacementRange:(NSRange)replacementRange
1140+
{
1141+
auto* event = [NSApp currentEvent];
1142+
if (event && event.type == NSEventTypeKeyDown) {
1143+
auto key_event = Ladybird::ns_event_to_key_event(Web::KeyEvent::Type::KeyDown, event);
1144+
m_web_view_bridge->enqueue_input_event(move(key_event));
1145+
}
1146+
}
1147+
1148+
- (void)doCommandBySelector:(SEL)selector
1149+
{
1150+
auto* event = [NSApp currentEvent];
1151+
if (event && event.type == NSEventTypeKeyDown) {
1152+
auto key_event = Ladybird::ns_event_to_key_event(Web::KeyEvent::Type::KeyDown, event);
1153+
m_web_view_bridge->enqueue_input_event(move(key_event));
1154+
}
1155+
}
1156+
1157+
- (BOOL)hasMarkedText
1158+
{
1159+
return NO;
1160+
}
1161+
1162+
- (NSRange)markedRange
1163+
{
1164+
return NSMakeRange(NSNotFound, 0);
1165+
}
1166+
1167+
- (NSRange)selectedRange
1168+
{
1169+
return NSMakeRange(NSNotFound, 0);
1170+
}
1171+
1172+
- (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange
1173+
{
1174+
}
1175+
1176+
- (void)unmarkText
1177+
{
1178+
}
1179+
1180+
- (NSArray<NSAttributedStringKey>*)validAttributesForMarkedText
1181+
{
1182+
return @[];
1183+
}
1184+
1185+
- (NSAttributedString*)attributedSubstringForProposedRange:(NSRange)range actualRange:(NSRangePointer)actualRange
1186+
{
1187+
return nil;
1188+
}
1189+
1190+
- (NSUInteger)characterIndexForPoint:(NSPoint)point
1191+
{
1192+
return NSNotFound;
1193+
}
1194+
1195+
- (NSRect)firstRectForCharacterRange:(NSRange)range actualRange:(NSRangePointer)actualRange
1196+
{
1197+
return NSZeroRect;
1198+
}
1199+
11261200
#pragma mark - NSDraggingDestination
11271201

11281202
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)event

0 commit comments

Comments
 (0)