Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1698)

Unified Diff: chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc

Issue 6933037: Multi-tab selection for Linux. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Adding TabSelectionChanged callback and removing unnecessary method Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..95c793cd6a7d5cd13b6f69cd9527755bce65d632 100644
--- a/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc
+++ b/chrome/browser/ui/gtk/tabs/tab_strip_gtk.cc
@@ -5,6 +5,7 @@
#include "chrome/browser/ui/gtk/tabs/tab_strip_gtk.h"
#include <algorithm>
+#include <vector>
#include "base/i18n/rtl.h"
#include "base/string_util.h"
@@ -22,6 +23,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 +170,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 +304,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 +385,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 +493,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 +511,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 +565,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 +663,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_);
}
@@ -1035,6 +1037,15 @@ void TabStripGtk::TabSelectedAt(TabContentsWrapper* old_contents,
}
}
+void TabStripGtk::TabSelectionChanged(std::set<int>& indices_affected) {
+ LOG(INFO) << "tab selection changed";
James Hawkins 2011/05/18 18:03:10 Remove logging, here and elsewhere.
dpapad 2011/06/01 18:05:41 Done.
+ std::set<int>::iterator it;
+ for (it = indices_affected.begin() ; it != indices_affected.end(); it++) {
James Hawkins 2011/05/18 18:03:10 ++it http://google-styleguide.googlecode.com/svn/
dpapad 2011/06/01 18:05:41 Done.
+ LOG(INFO) << "affected tab: " << *it;
+ GetTabAt(*it)->SchedulePaint();
+ }
+}
+
void TabStripGtk::TabMoved(TabContentsWrapper* contents,
int from_index,
int to_index) {
@@ -1055,7 +1066,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 +1108,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 +1141,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 +1244,11 @@ ui::ThemeProvider* TabStripGtk::GetThemeProvider() {
return theme_service_;
}
+TabStripMenuController* TabStripGtk::GetTabStripMenuControllerForTab(
+ TabGtk* tab) {
+ return new TabStripMenuController(tab, model(), GetIndexOfTab(tab));
+}
+
///////////////////////////////////////////////////////////////////////////////
// TabStripGtk, MessageLoop::Observer implementation:
@@ -1347,7 +1381,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 +1525,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 +1954,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 {

Powered by Google App Engine
This is Rietveld 408576698