summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/frame/panel_controller.cc13
-rw-r--r--chrome/browser/chromeos/frame/panel_controller.h14
-rw-r--r--chrome/browser/views/tabs/browser_tab_strip_controller.cc6
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;