mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +00:00
UI/AppKit: Support dead keys on MacOS
This commit is contained in:
parent
35254d17d1
commit
e4e18ca84b
Notes:
github-actions[bot]
2025-10-29 16:40:17 +00:00
Author: https://github.com/tcl3
Commit: e4e18ca84b
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6627
Reviewed-by: https://github.com/trflynn89 ✅
2 changed files with 78 additions and 4 deletions
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface LadybirdWebView : NSView <NSMenuDelegate>
|
@interface LadybirdWebView : NSView <NSMenuDelegate, NSTextInputClient>
|
||||||
|
|
||||||
- (instancetype)init:(id<LadybirdWebViewObserver>)observer;
|
- (instancetype)init:(id<LadybirdWebViewObserver>)observer;
|
||||||
- (instancetype)initAsChild:(id<LadybirdWebViewObserver>)observer
|
- (instancetype)initAsChild:(id<LadybirdWebViewObserver>)observer
|
||||||
|
|
|
||||||
|
|
@ -321,7 +321,7 @@ struct HideCursor {
|
||||||
if (self == nil) {
|
if (self == nil) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NSEvent* event = Ladybird::key_event_to_ns_event(key_event);
|
auto* event = Ladybird::key_event_to_ns_event(key_event);
|
||||||
|
|
||||||
self.event_being_redispatched = event;
|
self.event_being_redispatched = event;
|
||||||
[NSApp sendEvent:event];
|
[NSApp sendEvent:event];
|
||||||
|
|
@ -1072,8 +1072,7 @@ struct HideCursor {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto key_event = Ladybird::ns_event_to_key_event(Web::KeyEvent::Type::KeyDown, event);
|
[self interpretKeyEvents:@[ event ]];
|
||||||
m_web_view_bridge->enqueue_input_event(move(key_event));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)keyUp:(NSEvent*)event
|
- (void)keyUp:(NSEvent*)event
|
||||||
|
|
@ -1123,6 +1122,81 @@ struct HideCursor {
|
||||||
// prevent this from happening. See: https://stackoverflow.com/a/20197686
|
// prevent this from happening. See: https://stackoverflow.com/a/20197686
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)canBecomeKeyView
|
||||||
|
{
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSResponder
|
||||||
|
|
||||||
|
- (BOOL)acceptsFirstResponder
|
||||||
|
{
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - NSTextInputClient
|
||||||
|
|
||||||
|
- (void)insertText:(id)string replacementRange:(NSRange)replacementRange
|
||||||
|
{
|
||||||
|
auto* event = [NSApp currentEvent];
|
||||||
|
if (event && event.type == NSEventTypeKeyDown) {
|
||||||
|
auto key_event = Ladybird::ns_event_to_key_event(Web::KeyEvent::Type::KeyDown, event);
|
||||||
|
m_web_view_bridge->enqueue_input_event(move(key_event));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)doCommandBySelector:(SEL)selector
|
||||||
|
{
|
||||||
|
auto* event = [NSApp currentEvent];
|
||||||
|
if (event && event.type == NSEventTypeKeyDown) {
|
||||||
|
auto key_event = Ladybird::ns_event_to_key_event(Web::KeyEvent::Type::KeyDown, event);
|
||||||
|
m_web_view_bridge->enqueue_input_event(move(key_event));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)hasMarkedText
|
||||||
|
{
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSRange)markedRange
|
||||||
|
{
|
||||||
|
return NSMakeRange(NSNotFound, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSRange)selectedRange
|
||||||
|
{
|
||||||
|
return NSMakeRange(NSNotFound, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)unmarkText
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray<NSAttributedStringKey>*)validAttributesForMarkedText
|
||||||
|
{
|
||||||
|
return @[];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSAttributedString*)attributedSubstringForProposedRange:(NSRange)range actualRange:(NSRangePointer)actualRange
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger)characterIndexForPoint:(NSPoint)point
|
||||||
|
{
|
||||||
|
return NSNotFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSRect)firstRectForCharacterRange:(NSRange)range actualRange:(NSRangePointer)actualRange
|
||||||
|
{
|
||||||
|
return NSZeroRect;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark - NSDraggingDestination
|
#pragma mark - NSDraggingDestination
|
||||||
|
|
||||||
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)event
|
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)event
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue