1 // Copyright (c) 2012 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 #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_info.h" 6 7 #include "base/mac/foundation_util.h" 8 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet.h" 9 #include "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_controller.h" 10 11 @implementation ConstrainedWindowSheetInfo 12 13 @synthesize sheetDidShow = sheetDidShow_; 14 15 - (id)initWithSheet:(id<ConstrainedWindowSheet>)sheet 16 parentView:(NSView*)parentView 17 overlayWindow:(NSWindow*)overlayWindow { 18 if ((self = [super init])) { 19 sheet_.reset([sheet retain]); 20 parentView_.reset([parentView retain]); 21 overlayWindow_.reset([overlayWindow retain]); 22 } 23 return self; 24 } 25 26 - (id<ConstrainedWindowSheet>)sheet { 27 return sheet_; 28 } 29 30 - (NSView*)parentView { 31 return parentView_; 32 } 33 34 - (NSWindow*)overlayWindow { 35 return overlayWindow_; 36 } 37 38 - (void)hideSheet { 39 [sheet_ hideSheet]; 40 41 // Overlay window is already invisible so just stop accepting mouse events. 42 [overlayWindow_ setIgnoresMouseEvents:YES]; 43 44 // Make sure the now invisible sheet doesn't keep keyboard focus 45 [[overlayWindow_ parentWindow] makeKeyWindow]; 46 } 47 48 - (void)showSheet { 49 [overlayWindow_ setIgnoresMouseEvents:NO]; 50 if (sheetDidShow_) { 51 [sheet_ unhideSheet]; 52 } else { 53 [sheet_ showSheetForWindow:overlayWindow_]; 54 sheetDidShow_ = YES; 55 } 56 [sheet_ makeSheetKeyAndOrderFront]; 57 } 58 59 @end 60