diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-15 15:06:57 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-15 15:06:57 +0000 |
commit | b0ec32a200c9af7ce35cdb54edab06b3907b025d (patch) | |
tree | 3a314ed169809dcf294711658eb8a755adecd8e3 /chrome/browser/views | |
parent | ca0a0caf5b257c4c57dfe30db8e73390ff56df81 (diff) | |
download | chromium_src-b0ec32a200c9af7ce35cdb54edab06b3907b025d.zip chromium_src-b0ec32a200c9af7ce35cdb54edab06b3907b025d.tar.gz chromium_src-b0ec32a200c9af7ce35cdb54edab06b3907b025d.tar.bz2 |
Fixes bug in tabstrip where close was always treated as if the user
closed the tab by way of mouse.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/2106006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47371 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r-- | chrome/browser/views/tabs/base_tab_strip.h | 5 | ||||
-rw-r--r-- | chrome/browser/views/tabs/browser_tab_strip_controller.cc | 7 | ||||
-rw-r--r-- | chrome/browser/views/tabs/browser_tab_strip_controller.h | 4 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab_strip.cc | 2 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab_strip.h | 2 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab_strip.cc | 38 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab_strip.h | 2 |
7 files changed, 35 insertions, 25 deletions
diff --git a/chrome/browser/views/tabs/base_tab_strip.h b/chrome/browser/views/tabs/base_tab_strip.h index eb3208b..96a527c 100644 --- a/chrome/browser/views/tabs/base_tab_strip.h +++ b/chrome/browser/views/tabs/base_tab_strip.h @@ -81,8 +81,9 @@ class BaseTabStrip : public views::View, bool foreground, const TabRendererData& data) = 0; - // Removes a tab at the specified index. - virtual void RemoveTabAt(int model_index) = 0; + // Removes a tab at the specified index. If |initiated_close| is true, the + // close was initiated by the tab strip (such as clicking the close button). + virtual void RemoveTabAt(int model_index, bool initiated_close) = 0; // Selects a tab at the specified index. |old_model_index| is the selected // index prior to the selection change. diff --git a/chrome/browser/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/views/tabs/browser_tab_strip_controller.cc index eeb24eb..cd7cee7 100644 --- a/chrome/browser/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/views/tabs/browser_tab_strip_controller.cc @@ -4,6 +4,7 @@ #include "chrome/browser/views/tabs/browser_tab_strip_controller.h" +#include "base/auto_reset.h" #include "base/command_line.h" #include "chrome/browser/browser.h" #include "chrome/browser/profile.h" @@ -112,7 +113,8 @@ class BrowserTabStripController::TabContextMenuContents BrowserTabStripController::BrowserTabStripController(TabStripModel* model) : model_(model), - tabstrip_(NULL) { + tabstrip_(NULL), + initiated_close_(false) { model_->AddObserver(this); } @@ -195,6 +197,7 @@ void BrowserTabStripController::SelectTab(int model_index) { } void BrowserTabStripController::CloseTab(int model_index) { + AutoReset close_reset(&initiated_close_, true); model_->CloseTabContentsAt(model_index); } @@ -283,7 +286,7 @@ void BrowserTabStripController::TabInsertedAt(TabContents* contents, void BrowserTabStripController::TabDetachedAt(TabContents* contents, int model_index) { - tabstrip_->RemoveTabAt(model_index); + tabstrip_->RemoveTabAt(model_index, initiated_close_); } void BrowserTabStripController::TabSelectedAt(TabContents* old_contents, diff --git a/chrome/browser/views/tabs/browser_tab_strip_controller.h b/chrome/browser/views/tabs/browser_tab_strip_controller.h index c15386b..c0e3244 100644 --- a/chrome/browser/views/tabs/browser_tab_strip_controller.h +++ b/chrome/browser/views/tabs/browser_tab_strip_controller.h @@ -99,6 +99,10 @@ class BrowserTabStripController : public TabStripController, // If non-NULL it means we're showing a menu for the tab. scoped_ptr<TabContextMenuContents> context_menu_contents_; + // If true, we initiated the tab close. This is used to detect if the close + // was the result of a user gesture. + bool initiated_close_; + DISALLOW_COPY_AND_ASSIGN(BrowserTabStripController); }; diff --git a/chrome/browser/views/tabs/side_tab_strip.cc b/chrome/browser/views/tabs/side_tab_strip.cc index 41dbc53..afcd9c4 100644 --- a/chrome/browser/views/tabs/side_tab_strip.cc +++ b/chrome/browser/views/tabs/side_tab_strip.cc @@ -88,7 +88,7 @@ void SideTabStrip::AddTabAt(int model_index, Layout(); } -void SideTabStrip::RemoveTabAt(int index) { +void SideTabStrip::RemoveTabAt(int index, bool initiated_close) { View* v = GetChildViewAt(index); RemoveChildView(v); delete v; diff --git a/chrome/browser/views/tabs/side_tab_strip.h b/chrome/browser/views/tabs/side_tab_strip.h index 892004d..d1a6043 100644 --- a/chrome/browser/views/tabs/side_tab_strip.h +++ b/chrome/browser/views/tabs/side_tab_strip.h @@ -34,7 +34,7 @@ class SideTabStrip : public BaseTabStrip { virtual void AddTabAt(int model_index, bool foreground, const TabRendererData& data); - virtual void RemoveTabAt(int model_index); + virtual void RemoveTabAt(int model_index, bool initiated_close); virtual void SelectTabAt(int old_model_index, int new_model_index); virtual void MoveTab(int from_model_index, int to_model_index); virtual void TabTitleChangedNotLoading(int model_index); diff --git a/chrome/browser/views/tabs/tab_strip.cc b/chrome/browser/views/tabs/tab_strip.cc index 79a1399..49db8cc 100644 --- a/chrome/browser/views/tabs/tab_strip.cc +++ b/chrome/browser/views/tabs/tab_strip.cc @@ -397,24 +397,26 @@ void TabStrip::AddTabAt(int model_index, } } -void TabStrip::RemoveTabAt(int model_index) { - int model_count = GetModelCount(); - if (model_index != model_count && model_count > 0) { - Tab* last_tab = GetTabAtModelIndex(model_count - 1); - // Limit the width available to the TabStrip for laying out Tabs, so that - // Tabs are not resized until a later time (when the mouse pointer leaves - // the TabStrip). - available_width_for_tabs_ = GetAvailableWidthForTabs(last_tab); - needs_resize_layout_ = true; - AddMessageLoopObserver(); - } else if (model_count) { - Tab* last_tab = GetTabAtModelIndex(model_count); - // Limit the width available to the TabStrip for laying out Tabs, so that - // Tabs are not resized until a later time (when the mouse pointer leaves - // the TabStrip). - available_width_for_tabs_ = GetAvailableWidthForTabs(last_tab); - needs_resize_layout_ = true; - AddMessageLoopObserver(); +void TabStrip::RemoveTabAt(int model_index, bool initiated_close) { + if (initiated_close) { + int model_count = GetModelCount(); + if (model_index != model_count && model_count > 0) { + Tab* last_tab = GetTabAtModelIndex(model_count - 1); + // Limit the width available to the TabStrip for laying out Tabs, so that + // Tabs are not resized until a later time (when the mouse pointer leaves + // the TabStrip). + available_width_for_tabs_ = GetAvailableWidthForTabs(last_tab); + needs_resize_layout_ = true; + AddMessageLoopObserver(); + } else if (model_count) { + Tab* last_tab = GetTabAtModelIndex(model_count); + // Limit the width available to the TabStrip for laying out Tabs, so that + // Tabs are not resized until a later time (when the mouse pointer leaves + // the TabStrip). + available_width_for_tabs_ = GetAvailableWidthForTabs(last_tab); + needs_resize_layout_ = true; + AddMessageLoopObserver(); + } } StartRemoveTabAnimation(model_index); diff --git a/chrome/browser/views/tabs/tab_strip.h b/chrome/browser/views/tabs/tab_strip.h index d803a25..7c2e19f 100644 --- a/chrome/browser/views/tabs/tab_strip.h +++ b/chrome/browser/views/tabs/tab_strip.h @@ -84,7 +84,7 @@ class TabStrip : public BaseTabStrip, virtual void AddTabAt(int model_index, bool foreground, const TabRendererData& data); - virtual void RemoveTabAt(int model_index); + virtual void RemoveTabAt(int model_index, bool initiated_close); virtual void SelectTabAt(int old_model_index, int new_model_index); virtual void MoveTab(int from_model_index, int to_model_index); virtual void TabTitleChangedNotLoading(int model_index); |