diff --git a/packages/nativeapi/lib/src/window_manager.dart b/packages/nativeapi/lib/src/window_manager.dart index 04e3cd2..eab3417 100644 --- a/packages/nativeapi/lib/src/window_manager.dart +++ b/packages/nativeapi/lib/src/window_manager.dart @@ -1,4 +1,6 @@ import 'dart:ffi' hide Size; +import 'dart:io'; + import 'package:flutter/widgets.dart'; import 'package:nativeapi/src/foundation/cnativeapi_bindings_mixin.dart'; import 'package:nativeapi/src/foundation/event_emitter.dart'; @@ -174,6 +176,11 @@ class WindowManager with EventEmitter, CNativeApiBindingsMixin { /// /// Returns the [Window] instance, or null if no window is active. Window? getCurrent() { + if (_isWaylandSession) { + final windows = getAll(); + return windows.isEmpty ? null : windows.first; + } + final nativeWindow = bindings.native_window_manager_get_current(); if (nativeWindow == nullptr) { return null; @@ -181,6 +188,16 @@ class WindowManager with EventEmitter, CNativeApiBindingsMixin { return Window(nativeWindow); } + bool get _isWaylandSession { + if (!Platform.isLinux) { + return false; + } + + final env = Platform.environment; + return env.containsKey('WAYLAND_DISPLAY') || + env['XDG_SESSION_TYPE'] == 'wayland'; + } + /// Shuts down the window manager and cleans up resources. /// /// This should typically be called when the application is exiting.