summaryrefslogtreecommitdiffstats
path: root/views/widget/widget_gtk.cc
diff options
context:
space:
mode:
Diffstat (limited to 'views/widget/widget_gtk.cc')
-rw-r--r--views/widget/widget_gtk.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/views/widget/widget_gtk.cc b/views/widget/widget_gtk.cc
index 8d274ea..64493c4 100644
--- a/views/widget/widget_gtk.cc
+++ b/views/widget/widget_gtk.cc
@@ -87,7 +87,7 @@ void WidgetGtk::Init(GtkWidget* parent,
#endif
// Make container here.
- CreateGtkWidget(parent);
+ CreateGtkWidget(parent, bounds);
// Make sure we receive our motion events.
@@ -403,7 +403,7 @@ void WidgetGtk::DidProcessEvent(GdkEvent* event) {
////////////////////////////////////////////////////////////////////////////////
// TODO(beng): organize into sections:
-void WidgetGtk::CreateGtkWidget(GtkWidget* parent) {
+void WidgetGtk::CreateGtkWidget(GtkWidget* parent, const gfx::Rect& bounds) {
if (type_ == TYPE_CHILD) {
window_contents_ = widget_ = gtk_fixed_new();
gtk_fixed_set_has_window(GTK_FIXED(widget_), true);
@@ -418,6 +418,14 @@ void WidgetGtk::CreateGtkWidget(GtkWidget* parent) {
} else {
widget_ = gtk_window_new(
type_ == TYPE_WINDOW ? GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP);
+
+ if (!bounds.size().IsEmpty()) {
+ // When we realize the window, the window manager is given a size. If we
+ // don't specify a size before then GTK defaults to 200x200. Specify
+ // a size now so that the window manager sees the requested size.
+ GtkAllocation alloc = { 0, 0, bounds.width(), bounds.height() };
+ gtk_widget_size_allocate(widget_, &alloc);
+ }
gtk_window_set_decorated(GTK_WINDOW(widget_), false);
// We'll take care of positioning our window.
gtk_window_set_position(GTK_WINDOW(widget_), GTK_WIN_POS_NONE);