This commit is contained in:
julian 2026-04-21 04:55:15 +05:30 committed by GitHub
commit dc5c72cb79
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 7 deletions

View file

@ -1768,15 +1768,29 @@ Future<void> saveWindowPosition(WindowType type,
// if is not resizable. The reason is unknown.
//
// `setResizable(!bind.isIncomingOnly());` in main.dart
isMaximized =
bind.isIncomingOnly() ? false : await windowManager.isMaximized();
// On Linux, the GtkWindow may already be destroyed when this is called
// during onWindowClose (via _saveFrame(flush: true)). Querying a destroyed
// window causes SIGSEGV in the native plugin. Guard with try-catch and
// fall back to the last saved position if the window is no longer available.
try {
isMaximized =
bind.isIncomingOnly() ? false : await windowManager.isMaximized();
} catch (e) {
debugPrint('Failed to query isMaximized (window may be closing): $e');
isMaximized = false;
}
if (isFullscreen || isMaximized) {
setPreFrame();
} else {
position = await windowManager.getPosition(
ignoreDevicePixelRatio: _ignoreDevicePixelRatio);
sz = await windowManager.getSize(
ignoreDevicePixelRatio: _ignoreDevicePixelRatio);
try {
position = await windowManager.getPosition(
ignoreDevicePixelRatio: _ignoreDevicePixelRatio);
sz = await windowManager.getSize(
ignoreDevicePixelRatio: _ignoreDevicePixelRatio);
} catch (e) {
debugPrint('Failed to query window position/size (window may be closing): $e');
setPreFrame();
}
}
break;
default:

View file

@ -431,7 +431,16 @@ class _DesktopTabState extends State<DesktopTab>
@override
void onWindowClose() async {
mainWindowClose() async => await windowManager.hide();
// On Linux, the GtkWindow may already be destroyed at this point.
// Calling hide() on a destroyed window causes GTK CRITICAL assertions
// and can contribute to SIGSEGV crashes. Guard with try-catch.
mainWindowClose() async {
try {
await windowManager.hide();
} catch (e) {
debugPrint('Failed to hide window (may already be closing): $e');
}
};
notMainWindowClose(WindowController windowController) async {
if (controller.length != 0) {
debugPrint("close not empty multiwindow from taskbar");