diff options
-rw-r--r-- | chrome/browser/chromeos/frame/panel_controller.cc | 13 | ||||
-rw-r--r-- | chrome/browser/chromeos/frame/panel_controller.h | 14 | ||||
-rw-r--r-- | chrome/browser/views/tabs/browser_tab_strip_controller.cc | 6 |
3 files changed, 23 insertions, 10 deletions
diff --git a/chrome/browser/chromeos/frame/panel_controller.cc b/chrome/browser/chromeos/frame/panel_controller.cc index 7d0e5f3..4cfcea1 100644 --- a/chrome/browser/chromeos/frame/panel_controller.cc +++ b/chrome/browser/chromeos/frame/panel_controller.cc @@ -271,10 +271,9 @@ void PanelController::Close() { } } -void PanelController::ButtonPressed( - views::Button* sender, const views::Event& event) { +void PanelController::OnCloseButtonPressed() { DCHECK(title_content_); - if (title_window_ && sender == title_content_->close_button()) { + if (title_window_) { if (delegate_) delegate_->ClosePanel(); Close(); @@ -285,7 +284,7 @@ PanelController::TitleContentView::TitleContentView( PanelController* panel_controller) : panel_controller_(panel_controller) { InitializeResources(); - close_button_ = new views::ImageButton(panel_controller_); + close_button_ = new views::ImageButton(this); close_button_->SetImage(views::CustomButton::BS_NORMAL, close_button_n); close_button_->SetImage(views::CustomButton::BS_HOT, close_button_h); close_button_->SetImage(views::CustomButton::BS_PUSHED, close_button_p); @@ -363,4 +362,10 @@ void PanelController::TitleContentView::OnClose() { panel_controller_ = NULL; } +void PanelController::TitleContentView::ButtonPressed( + views::Button* sender, const views::Event& event) { + if (panel_controller_ && sender == close_button_) + panel_controller_->OnCloseButtonPressed(); +} + } // namespace chromeos diff --git a/chrome/browser/chromeos/frame/panel_controller.h b/chrome/browser/chromeos/frame/panel_controller.h index 58a1660..63b1898 100644 --- a/chrome/browser/chromeos/frame/panel_controller.h +++ b/chrome/browser/chromeos/frame/panel_controller.h @@ -25,7 +25,7 @@ class WidgetGtk; namespace chromeos { // Controls interactions with the WM for popups / panels. -class PanelController : public views::ButtonListener { +class PanelController { public: enum State { INITIAL, @@ -66,11 +66,9 @@ class PanelController : public views::ButtonListener { void SetState(State state); - // ButtonListener methods. - virtual void ButtonPressed(views::Button* sender, const views::Event& event); - private: - class TitleContentView : public views::View { + class TitleContentView : public views::View, + public views::ButtonListener { public: explicit TitleContentView(PanelController* panelController); virtual ~TitleContentView() {} @@ -86,6 +84,9 @@ class PanelController : public views::ButtonListener { views::Label* title_label() { return title_label_; } views::ImageButton* close_button() { return close_button_; } + // ButtonListener methods. + virtual void ButtonPressed(views::Button* sender, + const views::Event& event); private: views::ImageView* title_icon_; views::Label* title_label_; @@ -94,6 +95,9 @@ class PanelController : public views::ButtonListener { DISALLOW_COPY_AND_ASSIGN(TitleContentView); }; + // Called from TitleContentView's ButtonPressed handler. + void OnCloseButtonPressed(); + // Dispatches client events to PanelController instances static bool OnPanelClientEvent( GtkWidget* widget, diff --git a/chrome/browser/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/views/tabs/browser_tab_strip_controller.cc index dcb41dd..69af6fa 100644 --- a/chrome/browser/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/views/tabs/browser_tab_strip_controller.cc @@ -276,7 +276,11 @@ void BrowserTabStripController::CreateNewTab() { UserMetrics::RecordAction(UserMetricsAction("NewTab_Button"), model_->profile()); - Browser* browser = model_->GetSelectedTabContents()->delegate()->GetBrowser(); + TabContents* selected_tab = model_->GetSelectedTabContents(); + if (!selected_tab) + return; + + Browser* browser = selected_tab->delegate()->GetBrowser(); if (browser->OpenAppsPanelAsNewTab()) return; |