From 552fd39d740e20399e770361deb1c8d4ce2557b2 Mon Sep 17 00:00:00 2001 From: Lucas Date: Mon, 7 Oct 2024 10:18:11 +0800 Subject: [PATCH] fix: share button doesn't response under macOS 15 (#6487) * fix: share button doesn't response under macos 15 * chore: enable macos integration test * Revert "chore: enable macos integration test" This reverts commit 32c49c9f36c9d41086fbe44d7006b872ed850505. * chore: update comment --- .../appflowy_flutter/lib/core/frameless_window.dart | 13 ++++++++++--- .../lib/startup/tasks/device_info_task.dart | 10 ++++++++++ .../macos/Runner/MainFlutterWindow.swift | 7 +++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/frontend/appflowy_flutter/lib/core/frameless_window.dart b/frontend/appflowy_flutter/lib/core/frameless_window.dart index 15732f163d..48f0434833 100644 --- a/frontend/appflowy_flutter/lib/core/frameless_window.dart +++ b/frontend/appflowy_flutter/lib/core/frameless_window.dart @@ -1,7 +1,7 @@ -import 'dart:io'; - +import 'package:appflowy/startup/tasks/device_info_task.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:universal_platform/universal_platform.dart'; class CocoaWindowChannel { CocoaWindowChannel._(); @@ -44,7 +44,14 @@ class MoveWindowDetectorState extends State { @override Widget build(BuildContext context) { - if (!Platform.isMacOS) { + // the frameless window is only supported on macOS + if (!UniversalPlatform.isMacOS) { + return widget.child ?? const SizedBox.shrink(); + } + + // For the macOS version 15 or higher, we can control the window position by using system APIs + if (ApplicationInfo.macOSMajorVersion != null && + ApplicationInfo.macOSMajorVersion! >= 15) { return widget.child ?? const SizedBox.shrink(); } diff --git a/frontend/appflowy_flutter/lib/startup/tasks/device_info_task.dart b/frontend/appflowy_flutter/lib/startup/tasks/device_info_task.dart index 61e1f52460..1558eefa53 100644 --- a/frontend/appflowy_flutter/lib/startup/tasks/device_info_task.dart +++ b/frontend/appflowy_flutter/lib/startup/tasks/device_info_task.dart @@ -11,6 +11,10 @@ class ApplicationInfo { static String applicationVersion = ''; static String buildNumber = ''; static String deviceId = ''; + + // macOS major version + static int? macOSMajorVersion; + static int? macOSMinorVersion; } class ApplicationInfoTask extends LaunchTask { @@ -21,6 +25,12 @@ class ApplicationInfoTask extends LaunchTask { final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); final PackageInfo packageInfo = await PackageInfo.fromPlatform(); + if (Platform.isMacOS) { + final macInfo = await deviceInfoPlugin.macOsInfo; + ApplicationInfo.macOSMajorVersion = macInfo.majorVersion; + ApplicationInfo.macOSMinorVersion = macInfo.minorVersion; + } + if (Platform.isAndroid) { final androidInfo = await deviceInfoPlugin.androidInfo; ApplicationInfo.androidSDKVersion = androidInfo.version.sdkInt; diff --git a/frontend/appflowy_flutter/macos/Runner/MainFlutterWindow.swift b/frontend/appflowy_flutter/macos/Runner/MainFlutterWindow.swift index 4e69e2e746..620ad5c9bc 100644 --- a/frontend/appflowy_flutter/macos/Runner/MainFlutterWindow.swift +++ b/frontend/appflowy_flutter/macos/Runner/MainFlutterWindow.swift @@ -75,6 +75,13 @@ class MainFlutterWindow: NSWindow { self.styleMask.insert(StyleMask.fullSizeContentView) self.isMovableByWindowBackground = true + // For the macOS version 15 or higher, set it to true to enable the window tiling + if #available(macOS 15.0, *) { + self.isMovable = true + } else { + self.isMovable = false + } + self.layoutTrafficLights() RegisterGeneratedPlugins(registry: flutterViewController)