app_list_window_controller.mm revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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.
4
5#import "ui/app_list/cocoa/app_list_window_controller.h"
6
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#include "ui/base/cocoa/window_size_constants.h"
11
12@interface AppListWindow : NSWindow;
13@end
14
15@implementation AppListWindow
16
17// If we initialize a window with NSBorderlessWindowMask, it will not accept key
18// events (among other things) unless canBecomeKeyWindow is overridden.
19- (BOOL)canBecomeKeyWindow {
20  return YES;
21}
22
23- (BOOL)canBecomeMainWindow {
24  return YES;
25}
26
27@end
28
29@implementation AppListWindowController;
30
31- (id)init {
32  scoped_nsobject<NSWindow> controlledWindow(
33      [[AppListWindow alloc] initWithContentRect:ui::kWindowSizeDeterminedLater
34                                       styleMask:NSBorderlessWindowMask
35                                         backing:NSBackingStoreBuffered
36                                           defer:NO]);
37  [controlledWindow setReleasedWhenClosed:NO];
38  [controlledWindow setBackgroundColor:[NSColor clearColor]];
39  [controlledWindow setOpaque:NO];
40  [controlledWindow setHasShadow:YES];
41
42  if ((self = [super initWithWindow:controlledWindow])) {
43    appListViewController_.reset([[AppListViewController alloc] init]);
44    [[self window] setFrame:[[appListViewController_ view] bounds]
45                    display:NO];
46    [[self window] setContentView:[appListViewController_ view]];
47    [[self window] setDelegate:self];
48  }
49  return self;
50}
51
52- (AppListViewController*)appListViewController {
53  return appListViewController_;
54}
55
56- (void)windowDidResignMain:(NSNotification*)notification {
57  if ([appListViewController_ delegate])
58    [appListViewController_ delegate]->Dismiss();
59}
60
61@end
62