Index: chrome/browser/ui/views/constrained_window_views.cc |
diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc |
index 2aaf122a177c2f81929b7e117daa11edd070a1e9..f3199349657aadbe03c7c074f7f4bad98a6184fb 100644 |
--- a/chrome/browser/ui/views/constrained_window_views.cc |
+++ b/chrome/browser/ui/views/constrained_window_views.cc |
@@ -23,6 +23,10 @@ |
#include "chrome/common/chrome_switches.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/browser/web_contents_view.h" |
+#include "content/public/browser/navigation_controller.h" |
Peter Kasting
2012/10/15 21:46:54
Nit: Alphabetical order
please use gerrit instead
2012/10/16 00:12:23
Done.
|
+#include "content/public/browser/notification_service.h" |
+#include "content/public/browser/notification_source.h" |
+#include "content/public/browser/notification_types.h" |
#include "grit/chromium_strings.h" |
#include "grit/generated_resources.h" |
#include "grit/theme_resources.h" |
@@ -581,12 +585,14 @@ class ConstrainedWindowFrameViewAsh : public ash::CustomFrameViewAsh { |
ConstrainedWindowViews::ConstrainedWindowViews( |
content::WebContents* web_contents, |
views::WidgetDelegate* widget_delegate, |
- bool enable_chrome_style) |
+ bool enable_chrome_style, |
+ const gfx::Insets& client_insets) |
: WebContentsObserver(web_contents), |
web_contents_(web_contents), |
+ enable_chrome_style_(enable_chrome_style), |
+ client_insets_(client_insets), |
ALLOW_THIS_IN_INITIALIZER_LIST(native_constrained_window_( |
- NativeConstrainedWindow::CreateNativeConstrainedWindow(this))), |
- enable_chrome_style_(enable_chrome_style) { |
+ NativeConstrainedWindow::CreateNativeConstrainedWindow(this))) { |
views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); |
params.delegate = widget_delegate; |
params.native_widget = native_constrained_window_->AsNativeWidget(); |
@@ -594,9 +600,9 @@ ConstrainedWindowViews::ConstrainedWindowViews( |
if (enable_chrome_style_) { |
params.parent_widget = Widget::GetTopLevelWidgetForNativeView( |
- web_contents->GetView()->GetNativeView()); |
+ web_contents_->GetView()->GetNativeView()); |
} else { |
- params.parent = web_contents->GetNativeView(); |
+ params.parent = web_contents_->GetNativeView(); |
} |
#if defined(USE_ASH) |
@@ -622,7 +628,10 @@ ConstrainedWindowViews::ConstrainedWindowViews( |
if (dialog_client_view) |
dialog_client_view->set_background(background); |
} |
- PositionChromeStyleWindow(); |
+ PositionChromeStyleWindow(GetRootView()->bounds().size()); |
+ registrar_.Add(this, |
+ content::NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED, |
+ content::Source<content::WebContents>(web_contents)); |
} |
ConstrainedWindowTabHelper* constrained_window_tab_helper = |
@@ -688,14 +697,22 @@ void ConstrainedWindowViews::NotifyTabHelperWillClose() { |
// ConstrainedWindowViews, views::Widget overrides: |
void ConstrainedWindowViews::CenterWindow(const gfx::Size& size) { |
- Widget::CenterWindow(size); |
if (enable_chrome_style_) |
- PositionChromeStyleWindow(); |
+ PositionChromeStyleWindow(size); |
+ else |
+ Widget::CenterWindow(size); |
} |
views::NonClientFrameView* ConstrainedWindowViews::CreateNonClientFrameView() { |
if (enable_chrome_style_) { |
- return new ConstrainedWindowFrameSimple(this); |
+ ConstrainedWindowFrameSimple* frame = |
+ new ConstrainedWindowFrameSimple(this); |
+ frame->set_border(views::Border::CreateEmptyBorder( |
+ client_insets_.top(), |
+ client_insets_.left(), |
+ client_insets_.bottom(), |
+ client_insets_.right())); |
+ return frame; |
} else { |
Peter Kasting
2012/10/15 21:46:54
Nit: No else after return
please use gerrit instead
2012/10/16 00:12:23
Done.
|
#if defined(USE_ASH) |
CommandLine* command_line = CommandLine::ForCurrentProcess(); |
@@ -730,21 +747,21 @@ int ConstrainedWindowViews::GetNonClientComponent(const gfx::Point& point) { |
return HTNOWHERE; |
} |
-void ConstrainedWindowViews::PositionChromeStyleWindow() { |
+void ConstrainedWindowViews::PositionChromeStyleWindow(const gfx::Size& size) { |
DCHECK(enable_chrome_style_); |
- gfx::Rect bounds = GetRootView()->bounds(); |
+ gfx::Rect bounds(GetRootView()->bounds()); |
+ bounds.set_size(size); |
Peter Kasting
2012/10/15 21:46:54
Nit: How about:
gfx::rect bounds(GetRootView()-
please use gerrit instead
2012/10/16 00:12:23
That's a cool trick, thanks! Done.
|
ConstrainedWindowTabHelperDelegate* tab_helper_delegate = |
ConstrainedWindowTabHelper::FromWebContents(web_contents_)->delegate(); |
- |
BrowserWindow* browser_window = |
tab_helper_delegate ? tab_helper_delegate->GetBrowserWindow() : NULL; |
int top_y; |
Peter Kasting
2012/10/15 21:46:54
Nit: Declare this inside the conditional
please use gerrit instead
2012/10/16 00:12:23
Done.
|
- if (browser_window && browser_window->GetConstrainedWindowTopY(&top_y)) { |
- bounds.set_y(top_y); |
- bounds.set_x( |
- browser_window->GetBounds().width() / 2 - bounds.width() / 2); |
- SetBounds(bounds); |
+ if (browser_window) { |
+ bounds.set_x(browser_window->GetBounds().width() / 2 - bounds.width() / 2); |
+ if (browser_window->GetConstrainedWindowTopY(&top_y)) |
+ bounds.set_y(top_y); |
} |
+ SetBounds(bounds); |
} |
//////////////////////////////////////////////////////////////////////////////// |
@@ -754,3 +771,19 @@ void ConstrainedWindowViews::WebContentsDestroyed( |
content::WebContents* web_contents) { |
web_contents_ = NULL; |
} |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// ConstrainedWindowViews, content::NotificationObserver implementation: |
Peter Kasting
2012/10/15 21:46:54
Nit: This practice of separating each group of ove
please use gerrit instead
2012/10/16 00:12:23
Removed all //////////////. Done.
|
+ |
+void ConstrainedWindowViews::Observe( |
+ int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) { |
+ if (enable_chrome_style_ && |
+ type == content::NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED) { |
Peter Kasting
2012/10/15 21:46:54
Nit: DCHECK_EQ that |type| is this value atop the
please use gerrit instead
2012/10/16 00:12:23
I've added DCHECK(enable_chrome_style_) and DHCECK
|
+ if (*content::Details<bool>(details).ptr()) |
+ Show(); |
+ else |
+ Hide(); |
+ } |
+} |