OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/panels/panel_window_controller_cocoa.h" | 5 #include "chrome/browser/ui/panels/panel_window_controller_cocoa.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/mac/bundle_locations.h" | 10 #include "base/mac/bundle_locations.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 | 74 |
75 @implementation PanelWindowControllerCocoa | 75 @implementation PanelWindowControllerCocoa |
76 | 76 |
77 - (id)initWithBrowserWindow:(PanelBrowserWindowCocoa*)window { | 77 - (id)initWithBrowserWindow:(PanelBrowserWindowCocoa*)window { |
78 NSString* nibpath = | 78 NSString* nibpath = |
79 [base::mac::FrameworkBundle() pathForResource:@"Panel" ofType:@"nib"]; | 79 [base::mac::FrameworkBundle() pathForResource:@"Panel" ofType:@"nib"]; |
80 if ((self = [super initWithWindowNibPath:nibpath owner:self])) { | 80 if ((self = [super initWithWindowNibPath:nibpath owner:self])) { |
81 windowShim_.reset(window); | 81 windowShim_.reset(window); |
82 animateOnBoundsChange_ = YES; | 82 animateOnBoundsChange_ = YES; |
83 canBecomeKeyWindow_ = YES; | 83 canBecomeKeyWindow_ = YES; |
| 84 alwaysOnTop_ = YES; |
84 } | 85 } |
85 contentsController_.reset( | 86 contentsController_.reset( |
86 [[TabContentsController alloc] initWithContents:nil]); | 87 [[TabContentsController alloc] initWithContents:nil]); |
87 return self; | 88 return self; |
88 } | 89 } |
89 | 90 |
90 - (void)dealloc { | 91 - (void)dealloc { |
91 if (windowTrackingArea_.get()) { | 92 if (windowTrackingArea_.get()) { |
92 [[[[self window] contentView] superview] | 93 [[[[self window] contentView] superview] |
93 removeTrackingArea:windowTrackingArea_.get()]; | 94 removeTrackingArea:windowTrackingArea_.get()]; |
(...skipping 17 matching lines...) Expand all Loading... |
111 return [BrowserWindowUtils themePatternPhaseFor:windowView withTabStrip:nil]; | 112 return [BrowserWindowUtils themePatternPhaseFor:windowView withTabStrip:nil]; |
112 } | 113 } |
113 | 114 |
114 - (void)awakeFromNib { | 115 - (void)awakeFromNib { |
115 NSWindow* window = [self window]; | 116 NSWindow* window = [self window]; |
116 | 117 |
117 DCHECK(window); | 118 DCHECK(window); |
118 DCHECK(titlebar_view_); | 119 DCHECK(titlebar_view_); |
119 DCHECK_EQ(self, [window delegate]); | 120 DCHECK_EQ(self, [window delegate]); |
120 | 121 |
121 if (!windowShim_->panel()->manager()->is_full_screen()) | 122 [self updateWindowLevel]; |
122 [window setLevel:NSStatusWindowLevel]; | |
123 | 123 |
124 if (base::mac::IsOSSnowLeopardOrLater()) { | 124 if (base::mac::IsOSSnowLeopardOrLater()) { |
125 [window setCollectionBehavior: | 125 [window setCollectionBehavior: |
126 NSWindowCollectionBehaviorParticipatesInCycle]; | 126 NSWindowCollectionBehaviorParticipatesInCycle]; |
127 } | 127 } |
128 | 128 |
129 [titlebar_view_ attach]; | 129 [titlebar_view_ attach]; |
130 | 130 |
131 // Set initial size of the window to match the size of the panel to give | 131 // Set initial size of the window to match the size of the panel to give |
132 // the renderer the proper size to work with earlier, avoiding a resize | 132 // the renderer the proper size to work with earlier, avoiding a resize |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
630 browser_window->Activate(); | 630 browser_window->Activate(); |
631 else | 631 else |
632 [NSApp deactivate]; | 632 [NSApp deactivate]; |
633 } | 633 } |
634 | 634 |
635 - (void)preventBecomingKeyWindow:(BOOL)prevent { | 635 - (void)preventBecomingKeyWindow:(BOOL)prevent { |
636 canBecomeKeyWindow_ = !prevent; | 636 canBecomeKeyWindow_ = !prevent; |
637 } | 637 } |
638 | 638 |
639 - (void)fullScreenModeChanged:(bool)isFullScreen { | 639 - (void)fullScreenModeChanged:(bool)isFullScreen { |
640 NSWindow* window = [self window]; | 640 [self updateWindowLevel]; |
641 [window setLevel:(isFullScreen ? NSNormalWindowLevel : NSStatusWindowLevel)]; | |
642 } | 641 } |
643 | 642 |
644 - (BOOL)canBecomeKeyWindow { | 643 - (BOOL)canBecomeKeyWindow { |
645 // Panel can only gain focus if it is expanded. Minimized panels do not | 644 // Panel can only gain focus if it is expanded. Minimized panels do not |
646 // participate in Cmd-~ rotation. | 645 // participate in Cmd-~ rotation. |
647 // TODO(dimich): If it will be ever desired to expand/focus the Panel on | 646 // TODO(dimich): If it will be ever desired to expand/focus the Panel on |
648 // keyboard navigation or via main menu, the care should be taken to avoid | 647 // keyboard navigation or via main menu, the care should be taken to avoid |
649 // cases when minimized Panel is getting keyboard input, invisibly. | 648 // cases when minimized Panel is getting keyboard input, invisibly. |
650 return canBecomeKeyWindow_; | 649 return canBecomeKeyWindow_; |
651 } | 650 } |
652 | 651 |
| 652 - (void)setAlwaysOnTop:(bool)onTop { |
| 653 if (alwaysOnTop_ == onTop) |
| 654 return; |
| 655 alwaysOnTop_ = onTop; |
| 656 [self updateWindowLevel]; |
| 657 } |
| 658 |
| 659 - (void)updateWindowLevel { |
| 660 if (![self isWindowLoaded]) |
| 661 return; |
| 662 BOOL onTop = alwaysOnTop_ && |
| 663 !windowShim_->panel()->manager()->is_full_screen(); |
| 664 [[self window] setLevel:(onTop ? NSStatusWindowLevel : NSNormalWindowLevel)]; |
| 665 } |
653 @end | 666 @end |
OLD | NEW |