Index: NSWindow.m =================================================================== --- NSWindow.m (revision 25410) +++ NSWindow.m (working copy) @@ -2455,7 +2455,42 @@ _f.has_opened = NO; [NSApp removeWindowsItem: self]; [self orderOut: self]; +#if 1 + /* We move focus to another window so that window manager will not + randomly assign the focus. */ + NSWindow *key_win = [NSApp keyWindow]; + if (key_win == nil) + key_win = [NSApp mainWindow]; + if ((key_win == nil) && [[NSApp windows] count]) + { + int i, count = [[NSApp windows] count]; + for (i = 0; i < count; i++) + { + key_win = [[NSApp windows] objectAtIndex: i]; + if (key_win == self) + { + key_win = nil; + continue; + } + if ([key_win isKindOfClass: [NSWindow class]]) + { + if ([key_win canBecomeKeyWindow] == NO) + { + /* Get GSCacheWindow or NSIconWindow sometimes */ + key_win = nil; + continue; + } + } + } + } + if (key_win == nil) + key_win = [[NSApp mainMenu] window]; + int key_num = [key_win windowNumber]; +NSLog(@"Set Input Focus to %d", key_num); + [GSServerForWindow(key_win) setinputfocus: key_num]; +#endif + RELEASE(pool); _f.has_closed = YES;