blob: 5eae08d70df70f0112935af087d679532e5f1020 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ui/app_list/cocoa/app_list_window_controller.h"
#include "ui/app_list/app_list_view_delegate.h"
#import "ui/app_list/cocoa/app_list_view_controller.h"
#import "ui/app_list/cocoa/apps_grid_controller.h"
#import "ui/app_list/cocoa/apps_search_box_controller.h"
#include "ui/base/cocoa/window_size_constants.h"
@interface AppListWindow : NSWindow;
@end
@implementation AppListWindow
// If we initialize a window with NSBorderlessWindowMask, it will not accept key
// events (among other things) unless canBecomeKeyWindow is overridden.
- (BOOL)canBecomeKeyWindow {
return YES;
}
- (BOOL)canBecomeMainWindow {
return YES;
}
// On Mavericks with the "Displays have separate Spaces" option, OSX has stopped
// switching out of the fullscreen space when activating a window in the non-
// active application, other than by clicking its Dock icon. Since the app
// launcher Dock icon is not Chrome, this can leave a user in fullscreen with
// the app launcher window obscured. Overriding this private method allows the
// app launcher to appear on top of other applications in fullscreen. Then,
// since clicking that window will make Chrome active, subsequent window
// activations will successfully switch the user out of the fullscreen space.
- (BOOL)_allowedInOtherAppsFullScreenSpaceWithCollectionBehavior:
(NSUInteger)collectionBehavior {
return YES;
}
@end
@implementation AppListWindowController;
- (id)init {
base::scoped_nsobject<NSWindow> controlledWindow(
[[AppListWindow alloc] initWithContentRect:ui::kWindowSizeDeterminedLater
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO]);
[controlledWindow setReleasedWhenClosed:NO];
[controlledWindow setBackgroundColor:[NSColor clearColor]];
[controlledWindow setOpaque:NO];
[controlledWindow setHasShadow:YES];
[controlledWindow setLevel:NSDockWindowLevel];
[controlledWindow
setCollectionBehavior:NSWindowCollectionBehaviorMoveToActiveSpace];
if ((self = [super initWithWindow:controlledWindow])) {
appListViewController_.reset([[AppListViewController alloc] init]);
[[self window] setFrame:[[appListViewController_ view] bounds]
display:NO];
[[self window] setContentView:[appListViewController_ view]];
[[self window] setDelegate:self];
}
return self;
}
- (AppListViewController*)appListViewController {
return appListViewController_;
}
- (void)windowDidResignMain:(NSNotification*)notification {
if ([appListViewController_ delegate])
[appListViewController_ delegate]->Dismiss();
}
- (void)windowWillClose:(NSNotification*)notification {
[[appListViewController_ searchBoxController] clearSearch];
}
@end