summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-11 03:49:41 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-11 03:49:41 +0000
commitae79f8bbf66c3de33a7f08a4117fa3ae4423af7e (patch)
tree2bb0d11281dc043f2a383e2bf8519e80f159baad
parent0a993c822f1b65cf0c8b40d30896ce98a1d45f0c (diff)
downloadchromium_src-ae79f8bbf66c3de33a7f08a4117fa3ae4423af7e.zip
chromium_src-ae79f8bbf66c3de33a7f08a4117fa3ae4423af7e.tar.gz
chromium_src-ae79f8bbf66c3de33a7f08a4117fa3ae4423af7e.tar.bz2
Allow a Views client to provide a default frameview for window widgets.
Provides a default one in Ash that will be used to match kennedy-spec. Much tweaking is needed, but that can come in future CLs. http://crbug.com/109138 TEST=none Review URL: http://codereview.chromium.org/9166014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117165 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--ash/ash.gyp2
-rw-r--r--ash/ash_switches.cc3
-rw-r--r--ash/ash_switches.h1
-rw-r--r--ash/shell.cc10
-rw-r--r--ash/shell.h9
-rw-r--r--ash/shell/shell_main.cc17
-rw-r--r--ash/wm/modal_container_layout_manager.cc12
-rw-r--r--chrome/app/generated_resources.grd6
-rw-r--r--chrome/browser/about_flags.cc7
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.cc13
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.h2
-rw-r--r--chrome/browser/ui/views/constrained_window_views.cc8
-rw-r--r--ui/views/test/test_views_delegate.cc5
-rw-r--r--ui/views/test/test_views_delegate.h3
-rw-r--r--ui/views/views_delegate.h7
-rw-r--r--ui/views/widget/widget.cc4
16 files changed, 106 insertions, 3 deletions
diff --git a/ash/ash.gyp b/ash/ash.gyp
index 3bc383e..32d9cbb 100644
--- a/ash/ash.gyp
+++ b/ash/ash.gyp
@@ -107,6 +107,8 @@
'wm/default_container_event_filter.h',
'wm/default_container_layout_manager.cc',
'wm/default_container_layout_manager.h',
+ 'wm/dialog_frame_view.cc',
+ 'wm/dialog_frame_view.h',
'wm/image_grid.cc',
'wm/image_grid.h',
'wm/modal_container_layout_manager.cc',
diff --git a/ash/ash_switches.cc b/ash/ash_switches.cc
index 8ffd94b..30857a8 100644
--- a/ash/ash_switches.cc
+++ b/ash/ash_switches.cc
@@ -11,6 +11,9 @@
namespace ash {
namespace switches {
+// Use Google-style dialog box frames.
+const char kAuraGoogleDialogFrames[] = "aura-google-dialog-frames";
+
// Avoid drawing drop shadows under windows.
const char kAuraNoShadows[] = "aura-no-shadows";
diff --git a/ash/ash_switches.h b/ash/ash_switches.h
index 2480bb6..65ba77d 100644
--- a/ash/ash_switches.h
+++ b/ash/ash_switches.h
@@ -12,6 +12,7 @@ namespace ash {
namespace switches {
// Please keep alphabetized.
+ASH_EXPORT extern const char kAuraGoogleDialogFrames[];
ASH_EXPORT extern const char kAuraNoShadows[];
ASH_EXPORT extern const char kAuraTranslucentFrames[];
ASH_EXPORT extern const char kAuraViewsAppList[];
diff --git a/ash/shell.cc b/ash/shell.cc
index c2e04fe..7d9863e 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -22,6 +22,7 @@
#include "ash/wm/compact_status_area_layout_manager.h"
#include "ash/wm/default_container_event_filter.h"
#include "ash/wm/default_container_layout_manager.h"
+#include "ash/wm/dialog_frame_view.h"
#include "ash/wm/modal_container_layout_manager.h"
#include "ash/wm/power_button_controller.h"
#include "ash/wm/root_window_event_filter.h"
@@ -394,6 +395,15 @@ bool Shell::IsModalWindowOpen() const {
return !modal_container->children().empty();
}
+views::NonClientFrameView* Shell::CreateDefaultNonClientFrameView(
+ views::Widget* widget) {
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kAuraGoogleDialogFrames)) {
+ return new internal::DialogFrameView;
+ }
+ return NULL;
+}
+
////////////////////////////////////////////////////////////////////////////////
// Shell, private:
diff --git a/ash/shell.h b/ash/shell.h
index 037b66f..7bb5d0b 100644
--- a/ash/shell.h
+++ b/ash/shell.h
@@ -27,6 +27,10 @@ namespace gfx {
class Rect;
class Size;
}
+namespace views {
+class NonClientFrameView;
+class Widget;
+}
namespace ash {
@@ -88,6 +92,11 @@ class ASH_EXPORT Shell {
// See enum WindowMode for details.
bool IsWindowModeCompact() const { return window_mode_ == COMPACT_MODE; }
+ // Creates a default views::NonClientFrameView for use by windows in the
+ // Ash environment.
+ views::NonClientFrameView* CreateDefaultNonClientFrameView(
+ views::Widget* widget);
+
AcceleratorController* accelerator_controller() {
return accelerator_controller_.get();
}
diff --git a/ash/shell/shell_main.cc b/ash/shell/shell_main.cc
index acbf788..5619d00 100644
--- a/ash/shell/shell_main.cc
+++ b/ash/shell/shell_main.cc
@@ -26,6 +26,21 @@
namespace {
+class ShellViewsDelegate : public views::TestViewsDelegate {
+ public:
+ ShellViewsDelegate() {}
+ virtual ~ShellViewsDelegate() {}
+
+ // Overridden from views::TestViewsDelegate:
+ virtual views::NonClientFrameView* CreateDefaultNonClientFrameView(
+ views::Widget* widget) OVERRIDE {
+ return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(widget);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ShellViewsDelegate);
+};
+
class ShellDelegateImpl : public ash::ShellDelegate {
public:
ShellDelegateImpl() {
@@ -116,7 +131,7 @@ int main(int argc, char** argv) {
// A ViewsDelegate is required.
if (!views::ViewsDelegate::views_delegate)
- views::ViewsDelegate::views_delegate = new views::TestViewsDelegate;
+ views::ViewsDelegate::views_delegate = new ShellViewsDelegate;
ash::Shell::CreateInstance(new ShellDelegateImpl);
diff --git a/ash/wm/modal_container_layout_manager.cc b/ash/wm/modal_container_layout_manager.cc
index 589305e..e4b8ea4 100644
--- a/ash/wm/modal_container_layout_manager.cc
+++ b/ash/wm/modal_container_layout_manager.cc
@@ -4,10 +4,12 @@
#include "ash/wm/modal_container_layout_manager.h"
+#include "ash/ash_switches.h"
#include "ash/shell.h"
#include "ash/wm/modality_event_filter.h"
#include "ash/wm/window_util.h"
#include "base/bind.h"
+#include "base/command_line.h"
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/event.h"
#include "ui/aura/root_window.h"
@@ -30,10 +32,18 @@ class ScreenView : public views::View {
// Overridden from views::View:
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
- canvas->FillRect(SK_ColorBLACK, GetLocalBounds());
+ canvas->FillRect(GetOverlayColor(), GetLocalBounds());
}
private:
+ SkColor GetOverlayColor() {
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kAuraGoogleDialogFrames)) {
+ return SK_ColorWHITE;
+ }
+ return SK_ColorBLACK;
+ }
+
DISALLOW_COPY_AND_ASSIGN(ScreenView);
};
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index effed95..34ab6c1 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5019,6 +5019,12 @@ Keep your key file in a safe place. You will need it to create new versions of y
<message name="IDS_FLAGS_AURA_TRANSLUCENT_FRAMES_DESCRIPTION" desc="Description for the flag to enable fancy translucent windows.">
Enable translucent window frames.
</message>
+ <message name="IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_NAME" desc="Title for the flag to enable Google-style dialog frames.">
+ Google-style dialogs
+ </message>
+ <message name="IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_DESCRIPTION" desc="Description for the flag to enable Google-style dialog frames.">
+ Enable Google-style dialog frames.
+ </message>
<message name="IDS_FLAGS_ENABLE_POINTER_LOCK_NAME" desc="Title for the flag to enable the pointer lock feature.">
Enable Pointer Lock
</message>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 0d0a177..21ff5d7 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -465,6 +465,13 @@ const Experiment kExperiments[] = {
kOsWin | kOsLinux | kOsCrOS,
SINGLE_VALUE_TYPE(ash::switches::kAuraTranslucentFrames)
},
+ {
+ "aura-google-dialog-frames",
+ IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_NAME,
+ IDS_FLAGS_AURA_GOOGLE_DIALOG_FRAMES_DESCRIPTION,
+ kOsWin | kOsLinux | kOsCrOS,
+ SINGLE_VALUE_TYPE(ash::switches::kAuraGoogleDialogFrames)
+ },
#endif // defined(USE_AURA)
{
"enable-gamepad",
diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc
index ac0f073..f5aceb5 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.cc
+++ b/chrome/browser/ui/views/chrome_views_delegate.cc
@@ -24,6 +24,10 @@
#include "chrome/browser/app_icon_win.h"
#endif
+#if defined(USE_AURA)
+#include "ash/shell.h"
+#endif
+
namespace {
// If the given window has a profile associated with it, use that profile's
@@ -124,6 +128,15 @@ HICON ChromeViewsDelegate::GetDefaultWindowIcon() const {
}
#endif
+views::NonClientFrameView* ChromeViewsDelegate::CreateDefaultNonClientFrameView(
+ views::Widget* widget) {
+#if defined(USE_AURA)
+ return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(widget);
+#else
+ return NULL;
+#endif
+}
+
void ChromeViewsDelegate::AddRef() {
g_browser_process->AddRefModule();
}
diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h
index 71c5dc1..136b5e8 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.h
+++ b/chrome/browser/ui/views/chrome_views_delegate.h
@@ -38,6 +38,8 @@ class ChromeViewsDelegate : public views::ViewsDelegate {
#if defined(OS_WIN)
virtual HICON GetDefaultWindowIcon() const OVERRIDE;
#endif
+ virtual views::NonClientFrameView* CreateDefaultNonClientFrameView(
+ views::Widget* widget) OVERRIDE;
virtual void AddRef() OVERRIDE;
virtual void ReleaseRef() OVERRIDE;
diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc
index 899cc02..36e1418 100644
--- a/chrome/browser/ui/views/constrained_window_views.cc
+++ b/chrome/browser/ui/views/constrained_window_views.cc
@@ -46,6 +46,10 @@
#include "ui/views/widget/native_widget_win.h"
#endif
+#if defined(USE_AURA)
+#include "ash/shell.h"
+#endif
+
using base::TimeDelta;
namespace views {
@@ -602,7 +606,11 @@ gfx::NativeWindow ConstrainedWindowViews::GetNativeWindow() {
// ConstrainedWindowViews, views::Widget overrides:
views::NonClientFrameView* ConstrainedWindowViews::CreateNonClientFrameView() {
+#if defined(USE_AURA)
+ return ash::Shell::GetInstance()->CreateDefaultNonClientFrameView(this);
+#else
return new ConstrainedWindowFrameView(this);
+#endif
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/ui/views/test/test_views_delegate.cc b/ui/views/test/test_views_delegate.cc
index 779e23c..73eef06 100644
--- a/ui/views/test/test_views_delegate.cc
+++ b/ui/views/test/test_views_delegate.cc
@@ -39,6 +39,11 @@ bool TestViewsDelegate::GetSavedWindowPlacement(
return false;
}
+NonClientFrameView* TestViewsDelegate::CreateDefaultNonClientFrameView(
+ Widget* widget) {
+ return NULL;
+}
+
int TestViewsDelegate::GetDispositionForEvent(int event_flags) {
return 0;
}
diff --git a/ui/views/test/test_views_delegate.h b/ui/views/test/test_views_delegate.h
index f2c8f69..5fa952d 100644
--- a/ui/views/test/test_views_delegate.h
+++ b/ui/views/test/test_views_delegate.h
@@ -49,7 +49,8 @@ class TestViewsDelegate : public ViewsDelegate {
return NULL;
}
#endif
-
+ virtual NonClientFrameView* CreateDefaultNonClientFrameView(
+ Widget* widget) OVERRIDE;
virtual void AddRef() OVERRIDE {}
virtual void ReleaseRef() OVERRIDE {}
diff --git a/ui/views/views_delegate.h b/ui/views/views_delegate.h
index 6194617d..2544413 100644
--- a/ui/views/views_delegate.h
+++ b/ui/views/views_delegate.h
@@ -27,6 +27,7 @@ class Clipboard;
namespace views {
+class NonClientFrameView;
class View;
class Widget;
@@ -77,6 +78,12 @@ class VIEWS_EXPORT ViewsDelegate {
virtual HICON GetDefaultWindowIcon() const = 0;
#endif
+ // Creates a default NonClientFrameView to be used for windows that don't
+ // specify their own. If this function returns NULL, the
+ // views::CustomFrameView type will be used.
+ virtual NonClientFrameView* CreateDefaultNonClientFrameView(
+ Widget* widget) = 0;
+
// AddRef/ReleaseRef are invoked while a menu is visible. They are used to
// ensure we don't attempt to exit while a menu is showing.
virtual void AddRef() = 0;
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index d00eedd..a69a1d2 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -750,6 +750,10 @@ NonClientFrameView* Widget::CreateNonClientFrameView() {
NonClientFrameView* frame_view = widget_delegate_->CreateNonClientFrameView();
if (!frame_view)
frame_view = native_widget_->CreateNonClientFrameView();
+ if (!frame_view && ViewsDelegate::views_delegate) {
+ frame_view =
+ ViewsDelegate::views_delegate->CreateDefaultNonClientFrameView(this);
+ }
return frame_view ? frame_view : new CustomFrameView(this);
}