summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/menu_gtk.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-30 20:51:36 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-30 20:51:36 +0000
commit295f61885be7e1104502185f3322e3bcacdc5f00 (patch)
tree89f9d58aec05c4570ff1fd6d456f516e4c401e31 /chrome/browser/gtk/menu_gtk.cc
parentd2dc4733d65be32140c3ed84a64d5e24538229ed (diff)
downloadchromium_src-295f61885be7e1104502185f3322e3bcacdc5f00.zip
chromium_src-295f61885be7e1104502185f3322e3bcacdc5f00.tar.gz
chromium_src-295f61885be7e1104502185f3322e3bcacdc5f00.tar.bz2
Make back forward menu model a MenuModel.
On Linux, implement just enough MenuModel support in GtkMenu. On Linux + windows, remove wrapper classes. On Mac, just change a few function calls around. BUG=none TEST=unit test + manually clicking around on it in debug mode Review URL: http://codereview.chromium.org/501168 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35389 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/menu_gtk.cc')
-rw-r--r--chrome/browser/gtk/menu_gtk.cc35
1 files changed, 21 insertions, 14 deletions
diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc
index 2a9ab51..75605b5 100644
--- a/chrome/browser/gtk/menu_gtk.cc
+++ b/chrome/browser/gtk/menu_gtk.cc
@@ -6,6 +6,7 @@
#include "app/gfx/gtk_util.h"
#include "app/l10n_util.h"
+#include "app/menus/menu_model.h"
#include "base/logging.h"
#include "base/message_loop.h"
#include "base/stl_util-inl.h"
@@ -22,6 +23,7 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate,
const MenuCreateMaterial* menu_data,
GtkAccelGroup* accel_group)
: delegate_(delegate),
+ model_(NULL),
dummy_accel_group_(gtk_accel_group_new()),
menu_(gtk_menu_new()),
factory_(this) {
@@ -29,14 +31,16 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate,
BuildMenuIn(menu_.get(), menu_data, accel_group);
}
-MenuGtk::MenuGtk(MenuGtk::Delegate* delegate, bool load)
+MenuGtk::MenuGtk(MenuGtk::Delegate* delegate,
+ menus::MenuModel* model)
: delegate_(delegate),
+ model_(model),
dummy_accel_group_(NULL),
menu_(gtk_menu_new()),
factory_(this) {
ConnectSignalHandlers();
- if (load)
- BuildMenuFromDelegate();
+ if (model)
+ BuildMenuFromModel();
}
MenuGtk::~MenuGtk() {
@@ -143,9 +147,6 @@ void MenuGtk::BuildMenuIn(GtkWidget* menu,
l10n_util::GetStringUTF16(menu_data->label_argument));
} else if (menu_data->label_id) {
label = l10n_util::GetStringUTF8(menu_data->label_id);
- } else if (menu_data->type != MENU_SEPARATOR) {
- label = delegate_->GetLabel(menu_data->id);
- DCHECK(!label.empty());
}
label = ConvertAcceleratorsFromWindowsStyle(label);
@@ -223,18 +224,24 @@ GtkWidget* MenuGtk::BuildMenuItemWithImage(const std::string& label,
return menu_item;
}
-void MenuGtk::BuildMenuFromDelegate() {
- // Note that the menu IDs start at 1, not 0.
- for (int i = 1; i <= delegate_->GetItemCount(); ++i) {
+void MenuGtk::BuildMenuFromModel() {
+ for (int i = 0; i < model_->GetItemCount(); ++i) {
GtkWidget* menu_item = NULL;
- if (delegate_->IsItemSeparator(i)) {
+ // TODO(estade): support these commands.
+ DCHECK_NE(model_->GetTypeAt(i), menus::MenuModel::TYPE_CHECK);
+ DCHECK_NE(model_->GetTypeAt(i), menus::MenuModel::TYPE_RADIO);
+ DCHECK_NE(model_->GetTypeAt(i), menus::MenuModel::TYPE_SUBMENU);
+
+ SkBitmap icon;
+ if (model_->GetTypeAt(i) == menus::MenuModel::TYPE_SEPARATOR) {
menu_item = gtk_separator_menu_item_new();
- } else if (delegate_->HasIcon(i)) {
- const SkBitmap* icon = delegate_->GetIcon(i);
- menu_item = BuildMenuItemWithImage(delegate_->GetLabel(i), *icon);
+ } else if (model_->GetIconAt(i, &icon)) {
+ menu_item = BuildMenuItemWithImage(UTF16ToUTF8(model_->GetLabelAt(i)),
+ icon);
} else {
- menu_item = gtk_menu_item_new_with_label(delegate_->GetLabel(i).c_str());
+ menu_item = gtk_menu_item_new_with_label(
+ UTF16ToUTF8(model_->GetLabelAt(i)).c_str());
}
AppendMenuItem(i, menu_item);