diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-02 13:46:43 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-02 13:46:43 +0000 |
commit | 552d67df8c38db1a7097ef1af632d8b36459df81 (patch) | |
tree | 364a305dabf4cb25dc37d2c5fc8eb7ee241b4d71 /views/widget | |
parent | aa43b4d1623f3480929e8e5d659702a3eaacb769 (diff) | |
download | chromium_src-552d67df8c38db1a7097ef1af632d8b36459df81.zip chromium_src-552d67df8c38db1a7097ef1af632d8b36459df81.tar.gz chromium_src-552d67df8c38db1a7097ef1af632d8b36459df81.tar.bz2 |
Auto-size the views version of the options dialog.
This adds support for auto-sizing tab controls, adjusts the options dialog to
use it and takes care of any fallout due to the new layout handling. Also fixes
a couple of small bugs in the views Layout() machinery and sanitizes layouting
of options pages.
BUG=36497
TEST=unit tests in tabbed_pane_unittest.cc and grid_layout_unittest.cc, as well as checking the options dialog in any supported language.
Review URL: http://codereview.chromium.org/2812026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51526 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget')
-rw-r--r-- | views/widget/widget_gtk.cc | 14 | ||||
-rw-r--r-- | views/widget/widget_gtk.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/views/widget/widget_gtk.cc b/views/widget/widget_gtk.cc index 1e73e38..c9144d7 100644 --- a/views/widget/widget_gtk.cc +++ b/views/widget/widget_gtk.cc @@ -500,6 +500,8 @@ void WidgetGtk::Init(GtkWidget* parent, GDK_KEY_RELEASE_MASK); SetRootViewForWidget(widget_, root_view_.get()); + g_signal_connect_after(G_OBJECT(window_contents_), "size_request", + G_CALLBACK(&OnSizeRequestThunk), this); g_signal_connect_after(G_OBJECT(window_contents_), "size_allocate", G_CALLBACK(&OnSizeAllocateThunk), this); gtk_widget_set_app_paintable(window_contents_, true); @@ -883,6 +885,18 @@ int WidgetGtk::GetFlagsForEventButton(const GdkEventButton& event) { return flags; } +void WidgetGtk::OnSizeRequest(GtkWidget* widget, GtkRequisition* requisition) { + // Do only return the preferred size for child windows. GtkWindow interprets + // the requisition as a minimum size for top level windows, returning a + // preferred size for these would prevents us from setting smaller window + // sizes. + if (type_ == TYPE_CHILD) { + gfx::Size size(root_view_->GetPreferredSize()); + requisition->width = size.width(); + requisition->height = size.height(); + } +} + void WidgetGtk::OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation) { // See comment next to size_ as to why we do this. Also note, it's tempting // to put this in the static method so subclasses don't need to worry about diff --git a/views/widget/widget_gtk.h b/views/widget/widget_gtk.h index 816a263..3700aa3 100644 --- a/views/widget/widget_gtk.h +++ b/views/widget/widget_gtk.h @@ -223,6 +223,7 @@ class WidgetGtk // Event handlers: CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnButtonPress, GdkEventButton*); + CHROMEGTK_CALLBACK_1(WidgetGtk, void, OnSizeRequest, GtkRequisition*); CHROMEGTK_CALLBACK_1(WidgetGtk, void, OnSizeAllocate, GtkAllocation*); CHROMEGTK_CALLBACK_1(WidgetGtk, gboolean, OnPaint, GdkEventExpose*); CHROMEGTK_CALLBACK_4(WidgetGtk, void, OnDragDataGet, |