Chromium Code Reviews| 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 33e55d75f4cb16388bdbdbb648f1bbbac6321dfe..0e3338b32d81237e59ad2e7e5a4f5e8ad8046922 100644 |
| --- a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc |
| +++ b/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc |
| @@ -21,6 +21,7 @@ |
| #include "chrome/browser/ui/gtk/custom_button.h" |
| #include "chrome/browser/ui/gtk/gtk_theme_service.h" |
| #include "chrome/browser/ui/gtk/gtk_util.h" |
| +#include "chrome/browser/ui/gtk/tabs/context_menu_controller.h" |
| #include "chrome/browser/ui/gtk/tabs/dragged_tab_controller_gtk.h" |
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| #include "content/browser/tab_contents/tab_contents.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,24 @@ 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)) |
|
Evan Stade
2011/05/11 20:58:27
when could this check be false? why isn't it used
dpapad
2011/05/11 23:30:20
I din not change these checks and I do not know if
Evan Stade
2011/05/12 00:05:27
you didn't change this check but you did duplicate
dpapad
2011/05/12 00:34:25
I am removing it from ToggleSelection(), since acc
|
| model_->ActivateTabAt(index, true); |
| } |
| +void TabStripGtk::ToggleTabSelection(TabGtk* tab) { |
| + int index = GetIndexOfTab(tab); |
| + if (model_->ContainsIndex(index)) |
| + 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 +1235,11 @@ ui::ThemeProvider* TabStripGtk::GetThemeProvider() { |
| return theme_service_; |
| } |
| +ContextMenuController* TabStripGtk::GetContextMenuControllerForTab( |
| + TabGtk* tab) { |
| + return new ContextMenuController(tab, model(), GetIndexOfTab(tab)); |
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| // TabStripGtk, MessageLoop::Observer implementation: |
| @@ -1347,7 +1372,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 +1516,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 +1945,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 { |