summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc40
-rw-r--r--chrome/browser/gtk/browser_window_gtk.h9
-rw-r--r--chrome/browser/gtk/tab_contents_container_gtk.cc14
-rw-r--r--chrome/browser/gtk/tab_contents_container_gtk.h5
4 files changed, 55 insertions, 13 deletions
diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc
index de819b0..db15bd9 100644
--- a/chrome/browser/gtk/browser_window_gtk.cc
+++ b/chrome/browser/gtk/browser_window_gtk.cc
@@ -24,6 +24,7 @@
#include "chrome/browser/browser_list.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_theme_provider.h"
+#include "chrome/browser/debugger/devtools_window.h"
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/gtk/about_chrome_dialog.h"
@@ -587,7 +588,8 @@ void BrowserWindowGtk::UpdateTitleBar() {
}
void BrowserWindowGtk::UpdateDevTools() {
- NOTIMPLEMENTED();
+ UpdateDevToolsForContents(
+ browser_->tabstrip_model()->GetSelectedTabContents());
}
void BrowserWindowGtk::FocusDevTools() {
@@ -836,6 +838,7 @@ void BrowserWindowGtk::TabDetachedAt(TabContents* contents, int index) {
if (index == browser_->tabstrip_model()->selected_index())
infobar_container_->ChangeTabContents(NULL);
contents_container_->DetachTabContents(contents);
+ UpdateDevToolsForContents(NULL);
}
// TODO(estade): this function should probably be unforked from the BrowserView
@@ -854,6 +857,7 @@ void BrowserWindowGtk::TabSelectedAt(TabContents* old_contents,
// TabContents.
infobar_container_->ChangeTabContents(new_contents);
contents_container_->SetTabContents(new_contents);
+ UpdateDevToolsForContents(new_contents);
new_contents->DidBecomeSelected();
// TODO(estade): after we manage browser activation, add a check to make sure
@@ -900,6 +904,29 @@ void BrowserWindowGtk::MaybeShowBookmarkBar(TabContents* contents,
}
}
+void BrowserWindowGtk::UpdateDevToolsForContents(TabContents* contents) {
+ TabContents* old_devtools = devtools_container_->GetTabContents();
+ if (old_devtools)
+ devtools_container_->DetachTabContents(old_devtools);
+
+ TabContents* devtools_contents = contents ?
+ DevToolsWindow::GetDevToolsContents(contents) : NULL;
+ devtools_container_->SetTabContents(devtools_contents);
+ if (devtools_contents) {
+ // TabContentsViewGtk::WasShown is not called when tab contents is shown by
+ // anything other than user selecting a Tab.
+ // See TabContentsViewWin::OnWindowPosChanged for reference on how it should
+ // be implemented.
+ devtools_contents->ShowContents();
+ }
+
+ if (devtools_contents) {
+ gtk_widget_show(devtools_container_->widget());
+ } else {
+ gtk_widget_hide(devtools_container_->widget());
+ }
+}
+
void BrowserWindowGtk::UpdateUIForContents(TabContents* contents) {
MaybeShowBookmarkBar(contents, false);
}
@@ -1095,8 +1122,17 @@ void BrowserWindowGtk::InitWidgets() {
status_bubble_.reset(new StatusBubbleGtk(browser_->profile()));
contents_container_.reset(new TabContentsContainerGtk(status_bubble_.get()));
- contents_container_->AddContainerToBox(render_area_vbox_);
+ devtools_container_.reset(new TabContentsContainerGtk(NULL));
+ contents_split_ = gtk_vpaned_new();
+ gtk_paned_pack1(GTK_PANED(contents_split_), contents_container_->widget(),
+ TRUE, TRUE);
+ gtk_paned_pack2(GTK_PANED(contents_split_), devtools_container_->widget(),
+ FALSE, TRUE);
+ gtk_box_pack_start(GTK_BOX(render_area_vbox_), contents_split_, TRUE, TRUE,
+ 0);
+ gtk_paned_set_position(GTK_PANED(contents_split_), 400);
gtk_widget_show_all(render_area_vbox_);
+ gtk_widget_hide(devtools_container_->widget());
#if defined(OS_CHROMEOS)
if (browser_->type() == Browser::TYPE_POPUP) {
diff --git a/chrome/browser/gtk/browser_window_gtk.h b/chrome/browser/gtk/browser_window_gtk.h
index 8730a78..b15c9fc 100644
--- a/chrome/browser/gtk/browser_window_gtk.h
+++ b/chrome/browser/gtk/browser_window_gtk.h
@@ -119,6 +119,8 @@ class BrowserWindowGtk : public BrowserWindow,
// Accessor for the tab strip.
TabStripGtk* tabstrip() const { return tabstrip_.get(); }
+ void UpdateDevToolsForContents(TabContents* contents);
+
void UpdateUIForContents(TabContents* contents);
void OnBoundsChanged(const gfx::Rect& bounds);
@@ -284,6 +286,13 @@ class BrowserWindowGtk : public BrowserWindow,
// of the content area).
scoped_ptr<TabContentsContainerGtk> contents_container_;
+ // A container that manages the GtkWidget*s of developer tools for the
+ // selected tab contents.
+ scoped_ptr<TabContentsContainerGtk> devtools_container_;
+
+ // Split pane containing the contents_container_ and the devtools_container_.
+ GtkWidget* contents_split_;
+
// The tab strip. Always non-NULL.
scoped_ptr<TabStripGtk> tabstrip_;
diff --git a/chrome/browser/gtk/tab_contents_container_gtk.cc b/chrome/browser/gtk/tab_contents_container_gtk.cc
index d55f9ca..5517f68 100644
--- a/chrome/browser/gtk/tab_contents_container_gtk.cc
+++ b/chrome/browser/gtk/tab_contents_container_gtk.cc
@@ -58,19 +58,17 @@ void TabContentsContainerGtk::Init() {
G_CALLBACK(OnFixedSizeAllocate), this);
gtk_container_add(GTK_CONTAINER(floating_.get()), fixed_);
- gtk_floating_container_add_floating(GTK_FLOATING_CONTAINER(floating_.get()),
- status_bubble_->widget());
- g_signal_connect(floating_.get(), "set-floating-position",
- G_CALLBACK(OnSetFloatingPosition), this);
+ if (status_bubble_) {
+ gtk_floating_container_add_floating(GTK_FLOATING_CONTAINER(floating_.get()),
+ status_bubble_->widget());
+ g_signal_connect(floating_.get(), "set-floating-position",
+ G_CALLBACK(OnSetFloatingPosition), this);
+ }
gtk_widget_show(fixed_);
gtk_widget_show(floating_.get());
}
-void TabContentsContainerGtk::AddContainerToBox(GtkWidget* box) {
- gtk_box_pack_start(GTK_BOX(box), floating_.get(), TRUE, TRUE, 0);
-}
-
void TabContentsContainerGtk::SetTabContents(TabContents* tab_contents) {
if (tab_contents_) {
gfx::NativeView widget = tab_contents_->GetNativeView();
diff --git a/chrome/browser/gtk/tab_contents_container_gtk.h b/chrome/browser/gtk/tab_contents_container_gtk.h
index ec524a5..b76517d 100644
--- a/chrome/browser/gtk/tab_contents_container_gtk.h
+++ b/chrome/browser/gtk/tab_contents_container_gtk.h
@@ -24,9 +24,6 @@ class TabContentsContainerGtk : public NotificationObserver {
void Init();
- // Inserts our GtkWidget* hierarchy into a GtkBox managed by our owner.
- void AddContainerToBox(GtkWidget* widget);
-
// Make the specified tab visible.
void SetTabContents(TabContents* tab_contents);
TabContents* GetTabContents() const { return tab_contents_; }
@@ -39,6 +36,8 @@ class TabContentsContainerGtk : public NotificationObserver {
const NotificationSource& source,
const NotificationDetails& details);
+ GtkWidget* widget() { return floating_.get(); }
+
private:
// Add or remove observers for events that we care about.
void AddObservers();