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

Unified Diff: chrome/browser/gtk/menu_gtk.cc

Issue 48065: Ensure that MenuGtks are destroyed before their accelerator group. (Closed)
Patch Set: reinterpretcast Created 11 years, 9 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/menu_gtk.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/menu_gtk.cc
diff --git a/chrome/browser/gtk/menu_gtk.cc b/chrome/browser/gtk/menu_gtk.cc
index fc349cdded0b612eb904dd41ddecdd5483ebad9d..47a89f9a13fc6909f17092432f18d487f19ec9dd 100644
--- a/chrome/browser/gtk/menu_gtk.cc
+++ b/chrome/browser/gtk/menu_gtk.cc
@@ -38,9 +38,8 @@ MenuGtk::MenuGtk(MenuGtk::Delegate* delegate,
const MenuCreateMaterial* menu_data,
GtkAccelGroup* accel_group)
: delegate_(delegate),
- accel_group_(accel_group),
menu_(gtk_menu_new()) {
- BuildMenuIn(menu_.get(), menu_data);
+ BuildMenuIn(menu_.get(), menu_data, accel_group);
}
MenuGtk::MenuGtk(MenuGtk::Delegate* delegate)
@@ -80,7 +79,8 @@ void MenuGtk::PopupAsContext() {
}
void MenuGtk::BuildMenuIn(GtkWidget* menu,
- const MenuCreateMaterial* menu_data) {
+ const MenuCreateMaterial* menu_data,
+ GtkAccelGroup* accel_group) {
// We keep track of the last menu item in order to group radio items.
GtkWidget* last_menu_item = NULL;
for (; menu_data->type != MENU_END; ++menu_data) {
@@ -124,17 +124,17 @@ void MenuGtk::BuildMenuIn(GtkWidget* menu,
if (menu_data->submenu) {
GtkWidget* submenu = gtk_menu_new();
- BuildMenuIn(submenu, menu_data->submenu);
+ BuildMenuIn(submenu, menu_data->submenu, accel_group);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu);
}
- if (accel_group_ && menu_data->accel_key) {
+ if (accel_group && menu_data->accel_key) {
// If we ever want to let the user do any key remaping, we'll need to
// change the following so we make a gtk_accel_map which keeps the actual
// keys.
gtk_widget_add_accelerator(menu_item,
"activate",
- accel_group_,
+ accel_group,
menu_data->accel_key,
GdkModifierType(menu_data->accel_modifiers),
GTK_ACCEL_VISIBLE);
@@ -178,8 +178,7 @@ void MenuGtk::BuildMenuFromDelegate() {
G_CALLBACK(OnMenuItemActivatedById), this);
gtk_widget_show(menu_item);
- // TODO(estade): gtk_menu_append is deprecated.
- gtk_menu_append(menu_.get(), menu_item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu_.get()), menu_item);
}
}
@@ -214,16 +213,9 @@ void MenuGtk::MenuPositionFunc(GtkMenu* menu,
void* void_widget) {
GtkWidget* widget = GTK_WIDGET(void_widget);
GtkRequisition menu_req;
- GdkRectangle monitor;
gtk_widget_size_request(GTK_WIDGET(menu), &menu_req);
- GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(menu));
- gint monitor_num = gdk_screen_get_monitor_at_window(screen, widget->window);
- if (monitor_num < 0)
- monitor_num = 0;
- gdk_screen_get_monitor_geometry(screen, monitor_num, &monitor);
-
gdk_window_get_origin(widget->window, x, y);
*x += widget->allocation.x;
*y += widget->allocation.y + widget->allocation.height;
@@ -231,10 +223,7 @@ void MenuGtk::MenuPositionFunc(GtkMenu* menu,
// g_object_get_data() returns NULL if no such object is found. |left_align|
// acts as a boolean, but we can't actually cast it to bool because gcc
// complains about losing precision.
- void* left_align =
- g_object_get_data(G_OBJECT(widget), "left-align-popup");
-
- if (!left_align)
+ if (!g_object_get_data(G_OBJECT(widget), "left-align-popup"))
*x += widget->allocation.width - menu_req.width;
// TODO(erg): Deal with this scrolling off the bottom of the screen.
@@ -246,8 +235,8 @@ void MenuGtk::MenuPositionFunc(GtkMenu* menu,
}
// static
-void MenuGtk::SetMenuItemInfo(GtkWidget* widget, void* raw_menu) {
- MenuGtk* menu = static_cast<MenuGtk*>(raw_menu);
+void MenuGtk::SetMenuItemInfo(GtkWidget* widget, gpointer userdata) {
+ MenuGtk* menu = reinterpret_cast<MenuGtk*>(userdata);
const MenuCreateMaterial* data =
reinterpret_cast<const MenuCreateMaterial*>(
g_object_get_data(G_OBJECT(widget), "menu-data"));
@@ -265,8 +254,8 @@ void MenuGtk::SetMenuItemInfo(GtkWidget* widget, void* raw_menu) {
GtkWidget* submenu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(widget));
if (submenu) {
- gtk_container_foreach(GTK_CONTAINER(submenu), &MenuGtk::SetMenuItemInfo,
- raw_menu);
+ gtk_container_foreach(GTK_CONTAINER(submenu), &SetMenuItemInfo,
+ userdata);
}
}
}
« no previous file with comments | « chrome/browser/gtk/menu_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698