Chromium Code Reviews| Index: chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
| diff --git a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
| index b76391fa12801da1d4cf4989258b1813e6878007..b9b00f1140e93da8c5b1934dc75969961da95105 100644 |
| --- a/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
| +++ b/chrome/browser/ui/cocoa/extensions/shell_window_cocoa.mm |
| @@ -139,18 +139,6 @@ ShellWindowCocoa::ShellWindowCocoa(Profile* profile, |
| NSView* view = web_contents()->GetView()->GetNativeView(); |
| [view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; |
| - if (!has_frame_) { |
| - // TODO(jeremya): this is a temporary hack to allow moving the window while |
| - // we still don't have proper draggable region support. |
| - NSView* controlRegion = [[ControlRegionView alloc] init]; |
| - [controlRegion setFrame:NSMakeRect(0, 0, NSWidth([view bounds]), |
| - NSHeight([view bounds]) - 20)]; |
| - [controlRegion setAutoresizingMask: |
| - NSViewWidthSizable | NSViewHeightSizable]; |
| - [view addSubview:controlRegion]; |
| - [controlRegion release]; |
| - } |
| - |
| InstallView(); |
| [[window_controller_ window] setDelegate:window_controller_]; |
| @@ -176,6 +164,8 @@ void ShellWindowCocoa::InstallView() { |
| [[window() standardWindowButton:NSWindowZoomButton] setHidden:YES]; |
| [[window() standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES]; |
| [[window() standardWindowButton:NSWindowCloseButton] setHidden:YES]; |
| + |
| + InstallDraggableRegionViews(); |
| } |
| } |
| @@ -339,6 +329,53 @@ void ShellWindowCocoa::SetBounds(const gfx::Rect& bounds) { |
| [window() setFrame:cocoa_bounds display:YES]; |
| } |
| +void ShellWindowCocoa::UpdateDraggableRegions( |
| + const std::vector<extensions::DraggableRegion>& regions) { |
| + // Draggable region is not supported for non-frameless window. |
| + if (has_frame_) |
| + return; |
| + |
| + draggable_regions_ = regions; |
| + InstallDraggableRegionViews(); |
| +} |
| + |
| +void ShellWindowCocoa::InstallDraggableRegionViews() { |
| + DCHECK(!has_frame_); |
| + |
| + // All ControlRegionViews should be added as children of the WebContentsView, |
| + // because WebContentsView will be removed and re-added when entering and |
| + // leaving fullscreen mode. |
| + NSView* contentView = web_contents()->GetView()->GetNativeView(); |
|
jeremya
2012/08/09 00:16:44
nit: perhaps call this webView to avoid confusion
jianli
2012/08/09 00:29:27
Done.
|
| + int contentHeight = NSHeight([contentView bounds]); |
| + |
| + // Remove all ControlRegionViews that are added last time. |
| + // Note that we need to copy subviews because [contentView subviews] returns |
| + // the view's mutable internal array and we do not want to mutate the array |
| + // while enumerating it. |
| + NSArray* subviews = [[contentView subviews] copy]; |
| + for (NSView* subview in subviews) { |
| + if ([subview isKindOfClass:[ControlRegionView class]]) { |
| + [subview setHidden:YES]; |
|
jeremya
2012/08/09 00:16:44
curious: why do we need to setHidden here?
jianli
2012/08/09 00:29:27
Some sample code uses it before removing the view.
|
| + [subview removeFromSuperview]; |
| + } |
| + } |
| + [subviews release]; |
| + |
| + // Create and add ControlRegionView for each region that needs to be excluded |
| + // from the dragging. |
| + for (std::vector<extensions::DraggableRegion>::const_iterator iter = |
| + draggable_regions_.begin(); |
| + iter != draggable_regions_.end(); ++iter) { |
| + const extensions::DraggableRegion& region = *iter; |
| + scoped_nsobject<NSView> controlRegion([[ControlRegionView alloc] init]); |
| + [controlRegion setFrame:NSMakeRect(region.bounds.x(), |
| + contentHeight - region.bounds.bottom(), |
| + region.bounds.width(), |
| + region.bounds.height())]; |
| + [contentView addSubview:controlRegion]; |
| + } |
| +} |
| + |
| void ShellWindowCocoa::FlashFrame(bool flash) { |
| if (flash) { |
| attention_request_id_ = [NSApp requestUserAttention:NSInformationalRequest]; |