| Index: content/shell/browser/shell_gtk.cc
|
| diff --git a/content/shell/browser/shell_gtk.cc b/content/shell/browser/shell_gtk.cc
|
| deleted file mode 100644
|
| index f9c8db44da0adaae11602c0a315eb1270e7b769e..0000000000000000000000000000000000000000
|
| --- a/content/shell/browser/shell_gtk.cc
|
| +++ /dev/null
|
| @@ -1,351 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/shell/browser/shell.h"
|
| -
|
| -#include <gdk/gdkkeysyms.h>
|
| -#include <gtk/gtk.h>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/strings/string_piece.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "content/public/browser/browser_context.h"
|
| -#include "content/public/browser/native_web_keyboard_event.h"
|
| -#include "content/public/browser/render_widget_host_view.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/browser/web_contents_view.h"
|
| -#include "content/public/common/renderer_preferences.h"
|
| -#include "content/shell/browser/shell_browser_context.h"
|
| -#include "content/shell/browser/shell_content_browser_client.h"
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -// Callback for Debug > Show web inspector... menu item.
|
| -gboolean ShowWebInspectorActivated(GtkWidget* widget, Shell* shell) {
|
| - shell->ShowDevTools();
|
| - return FALSE; // Don't stop this message.
|
| -}
|
| -
|
| -GtkWidget* AddMenuEntry(GtkWidget* menu_widget, const char* text,
|
| - GCallback callback, Shell* shell) {
|
| - GtkWidget* entry = gtk_menu_item_new_with_label(text);
|
| - g_signal_connect(entry, "activate", callback, shell);
|
| - gtk_menu_shell_append(GTK_MENU_SHELL(menu_widget), entry);
|
| - return entry;
|
| -}
|
| -
|
| -GtkWidget* CreateMenu(GtkWidget* menu_bar, const char* text) {
|
| - GtkWidget* menu_widget = gtk_menu_new();
|
| - GtkWidget* menu_header = gtk_menu_item_new_with_label(text);
|
| - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_header), menu_widget);
|
| - gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_header);
|
| - return menu_widget;
|
| -}
|
| -
|
| -GtkWidget* CreateMenuBar(Shell* shell) {
|
| - GtkWidget* menu_bar = gtk_menu_bar_new();
|
| - GtkWidget* debug_menu = CreateMenu(menu_bar, "Debug");
|
| - AddMenuEntry(debug_menu, "Show web inspector...",
|
| - G_CALLBACK(ShowWebInspectorActivated), shell);
|
| - return menu_bar;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void Shell::PlatformInitialize(const gfx::Size& default_window_size) {
|
| -}
|
| -
|
| -void Shell::PlatformExit() {
|
| -}
|
| -
|
| -void Shell::PlatformCleanUp() {
|
| - // Nothing to clean up; GTK will clean up the widgets shortly after.
|
| -}
|
| -
|
| -void Shell::PlatformEnableUIControl(UIControl control, bool is_enabled) {
|
| - if (headless_)
|
| - return;
|
| -
|
| - GtkToolItem* item = NULL;
|
| - switch (control) {
|
| - case BACK_BUTTON:
|
| - item = back_button_;
|
| - break;
|
| - case FORWARD_BUTTON:
|
| - item = forward_button_;
|
| - break;
|
| - case STOP_BUTTON:
|
| - item = stop_button_;
|
| - break;
|
| - default:
|
| - NOTREACHED() << "Unknown UI control";
|
| - return;
|
| - }
|
| - gtk_widget_set_sensitive(GTK_WIDGET(item), is_enabled);
|
| -}
|
| -
|
| -void Shell::PlatformSetAddressBarURL(const GURL& url) {
|
| - if (headless_)
|
| - return;
|
| -
|
| - gtk_entry_set_text(GTK_ENTRY(url_edit_view_), url.spec().c_str());
|
| -}
|
| -
|
| -void Shell::PlatformSetIsLoading(bool loading) {
|
| - if (headless_)
|
| - return;
|
| -
|
| - if (loading)
|
| - gtk_spinner_start(GTK_SPINNER(spinner_));
|
| - else
|
| - gtk_spinner_stop(GTK_SPINNER(spinner_));
|
| -}
|
| -
|
| -void Shell::PlatformCreateWindow(int width, int height) {
|
| - ui_elements_height_ = 0;
|
| - if (headless_) {
|
| - content_size_ = gfx::Size(width, height);
|
| - return;
|
| - }
|
| -
|
| - window_ = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
|
| - gtk_window_set_title(window_, "Content Shell");
|
| - g_signal_connect(G_OBJECT(window_), "destroy",
|
| - G_CALLBACK(OnWindowDestroyedThunk), this);
|
| -
|
| - vbox_ = gtk_vbox_new(FALSE, 0);
|
| -
|
| - // Create the menu bar.
|
| - GtkWidget* menu_bar = CreateMenuBar(this);
|
| - gtk_box_pack_start(GTK_BOX(vbox_), menu_bar, FALSE, FALSE, 0);
|
| -
|
| - // Create the object that mediates accelerators.
|
| - GtkAccelGroup* accel_group = gtk_accel_group_new();
|
| - gtk_window_add_accel_group(GTK_WINDOW(window_), accel_group);
|
| -
|
| - // Set global window handling accelerators:
|
| - gtk_accel_group_connect(
|
| - accel_group, GDK_w, GDK_CONTROL_MASK,
|
| - GTK_ACCEL_VISIBLE,
|
| - g_cclosure_new(G_CALLBACK(OnCloseWindowKeyPressedThunk),
|
| - this, NULL));
|
| -
|
| - gtk_accel_group_connect(
|
| - accel_group, GDK_n, GDK_CONTROL_MASK,
|
| - GTK_ACCEL_VISIBLE,
|
| - g_cclosure_new(G_CALLBACK(OnNewWindowKeyPressedThunk),
|
| - this, NULL));
|
| -
|
| - gtk_accel_group_connect(
|
| - accel_group, GDK_F5, (GdkModifierType)0,
|
| - GTK_ACCEL_VISIBLE,
|
| - g_cclosure_new(G_CALLBACK(OnReloadKeyPressedThunk),
|
| - this, NULL));
|
| -
|
| - GtkWidget* toolbar = gtk_toolbar_new();
|
| - // Turn off the labels on the toolbar buttons.
|
| - gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
|
| -
|
| - back_button_ = gtk_tool_button_new_from_stock(GTK_STOCK_GO_BACK);
|
| - g_signal_connect(back_button_, "clicked",
|
| - G_CALLBACK(&OnBackButtonClickedThunk), this);
|
| - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), back_button_, -1 /* append */);
|
| - gtk_widget_add_accelerator(GTK_WIDGET(back_button_), "clicked", accel_group,
|
| - GDK_Left, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
|
| -
|
| - forward_button_ = gtk_tool_button_new_from_stock(GTK_STOCK_GO_FORWARD);
|
| - g_signal_connect(forward_button_, "clicked",
|
| - G_CALLBACK(&OnForwardButtonClickedThunk), this);
|
| - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), forward_button_, -1 /* append */);
|
| - gtk_widget_add_accelerator(GTK_WIDGET(forward_button_), "clicked",
|
| - accel_group,
|
| - GDK_Right, GDK_MOD1_MASK, GTK_ACCEL_VISIBLE);
|
| -
|
| - reload_button_ = gtk_tool_button_new_from_stock(GTK_STOCK_REFRESH);
|
| - g_signal_connect(reload_button_, "clicked",
|
| - G_CALLBACK(&OnReloadButtonClickedThunk), this);
|
| - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), reload_button_, -1 /* append */);
|
| - gtk_widget_add_accelerator(GTK_WIDGET(reload_button_), "clicked",
|
| - accel_group,
|
| - GDK_r, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
| -
|
| - stop_button_ = gtk_tool_button_new_from_stock(GTK_STOCK_STOP);
|
| - g_signal_connect(stop_button_, "clicked",
|
| - G_CALLBACK(&OnStopButtonClickedThunk), this);
|
| - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), stop_button_, -1 /* append */);
|
| -
|
| - url_edit_view_ = gtk_entry_new();
|
| - g_signal_connect(G_OBJECT(url_edit_view_), "activate",
|
| - G_CALLBACK(&OnURLEntryActivateThunk), this);
|
| -
|
| - gtk_accel_group_connect(
|
| - accel_group, GDK_l, GDK_CONTROL_MASK,
|
| - GTK_ACCEL_VISIBLE,
|
| - g_cclosure_new(G_CALLBACK(OnHighlightURLViewThunk),
|
| - this, NULL));
|
| -
|
| - GtkToolItem* tool_item = gtk_tool_item_new();
|
| - gtk_container_add(GTK_CONTAINER(tool_item), url_edit_view_);
|
| - gtk_tool_item_set_expand(tool_item, TRUE);
|
| - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), tool_item, -1 /* append */);
|
| -
|
| - // Center a 20x20 spinner in a 26x24 area.
|
| - GtkWidget* spinner_alignment = gtk_alignment_new(0.5, 0.5, 0, 0);
|
| - gtk_alignment_set_padding(GTK_ALIGNMENT(spinner_alignment), 2, 2, 4, 4);
|
| - spinner_ = gtk_spinner_new();
|
| - gtk_widget_set_size_request(spinner_, 20, 20);
|
| - gtk_container_add(GTK_CONTAINER(spinner_alignment), spinner_);
|
| -
|
| - spinner_item_ = gtk_tool_item_new();
|
| - gtk_container_add(GTK_CONTAINER(spinner_item_), spinner_alignment);
|
| - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), spinner_item_, -1 /* append */);
|
| -
|
| - gtk_box_pack_start(GTK_BOX(vbox_), toolbar, FALSE, FALSE, 0);
|
| -
|
| - gtk_container_add(GTK_CONTAINER(window_), vbox_);
|
| -
|
| - // Trigger layout of the UI elements, so that we can measure their
|
| - // heights. The width and height passed to this method are meant for the web
|
| - // contents view, not the top-level window. Since Gtk only seems to provide a
|
| - // suitable resizing function for top-level windows, we need to know how to
|
| - // convert from web contents view size to top-level window size.
|
| - gtk_widget_show_all(GTK_WIDGET(vbox_));
|
| -
|
| - // Measure the heights of the UI elements, now that they have been laid out.
|
| - GtkRequisition elm_size;
|
| - gtk_widget_size_request(menu_bar, &elm_size);
|
| - ui_elements_height_ += elm_size.height;
|
| - gtk_widget_size_request(toolbar, &elm_size);
|
| - ui_elements_height_ += elm_size.height;
|
| -
|
| - // We're ready to set an initial window size.
|
| - SizeTo(gfx::Size(width, height));
|
| -
|
| - // Finally, show the window.
|
| - gtk_widget_show_all(GTK_WIDGET(window_));
|
| -}
|
| -
|
| -void Shell::PlatformSetContents() {
|
| - if (headless_) {
|
| - SizeTo(content_size_);
|
| - return;
|
| - }
|
| -
|
| - WebContentsView* content_view = web_contents_->GetView();
|
| - gtk_container_add(GTK_CONTAINER(vbox_), content_view->GetNativeView());
|
| -}
|
| -
|
| -void Shell::SizeTo(const gfx::Size& content_size) {
|
| - content_size_ = content_size;
|
| -
|
| - if (window_) {
|
| - gtk_window_resize(window_,
|
| - content_size.width(),
|
| - content_size.height() + ui_elements_height_);
|
| - } else if (web_contents_) {
|
| - RenderWidgetHostView* render_widget_host_view =
|
| - web_contents_->GetRenderWidgetHostView();
|
| - if (render_widget_host_view)
|
| - render_widget_host_view->SetSize(content_size);
|
| - }
|
| -}
|
| -
|
| -void Shell::PlatformResizeSubViews() {
|
| - // Not needed; the subviews are bound.
|
| -}
|
| -
|
| -bool Shell::PlatformHandleContextMenu(
|
| - const content::ContextMenuParams& params) {
|
| - return false;
|
| -}
|
| -
|
| -void Shell::Close() {
|
| - if (headless_) {
|
| - delete this;
|
| - return;
|
| - }
|
| -
|
| - gtk_widget_destroy(GTK_WIDGET(window_));
|
| -}
|
| -
|
| -void Shell::OnBackButtonClicked(GtkWidget* widget) {
|
| - GoBackOrForward(-1);
|
| -}
|
| -
|
| -void Shell::OnForwardButtonClicked(GtkWidget* widget) {
|
| - GoBackOrForward(1);
|
| -}
|
| -
|
| -void Shell::OnReloadButtonClicked(GtkWidget* widget) {
|
| - Reload();
|
| -}
|
| -
|
| -void Shell::OnStopButtonClicked(GtkWidget* widget) {
|
| - Stop();
|
| -}
|
| -
|
| -void Shell::OnURLEntryActivate(GtkWidget* entry) {
|
| - const gchar* str = gtk_entry_get_text(GTK_ENTRY(entry));
|
| - GURL url(str);
|
| - if (!url.has_scheme())
|
| - url = GURL(std::string("http://") + std::string(str));
|
| - if (url.is_valid())
|
| - LoadURL(url);
|
| -}
|
| -
|
| -// Callback for when the main window is destroyed.
|
| -gboolean Shell::OnWindowDestroyed(GtkWidget* window) {
|
| - delete this;
|
| - return FALSE; // Don't stop this message.
|
| -}
|
| -
|
| -gboolean Shell::OnCloseWindowKeyPressed(GtkAccelGroup* accel_group,
|
| - GObject* acceleratable,
|
| - guint keyval,
|
| - GdkModifierType modifier) {
|
| - gtk_widget_destroy(GTK_WIDGET(window_));
|
| - return TRUE;
|
| -}
|
| -
|
| -gboolean Shell::OnNewWindowKeyPressed(GtkAccelGroup* accel_group,
|
| - GObject* acceleratable,
|
| - guint keyval,
|
| - GdkModifierType modifier) {
|
| - ShellBrowserContext* browser_context =
|
| - ShellContentBrowserClient::Get()->browser_context();
|
| - Shell::CreateNewWindow(browser_context,
|
| - GURL(),
|
| - NULL,
|
| - MSG_ROUTING_NONE,
|
| - gfx::Size());
|
| - return TRUE;
|
| -}
|
| -
|
| -gboolean Shell::OnHighlightURLView(GtkAccelGroup* accel_group,
|
| - GObject* acceleratable,
|
| - guint keyval,
|
| - GdkModifierType modifier) {
|
| - gtk_widget_grab_focus(GTK_WIDGET(url_edit_view_));
|
| - return TRUE;
|
| -}
|
| -
|
| -gboolean Shell::OnReloadKeyPressed(GtkAccelGroup* accel_group,
|
| - GObject* acceleratable,
|
| - guint keyval,
|
| - GdkModifierType modifier) {
|
| - Reload();
|
| - return TRUE;
|
| -}
|
| -
|
| -void Shell::PlatformSetTitle(const base::string16& title) {
|
| - if (headless_)
|
| - return;
|
| -
|
| - std::string title_utf8 = base::UTF16ToUTF8(title);
|
| - gtk_window_set_title(GTK_WINDOW(window_), title_utf8.c_str());
|
| -}
|
| -
|
| -} // namespace content
|
|
|