| Index: apps/shell/browser/shell_native_app_window.cc
|
| diff --git a/apps/shell/browser/shell_native_app_window.cc b/apps/shell/browser/shell_native_app_window.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..13f23e20459771542cbfeda3b112e3c01ff9fc8a
|
| --- /dev/null
|
| +++ b/apps/shell/browser/shell_native_app_window.cc
|
| @@ -0,0 +1,341 @@
|
| +// Copyright 2014 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 "apps/shell/browser/shell_native_app_window.h"
|
| +
|
| +#include "apps/shell_window.h"
|
| +#include "apps/ui/views/shell_window_frame_view.h"
|
| +#include "ui/gfx/image/image_skia.h"
|
| +#include "ui/gfx/rect.h"
|
| +#include "ui/views/controls/webview/webview.h"
|
| +#include "ui/views/widget/widget.h"
|
| +
|
| +namespace apps {
|
| +
|
| +ShellNativeAppWindow::ShellNativeAppWindow()
|
| + : shell_window_(NULL),
|
| + web_view_(NULL),
|
| + window_(NULL) {
|
| +}
|
| +
|
| +void ShellNativeAppWindow::Init(ShellWindow* shell_window,
|
| + const gfx::Rect& window_bounds) {
|
| + shell_window_ = shell_window;
|
| +
|
| + window_ = new views::Widget;
|
| + InitializeWindow(window_bounds);
|
| +
|
| + OnViewWasResized();
|
| + window_->AddObserver(this);
|
| +}
|
| +
|
| +ShellNativeAppWindow::~ShellNativeAppWindow() {
|
| + web_view_->SetWebContents(NULL);
|
| +}
|
| +
|
| +void ShellNativeAppWindow::InitializeWindow(const gfx::Rect& window_bounds) {
|
| + views::Widget::InitParams init_params(views::Widget::InitParams::TYPE_WINDOW);
|
| + init_params.delegate = this;
|
| + init_params.top_level = true;
|
| + window_->Init(init_params);
|
| + window_->CenterWindow(window_bounds.size());
|
| +}
|
| +
|
| +void ShellNativeAppWindow::OnViewWasResized() {
|
| + FOR_EACH_OBSERVER(web_modal::ModalDialogHostObserver,
|
| + observer_list_,
|
| + OnPositionRequiresUpdate());
|
| +}
|
| +
|
| +const extensions::Extension* ShellNativeAppWindow::GetExtension() {
|
| + return shell_window_->extension();
|
| +}
|
| +
|
| +content::WebContents* ShellNativeAppWindow::GetWebContents() {
|
| + return shell_window_->web_contents();
|
| +}
|
| +
|
| +// ui::BaseWindow implementation.
|
| +
|
| +bool ShellNativeAppWindow::IsActive() const {
|
| + return window_->IsActive();
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::IsMaximized() const {
|
| + return false;
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::IsMinimized() const {
|
| + return false;
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::IsFullscreen() const {
|
| + return false;
|
| +}
|
| +
|
| +gfx::NativeWindow ShellNativeAppWindow::GetNativeWindow() {
|
| + return window_->GetNativeWindow();
|
| +}
|
| +
|
| +gfx::Rect ShellNativeAppWindow::GetRestoredBounds() const {
|
| + return window_->GetRestoredBounds();
|
| +}
|
| +
|
| +ui::WindowShowState ShellNativeAppWindow::GetRestoredState() const {
|
| + return ui::SHOW_STATE_NORMAL;
|
| +}
|
| +
|
| +gfx::Rect ShellNativeAppWindow::GetBounds() const {
|
| + return window_->GetWindowBoundsInScreen();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::Show() {
|
| + if (window_->IsVisible()) {
|
| + window_->Activate();
|
| + return;
|
| + }
|
| + window_->Show();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::ShowInactive() {
|
| + if (window_->IsVisible())
|
| + return;
|
| + window_->ShowInactive();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::Hide() {
|
| + window_->Hide();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::Close() {
|
| + window_->Close();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::Activate() {
|
| + window_->Activate();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::Deactivate() {
|
| + window_->Deactivate();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::Maximize() {}
|
| +
|
| +void ShellNativeAppWindow::Minimize() {}
|
| +
|
| +void ShellNativeAppWindow::Restore() {}
|
| +
|
| +void ShellNativeAppWindow::SetBounds(const gfx::Rect& bounds) {
|
| + window_->SetBounds(bounds);
|
| +}
|
| +
|
| +void ShellNativeAppWindow::FlashFrame(bool flash) {}
|
| +
|
| +bool ShellNativeAppWindow::IsAlwaysOnTop() const {
|
| + return window_->IsAlwaysOnTop();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::SetAlwaysOnTop(bool always_on_top) {
|
| + window_->SetAlwaysOnTop(always_on_top);
|
| +}
|
| +
|
| +gfx::NativeView ShellNativeAppWindow::GetHostView() const {
|
| + return window_->GetNativeView();
|
| +}
|
| +
|
| +gfx::Point ShellNativeAppWindow::GetDialogPosition(const gfx::Size& size) {
|
| + gfx::Size shell_window_size = window_->GetWindowBoundsInScreen().size();
|
| + return gfx::Point(shell_window_size.width() / 2 - size.width() / 2,
|
| + shell_window_size.height() / 2 - size.height() / 2);
|
| +}
|
| +
|
| +gfx::Size ShellNativeAppWindow::GetMaximumDialogSize() {
|
| + return window_->GetWindowBoundsInScreen().size();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::AddObserver(
|
| + web_modal::ModalDialogHostObserver* observer) {
|
| + observer_list_.AddObserver(observer);
|
| +}
|
| +
|
| +void ShellNativeAppWindow::RemoveObserver(
|
| + web_modal::ModalDialogHostObserver* observer) {
|
| + observer_list_.RemoveObserver(observer);
|
| +}
|
| +
|
| +// WidgetDelegate implementation.
|
| +
|
| +void ShellNativeAppWindow::OnWidgetMove() {
|
| + shell_window_->OnNativeWindowChanged();
|
| +}
|
| +
|
| +views::View* ShellNativeAppWindow::GetInitiallyFocusedView() {
|
| + return web_view_;
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::CanResize() const {
|
| + return false;
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::CanMaximize() const {
|
| + return false;
|
| +}
|
| +
|
| +base::string16 ShellNativeAppWindow::GetWindowTitle() const {
|
| + return base::string16();
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::ShouldShowWindowTitle() const {
|
| + return false;
|
| +}
|
| +
|
| +gfx::ImageSkia ShellNativeAppWindow::GetWindowAppIcon() {
|
| + return gfx::ImageSkia();
|
| +}
|
| +
|
| +gfx::ImageSkia ShellNativeAppWindow::GetWindowIcon() {
|
| + return gfx::ImageSkia();
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::ShouldShowWindowIcon() const {
|
| + return false;
|
| +}
|
| +
|
| +void ShellNativeAppWindow::SaveWindowPlacement(const gfx::Rect& bounds,
|
| + ui::WindowShowState show_state) {
|
| + views::WidgetDelegate::SaveWindowPlacement(bounds, show_state);
|
| + shell_window_->OnNativeWindowChanged();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::DeleteDelegate() {
|
| + window_->RemoveObserver(this);
|
| + shell_window_->OnNativeClose();
|
| +}
|
| +
|
| +views::Widget* ShellNativeAppWindow::GetWidget() {
|
| + return window_;
|
| +}
|
| +
|
| +const views::Widget* ShellNativeAppWindow::GetWidget() const {
|
| + return window_;
|
| +}
|
| +
|
| +views::View* ShellNativeAppWindow::GetContentsView() {
|
| + return this;
|
| +}
|
| +
|
| +views::NonClientFrameView* ShellNativeAppWindow::CreateNonClientFrameView(
|
| + views::Widget* widget) {
|
| + ShellWindowFrameView* frame_view = new ShellWindowFrameView(this);
|
| + // Window is not resizable, so no bounds inset or corner resize area.
|
| + frame_view->Init(window_, 0, 0, 1, 0);
|
| + return frame_view;
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::WidgetHasHitTestMask() const {
|
| + return false;
|
| +}
|
| +
|
| +void ShellNativeAppWindow::GetWidgetHitTestMask(gfx::Path* mask) const {
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::ShouldDescendIntoChildForEventHandling(
|
| + gfx::NativeView child,
|
| + const gfx::Point& location) {
|
| + return true;
|
| +}
|
| +
|
| +// WidgetObserver implementation.
|
| +
|
| +void ShellNativeAppWindow::OnWidgetVisibilityChanged(views::Widget* widget,
|
| + bool visible) {
|
| + shell_window_->OnNativeWindowChanged();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::OnWidgetActivationChanged(views::Widget* widget,
|
| + bool active) {
|
| + shell_window_->OnNativeWindowChanged();
|
| + if (active)
|
| + shell_window_->OnNativeWindowActivated();
|
| +}
|
| +
|
| +// views::View implementation.
|
| +
|
| +void ShellNativeAppWindow::Layout() {
|
| + DCHECK(web_view_);
|
| + web_view_->SetBounds(0, 0, width(), height());
|
| + OnViewWasResized();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::ViewHierarchyChanged(
|
| + const ViewHierarchyChangedDetails& details) {
|
| + if (details.is_add && details.child == this) {
|
| + web_view_ = new views::WebView(NULL);
|
| + AddChildView(web_view_);
|
| + web_view_->SetWebContents(GetWebContents());
|
| + }
|
| +}
|
| +
|
| +gfx::Size ShellNativeAppWindow::GetMinimumSize() {
|
| + return shell_window_->size_constraints().GetMinimumSize();
|
| +}
|
| +
|
| +gfx::Size ShellNativeAppWindow::GetMaximumSize() {
|
| + return shell_window_->size_constraints().GetMaximumSize();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::OnFocus() {
|
| + web_view_->RequestFocus();
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::AcceleratorPressed(
|
| + const ui::Accelerator& accelerator) {
|
| + return false;
|
| +}
|
| +
|
| +// NativeAppWindow implementation.
|
| +
|
| +void ShellNativeAppWindow::SetFullscreen(int fullscreen_types) {}
|
| +
|
| +bool ShellNativeAppWindow::IsFullscreenOrPending() const {
|
| + return false;
|
| +}
|
| +
|
| +bool ShellNativeAppWindow::IsDetached() const {
|
| + return false;
|
| +}
|
| +
|
| +void ShellNativeAppWindow::UpdateWindowIcon() {}
|
| +
|
| +void ShellNativeAppWindow::UpdateWindowTitle() {}
|
| +
|
| +void ShellNativeAppWindow::UpdateBadgeIcon() {}
|
| +
|
| +void ShellNativeAppWindow::UpdateDraggableRegions(
|
| + const std::vector<extensions::DraggableRegion>& regions) {}
|
| +
|
| +SkRegion* ShellNativeAppWindow::GetDraggableRegion() {
|
| + return NULL;
|
| +}
|
| +
|
| +void ShellNativeAppWindow::UpdateShape(scoped_ptr<SkRegion> region) {}
|
| +
|
| +void ShellNativeAppWindow::HandleKeyboardEvent(
|
| + const content::NativeWebKeyboardEvent& event) {}
|
| +
|
| +bool ShellNativeAppWindow::IsFrameless() const {
|
| + return true;
|
| +}
|
| +
|
| +gfx::Insets ShellNativeAppWindow::GetFrameInsets() const {
|
| + return gfx::Insets();
|
| +}
|
| +
|
| +void ShellNativeAppWindow::HideWithApp() {}
|
| +
|
| +void ShellNativeAppWindow::ShowWithApp() {}
|
| +
|
| +void ShellNativeAppWindow::UpdateWindowMinMaxSize() {}
|
| +
|
| +} // namespace apps
|
|
|