diff options
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.cc | 40 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.h | 9 | ||||
-rw-r--r-- | chrome/browser/gtk/tab_contents_container_gtk.cc | 14 | ||||
-rw-r--r-- | chrome/browser/gtk/tab_contents_container_gtk.h | 5 |
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(); |