From d06ef7a5bfbed4cba6eb98f47b618803ac6c8a53 Mon Sep 17 00:00:00 2001 From: Matej Knopp Date: Thu, 26 Jan 2023 22:12:44 +0100 Subject: [PATCH] [macos] Move TextInputPlugin outside of visible area (flutter/engine#39031) * [macos] Move TextInputPlugin outside of visible area * Make plugin empty and add test --- .../framework/Source/FlutterTextInputPlugin.mm | 5 +++-- .../Source/FlutterTextInputPluginTest.mm | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm b/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm index e4d97b5b7d3..44817dfcd09 100644 --- a/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm +++ b/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPlugin.mm @@ -245,8 +245,9 @@ static char markerKey; } - (instancetype)initWithViewController:(FlutterViewController*)viewController { - // The view needs a non-zero frame. - self = [super initWithFrame:NSMakeRect(0, 0, 1, 1)]; + // The view needs an empty frame otherwise it is visible on dark background. + // https://github.com/flutter/flutter/issues/118504 + self = [super initWithFrame:NSZeroRect]; if (self != nil) { _flutterViewController = viewController; _channel = [FlutterMethodChannel methodChannelWithName:kTextInputChannel diff --git a/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm b/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm index 94c095d354d..61b78da2a50 100644 --- a/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm +++ b/engine/src/flutter/shell/platform/darwin/macos/framework/Source/FlutterTextInputPluginTest.mm @@ -1532,4 +1532,20 @@ TEST(FlutterTextInputPluginTest, IsAddedAndRemovedFromViewHierarchy) { ASSERT_FALSE(window.firstResponder == viewController.textInputPlugin); } +TEST(FlutterTextInputPluginTest, HasZeroSize) { + id engineMock = OCMClassMock([FlutterEngine class]); + id binaryMessengerMock = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); + OCMStub( // NOLINT(google-objc-avoid-throwing-exception) + [engineMock binaryMessenger]) + .andReturn(binaryMessengerMock); + FlutterViewController* viewController = [[FlutterViewController alloc] initWithEngine:engineMock + nibName:@"" + bundle:nil]; + + FlutterTextInputPlugin* plugin = + [[FlutterTextInputPlugin alloc] initWithViewController:viewController]; + + ASSERT_TRUE(NSIsEmptyRect(plugin.frame)); +} + } // namespace flutter::testing