@@ -248,23 +248,31 @@ class EditorWindow extends ProjectRunningWindow {
248
248
return this . openedFiles . get ( id ) ;
249
249
} ;
250
250
251
- this . window . webContents . on ( 'will-prevent-unload' , ( event ) => {
252
- const choice = dialog . showMessageBoxSync ( this . window , {
253
- title : APP_NAME ,
254
- type : 'info' ,
255
- buttons : [
256
- translate ( 'unload.stay' ) ,
257
- translate ( 'unload.leave' )
258
- ] ,
259
- cancelId : 0 ,
260
- defaultId : 0 ,
261
- message : translate ( 'unload.message' ) ,
262
- detail : translate ( 'unload.detail' ) ,
263
- noLink : true
251
+ this . window . webContents . on ( 'will-prevent-unload' , ( ) => {
252
+ // Using showMessageBoxSync synchronously in the event handler causes broken focus on Windows.
253
+ // See https://github.com/TurboWarp/desktop/issues/1245
254
+ // To work around that, we won't cancel that will-prevent-unload event so the window stays
255
+ // open. After a very short delay to let focus get fixed, we'll show a dialog and force close
256
+ // the window ourselves if the user wants.
257
+
258
+ setTimeout ( ( ) => {
259
+ const choice = dialog . showMessageBoxSync ( this . window , {
260
+ title : APP_NAME ,
261
+ type : 'info' ,
262
+ buttons : [
263
+ translate ( 'unload.stay' ) ,
264
+ translate ( 'unload.leave' )
265
+ ] ,
266
+ cancelId : 0 ,
267
+ defaultId : 0 ,
268
+ message : translate ( 'unload.message' ) ,
269
+ detail : translate ( 'unload.detail' ) ,
270
+ noLink : true
271
+ } ) ;
272
+ if ( choice === 1 ) {
273
+ this . window . destroy ( ) ;
274
+ }
264
275
} ) ;
265
- if ( choice === 1 ) {
266
- event . preventDefault ( ) ;
267
- }
268
276
} ) ;
269
277
270
278
this . window . on ( 'page-title-updated' , ( event , title , explicitSet ) => {
0 commit comments