Chromium Code Reviews| Index: chrome/browser/ui/ash/shell_utility_window_ash.cc |
| diff --git a/chrome/browser/ui/ash/shell_utility_window_ash.cc b/chrome/browser/ui/ash/shell_utility_window_ash.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d2b1becfe3228c84a98ac5bf497b34907d0b4b73 |
| --- /dev/null |
| +++ b/chrome/browser/ui/ash/shell_utility_window_ash.cc |
| @@ -0,0 +1,225 @@ |
| +// Copyright (c) 2012 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. |
| + |
| +#include "chrome/browser/ui/ash/shell_utility_window_ash.h" |
| + |
| +#include "ash/wm/panel_frame_view.h" |
| +#include "base/utf_string_conversions.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "googleurl/src/gurl.h" |
| +#include "ui/aura/window.h" |
| +#include "ui/views/controls/webview/webview.h" |
| +#include "ui/views/widget/widget.h" |
| + |
| +namespace { |
| +const int kMinWidth = 100; |
| +const int kMinHeight = 100; |
| +const int kDefaultWidth = 200; |
| +const int kDefaultHeight = 300; |
| +} |
| + |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// ShellUtilityWindowAsh |
| + |
| +ShellUtilityWindowAsh::ShellUtilityWindowAsh( |
| + ShellWindow* shell_window, |
| + const ShellWindow::CreateParams& win_params) |
| + : shell_window_(shell_window), |
| + web_view_(NULL), |
| + window_(NULL), |
| + frameless_(win_params.frame == ShellWindow::FRAME_NONE) { |
| + window_ = new views::Widget; |
| + views::Widget::InitParams params(views::Widget::InitParams::TYPE_PANEL); |
| + params.delegate = this; |
| + |
| + preferred_size_ = gfx::Size(win_params.bounds.width(), |
| + win_params.bounds.height()); |
| + if (preferred_size_.width() == 0) |
| + preferred_size_.set_width(kDefaultWidth); |
| + else if (preferred_size_.width() < kMinWidth) |
| + preferred_size_.set_width(kMinWidth); |
| + |
| + if (preferred_size_.height() == 0) |
| + preferred_size_.set_height(kDefaultHeight); |
| + else if (preferred_size_.height() < kMinHeight) |
| + preferred_size_.set_height(kMinHeight); |
| + |
| + params.bounds = gfx::Rect(preferred_size_.width(), preferred_size_.height()); |
| + window_->Init(params); |
|
jeremya
2012/11/19 00:04:24
Bounds should refer to content bounds, not window
stevenjb
2012/11/19 21:38:44
I looked at how this is done in the _views impl in
|
| +} |
| + |
| +ShellUtilityWindowAsh::~ShellUtilityWindowAsh() { |
| + web_view_->SetWebContents(NULL); |
| +} |
| + |
| +// BaseWindow implementation: |
| + |
| +bool ShellUtilityWindowAsh::IsActive() const { |
| + return window_->IsActive(); |
| +} |
| + |
| +bool ShellUtilityWindowAsh::IsMaximized() const { |
| + return window_->IsMaximized(); |
| +} |
| + |
| +bool ShellUtilityWindowAsh::IsMinimized() const { |
| + return window_->IsMinimized(); |
| +} |
| + |
| +bool ShellUtilityWindowAsh::IsFullscreen() const { |
| + return window_->IsFullscreen(); |
| +} |
| + |
| +gfx::NativeWindow ShellUtilityWindowAsh::GetNativeWindow() { |
| + return window_->GetNativeWindow(); |
| +} |
| + |
| +gfx::Rect ShellUtilityWindowAsh::GetRestoredBounds() const { |
| + return window_->GetRestoredBounds(); |
| +} |
| + |
| +gfx::Rect ShellUtilityWindowAsh::GetBounds() const { |
| + return window_->GetWindowBoundsInScreen(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::Show() { |
| + window_->Show(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::ShowInactive() { |
| + window_->ShowInactive(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::Hide() { |
| + window_->Hide(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::Close() { |
| + window_->Close(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::Activate() { |
| + window_->Activate(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::Deactivate() { |
| + window_->Deactivate(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::Maximize() { |
| + // Maximize is not implemented for panels. |
| +} |
| + |
| +void ShellUtilityWindowAsh::Minimize() { |
| + window_->Minimize(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::Restore() { |
| + window_->Restore(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::SetBounds(const gfx::Rect& bounds) { |
| + window_->SetBounds(bounds); |
| +} |
| + |
| +void ShellUtilityWindowAsh::FlashFrame(bool flash) { |
| + // TODO(stevenjb): Implement |
| + NOTIMPLEMENTED(); |
| +} |
| + |
| +bool ShellUtilityWindowAsh::IsAlwaysOnTop() const { |
| + return true; |
| +} |
| + |
| +// views::WidgetDelegate implementation: |
| +void ShellUtilityWindowAsh::DeleteDelegate() { |
| + shell_window_->OnNativeClose(); |
| +} |
| + |
| +bool ShellUtilityWindowAsh::CanResize() const { |
| + return true; |
| +} |
| + |
| +views::View* ShellUtilityWindowAsh::GetContentsView() { |
| + return this; |
| +} |
| + |
| +views::NonClientFrameView* ShellUtilityWindowAsh::CreateNonClientFrameView( |
| + views::Widget* widget) { |
| + ash::PanelFrameView::FrameType frame_type = |
| + frameless_ ? ash::PanelFrameView::FRAME_NONE |
| + : ash::PanelFrameView::FRAME_ASH; |
| + ash::PanelFrameView* frame_view = new ash::PanelFrameView(widget, frame_type); |
| + return frame_view; |
| +} |
| + |
| +string16 ShellUtilityWindowAsh::GetWindowTitle() const { |
| + return shell_window_->GetTitle(); |
| +} |
| + |
| +bool ShellUtilityWindowAsh::ShouldShowWindowTitle() const { |
| + return true; |
| +} |
| + |
| +views::Widget* ShellUtilityWindowAsh::GetWidget() { |
| + return window_; |
| +} |
| + |
| +const views::Widget* ShellUtilityWindowAsh::GetWidget() const { |
| + return window_; |
| +} |
| + |
| +views::View* ShellUtilityWindowAsh::GetInitiallyFocusedView() { |
| + return web_view_; |
| +} |
| + |
| +// views::View implementation: |
| +void ShellUtilityWindowAsh::Layout() { |
| + DCHECK(web_view_); |
| + web_view_->SetBounds(0, 0, width(), height()); |
| +} |
| + |
| +void ShellUtilityWindowAsh::ViewHierarchyChanged( |
| + bool is_add, views::View *parent, views::View *child) { |
| + if (is_add && child == this) { |
| + web_view_ = new views::WebView(NULL); |
| + AddChildView(web_view_); |
| + web_view_->SetWebContents(shell_window_->web_contents()); |
| + } |
| +} |
| + |
| +gfx::Size ShellUtilityWindowAsh::GetPreferredSize() { |
| + return preferred_size_; |
| +} |
| + |
| +void ShellUtilityWindowAsh::OnFocus() { |
| + web_view_->RequestFocus(); |
| +} |
| + |
| +// NativeShellWindow implementation. |
| +void ShellUtilityWindowAsh::SetFullscreen(bool fullscreen) { |
| +} |
| + |
| +bool ShellUtilityWindowAsh::IsFullscreenOrPending() const { |
| + return false; |
| +} |
| + |
| +void ShellUtilityWindowAsh::UpdateWindowIcon() { |
| + window_->UpdateWindowIcon(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::UpdateWindowTitle() { |
| + window_->UpdateWindowTitle(); |
| +} |
| + |
| +void ShellUtilityWindowAsh::UpdateDraggableRegions( |
| + const std::vector<extensions::DraggableRegion>& regions) { |
| +} |
| + |
| +void ShellUtilityWindowAsh::HandleKeyboardEvent( |
| + const content::NativeWebKeyboardEvent& event) { |
| +} |
| + |
| +void ShellUtilityWindowAsh::RenderViewHostChanged() { |
| +} |