diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-20 00:19:19 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-20 00:19:19 +0000 |
commit | 02b0702ddbc1ffdea4dffcedd4d70274f1be38fa (patch) | |
tree | 71aa3cde9ef5b5a115575b666faf7f32bd483f9a /chrome/browser/views/tabs | |
parent | 71cbae7bdfed9c023c21c37bf4551a8d18dfa3d2 (diff) | |
download | chromium_src-02b0702ddbc1ffdea4dffcedd4d70274f1be38fa.zip chromium_src-02b0702ddbc1ffdea4dffcedd4d70274f1be38fa.tar.gz chromium_src-02b0702ddbc1ffdea4dffcedd4d70274f1be38fa.tar.bz2 |
Revert r42156, r42157, r42160. Allow dynamic switching in and out of sidetabs mode.
Reliability bot and Linux CrOS browser_tests all had crashes in ~TabStrip.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/1141005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42176 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views/tabs')
-rw-r--r-- | chrome/browser/views/tabs/browser_tab_strip_controller.cc | 102 | ||||
-rw-r--r-- | chrome/browser/views/tabs/browser_tab_strip_controller.h | 17 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab.cc | 26 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab.h | 9 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab_strip.cc | 10 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab_strip.h | 5 | ||||
-rw-r--r-- | chrome/browser/views/tabs/side_tab_strip_model.h | 9 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab.cc | 6 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab.h | 4 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab_strip.cc | 24 | ||||
-rw-r--r-- | chrome/browser/views/tabs/tab_strip.h | 7 |
11 files changed, 20 insertions, 199 deletions
diff --git a/chrome/browser/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/views/tabs/browser_tab_strip_controller.cc index da30f47..343ee09 100644 --- a/chrome/browser/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/views/tabs/browser_tab_strip_controller.cc @@ -5,68 +5,7 @@ #include "chrome/browser/views/tabs/browser_tab_strip_controller.h" #include "chrome/browser/tab_contents/tab_contents.h" -#include "chrome/browser/tab_menu_model.h" #include "chrome/browser/views/tabs/side_tab_strip.h" -#include "views/controls/menu/menu_2.h" -#include "views/widget/widget.h" - -class BrowserTabStripController::TabContextMenuContents - : public menus::SimpleMenuModel::Delegate { - public: - TabContextMenuContents(int tab_index, BrowserTabStripController* controller) - : ALLOW_THIS_IN_INITIALIZER_LIST(model_(this)), - tab_index_(tab_index), - controller_(controller) { - Build(); - } - virtual ~TabContextMenuContents() { - menu_->CancelMenu(); - } - - void RunMenuAt(const gfx::Point& point) { - menu_->RunMenuAt(point, views::Menu2::ALIGN_TOPLEFT); - } - - // Overridden from menus::SimpleMenuModel::Delegate: - virtual bool IsCommandIdChecked(int command_id) const { - return controller_->IsCommandCheckedForTab( - static_cast<TabStripModel::ContextMenuCommand>(command_id), - tab_index_); - } - virtual bool IsCommandIdEnabled(int command_id) const { - return controller_->IsCommandEnabledForTab( - static_cast<TabStripModel::ContextMenuCommand>(command_id), - tab_index_); - } - virtual bool GetAcceleratorForCommandId( - int command_id, - menus::Accelerator* accelerator) { - return controller_->tabstrip_->GetWidget()->GetAccelerator(command_id, - accelerator); - } - virtual void ExecuteCommand(int command_id) { - controller_->ExecuteCommandForTab( - static_cast<TabStripModel::ContextMenuCommand>(command_id), - tab_index_); - } - - private: - void Build() { - menu_.reset(new views::Menu2(&model_)); - } - - TabMenuModel model_; - scoped_ptr<views::Menu2> menu_; - - // The index of the tab we are showing the context menu for. - int tab_index_; - - // A pointer back to our hosting controller, for command state information. - BrowserTabStripController* controller_; - - DISALLOW_COPY_AND_ASSIGN(TabContextMenuContents); -}; - //////////////////////////////////////////////////////////////////////////////// // BrowserTabStripController, public: @@ -79,40 +18,6 @@ BrowserTabStripController::BrowserTabStripController(TabStripModel* model, } BrowserTabStripController::~BrowserTabStripController() { - model_->RemoveObserver(this); -} - -void BrowserTabStripController::InitFromModel() { - // Walk the model, calling our insertion observer method for each item within - // it. - for (int i = 0; i < model_->count(); ++i) { - TabInsertedAt(model_->GetTabContentsAt(i), i, - i == model_->selected_index()); - } -} - -bool BrowserTabStripController::IsCommandEnabledForTab( - TabStripModel::ContextMenuCommand command_id, int tab_index) const { - if (model_->ContainsIndex(tab_index)) - return model_->IsContextMenuCommandEnabled(tab_index, command_id); - return false; -} - -bool BrowserTabStripController::IsCommandCheckedForTab( - TabStripModel::ContextMenuCommand command_id, int tab_index) const { - // TODO(beng): move to TabStripModel, see note in IsTabPinned. - if (command_id == TabStripModel::CommandTogglePinned) - return false; - - if (model_->ContainsIndex(tab_index)) - return model_->IsContextMenuCommandChecked(tab_index, command_id); - return false; -} - -void BrowserTabStripController::ExecuteCommandForTab( - TabStripModel::ContextMenuCommand command_id, int tab_index) { - if (model_->ContainsIndex(tab_index)) - model_->ExecuteContextMenuCommand(tab_index, command_id); } //////////////////////////////////////////////////////////////////////////////// @@ -148,13 +53,6 @@ void BrowserTabStripController::CloseTab(int index) { model_->CloseTabContentsAt(index); } -void BrowserTabStripController::ShowContextMenu(int index, - const gfx::Point& p) { - if (!context_menu_contents_.get()) - context_menu_contents_.reset(new TabContextMenuContents(index, this)); - context_menu_contents_->RunMenuAt(p); -} - //////////////////////////////////////////////////////////////////////////////// // BrowserTabStripController, TabStripModelObserver implementation: diff --git a/chrome/browser/views/tabs/browser_tab_strip_controller.h b/chrome/browser/views/tabs/browser_tab_strip_controller.h index c50fcdb..e127659 100644 --- a/chrome/browser/views/tabs/browser_tab_strip_controller.h +++ b/chrome/browser/views/tabs/browser_tab_strip_controller.h @@ -5,8 +5,6 @@ #ifndef CHROME_BROWSER_VIEWS_TABS_BROWSER_TAB_STRIP_CONTROLLER_H_ #define CHROME_BROWSER_VIEWS_TABS_BROWSER_TAB_STRIP_CONTROLLER_H_ -#include "base/scoped_ptr.h" - #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/views/tabs/side_tab_strip_model.h" @@ -20,15 +18,6 @@ class BrowserTabStripController : public SideTabStripModel, BrowserTabStripController(TabStripModel* model, SideTabStrip* tabstrip); virtual ~BrowserTabStripController(); - void InitFromModel(); - - bool IsCommandEnabledForTab(TabStripModel::ContextMenuCommand command_id, - int tab_index) const; - bool IsCommandCheckedForTab(TabStripModel::ContextMenuCommand command_id, - int tab_index) const; - void ExecuteCommandForTab(TabStripModel::ContextMenuCommand command_id, - int tab_index); - // SideTabStripModel implementation: virtual SkBitmap GetIcon(int index) const; virtual string16 GetTitle(int index) const; @@ -36,7 +25,6 @@ class BrowserTabStripController : public SideTabStripModel, virtual NetworkState GetNetworkState(int index) const; virtual void SelectTab(int index); virtual void CloseTab(int index); - virtual void ShowContextMenu(int index, const gfx::Point& p); // TabStripModelObserver implementation: virtual void TabInsertedAt(TabContents* contents, int index, @@ -55,14 +43,9 @@ class BrowserTabStripController : public SideTabStripModel, virtual void TabBlockedStateChanged(TabContents* contents, int index); private: - class TabContextMenuContents; - TabStripModel* model_; SideTabStrip* tabstrip_; - // If non-NULL it means we're showing a menu for the tab. - scoped_ptr<TabContextMenuContents> context_menu_contents_; - DISALLOW_COPY_AND_ASSIGN(BrowserTabStripController); }; diff --git a/chrome/browser/views/tabs/side_tab.cc b/chrome/browser/views/tabs/side_tab.cc index ee160d7..c08eaaa 100644 --- a/chrome/browser/views/tabs/side_tab.cc +++ b/chrome/browser/views/tabs/side_tab.cc @@ -56,8 +56,6 @@ SideTab::SideTab(SideTabModel* model) hover_animation_.reset(new SlideAnimation(this)); hover_animation_->SetSlideDuration(kHoverDurationMs); - - SetContextMenuController(this); } SideTab::~SideTab() { @@ -112,15 +110,6 @@ void SideTab::ButtonPressed(views::Button* sender, const views::Event& event) { } //////////////////////////////////////////////////////////////////////////////// -// SideTab, views::ContextMenuController implementation: - -void SideTab::ShowContextMenu(views::View* source, - const gfx::Point& p, - bool is_mouse_gesture) { - model_->ShowContextMenu(this, p); -} - -//////////////////////////////////////////////////////////////////////////////// // SideTab, views::View overrides: void SideTab::Layout() { @@ -130,19 +119,14 @@ void SideTab::Layout() { gfx::Size ps = close_button_->GetPreferredSize(); int close_y = (height() - ps.height()) / 2; - close_button_->SetBounds( - std::max(0, width() - ps.width() - close_y), - close_y, - ps.width(), - ps.height()); + close_button_->SetBounds(width() - ps.width() - close_y, close_y, ps.width(), + ps.height()); int title_y = (height() - font_->height()) / 2; int title_x = icon_bounds_.right() + kIconTitleSpacing; - title_bounds_.SetRect( - title_x, - title_y, - std::max(0, close_button_->x() - kTitleCloseSpacing - title_x), - font_->height()); + title_bounds_.SetRect(title_x, title_y, + close_button_->x() - kTitleCloseSpacing - title_x, + font_->height()); } void SideTab::Paint(gfx::Canvas* canvas) { diff --git a/chrome/browser/views/tabs/side_tab.h b/chrome/browser/views/tabs/side_tab.h index 59e568b..72fc8b0 100644 --- a/chrome/browser/views/tabs/side_tab.h +++ b/chrome/browser/views/tabs/side_tab.h @@ -26,13 +26,9 @@ class SideTabModel { // Closes the tab. virtual void CloseTab(SideTab* tab) = 0; - - // Shows a context menu for the tab at the specified point in screen coords. - virtual void ShowContextMenu(SideTab* tab, const gfx::Point& p) = 0; }; class SideTab : public views::View, - public views::ContextMenuController, public views::ButtonListener, public AnimationDelegate { public: @@ -52,11 +48,6 @@ class SideTab : public views::View, // views::ButtonListener implementation: virtual void ButtonPressed(views::Button* sender, const views::Event& event); - // views::ContextMenuController implementation: - virtual void ShowContextMenu(views::View* source, - const gfx::Point& p, - bool is_mouse_gesture); - // views::View Overrides: virtual void Layout(); virtual void Paint(gfx::Canvas* canvas); diff --git a/chrome/browser/views/tabs/side_tab_strip.cc b/chrome/browser/views/tabs/side_tab_strip.cc index 6912f2c..6896d42 100644 --- a/chrome/browser/views/tabs/side_tab_strip.cc +++ b/chrome/browser/views/tabs/side_tab_strip.cc @@ -38,6 +38,12 @@ bool SideTabStrip::Available() { switches::kEnableVerticalTabs); } +// static +bool SideTabStrip::Visible(Profile* profile) { + return Available() && + profile->GetPrefs()->GetBoolean(prefs::kUseVerticalTabs); +} + void SideTabStrip::AddTabAt(int index) { SideTab* tab = new SideTab(this); AddChildView(tab); @@ -82,10 +88,6 @@ void SideTabStrip::CloseTab(SideTab* tab) { model_->CloseTab(GetIndexOfSideTab(tab)); } -void SideTabStrip::ShowContextMenu(SideTab* tab, const gfx::Point& p) { - model_->ShowContextMenu(GetIndexOfSideTab(tab), p); -} - //////////////////////////////////////////////////////////////////////////////// // SideTabStrip, BaseTabStrip implementation: diff --git a/chrome/browser/views/tabs/side_tab_strip.h b/chrome/browser/views/tabs/side_tab_strip.h index b1716ba..71b704a 100644 --- a/chrome/browser/views/tabs/side_tab_strip.h +++ b/chrome/browser/views/tabs/side_tab_strip.h @@ -25,6 +25,10 @@ class SideTabStrip : public BaseTabStrip, // command line flag that allows the SideTabStrip to be optionally shown. static bool Available(); + // Whether or not the vertical tabstrip is shown. Only valid if Available() + // returns true. + static bool Visible(Profile* profile); + // Notifies the SideTabStrip that a tab was added in the model at |index|. void AddTabAt(int index); @@ -44,7 +48,6 @@ class SideTabStrip : public BaseTabStrip, virtual bool IsSelected(SideTab* tab) const; virtual void SelectTab(SideTab* tab); virtual void CloseTab(SideTab* tab); - virtual void ShowContextMenu(SideTab* tab, const gfx::Point& p); // BaseTabStrip implementation: virtual int GetPreferredHeight(); diff --git a/chrome/browser/views/tabs/side_tab_strip_model.h b/chrome/browser/views/tabs/side_tab_strip_model.h index 835e5ba..a456c36 100644 --- a/chrome/browser/views/tabs/side_tab_strip_model.h +++ b/chrome/browser/views/tabs/side_tab_strip_model.h @@ -7,17 +7,12 @@ #include "base/string16.h" -namespace gfx { -class Point; -} class SkBitmap; // A model interface implemented by an object that can provide information // about SideTabs in a SideTabStrip. class SideTabStripModel { public: - virtual ~SideTabStripModel() {} - // Returns metadata about the tab at the specified index. virtual SkBitmap GetIcon(int index) const = 0; virtual string16 GetTitle(int index) const = 0; @@ -40,10 +35,6 @@ class SideTabStripModel { // Closes the tab at the specified index in the model. virtual void CloseTab(int index) = 0; - - // Shows a context menu for the tab at the specified index at the specified - // point in screen coords. - virtual void ShowContextMenu(int index, const gfx::Point& p) = 0; }; #endif // CHROME_BROWSER_VIEWS_TABS_SIDE_TAB_STRIP_MODEL_H_ diff --git a/chrome/browser/views/tabs/tab.cc b/chrome/browser/views/tabs/tab.cc index 275af42..4c6aa46 100644 --- a/chrome/browser/views/tabs/tab.cc +++ b/chrome/browser/views/tabs/tab.cc @@ -51,9 +51,9 @@ class Tab::TabContextMenuContents : public menus::SimpleMenuModel::Delegate { // Overridden from menus::SimpleMenuModel::Delegate: virtual bool IsCommandIdChecked(int command_id) const { - return tab_ && tab_->delegate()->IsCommandCheckedForTab( - static_cast<TabStripModel::ContextMenuCommand>(command_id), - tab_); + if (!tab_ || command_id != TabStripModel::CommandTogglePinned) + return false; + return tab_->delegate()->IsTabPinned(tab_); } virtual bool IsCommandIdEnabled(int command_id) const { return tab_ && tab_->delegate()->IsCommandEnabledForTab( diff --git a/chrome/browser/views/tabs/tab.h b/chrome/browser/views/tabs/tab.h index 6a9bf21..f491291 100644 --- a/chrome/browser/views/tabs/tab.h +++ b/chrome/browser/views/tabs/tab.h @@ -46,10 +46,6 @@ class Tab : public TabRenderer, virtual bool IsCommandEnabledForTab( TabStripModel::ContextMenuCommand command_id, const Tab* tab) const = 0; - // Returns true if the specified command is checked for the specified Tab. - virtual bool IsCommandCheckedForTab( - TabStripModel::ContextMenuCommand command_id, const Tab* tab) const = 0; - // Executes the specified command for the specified Tab. virtual void ExecuteCommandForTab( TabStripModel::ContextMenuCommand command_id, Tab* tab) = 0; diff --git a/chrome/browser/views/tabs/tab_strip.cc b/chrome/browser/views/tabs/tab_strip.cc index 80d761b..ec15794 100644 --- a/chrome/browser/views/tabs/tab_strip.cc +++ b/chrome/browser/views/tabs/tab_strip.cc @@ -744,7 +744,8 @@ TabStrip::TabStrip(TabStripModel* model) TabStrip::~TabStrip() { active_animation_.reset(NULL); - model_->RemoveObserver(this); + // TODO(beng): (1031854) Restore this line once XPFrame/VistaFrame are dead. + // model_->RemoveObserver(this); // TODO(beng): remove this if it doesn't work to fix the TabSelectedAt bug. drag_controller_.reset(NULL); @@ -817,15 +818,6 @@ bool TabStrip::IsCompatibleWith(TabStrip* other) const { return model_->profile() == other->model()->profile(); } -void TabStrip::InitFromModel() { - // Walk the model, calling our insertion observer method for each item within - // it. - for (int i = 0; i < model_->count(); ++i) { - TabInsertedAt(model_->GetTabContentsAt(i), i, - i == model_->selected_index()); - } -} - //////////////////////////////////////////////////////////////////////////////// // TabStrip, BaseTabStrip implementation: @@ -1317,18 +1309,6 @@ bool TabStrip::IsCommandEnabledForTab( return false; } -bool TabStrip::IsCommandCheckedForTab( - TabStripModel::ContextMenuCommand command_id, const Tab* tab) const { - // TODO(beng): move to TabStripModel, see note in IsTabPinned. - if (command_id == TabStripModel::CommandTogglePinned) - return IsTabPinned(tab); - - int index = GetIndexOfTab(tab); - if (model_->ContainsIndex(index)) - return model_->IsContextMenuCommandChecked(index, command_id); - return false; -} - void TabStrip::ExecuteCommandForTab( TabStripModel::ContextMenuCommand command_id, Tab* tab) { int index = GetIndexOfTab(tab); diff --git a/chrome/browser/views/tabs/tab_strip.h b/chrome/browser/views/tabs/tab_strip.h index 4e2dec4..6285e1d 100644 --- a/chrome/browser/views/tabs/tab_strip.h +++ b/chrome/browser/views/tabs/tab_strip.h @@ -74,11 +74,6 @@ class TabStrip : public BaseTabStrip, // Compatible tab strips can transfer tabs during drag and drop. bool IsCompatibleWith(TabStrip* other) const; - // Populates the BaseTabStrip implementation from its model. This is primarily - // useful when switching between display types and there are existing tabs. - // Upon initial creation the TabStrip is empty. - void InitFromModel(); - // BaseTabStrip implementation: virtual int GetPreferredHeight(); virtual void SetBackgroundOffset(const gfx::Point& offset); @@ -141,8 +136,6 @@ class TabStrip : public BaseTabStrip, virtual void CloseTab(Tab* tab); virtual bool IsCommandEnabledForTab( TabStripModel::ContextMenuCommand command_id, const Tab* tab) const; - virtual bool IsCommandCheckedForTab( - TabStripModel::ContextMenuCommand command_id, const Tab* tab) const; virtual void ExecuteCommandForTab( TabStripModel::ContextMenuCommand command_id, Tab* tab); virtual void StartHighlightTabsForCommand( |