summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/tabs
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-20 00:19:19 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-20 00:19:19 +0000
commit02b0702ddbc1ffdea4dffcedd4d70274f1be38fa (patch)
tree71aa3cde9ef5b5a115575b666faf7f32bd483f9a /chrome/browser/views/tabs
parent71cbae7bdfed9c023c21c37bf4551a8d18dfa3d2 (diff)
downloadchromium_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.cc102
-rw-r--r--chrome/browser/views/tabs/browser_tab_strip_controller.h17
-rw-r--r--chrome/browser/views/tabs/side_tab.cc26
-rw-r--r--chrome/browser/views/tabs/side_tab.h9
-rw-r--r--chrome/browser/views/tabs/side_tab_strip.cc10
-rw-r--r--chrome/browser/views/tabs/side_tab_strip.h5
-rw-r--r--chrome/browser/views/tabs/side_tab_strip_model.h9
-rw-r--r--chrome/browser/views/tabs/tab.cc6
-rw-r--r--chrome/browser/views/tabs/tab.h4
-rw-r--r--chrome/browser/views/tabs/tab_strip.cc24
-rw-r--r--chrome/browser/views/tabs/tab_strip.h7
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(