Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
29bcc33
Merge pull request #1 from flutter/master
dkwingsmt Nov 19, 2020
550c23f
Merge branch 'master' of https://github.com/flutter/engine
dkwingsmt Jan 6, 2021
011ea61
Split macos changes out
dkwingsmt Jan 6, 2021
1b5ceeb
Merge remote-tracking branch 'upstream/master' into keyboard-macos
dkwingsmt Feb 22, 2021
9f17107
Compile
dkwingsmt Feb 25, 2021
faf23c8
Refactor channel to be a handler
dkwingsmt Feb 25, 2021
ce16bc4
keyboard manager
dkwingsmt Feb 26, 2021
b043711
Merge remote-tracking branch 'upstream/master' into keyboard-macos
dkwingsmt Mar 1, 2021
6b47a0e
Basic channel test compile
dkwingsmt Mar 2, 2021
a9728fd
More tests for channel
dkwingsmt Mar 2, 2021
52aba7d
Add embedder test
dkwingsmt Mar 3, 2021
ce9ed0b
Implement responding
dkwingsmt Mar 3, 2021
ce5dae1
Resume view controller tests
dkwingsmt Mar 4, 2021
c26c23a
Change key event gen
dkwingsmt Mar 4, 2021
09adc79
Refactor: remove ofType
dkwingsmt Mar 4, 2021
1f6f920
Shift and A unit test
dkwingsmt Mar 4, 2021
963fca5
IdentifyLeftAndRightModifiers
dkwingsmt Mar 4, 2021
de0fa2e
Modifier synthesizing test
dkwingsmt Mar 4, 2021
0ec1292
Refactor tests
dkwingsmt Mar 4, 2021
4d62a9d
Add capslock test
dkwingsmt Mar 5, 2021
9aec952
Numpad and F1 keys
dkwingsmt Mar 5, 2021
3793b0a
Add character filtering
dkwingsmt Mar 5, 2021
99b4abb
Simplify logic and more assertion
dkwingsmt Mar 5, 2021
c508b6f
Rewrite modifier algorithm
dkwingsmt Mar 5, 2021
8b051f4
Compute mask
dkwingsmt Mar 5, 2021
5eb0f28
Add modifier sync test and assertion
dkwingsmt Mar 6, 2021
43a16cb
Stricter state update
dkwingsmt Mar 6, 2021
7f93f5d
Test CapsLock sync
dkwingsmt Mar 6, 2021
a634fed
Add special key test
dkwingsmt Mar 6, 2021
809ff9e
Timestamp
dkwingsmt Mar 6, 2021
30ded04
Duplicate down keys
dkwingsmt Mar 6, 2021
8efcb6e
Rename and key manager test
dkwingsmt Mar 8, 2021
5c6e8fd
Many manager tests
dkwingsmt Mar 8, 2021
ef452e0
Single final responder and empty next responder
dkwingsmt Mar 8, 2021
d3feb51
Docs
dkwingsmt Mar 8, 2021
9d0c42f
Merge remote-tracking branch 'upstream/master' into keyboard-macos
dkwingsmt Mar 8, 2021
30b1e76
Fix format and remove redundant file
dkwingsmt Mar 8, 2021
3fd66fe
License
dkwingsmt Mar 8, 2021
f5e2f83
Remove redundant header
dkwingsmt Mar 8, 2021
15a9abd
Apply suggestions from code review
dkwingsmt Mar 9, 2021
47f6c68
Merge remote-tracking branch 'upstream/master' into keyboard-macos
dkwingsmt Mar 11, 2021
e950e23
Renames
dkwingsmt Mar 12, 2021
6143ed9
More rename fixes
dkwingsmt Mar 12, 2021
88957a7
Format
dkwingsmt Mar 12, 2021
4618dcd
Compile
dkwingsmt Mar 12, 2021
fb51a67
FlutterKeyCallbackGuard
dkwingsmt Mar 12, 2021
8dd318e
init check
dkwingsmt Mar 12, 2021
6c6bb8b
Fix review
dkwingsmt Mar 12, 2021
eabdde4
Fix docs
dkwingsmt Mar 16, 2021
ad270a8
Doc for lastModifierFlags
dkwingsmt Mar 16, 2021
2178dc5
Merge remote-tracking branch 'upstream/master' into keyboard-macos
dkwingsmt Mar 16, 2021
8756067
Rename
dkwingsmt Mar 16, 2021
5959edc
Fix test
dkwingsmt Mar 16, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -1105,9 +1105,15 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterBacki
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterBackingStore.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterBackingStoreData.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterBackingStoreData.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterChannelKeyResponder.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterChannelKeyResponder.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterChannelKeyResponderUnittests.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterDartProject_Internal.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEmbedderExternalTextureUnittests.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEmbedderKeyResponder.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEmbedderKeyResponder.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEmbedderKeyResponderUnittests.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h
Expand All @@ -1122,8 +1128,11 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterGLCom
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterGLCompositorUnittests.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterIOSurfaceHolder.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterIOSurfaceHolder.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterIntermediateKeyResponder.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterIntermediateKeyResponder.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyPrimaryResponder.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterKeySecondaryResponder.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyboardManager.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyboardManager.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyboardManagerUnittests.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMacOSExternalTexture.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterMetalRenderer.mm
Expand Down Expand Up @@ -1158,6 +1167,8 @@ FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterViewC
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTestUtils.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterViewControllerTestUtils.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/FlutterViewController_Internal.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/KeyCodeMap.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/KeyCodeMap_internal.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/MacOSGLContextSwitch.h
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/MacOSGLContextSwitch.mm
FILE: ../../../flutter/shell/platform/darwin/macos/framework/Source/fixtures/flutter_desktop_test.dart
Expand Down
14 changes: 12 additions & 2 deletions shell/platform/darwin/macos/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,12 @@ source_set("flutter_framework_source") {
"framework/Source/FlutterBackingStore.mm",
"framework/Source/FlutterBackingStoreData.h",
"framework/Source/FlutterBackingStoreData.mm",
"framework/Source/FlutterChannelKeyResponder.h",
"framework/Source/FlutterChannelKeyResponder.mm",
"framework/Source/FlutterDartProject.mm",
"framework/Source/FlutterDartProject_Internal.h",
"framework/Source/FlutterEmbedderKeyResponder.h",
"framework/Source/FlutterEmbedderKeyResponder.mm",
"framework/Source/FlutterEngine.mm",
"framework/Source/FlutterEngine_Internal.h",
"framework/Source/FlutterExternalTextureGL.h",
Expand All @@ -73,8 +77,10 @@ source_set("flutter_framework_source") {
"framework/Source/FlutterGLCompositor.mm",
"framework/Source/FlutterIOSurfaceHolder.h",
"framework/Source/FlutterIOSurfaceHolder.mm",
"framework/Source/FlutterIntermediateKeyResponder.h",
"framework/Source/FlutterIntermediateKeyResponder.mm",
"framework/Source/FlutterKeyPrimaryResponder.h",
"framework/Source/FlutterKeySecondaryResponder.h",
"framework/Source/FlutterKeyboardManager.h",
"framework/Source/FlutterKeyboardManager.mm",
"framework/Source/FlutterMacOSExternalTexture.h",
"framework/Source/FlutterMacOSExternalTexture.h",
"framework/Source/FlutterMetalRenderer.h",
Expand Down Expand Up @@ -102,6 +108,7 @@ source_set("flutter_framework_source") {
"framework/Source/FlutterView.mm",
"framework/Source/FlutterViewController.mm",
"framework/Source/FlutterViewController_Internal.h",
"framework/Source/KeyCodeMap.mm",
"framework/Source/MacOSGLContextSwitch.h",
"framework/Source/MacOSGLContextSwitch.mm",
]
Expand Down Expand Up @@ -158,9 +165,12 @@ executable("flutter_desktop_darwin_unittests") {
testonly = true

sources = [
"framework/Source/FlutterChannelKeyResponderUnittests.mm",
"framework/Source/FlutterEmbedderExternalTextureUnittests.mm",
"framework/Source/FlutterEmbedderKeyResponderUnittests.mm",
"framework/Source/FlutterEngineTest.mm",
"framework/Source/FlutterGLCompositorUnittests.mm",
"framework/Source/FlutterKeyboardManagerUnittests.mm",
"framework/Source/FlutterMetalRendererTest.mm",
"framework/Source/FlutterMetalSurfaceManagerTest.mm",
"framework/Source/FlutterOpenGLRendererTest.mm",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterKeyPrimaryResponder.h"

#import <Cocoa/Cocoa.h>

#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterChannels.h"

/**
* A primary responder of |FlutterKeyboardManager| that handles events by
* sending the raw information through the method channel.
*
* This class corresponds to the RawKeyboard API in the framework.
*/
@interface FlutterChannelKeyResponder : NSObject <FlutterKeyPrimaryResponder>

/**
* Create an instance by specifying the method channel to use.
*/
- (nonnull instancetype)initWithChannel:(nonnull FlutterBasicMessageChannel*)channel;

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import <objc/message.h>

#import "FlutterChannelKeyResponder.h"
#import "KeyCodeMap_internal.h"
#import "flutter/shell/platform/darwin/common/framework/Headers/FlutterCodecs.h"
#import "flutter/shell/platform/darwin/macos/framework/Source/FlutterViewController_Internal.h"
#import "flutter/shell/platform/embedder/embedder.h"

@interface FlutterChannelKeyResponder ()

/**
* The channel used to communicate with Flutter.
*/
@property(nonatomic) FlutterBasicMessageChannel* channel;

/**
* The |NSEvent.modifierFlags| of the last event received.
*
* Used to determine whether a FlagsChanged event should count as a keydown or
* a keyup event.
*/
@property(nonatomic) uint64_t previouslyPressedFlags;

@end

@implementation FlutterChannelKeyResponder

- (nonnull instancetype)initWithChannel:(nonnull FlutterBasicMessageChannel*)channel {
self = [super init];
if (self != nil) {
_channel = channel;
_previouslyPressedFlags = 0;
}
return self;
}

- (void)handleEvent:(NSEvent*)event callback:(FlutterAsyncKeyCallback)callback {
NSString* type;
switch (event.type) {
case NSEventTypeKeyDown:
type = @"keydown";
break;
case NSEventTypeKeyUp:
type = @"keyup";
break;
case NSEventTypeFlagsChanged:
if (event.modifierFlags < _previouslyPressedFlags) {
type = @"keyup";
} else {
type = @"keydown";
}
break;
default:
NSAssert(false, @"Unexpected key event type (got %lu).", event.type);
}
_previouslyPressedFlags = event.modifierFlags;
NSMutableDictionary* keyMessage = [@{
@"keymap" : @"macos",
@"type" : type,
@"keyCode" : @(event.keyCode),
@"modifiers" : @(event.modifierFlags),
} mutableCopy];
// Calling these methods on any other type of event
// (e.g NSEventTypeFlagsChanged) will raise an exception.
if (event.type == NSEventTypeKeyDown || event.type == NSEventTypeKeyUp) {
keyMessage[@"characters"] = event.characters;
keyMessage[@"charactersIgnoringModifiers"] = event.charactersIgnoringModifiers;
}
[_channel sendMessage:keyMessage
reply:^(id reply) {
if (!reply) {
return callback(true);
}
// Only propagate the event to other responders if the framework didn't handle
// it.
callback([[reply valueForKey:@"handled"] boolValue]);
}];
}

#pragma mark - Private

@end
Loading