focus_window_set.mm revision 558790d6acca3451cf3a6b497803a5f07d0bec58
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#import <Cocoa/Cocoa.h>
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/cocoa/focus_window_set.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ui {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid FocusWindowSet(const std::set<NSWindow*>& windows) {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NSArray* ordered_windows = [NSApp orderedWindows];
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NSWindow* frontmost_window = nil;
14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  NSWindow* frontmost_miniaturized_window = nil;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int i = [ordered_windows count] - 1; i >= 0; i--) {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NSWindow* win = [ordered_windows objectAtIndex:i];
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (windows.find(win) != windows.end()) {
18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      if ([win isVisible]) {
19558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        [win orderFront:nil];
20558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        frontmost_window = win;
21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      } else if ([win isMiniaturized]) {
22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        frontmost_miniaturized_window = win;
23558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      }
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  if (!frontmost_window && frontmost_miniaturized_window) {
27558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    [frontmost_miniaturized_window deminiaturize:nil];
28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    frontmost_window = frontmost_miniaturized_window;
29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  if (frontmost_window) {
31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    [NSApp activateIgnoringOtherApps:YES];
32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    [frontmost_window makeMainWindow];
33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    [frontmost_window makeKeyWindow];
34558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace ui
38