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

Side by Side Diff: chrome/browser/ui/gtk/global_menu_bar.cc

Issue 7017028: Revert "Revert 85330 - GTK: Bring global menu out of about:flags." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/gtk/global_menu_bar.h ('k') | chrome/browser/ui/gtk/global_menu_owner.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/gtk/global_menu_bar.h" 5 #include "chrome/browser/ui/gtk/global_menu_bar.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "chrome/app/chrome_command_ids.h" 9 #include "chrome/app/chrome_command_ids.h"
10 #include "chrome/browser/prefs/pref_service.h" 10 #include "chrome/browser/prefs/pref_service.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 { IDS_CLOSE_TAB_LINUX, IDC_CLOSE_TAB }, 49 { IDS_CLOSE_TAB_LINUX, IDC_CLOSE_TAB },
50 { IDS_SAVE_PAGE, IDC_SAVE_PAGE }, 50 { IDS_SAVE_PAGE, IDC_SAVE_PAGE },
51 51
52 { MENU_SEPARATOR, MENU_SEPARATOR }, 52 { MENU_SEPARATOR, MENU_SEPARATOR },
53 53
54 { IDS_PRINT, IDC_PRINT }, 54 { IDS_PRINT, IDC_PRINT },
55 55
56 { MENU_END, MENU_END } 56 { MENU_END, MENU_END }
57 }; 57 };
58 58
59 // TODO(erg): Need to add support for undo/redo/other editing commands that
60 // don't go through the command id framework.
61 GlobalMenuBarCommand edit_menu[] = { 59 GlobalMenuBarCommand edit_menu[] = {
62 // TODO(erg): Undo
63 // TODO(erg): Redo
64
65 // TODO(erg): Separator
66
67 { IDS_CUT, IDC_CUT }, 60 { IDS_CUT, IDC_CUT },
68 { IDS_COPY, IDC_COPY }, 61 { IDS_COPY, IDC_COPY },
69 { IDS_PASTE, IDC_PASTE }, 62 { IDS_PASTE, IDC_PASTE },
70 // TODO(erg): Delete
71 63
72 { MENU_SEPARATOR, MENU_SEPARATOR }, 64 { MENU_SEPARATOR, MENU_SEPARATOR },
73 65
74 // TODO(erg): Select All
75 // TODO(erg): Another separator
76
77 { IDS_FIND, IDC_FIND }, 66 { IDS_FIND, IDC_FIND },
78 67
79 { MENU_SEPARATOR, MENU_SEPARATOR }, 68 { MENU_SEPARATOR, MENU_SEPARATOR },
80 69
81 { IDS_PREFERENCES, IDC_OPTIONS }, 70 { IDS_PREFERENCES, IDC_OPTIONS },
82 71
83 { MENU_END, MENU_END } 72 { MENU_END, MENU_END }
84 }; 73 };
85 74
86 // TODO(erg): The View menu should be overhauled and based on the Firefox view
87 // menu.
88 GlobalMenuBarCommand view_menu[] = { 75 GlobalMenuBarCommand view_menu[] = {
89 { IDS_SHOW_BOOKMARK_BAR, IDC_SHOW_BOOKMARK_BAR }, 76 { IDS_SHOW_BOOKMARK_BAR, IDC_SHOW_BOOKMARK_BAR },
90 77
91 { MENU_SEPARATOR, MENU_SEPARATOR }, 78 { MENU_SEPARATOR, MENU_SEPARATOR },
92 79
93 { IDS_STOP_MENU_LINUX, IDC_STOP }, 80 { IDS_STOP_MENU_LINUX, IDC_STOP },
94 { IDS_RELOAD_MENU_LINUX, IDC_RELOAD }, 81 { IDS_RELOAD_MENU_LINUX, IDC_RELOAD },
95 82
96 { MENU_SEPARATOR, MENU_SEPARATOR }, 83 { MENU_SEPARATOR, MENU_SEPARATOR },
97 84
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 dummy_accel_group_(gtk_accel_group_new()), 156 dummy_accel_group_(gtk_accel_group_new()),
170 block_activation_(false) { 157 block_activation_(false) {
171 // The global menu bar should never actually be shown in the app; it should 158 // The global menu bar should never actually be shown in the app; it should
172 // instead remain in our widget hierarchy simply to be noticed by third party 159 // instead remain in our widget hierarchy simply to be noticed by third party
173 // components. 160 // components.
174 gtk_widget_set_no_show_all(menu_bar_.get(), TRUE); 161 gtk_widget_set_no_show_all(menu_bar_.get(), TRUE);
175 162
176 // Set a nice name so it shows up in gtkparasite and others. 163 // Set a nice name so it shows up in gtkparasite and others.
177 gtk_widget_set_name(menu_bar_.get(), "chrome-hidden-global-menubar"); 164 gtk_widget_set_name(menu_bar_.get(), "chrome-hidden-global-menubar");
178 165
179 BuildGtkMenuFrom(IDS_FILE_MENU_LINUX, &id_to_menu_item_, file_menu); 166 BuildGtkMenuFrom(IDS_FILE_MENU_LINUX, &id_to_menu_item_, file_menu, NULL);
180 BuildGtkMenuFrom(IDS_EDIT_MENU_LINUX, &id_to_menu_item_, edit_menu); 167 BuildGtkMenuFrom(IDS_EDIT_MENU_LINUX, &id_to_menu_item_, edit_menu, NULL);
181 BuildGtkMenuFrom(IDS_VIEW_MENU_LINUX, &id_to_menu_item_, view_menu); 168 BuildGtkMenuFrom(IDS_VIEW_MENU_LINUX, &id_to_menu_item_, view_menu, NULL);
182 history_menu_.Init(BuildGtkMenuFrom(IDS_HISTORY_MENU_LINUX, &id_to_menu_item_, 169 BuildGtkMenuFrom(IDS_HISTORY_MENU_LINUX, &id_to_menu_item_,
183 history_menu)); 170 history_menu, &history_menu_);
184 bookmark_menu_.Init(BuildGtkMenuFrom(IDS_BOOKMARKS_MENU_LINUX, 171 BuildGtkMenuFrom(IDS_BOOKMARKS_MENU_LINUX, &id_to_menu_item_, bookmark_menu,
185 &id_to_menu_item_, bookmark_menu)); 172 &bookmark_menu_);
186 BuildGtkMenuFrom(IDS_TOOLS_MENU_LINUX, &id_to_menu_item_, tools_menu); 173 BuildGtkMenuFrom(IDS_TOOLS_MENU_LINUX, &id_to_menu_item_, tools_menu, NULL);
187 BuildGtkMenuFrom(IDS_HELP_MENU_LINUX, &id_to_menu_item_, help_menu); 174 BuildGtkMenuFrom(IDS_HELP_MENU_LINUX, &id_to_menu_item_, help_menu, NULL);
188 175
189 for (CommandIDMenuItemMap::const_iterator it = id_to_menu_item_.begin(); 176 for (CommandIDMenuItemMap::const_iterator it = id_to_menu_item_.begin();
190 it != id_to_menu_item_.end(); ++it) { 177 it != id_to_menu_item_.end(); ++it) {
191 // Get the starting enabled state. 178 // Get the starting enabled state.
192 gtk_widget_set_sensitive( 179 gtk_widget_set_sensitive(
193 it->second, 180 it->second,
194 browser_->command_updater()->IsCommandEnabled(it->first)); 181 browser_->command_updater()->IsCommandEnabled(it->first));
195 182
196 // Set the accelerator for each menu item. 183 // Set the accelerator for each menu item.
197 const ui::AcceleratorGtk* accelerator_gtk = 184 const ui::AcceleratorGtk* accelerator_gtk =
(...skipping 21 matching lines...) Expand all
219 206
220 GlobalMenuBar::~GlobalMenuBar() { 207 GlobalMenuBar::~GlobalMenuBar() {
221 for (CommandIDMenuItemMap::const_iterator it = id_to_menu_item_.begin(); 208 for (CommandIDMenuItemMap::const_iterator it = id_to_menu_item_.begin();
222 it != id_to_menu_item_.end(); ++it) { 209 it != id_to_menu_item_.end(); ++it) {
223 browser_->command_updater()->RemoveCommandObserver(it->first, this); 210 browser_->command_updater()->RemoveCommandObserver(it->first, this);
224 } 211 }
225 212
226 g_object_unref(dummy_accel_group_); 213 g_object_unref(dummy_accel_group_);
227 } 214 }
228 215
229 GtkWidget* GlobalMenuBar::BuildGtkMenuFrom( 216 void GlobalMenuBar::BuildGtkMenuFrom(
230 int menu_str_id, 217 int menu_str_id,
231 std::map<int, GtkWidget*>* id_to_menu_item, 218 std::map<int, GtkWidget*>* id_to_menu_item,
232 GlobalMenuBarCommand* commands) { 219 GlobalMenuBarCommand* commands,
220 GlobalMenuOwner* owner) {
233 GtkWidget* menu = gtk_menu_new(); 221 GtkWidget* menu = gtk_menu_new();
234 for (int i = 0; commands[i].str_id != MENU_END; ++i) { 222 for (int i = 0; commands[i].str_id != MENU_END; ++i) {
235 GtkWidget* menu_item = BuildMenuItem( 223 GtkWidget* menu_item = BuildMenuItem(
236 commands[i].str_id, commands[i].command, commands[i].tag, 224 commands[i].str_id, commands[i].command, commands[i].tag,
237 id_to_menu_item, menu); 225 id_to_menu_item, menu);
238 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); 226 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
239 } 227 }
240 228
241 gtk_widget_show(menu); 229 gtk_widget_show(menu);
242 230
243 GtkWidget* menu_item = gtk_menu_item_new_with_mnemonic( 231 GtkWidget* menu_item = gtk_menu_item_new_with_mnemonic(
244 gfx::ConvertAcceleratorsFromWindowsStyle( 232 gfx::ConvertAcceleratorsFromWindowsStyle(
245 l10n_util::GetStringUTF8(menu_str_id)).c_str()); 233 l10n_util::GetStringUTF8(menu_str_id)).c_str());
234
235 // Give the owner a chance to sink the reference before we add it to the menu
236 // bar.
237 if (owner)
238 owner->Init(menu, menu_item);
239
246 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu); 240 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu);
247 gtk_widget_show(menu_item); 241 gtk_widget_show(menu_item);
248 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar_.get()), menu_item); 242 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar_.get()), menu_item);
249
250 return menu;
251 } 243 }
252 244
253 GtkWidget* GlobalMenuBar::BuildMenuItem( 245 GtkWidget* GlobalMenuBar::BuildMenuItem(
254 int string_id, 246 int string_id,
255 int command_id, 247 int command_id,
256 int tag_id, 248 int tag_id,
257 std::map<int, GtkWidget*>* id_to_menu_item, 249 std::map<int, GtkWidget*>* id_to_menu_item,
258 GtkWidget* menu_to_add_to) { 250 GtkWidget* menu_to_add_to) {
259 GtkWidget* menu_item = NULL; 251 GtkWidget* menu_item = NULL;
260 if (string_id == MENU_SEPARATOR) { 252 if (string_id == MENU_SEPARATOR) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 } 304 }
313 } 305 }
314 306
315 void GlobalMenuBar::OnItemActivated(GtkWidget* sender) { 307 void GlobalMenuBar::OnItemActivated(GtkWidget* sender) {
316 if (block_activation_) 308 if (block_activation_)
317 return; 309 return;
318 310
319 int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(sender), "command-id")); 311 int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(sender), "command-id"));
320 browser_->ExecuteCommandIfEnabled(id); 312 browser_->ExecuteCommandIfEnabled(id);
321 } 313 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/global_menu_bar.h ('k') | chrome/browser/ui/gtk/global_menu_owner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698