diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-15 17:19:26 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-15 17:19:26 +0000 |
commit | 47aeffb5c6da28dacae6d0457b6ae8966c169e23 (patch) | |
tree | 6ecbf5ed9aa921577890a1a0c1d87fee579a6bbb /views/widget/widget_gtk.cc | |
parent | f4abfbb568e292857badbf4cfd1787ca66e02376 (diff) | |
download | chromium_src-47aeffb5c6da28dacae6d0457b6ae8966c169e23.zip chromium_src-47aeffb5c6da28dacae6d0457b6ae8966c169e23.tar.gz chromium_src-47aeffb5c6da28dacae6d0457b6ae8966c169e23.tar.bz2 |
Fixes two related bugs:
. Native buttons were adding 8 pixels to each side of the preferred
size. This isn't necessary on Gtk as the preferred size already
includes padding.
. I changed WidgetGtk so that it no longer needs to explicitly set a
size request. Explicitly setting a size request is a bit of pain
because it means you can't ask for the widget real size request
without unsetting the explicit size request. Instead I've subclassed
GtkFixed so that you can either have the default behavior, or use
the allocated size rather than current size.
CHROME_OS_BUG=1003
TEST=see bug
Review URL: http://codereview.chromium.org/504003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34564 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/widget/widget_gtk.cc')
-rw-r--r-- | views/widget/widget_gtk.cc | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/views/widget/widget_gtk.cc b/views/widget/widget_gtk.cc index 4cb54a5..8274e2d 100644 --- a/views/widget/widget_gtk.cc +++ b/views/widget/widget_gtk.cc @@ -14,6 +14,7 @@ #include "base/string_util.h" #include "views/widget/default_theme_provider.h" #include "views/widget/drop_target_gtk.h" +#include "views/widget/gtk_views_fixed.h" #include "views/widget/root_view.h" #include "views/widget/tooltip_manager_gtk.h" #include "views/window/window_gtk.h" @@ -149,8 +150,10 @@ void WidgetGtk::RemoveChild(GtkWidget* child) { // We can be called after the contents widget has been destroyed, e.g. any // NativeViewHost not removed from the view hierarchy before the window is // closed. - if (GTK_IS_CONTAINER(window_contents_)) + if (GTK_IS_CONTAINER(window_contents_)) { gtk_container_remove(GTK_CONTAINER(window_contents_), child); + gtk_views_fixed_set_use_allocated_size(child, false); + } } void WidgetGtk::ReparentChild(GtkWidget* child) { @@ -159,9 +162,8 @@ void WidgetGtk::ReparentChild(GtkWidget* child) { void WidgetGtk::PositionChild(GtkWidget* child, int x, int y, int w, int h) { GtkAllocation alloc = { x, y, w, h }; - // For some reason we need to do both of these to size a widget. gtk_widget_size_allocate(child, &alloc); - gtk_widget_set_size_request(child, w, h); + gtk_views_fixed_set_use_allocated_size(child, true); gtk_fixed_move(GTK_FIXED(window_contents_), child, x, y); } @@ -1165,7 +1167,7 @@ void WidgetGtk::CreateGtkWidget(GtkWidget* parent, const gfx::Rect& bounds) { // that if we use GTK's double buffering and we tried to expand the dirty // region, it wouldn't get painted. if (type_ == TYPE_CHILD) { - window_contents_ = widget_ = gtk_fixed_new(); + window_contents_ = widget_ = gtk_views_fixed_new(); gtk_widget_set_name(widget_, "views-gtkwidget-child-fixed"); GTK_WIDGET_UNSET_FLAGS(widget_, GTK_DOUBLE_BUFFERED); gtk_fixed_set_has_window(GTK_FIXED(widget_), true); @@ -1200,7 +1202,7 @@ void WidgetGtk::CreateGtkWidget(GtkWidget* parent, const gfx::Rect& bounds) { } SetWindowForNative(widget_, static_cast<WindowGtk*>(this)); - window_contents_ = gtk_fixed_new(); + window_contents_ = gtk_views_fixed_new(); gtk_widget_set_name(window_contents_, "views-gtkwidget-window-fixed"); GTK_WIDGET_UNSET_FLAGS(window_contents_, GTK_DOUBLE_BUFFERED); gtk_fixed_set_has_window(GTK_FIXED(window_contents_), true); |