views: Linux: Support CefWindowDelegate::CanResize restriction

This commit is contained in:
Marshall Greenblatt 2017-08-25 14:41:30 -07:00
parent 7f6c18af09
commit 64e6971099
4 changed files with 61 additions and 1 deletions

View File

@ -436,6 +436,30 @@ bool CefWindowView::ShouldDescendIntoChildForEventHandling(
!draggable_region_->contains(location.x(), location.y());
}
bool CefWindowView::MaybeGetMinimumSize(gfx::Size* size) const {
#if defined(OS_LINUX)
// Resize is disabled on Linux by returning the preferred size as the min/max
// size.
if (!CanResize()) {
*size = CalculatePreferredSize();
return true;
}
#endif
return false;
}
bool CefWindowView::MaybeGetMaximumSize(gfx::Size* size) const {
#if defined(OS_LINUX)
// Resize is disabled on Linux by returning the preferred size as the min/max
// size.
if (!CanResize()) {
*size = CalculatePreferredSize();
return true;
}
#endif
return false;
}
void CefWindowView::ViewHierarchyChanged(
const views::View::ViewHierarchyChangedDetails& details) {
if (details.child == this) {

View File

@ -68,6 +68,8 @@ class CefWindowView
bool ShouldDescendIntoChildForEventHandling(
gfx::NativeView child,
const gfx::Point& location) override;
bool MaybeGetMinimumSize(gfx::Size* size) const override;
bool MaybeGetMaximumSize(gfx::Size* size) const override;
// views::View methods:
void ViewHierarchyChanged(

View File

@ -79,6 +79,8 @@ patches = [
# and WS_SYSMENU styles. Otherwise Windows 10 enforces a minimum window
# width of ~116 units that cannot be overridden.
# Linux: Allow creation of activatable menu windows.
# Linux: Support CefWindowDelegate::CanResize restriction by specifying
# min/max Widget size values.
# https://bitbucket.org/chromiumembedded/cef/issues/1947
#
# Support configuration of RWHVGuest device scale factor.

View File

@ -335,7 +335,7 @@ index cb18967..0c143d2 100644
base::WeakPtrFactory<DesktopWindowTreeHostX11> weak_factory_;
diff --git ui/views/widget/widget.cc ui/views/widget/widget.cc
index 32a50e8..06d39f0 100644
index 32a50e8..43191a9 100644
--- ui/views/widget/widget.cc
+++ ui/views/widget/widget.cc
@@ -130,6 +130,7 @@ Widget::InitParams::InitParams(Type type)
@ -369,6 +369,23 @@ index 32a50e8..06d39f0 100644
}
// This must come after SetContentsView() or it might not be able to find
// the correct NativeTheme (on Linux). See http://crbug.com/384492
@@ -1098,10 +1104,16 @@ void Widget::OnNativeWidgetDestroyed() {
}
gfx::Size Widget::GetMinimumSize() const {
+ gfx::Size size;
+ if (widget_delegate_->MaybeGetMinimumSize(&size))
+ return size;
return non_client_view_ ? non_client_view_->GetMinimumSize() : gfx::Size();
}
gfx::Size Widget::GetMaximumSize() const {
+ gfx::Size size;
+ if (widget_delegate_->MaybeGetMaximumSize(&size))
+ return size;
return non_client_view_ ? non_client_view_->GetMaximumSize() : gfx::Size();
}
diff --git ui/views/widget/widget.h ui/views/widget/widget.h
index 63fcb9d..7237ae6 100644
--- ui/views/widget/widget.h
@ -381,6 +398,21 @@ index 63fcb9d..7237ae6 100644
// Specifies the initial bounds of the Widget. Default is empty, which means
// the NativeWidget may specify a default size. If the parent is specified,
// |bounds| is in the parent's coordinate system. If the parent is not
diff --git ui/views/widget/widget_delegate.h ui/views/widget/widget_delegate.h
index bd4d8a7..998cfa0 100644
--- ui/views/widget/widget_delegate.h
+++ ui/views/widget/widget_delegate.h
@@ -187,6 +187,10 @@ class VIEWS_EXPORT WidgetDelegate {
// be cycled through with keyboard focus.
virtual void GetAccessiblePanes(std::vector<View*>* panes) {}
+ // CEF supports override of min/max size values.
+ virtual bool MaybeGetMinimumSize(gfx::Size* size) const { return false; }
+ virtual bool MaybeGetMaximumSize(gfx::Size* size) const { return false; }
+
protected:
virtual ~WidgetDelegate() {}
diff --git ui/views/widget/widget_hwnd_utils.cc ui/views/widget/widget_hwnd_utils.cc
index 163e4b5..58f594db 100644
--- ui/views/widget/widget_hwnd_utils.cc