| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/shell/shell.h" | 5 #include "content/shell/shell.h" |
| 6 | 6 |
| 7 #include <gdk/gdkkeysyms.h> | 7 #include <gdk/gdkkeysyms.h> |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 if (headless_) | 94 if (headless_) |
| 95 return; | 95 return; |
| 96 | 96 |
| 97 if (loading) | 97 if (loading) |
| 98 gtk_spinner_start(GTK_SPINNER(spinner_)); | 98 gtk_spinner_start(GTK_SPINNER(spinner_)); |
| 99 else | 99 else |
| 100 gtk_spinner_stop(GTK_SPINNER(spinner_)); | 100 gtk_spinner_stop(GTK_SPINNER(spinner_)); |
| 101 } | 101 } |
| 102 | 102 |
| 103 void Shell::PlatformCreateWindow(int width, int height) { | 103 void Shell::PlatformCreateWindow(int width, int height) { |
| 104 SizeTo(width, height); | 104 ui_elements_height_ = 0; |
| 105 | 105 if (headless_) { |
| 106 if (headless_) | 106 SizeTo(width, height); |
| 107 return; | 107 return; |
| 108 } |
| 108 | 109 |
| 109 window_ = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); | 110 window_ = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); |
| 110 gtk_window_set_title(window_, "Content Shell"); | 111 gtk_window_set_title(window_, "Content Shell"); |
| 111 g_signal_connect(G_OBJECT(window_), "destroy", | 112 g_signal_connect(G_OBJECT(window_), "destroy", |
| 112 G_CALLBACK(OnWindowDestroyedThunk), this); | 113 G_CALLBACK(OnWindowDestroyedThunk), this); |
| 113 | 114 |
| 114 vbox_ = gtk_vbox_new(FALSE, 0); | 115 vbox_ = gtk_vbox_new(FALSE, 0); |
| 115 | 116 |
| 116 // Create the menu bar. | 117 // Create the menu bar. |
| 117 GtkWidget* menu_bar = CreateMenuBar(this); | 118 GtkWidget* menu_bar = CreateMenuBar(this); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 gtk_widget_set_size_request(spinner_, 20, 20); | 195 gtk_widget_set_size_request(spinner_, 20, 20); |
| 195 gtk_container_add(GTK_CONTAINER(spinner_alignment), spinner_); | 196 gtk_container_add(GTK_CONTAINER(spinner_alignment), spinner_); |
| 196 | 197 |
| 197 spinner_item_ = gtk_tool_item_new(); | 198 spinner_item_ = gtk_tool_item_new(); |
| 198 gtk_container_add(GTK_CONTAINER(spinner_item_), spinner_alignment); | 199 gtk_container_add(GTK_CONTAINER(spinner_item_), spinner_alignment); |
| 199 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), spinner_item_, -1 /* append */); | 200 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), spinner_item_, -1 /* append */); |
| 200 | 201 |
| 201 gtk_box_pack_start(GTK_BOX(vbox_), toolbar, FALSE, FALSE, 0); | 202 gtk_box_pack_start(GTK_BOX(vbox_), toolbar, FALSE, FALSE, 0); |
| 202 | 203 |
| 203 gtk_container_add(GTK_CONTAINER(window_), vbox_); | 204 gtk_container_add(GTK_CONTAINER(window_), vbox_); |
| 205 |
| 206 // Trigger layout of the UI elements, so that we can measure their |
| 207 // heights. The width and height passed to this method are meant for the web |
| 208 // contents view, not the top-level window. Since Gtk only seems to provide a |
| 209 // suitable resizing function for top-level windows, we need to know how to |
| 210 // convert from web contents view size to top-level window size. |
| 211 gtk_widget_show_all(GTK_WIDGET(vbox_)); |
| 212 |
| 213 // Measure the heights of the UI elements, now that they have been laid out. |
| 214 GtkRequisition elm_size; |
| 215 gtk_widget_size_request(menu_bar, &elm_size); |
| 216 ui_elements_height_ += elm_size.height; |
| 217 gtk_widget_size_request(toolbar, &elm_size); |
| 218 ui_elements_height_ += elm_size.height; |
| 219 |
| 220 // We're ready to set an initial window size. |
| 221 SizeTo(width, height); |
| 222 |
| 223 // Finally, show the window. |
| 204 gtk_widget_show_all(GTK_WIDGET(window_)); | 224 gtk_widget_show_all(GTK_WIDGET(window_)); |
| 205 } | 225 } |
| 206 | 226 |
| 207 void Shell::PlatformSetContents() { | 227 void Shell::PlatformSetContents() { |
| 208 if (headless_) | 228 if (headless_) |
| 209 return; | 229 return; |
| 210 | 230 |
| 211 WebContentsView* content_view = web_contents_->GetView(); | 231 WebContentsView* content_view = web_contents_->GetView(); |
| 212 gtk_container_add(GTK_CONTAINER(vbox_), content_view->GetNativeView()); | 232 gtk_container_add(GTK_CONTAINER(vbox_), content_view->GetNativeView()); |
| 213 } | 233 } |
| 214 | 234 |
| 215 void Shell::SizeTo(int width, int height) { | 235 void Shell::SizeTo(int width, int height) { |
| 216 content_width_ = width; | 236 content_width_ = width; |
| 217 content_height_ = height; | 237 content_height_ = height; |
| 218 if (web_contents_) { | 238 |
| 239 // Prefer setting the top level window's size (if we have one), rather than |
| 240 // setting the inner widget's minimum size (so that the user can shrink the |
| 241 // window if she wants). |
| 242 if (window_) { |
| 243 gtk_window_resize(window_, width, height + ui_elements_height_); |
| 244 } else if (web_contents_) { |
| 219 gtk_widget_set_size_request(web_contents_->GetView()->GetNativeView(), | 245 gtk_widget_set_size_request(web_contents_->GetView()->GetNativeView(), |
| 220 width, height); | 246 width, height); |
| 221 } | 247 } |
| 222 } | 248 } |
| 223 | 249 |
| 224 void Shell::PlatformResizeSubViews() { | 250 void Shell::PlatformResizeSubViews() { |
| 225 SizeTo(content_width_, content_height_); | 251 SizeTo(content_width_, content_height_); |
| 226 } | 252 } |
| 227 | 253 |
| 228 void Shell::Close() { | 254 void Shell::Close() { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 | 330 |
| 305 void Shell::PlatformSetTitle(const string16& title) { | 331 void Shell::PlatformSetTitle(const string16& title) { |
| 306 if (headless_) | 332 if (headless_) |
| 307 return; | 333 return; |
| 308 | 334 |
| 309 std::string title_utf8 = UTF16ToUTF8(title); | 335 std::string title_utf8 = UTF16ToUTF8(title); |
| 310 gtk_window_set_title(GTK_WINDOW(window_), title_utf8.c_str()); | 336 gtk_window_set_title(GTK_WINDOW(window_), title_utf8.c_str()); |
| 311 } | 337 } |
| 312 | 338 |
| 313 } // namespace content | 339 } // namespace content |
| OLD | NEW |