From bad7b95ed79b01746477763237f3113e07d3f9c5 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 3 Jul 2014 08:44:58 +0000 Subject: [PATCH] Add ViewsDelegate, required when using views::Widget on aura. --- brightray/brightray.gyp | 2 + brightray/browser/browser_main_parts.cc | 12 +++ brightray/browser/browser_main_parts.h | 10 +++ brightray/browser/views/views_delegate.cc | 97 +++++++++++++++++++++++ brightray/browser/views/views_delegate.h | 64 +++++++++++++++ 5 files changed, 185 insertions(+) create mode 100644 brightray/browser/views/views_delegate.cc create mode 100644 brightray/browser/views/views_delegate.h diff --git a/brightray/brightray.gyp b/brightray/brightray.gyp index 1110946a89..86ac1d0365 100644 --- a/brightray/brightray.gyp +++ b/brightray/brightray.gyp @@ -75,6 +75,8 @@ 'browser/linux/notification_presenter_linux.cc', 'browser/url_request_context_getter.cc', 'browser/url_request_context_getter.h', + 'browser/views/views_delegate.cc', + 'browser/views/views_delegate.h', 'browser/win/devtools_window.cc', 'browser/win/devtools_window.h', 'browser/win/inspectable_web_contents_view_win.cc', diff --git a/brightray/browser/browser_main_parts.cc b/brightray/browser/browser_main_parts.cc index 9906302d27..69e23e3977 100644 --- a/brightray/browser/browser_main_parts.cc +++ b/brightray/browser/browser_main_parts.cc @@ -15,6 +15,11 @@ #include "ui/views/linux_ui/linux_ui.h" #endif +#if defined(TOOLKIT_VIEWS) +#include "browser/views/views_delegate.h" +#include "ui/wm/core/wm_state.h" +#endif + namespace brightray { BrowserMainParts::BrowserMainParts() { @@ -37,6 +42,13 @@ void BrowserMainParts::ToolkitInitialized() { #if defined(USE_AURA) && defined(USE_X11) views::LinuxUI::instance()->Initialize(); #endif + +#if defined(TOOLKIT_VIEWS) + if (!views::ViewsDelegate::views_delegate) + views::ViewsDelegate::views_delegate = new ViewsDelegate; + + wm_state_.reset(new wm::WMState); +#endif } void BrowserMainParts::PreMainMessageLoopStart() { diff --git a/brightray/browser/browser_main_parts.h b/brightray/browser/browser_main_parts.h index fc0587f41c..cbb81006e3 100644 --- a/brightray/browser/browser_main_parts.h +++ b/brightray/browser/browser_main_parts.h @@ -9,6 +9,12 @@ #include "base/memory/scoped_ptr.h" #include "content/public/browser/browser_main_parts.h" +#if defined(TOOLKIT_VIEWS) +namespace wm { +class WMState; +} +#endif + namespace brightray { class BrowserContext; @@ -42,6 +48,10 @@ class BrowserMainParts : public content::BrowserMainParts { scoped_ptr browser_context_; scoped_ptr web_ui_controller_factory_; +#if defined(TOOLKIT_VIEWS) + scoped_ptr wm_state_; +#endif + DISALLOW_COPY_AND_ASSIGN(BrowserMainParts); }; diff --git a/brightray/browser/views/views_delegate.cc b/brightray/browser/views/views_delegate.cc new file mode 100644 index 0000000000..c2649af3ba --- /dev/null +++ b/brightray/browser/views/views_delegate.cc @@ -0,0 +1,97 @@ +// Copyright (c) 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-CHROMIUM file. + +#include "browser/views/views_delegate.h" + +#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h" + +namespace brightray { + +ViewsDelegate::ViewsDelegate() { +} + +ViewsDelegate::~ViewsDelegate() { +} + +void ViewsDelegate::SaveWindowPlacement(const views::Widget* window, + const std::string& window_name, + const gfx::Rect& bounds, + ui::WindowShowState show_state) { +} + +bool ViewsDelegate::GetSavedWindowPlacement( + const views::Widget* widget, + const std::string& window_name, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const { + return false; +} + +void ViewsDelegate::NotifyAccessibilityEvent( + views::View* view, ui::AXEvent event_type) { +} + +void ViewsDelegate::NotifyMenuItemFocused( + const base::string16& menu_name, + const base::string16& menu_item_name, + int item_index, + int item_count, + bool has_submenu) { +} + +#if defined(OS_WIN) +HICON ViewsDelegate::GetDefaultWindowIcon() const { + return NULL; +} + +bool ViewsDelegate::IsWindowInMetro(gfx::NativeWindow window) const { + return false; +} + +#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) +gfx::ImageSkia* ViewsDelegate::GetDefaultWindowIcon() const { + return NULL; +} +#endif + +views::NonClientFrameView* ViewsDelegate::CreateDefaultNonClientFrameView( + views::Widget* widget) { + return NULL; +} + +void ViewsDelegate::AddRef() { +} + +void ViewsDelegate::ReleaseRef() { +} + +content::WebContents* ViewsDelegate::CreateWebContents( + content::BrowserContext* browser_context, + content::SiteInstance* site_instance) { + return NULL; +} + +void ViewsDelegate::OnBeforeWidgetInit( + views::Widget::InitParams* params, + views::internal::NativeWidgetDelegate* delegate) { + // If we already have a native_widget, we don't have to try to come + // up with one. + if (params->native_widget) + return; + + // The native_widget is required when using aura. + if (params->parent == NULL && params->context == NULL && !params->child) + params->native_widget = new views::DesktopNativeWidgetAura(delegate); +} + + +base::TimeDelta ViewsDelegate::GetDefaultTextfieldObscuredRevealDuration() { + return base::TimeDelta(); +} + +bool ViewsDelegate::WindowManagerProvidesTitleBar(bool maximized) { + return true; +} + +} // namespace brightray diff --git a/brightray/browser/views/views_delegate.h b/brightray/browser/views/views_delegate.h new file mode 100644 index 0000000000..7cd26ef794 --- /dev/null +++ b/brightray/browser/views/views_delegate.h @@ -0,0 +1,64 @@ +// Copyright (c) 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-CHROMIUM file. + +#ifndef BRIGHTRAY_BROWSER_VIEWS_VIEWS_DELEGATE_H_ +#define BRIGHTRAY_BROWSER_VIEWS_VIEWS_DELEGATE_H_ + +#include "base/compiler_specific.h" +#include "ui/views/views_delegate.h" + +namespace brightray { + +class ViewsDelegate : public views::ViewsDelegate { + public: + ViewsDelegate(); + virtual ~ViewsDelegate(); + + protected: + // views::ViewsDelegate: + virtual void SaveWindowPlacement(const views::Widget* window, + const std::string& window_name, + const gfx::Rect& bounds, + ui::WindowShowState show_state) OVERRIDE; + virtual bool GetSavedWindowPlacement( + const views::Widget* widget, + const std::string& window_name, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE; + virtual void NotifyAccessibilityEvent( + views::View* view, ui::AXEvent event_type) OVERRIDE; + virtual void NotifyMenuItemFocused(const base::string16& menu_name, + const base::string16& menu_item_name, + int item_index, + int item_count, + bool has_submenu) OVERRIDE; + +#if defined(OS_WIN) + virtual HICON GetDefaultWindowIcon() const OVERRIDE; + virtual bool IsWindowInMetro(gfx::NativeWindow window) const OVERRIDE; +#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) + virtual gfx::ImageSkia* GetDefaultWindowIcon() const OVERRIDE; +#endif + virtual views::NonClientFrameView* CreateDefaultNonClientFrameView( + views::Widget* widget) OVERRIDE; + virtual void AddRef() OVERRIDE; + virtual void ReleaseRef() OVERRIDE; + virtual content::WebContents* CreateWebContents( + content::BrowserContext* browser_context, + content::SiteInstance* site_instance) OVERRIDE; + virtual void OnBeforeWidgetInit( + views::Widget::InitParams* params, + views::internal::NativeWidgetDelegate* delegate) OVERRIDE; + virtual base::TimeDelta GetDefaultTextfieldObscuredRevealDuration() OVERRIDE; + virtual bool WindowManagerProvidesTitleBar(bool maximized) OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(ViewsDelegate); +}; + + + +} // namespace brightray + +#endif // BRIGHTRAY_BROWSER_VIEWS_VIEWS_DELEGATE_H_