| Index: chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc
|
| diff --git a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc b/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc
|
| index 32b1b27c6ca320fafc74fcd7d2973006af6b9efd..5a0ce54da3fc4bb0a27ea31b319a21a4e5dba074 100644
|
| --- a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc
|
| +++ b/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc
|
| @@ -22,6 +22,7 @@
|
| #include "chrome/browser/ui/gtk/gtk_theme_service.h"
|
| #include "chrome/browser/ui/gtk/gtk_util.h"
|
| #include "chrome/browser/ui/gtk/tabs/dragged_tab_controller_gtk.h"
|
| +#include "chrome/browser/ui/gtk/tabs/tab_strip_menu_controller.h"
|
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
|
| #include "content/browser/tab_contents/tab_contents.h"
|
| #include "content/common/notification_service.h"
|
| @@ -168,7 +169,7 @@ class TabStripGtk::TabAnimation : public ui::AnimationDelegate {
|
| } else {
|
| double unselected, selected;
|
| tabstrip->GetCurrentTabWidths(&unselected, &selected);
|
| - tab_width = tab->IsSelected() ? selected : unselected;
|
| + tab_width = tab->IsActive() ? selected : unselected;
|
| }
|
|
|
| if (animation) {
|
| @@ -302,7 +303,7 @@ class InsertTabAnimation : public TabStripGtk::TabAnimation {
|
| if (tabstrip_->GetTabAt(index)->mini())
|
| return TabGtk::GetMiniWidth();
|
|
|
| - if (tabstrip_->GetTabAt(index)->IsSelected()) {
|
| + if (tabstrip_->GetTabAt(index)->IsActive()) {
|
| double delta = end_selected_width_ - start_selected_width_;
|
| return start_selected_width_ + (delta * animation_.GetCurrentValue());
|
| }
|
| @@ -383,7 +384,7 @@ class RemoveTabAnimation : public TabStripGtk::TabAnimation {
|
|
|
| // All other tabs are sized according to the start/end widths specified at
|
| // the start of the animation.
|
| - if (tab->IsSelected()) {
|
| + if (tab->IsActive()) {
|
| double delta = end_selected_width_ - start_selected_width_;
|
| return start_selected_width_ + (delta * animation_.GetCurrentValue());
|
| }
|
| @@ -491,7 +492,7 @@ class ResizeLayoutAnimation : public TabStripGtk::TabAnimation {
|
| if (tab->mini())
|
| return TabGtk::GetMiniWidth();
|
|
|
| - if (tab->IsSelected()) {
|
| + if (tab->IsActive()) {
|
| return animation_.CurrentValueBetween(start_selected_width_,
|
| end_selected_width_);
|
| }
|
| @@ -509,7 +510,7 @@ class ResizeLayoutAnimation : public TabStripGtk::TabAnimation {
|
| for (int i = 0; i < tabstrip_->GetTabCount(); ++i) {
|
| TabGtk* current_tab = tabstrip_->GetTabAt(i);
|
| if (!current_tab->mini()) {
|
| - if (current_tab->IsSelected()) {
|
| + if (current_tab->IsActive()) {
|
| start_selected_width_ = current_tab->width();
|
| } else {
|
| start_unselected_width_ = current_tab->width();
|
| @@ -563,7 +564,7 @@ class MiniTabAnimation : public TabStripGtk::TabAnimation {
|
| return TabGtk::GetMiniWidth();
|
| }
|
|
|
| - if (tab->IsSelected()) {
|
| + if (tab->IsActive()) {
|
| return animation_.CurrentValueBetween(start_selected_width_,
|
| end_selected_width_);
|
| }
|
| @@ -661,7 +662,7 @@ class MiniMoveAnimation : public TabStripGtk::TabAnimation {
|
| if (tab->mini())
|
| return TabGtk::GetMiniWidth();
|
|
|
| - if (tab->IsSelected()) {
|
| + if (tab->IsActive()) {
|
| return animation_.CurrentValueBetween(start_selected_width_,
|
| end_selected_width_);
|
| }
|
| @@ -1055,7 +1056,7 @@ void TabStripGtk::TabChangedAt(TabContentsWrapper* contents, int index,
|
| // case we have an animation going.
|
| TabGtk* tab = GetTabAtAdjustForAnimation(index);
|
| if (change_type == TITLE_NOT_LOADING) {
|
| - if (tab->mini() && !tab->IsSelected())
|
| + if (tab->mini() && !tab->IsActive())
|
| tab->StartMiniTabTitleAnimation();
|
| // We'll receive another notification of the change asynchronously.
|
| return;
|
| @@ -1097,13 +1098,20 @@ void TabStripGtk::TabBlockedStateChanged(TabContentsWrapper* contents,
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // TabStripGtk, TabGtk::TabDelegate implementation:
|
|
|
| -bool TabStripGtk::IsTabSelected(const TabGtk* tab) const {
|
| +bool TabStripGtk::IsTabActive(const TabGtk* tab) const {
|
| if (tab->closing())
|
| return false;
|
|
|
| return GetIndexOfTab(tab) == model_->active_index();
|
| }
|
|
|
| +bool TabStripGtk::IsTabSelected(const TabGtk* tab) const {
|
| + if (tab->closing())
|
| + return false;
|
| +
|
| + return model_->IsTabSelected(GetIndexOfTab(tab));
|
| +}
|
| +
|
| bool TabStripGtk::IsTabDetached(const TabGtk* tab) const {
|
| if (drag_controller_.get())
|
| return drag_controller_->IsTabDetached(tab);
|
| @@ -1123,12 +1131,23 @@ bool TabStripGtk::IsTabPinned(const TabGtk* tab) const {
|
| return model_->IsTabPinned(GetIndexOfTab(tab));
|
| }
|
|
|
| -void TabStripGtk::SelectTab(TabGtk* tab) {
|
| +void TabStripGtk::ActivateTab(TabGtk* tab) {
|
| int index = GetIndexOfTab(tab);
|
| if (model_->ContainsIndex(index))
|
| model_->ActivateTabAt(index, true);
|
| }
|
|
|
| +void TabStripGtk::ToggleTabSelection(TabGtk* tab) {
|
| + int index = GetIndexOfTab(tab);
|
| + model_->ToggleSelectionAt(index);
|
| +}
|
| +
|
| +void TabStripGtk::ExtendTabSelection(TabGtk* tab) {
|
| + int index = GetIndexOfTab(tab);
|
| + if (model_->ContainsIndex(index))
|
| + model_->ExtendSelectionTo(index);
|
| +}
|
| +
|
| void TabStripGtk::CloseTab(TabGtk* tab) {
|
| int tab_index = GetIndexOfTab(tab);
|
| if (model_->ContainsIndex(tab_index)) {
|
| @@ -1215,6 +1234,11 @@ ui::ThemeProvider* TabStripGtk::GetThemeProvider() {
|
| return theme_service_;
|
| }
|
|
|
| +TabStripMenuController* TabStripGtk::GetContextMenuControllerForTab(
|
| + TabGtk* tab) {
|
| + return new TabStripMenuController(tab, model(), GetIndexOfTab(tab));
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // TabStripGtk, MessageLoop::Observer implementation:
|
|
|
| @@ -1347,7 +1371,7 @@ void TabStripGtk::GenerateIdealBounds() {
|
| double tab_width = unselected;
|
| if (tab->mini())
|
| tab_width = TabGtk::GetMiniWidth();
|
| - else if (tab->IsSelected())
|
| + else if (tab->IsActive())
|
| tab_width = selected;
|
| double end_of_tab = tab_x + tab_width;
|
| int rounded_tab_x = Round(tab_x);
|
| @@ -1491,7 +1515,7 @@ bool TabStripGtk::ResizeLayoutTabs() {
|
| TabGtk* first_tab = GetTabAt(mini_tab_count);
|
| double unselected, selected;
|
| GetDesiredTabWidths(GetTabCount(), mini_tab_count, &unselected, &selected);
|
| - int w = Round(first_tab->IsSelected() ? selected : unselected);
|
| + int w = Round(first_tab->IsActive() ? selected : unselected);
|
|
|
| // We only want to run the animation if we're not already at the desired
|
| // size.
|
| @@ -1920,7 +1944,7 @@ gboolean TabStripGtk::OnExpose(GtkWidget* widget, GdkEventExpose* event) {
|
| // We must ask the _Tab's_ model, not ourselves, because in some situations
|
| // the model will be different to this object, e.g. when a Tab is being
|
| // removed after its TabContents has been destroyed.
|
| - if (!tab->IsSelected()) {
|
| + if (!tab->IsActive()) {
|
| gtk_container_propagate_expose(GTK_CONTAINER(tabstrip_.get()),
|
| tab->widget(), event);
|
| } else {
|
|
|