Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2798)

Unified Diff: components/constrained_window/constrained_window_views.cc

Issue 2172363002: Created min size for print preview dialog and modified to allow the Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Track independent bounds as native window property not member of widget class Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/constrained_window/constrained_window_views.cc
diff --git a/components/constrained_window/constrained_window_views.cc b/components/constrained_window/constrained_window_views.cc
index def5232fc9782603559d380c6499264f1c8ac6b5..4e79e52cc3eadbcb8ebb8b116afa79317b50705d 100644
--- a/components/constrained_window/constrained_window_views.cc
+++ b/components/constrained_window/constrained_window_views.cc
@@ -22,6 +22,9 @@ using web_modal::ModalDialogHost;
using web_modal::ModalDialogHostObserver;
namespace constrained_window {
+
+const char kHasIndependentBoundsKey[] = "__INDEPENDENT_BOUNDS__";
Mike Wittman 2016/08/05 16:03:46 If I understood Scott correctly in the off-review
rbpotter 2016/08/12 16:36:07 Done.
+
namespace {
ConstrainedWindowViewsClient* constrained_window_views_client = NULL;
@@ -91,13 +94,24 @@ void UpdateModalDialogPosition(views::Widget* widget,
// top of the dialog.
position.set_y(position.y() - border->GetInsets().top());
}
-
if (widget->is_top_level()) {
position +=
views::Widget::GetWidgetForNativeView(dialog_host->GetHostView())->
GetClientAreaBoundsInScreen().OffsetFromOrigin();
+ } else {
+ bool * independent_bounds = NULL;
+ independent_bounds = reinterpret_cast<bool*>(
Mike Wittman 2016/08/05 16:03:46 static_cast<> is preferred when casting from void*
rbpotter 2016/08/12 16:36:07 Done.
+ widget->GetNativeWindowProperty(kHasIndependentBoundsKey));
+ if (independent_bounds && *independent_bounds) {
+ gfx::Rect bound =
+ views::Widget::GetWidgetForNativeView(dialog_host->GetHostView())->
+ GetClientAreaBoundsInScreen();
+ if (bound.width() - border->GetInsets().left() < size.width()) {
+ position.set_x(position.x() + (size.width()-bound.width())/2 +
+ border->GetInsets().left());
+ }
+ }
}
-
widget->SetBounds(gfx::Rect(position, size));
}
@@ -122,7 +136,12 @@ void UpdateWebContentsModalDialogPosition(
// Border may be null during widget initialization.
if (border)
max_size.Enlarge(0, border->GetInsets().top());
- size.SetToMin(max_size);
+ bool * independent_bounds = NULL;
+ independent_bounds = reinterpret_cast<bool*>(
+ widget->GetNativeWindowProperty(kHasIndependentBoundsKey));
+ if (!(independent_bounds && *independent_bounds)) {
+ size.SetToMin(max_size);
+ }
UpdateModalDialogPosition(widget, dialog_host, size);
}
@@ -142,7 +161,23 @@ views::Widget* ShowWebModalDialogViews(
guest_view::GuestViewBase::GetTopLevelWebContents(initiator_web_contents);
views::Widget* widget = CreateWebModalDialogViews(dialog, web_contents);
web_modal::WebContentsModalDialogManager::FromWebContents(web_contents)
- ->ShowModalDialog(widget->GetNativeWindow());
+ ->ShowModalDialog(widget->GetNativeWindow(), NULL, NULL);
+ return widget;
+}
+
+views::Widget* ShowWebModalDialogWithIndBoundsViews(
+ views::WidgetDelegate* dialog,
+ content::WebContents* initiator_web_contents,
+ bool * independent_bounds) {
+ DCHECK(constrained_window_views_client);
+ // For embedded WebContents, use the embedder's WebContents for constrained
+ // window.
+ content::WebContents* web_contents =
+ guest_view::GuestViewBase::GetTopLevelWebContents(initiator_web_contents);
+ views::Widget* widget = CreateWebModalDialogViews(dialog, web_contents);
+ web_modal::WebContentsModalDialogManager::FromWebContents(web_contents)
+ ->ShowModalDialog(widget->GetNativeWindow(), independent_bounds,
+ kHasIndependentBoundsKey);
return widget;
}

Powered by Google App Engine
This is Rietveld 408576698