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

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

Issue 119020: Add a context menu to the tab strip. It appears when you click in the (Closed)
Patch Set: comment cleanup Created 11 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
« no previous file with comments | « chrome/browser/gtk/tabs/tab_strip_gtk.h ('k') | chrome/browser/tabs/tab_strip_model.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/tabs/tab_strip_gtk.cc
diff --git a/chrome/browser/gtk/tabs/tab_strip_gtk.cc b/chrome/browser/gtk/tabs/tab_strip_gtk.cc
index 2d80179ca728fb35477cb0cb7f91c73a3caf0b38..bdb526dea2535db0b3bb2e42c19d67f814a5871a 100644
--- a/chrome/browser/gtk/tabs/tab_strip_gtk.cc
+++ b/chrome/browser/gtk/tabs/tab_strip_gtk.cc
@@ -467,6 +467,8 @@ void TabStripGtk::Init(int width, Profile* profile) {
G_CALLBACK(OnExpose), this);
g_signal_connect(G_OBJECT(tabstrip_.get()), "size-allocate",
G_CALLBACK(OnSizeAllocate), this);
+ g_signal_connect(G_OBJECT(tabstrip_.get()), "button-press-event",
+ G_CALLBACK(OnButtonPress), this);
newtab_button_.reset(MakeNewTabButton());
@@ -1089,6 +1091,15 @@ void TabStripGtk::OnSizeAllocate(GtkWidget* widget, GtkAllocation* allocation,
}
// static
+gboolean TabStripGtk::OnButtonPress(GtkWidget* widget, GdkEventButton* event,
+ TabStripGtk* tabstrip) {
+ if (3 == event->button)
+ tabstrip->ShowContextMenu();
+
+ return TRUE;
+}
+
+// static
void TabStripGtk::OnNewTabClicked(GtkWidget* widget, TabStripGtk* tabstrip) {
tabstrip->model_->delegate()->AddBlankTab(true);
}
@@ -1115,3 +1126,61 @@ CustomDrawButton* TabStripGtk::MakeNewTabButton() {
return button;
}
+
+void TabStripGtk::ShowContextMenu() {
+ if (!context_menu_.get()) {
+ context_menu_.reset(new MenuGtk(this, false));
+ context_menu_->AppendMenuItemWithLabel(
+ TabStripModel::CommandNewTab,
+ l10n_util::GetStringUTF8(IDS_TAB_CXMENU_NEWTAB));
+ context_menu_->AppendMenuItemWithLabel(
+ TabStripModel::CommandRestoreTab,
+ l10n_util::GetStringUTF8(IDS_RESTORE_TAB));
+
+ context_menu_->AppendSeparator();
+
+ context_menu_->AppendMenuItemWithLabel(
+ TabStripModel::CommandTaskManager,
+ l10n_util::GetStringUTF8(IDS_TASK_MANAGER));
+ }
+
+ context_menu_->PopupAsContext(gtk_get_current_event_time());
+}
+
+bool TabStripGtk::IsCommandEnabled(int command_id) const {
+ switch (command_id) {
+ case TabStripModel::CommandNewTab:
+ return true;
+
+ case TabStripModel::CommandRestoreTab:
+ return model_->delegate()->CanRestoreTab();
+
+ case TabStripModel::CommandTaskManager:
+ // TODO(tc): This needs to be implemented in the TabStripModelDelegate.
+ return false;
+
+ default:
+ NOTREACHED();
+ }
+ return false;
+}
+
+void TabStripGtk::ExecuteCommand(int command_id) {
+ switch (command_id) {
+ case TabStripModel::CommandNewTab:
+ model_->delegate()->AddBlankTab(true);
+ break;
+
+ case TabStripModel::CommandRestoreTab:
+ model_->delegate()->RestoreTab();
+ break;
+
+ case TabStripModel::CommandTaskManager:
+ // TODO(tc): This needs to be implemented in the TabStripModelDelegate.
+ NOTIMPLEMENTED();
+ break;
+
+ default:
+ NOTREACHED();
+ }
+}
« no previous file with comments | « chrome/browser/gtk/tabs/tab_strip_gtk.h ('k') | chrome/browser/tabs/tab_strip_model.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698