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

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

Issue 6933037: Multi-tab selection for Linux. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removing check, addressing comments 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_gtk.cc
diff --git a/chrome/browser/ui/gtk/tabs/tab_gtk.cc b/chrome/browser/ui/gtk/tabs/tab_gtk.cc
index d5cdd31a593c45546320cedbed407218c3d7c2ef..d6c5b16b4d4fc715c280c708157d99b4d846e247 100644
--- a/chrome/browser/ui/gtk/tabs/tab_gtk.cc
+++ b/chrome/browser/ui/gtk/tabs/tab_gtk.cc
@@ -11,6 +11,7 @@
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/ui/gtk/accelerators_gtk.h"
#include "chrome/browser/ui/gtk/menu_gtk.h"
+#include "chrome/browser/ui/gtk/tabs/tab_strip_menu_controller.h"
#include "chrome/browser/ui/tabs/tab_menu_model.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
@@ -31,79 +32,6 @@ int GetTitleWidth(gfx::Font* font, string16 title) {
} // namespace
-class TabGtk::ContextMenuController : public ui::SimpleMenuModel::Delegate,
- public MenuGtk::Delegate {
- public:
- explicit ContextMenuController(TabGtk* tab)
- : tab_(tab),
- model_(this, tab->delegate()->IsTabPinned(tab)) {
- menu_.reset(new MenuGtk(this, &model_));
- }
-
- virtual ~ContextMenuController() {}
-
- void RunMenu(const gfx::Point& point, guint32 event_time) {
- menu_->PopupAsContext(point, event_time);
- }
-
- void Cancel() {
- tab_ = NULL;
- menu_->Cancel();
- }
-
- private:
- // Overridden from ui::SimpleMenuModel::Delegate:
- virtual bool IsCommandIdChecked(int command_id) const {
- return false;
- }
- virtual bool IsCommandIdEnabled(int command_id) const {
- return tab_ && tab_->delegate()->IsCommandEnabledForTab(
- static_cast<TabStripModel::ContextMenuCommand>(command_id),
- tab_);
- }
- virtual bool GetAcceleratorForCommandId(
- int command_id,
- ui::Accelerator* accelerator) {
- int browser_command;
- if (!TabStripModel::ContextMenuCommandToBrowserCommand(command_id,
- &browser_command))
- return false;
- const ui::AcceleratorGtk* accelerator_gtk =
- AcceleratorsGtk::GetInstance()->GetPrimaryAcceleratorForCommand(
- browser_command);
- if (accelerator_gtk)
- *accelerator = *accelerator_gtk;
- return !!accelerator_gtk;
- }
-
- virtual void ExecuteCommand(int command_id) {
- if (!tab_)
- return;
- tab_->delegate()->ExecuteCommandForTab(
- static_cast<TabStripModel::ContextMenuCommand>(command_id), tab_);
- }
-
- GtkWidget* GetImageForCommandId(int command_id) const {
- int browser_cmd_id;
- return TabStripModel::ContextMenuCommandToBrowserCommand(command_id,
- &browser_cmd_id) ?
- MenuGtk::Delegate::GetDefaultImageForCommandId(browser_cmd_id) :
- NULL;
- }
-
- // The context menu.
- scoped_ptr<MenuGtk> menu_;
-
- // The Tab the context menu was brought up for. Set to NULL when the menu
- // is canceled.
- TabGtk* tab_;
-
- // The model.
- TabMenuModel model_;
-
- DISALLOW_COPY_AND_ASSIGN(ContextMenuController);
-};
-
class TabGtk::TabGtkObserverHelper {
public:
explicit TabGtkObserverHelper(TabGtk* tab)
@@ -176,11 +104,16 @@ gboolean TabGtk::OnButtonPressEvent(GtkWidget* widget, GdkEventButton* event) {
// Store whether or not we were selected just now... we only want to be
// able to drag foreground tabs, so we don't start dragging the tab if
// it was in the background.
- bool just_selected = !IsSelected();
- if (just_selected) {
- delegate_->SelectTab(this);
+ if (!IsActive() && (event->state &
James Hawkins 2011/05/12 00:53:54 && !(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_
dpapad 2011/05/12 16:37:08 Done.
+ (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) == 0) {
+ delegate_->ActivateTab(this);
+ } else if (!IsActive() && (event->state & GDK_CONTROL_MASK) ==
James Hawkins 2011/05/12 00:53:54 It's merely enough to check `event->state & GDK_CO
dpapad 2011/05/12 16:37:08 Done.
+ GDK_CONTROL_MASK) {
+ delegate_->ToggleTabSelection(this);
+ } else if (!IsActive() && (event->state & GDK_SHIFT_MASK) ==
+ GDK_SHIFT_MASK) {
+ delegate_->ExtendTabSelection(this);
}
-
// Hook into the message loop to handle dragging.
observer_.reset(new TabGtkObserverHelper(this));
@@ -190,7 +123,7 @@ gboolean TabGtk::OnButtonPressEvent(GtkWidget* widget, GdkEventButton* event) {
// Only show the context menu if the left mouse button isn't down (i.e.,
// the user might want to drag instead).
if (!last_mouse_down_) {
- menu_controller_.reset(new ContextMenuController(this));
+ menu_controller_.reset(delegate()->GetContextMenuControllerForTab(this));
menu_controller_->RunMenu(gfx::Point(event->x_root, event->y_root),
event->time);
}
@@ -293,6 +226,10 @@ void TabGtk::DidProcessEvent(GdkEvent* event) {
///////////////////////////////////////////////////////////////////////////////
// TabGtk, TabRendererGtk overrides:
+bool TabGtk::IsActive() const {
+ return delegate_->IsTabActive(this);
+}
+
bool TabGtk::IsSelected() const {
return delegate_->IsTabSelected(this);
}

Powered by Google App Engine
This is Rietveld 408576698