1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #import "ui/app_list/cocoa/app_list_window_controller.h"
7 #include "ui/app_list/app_list_view_delegate.h"
8 #import "ui/app_list/cocoa/app_list_view_controller.h"
9 #import "ui/app_list/cocoa/apps_grid_controller.h"
10 #import "ui/app_list/cocoa/apps_search_box_controller.h"
11 #include "ui/base/cocoa/window_size_constants.h"
13 @interface AppListWindow : NSWindow;
16 @implementation AppListWindow
18 // If we initialize a window with NSBorderlessWindowMask, it will not accept key
19 // events (among other things) unless canBecomeKeyWindow is overridden.
20 - (BOOL)canBecomeKeyWindow {
24 - (BOOL)canBecomeMainWindow {
28 // On Mavericks with the "Displays have separate Spaces" option, OSX has stopped
29 // switching out of the fullscreen space when activating a window in the non-
30 // active application, other than by clicking its Dock icon. Since the app
31 // launcher Dock icon is not Chrome, this can leave a user in fullscreen with
32 // the app launcher window obscured. Overriding this private method allows the
33 // app launcher to appear on top of other applications in fullscreen. Then,
34 // since clicking that window will make Chrome active, subsequent window
35 // activations will successfully switch the user out of the fullscreen space.
36 - (BOOL)_allowedInOtherAppsFullScreenSpaceWithCollectionBehavior:
37 (NSUInteger)collectionBehavior {
43 @implementation AppListWindowController;
46 base::scoped_nsobject<NSWindow> controlledWindow(
47 [[AppListWindow alloc] initWithContentRect:ui::kWindowSizeDeterminedLater
48 styleMask:NSBorderlessWindowMask
49 backing:NSBackingStoreBuffered
51 [controlledWindow setReleasedWhenClosed:NO];
52 [controlledWindow setBackgroundColor:[NSColor clearColor]];
53 [controlledWindow setOpaque:NO];
54 [controlledWindow setHasShadow:YES];
55 [controlledWindow setLevel:NSDockWindowLevel];
57 setCollectionBehavior:NSWindowCollectionBehaviorMoveToActiveSpace];
59 if ((self = [super initWithWindow:controlledWindow])) {
60 appListViewController_.reset([[AppListViewController alloc] init]);
61 [[self window] setFrame:[[appListViewController_ view] bounds]
63 [[self window] setContentView:[appListViewController_ view]];
64 [[self window] setDelegate:self];
69 - (AppListViewController*)appListViewController {
70 return appListViewController_;
73 - (void)windowDidResignMain:(NSNotification*)notification {
74 if ([appListViewController_ delegate])
75 [appListViewController_ delegate]->Dismiss();
78 - (void)windowWillClose:(NSNotification*)notification {
79 [[appListViewController_ searchBoxController] clearSearch];