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

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

Issue 7003066: GTK: Add CHECKs() to try to find the cause of a GlobalBookmarkMenu crash. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 6 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_bookmark_menu.h ('k') | no next file » | 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_bookmark_menu.h" 5 #include "chrome/browser/ui/gtk/global_bookmark_menu.h"
6 6
7 #include <dlfcn.h> 7 #include <dlfcn.h>
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 // Only display the other bookmarks folder in the menu if it has items in it. 103 // Only display the other bookmarks folder in the menu if it has items in it.
104 const BookmarkNode* other_node = model->other_node(); 104 const BookmarkNode* other_node = model->other_node();
105 if (other_node->child_count()) { 105 if (other_node->child_count()) {
106 GtkWidget* submenu = gtk_menu_new(); 106 GtkWidget* submenu = gtk_menu_new();
107 AddNodeToMenu(other_node, submenu); 107 AddNodeToMenu(other_node, submenu);
108 108
109 AddBookmarkMenuItem(bookmark_menu_.get(), gtk_separator_menu_item_new()); 109 AddBookmarkMenuItem(bookmark_menu_.get(), gtk_separator_menu_item_new());
110 110
111 GtkWidget* menu_item = gtk_image_menu_item_new_with_label( 111 GtkWidget* menu_item = gtk_image_menu_item_new_with_label(
112 l10n_util::GetStringUTF8(IDS_BOOMARK_BAR_OTHER_FOLDER_NAME).c_str()); 112 l10n_util::GetStringUTF8(IDS_BOOMARK_BAR_OTHER_FOLDER_NAME).c_str());
113 gtk_util::SetAlwaysShowImage(menu_item);
114 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu); 113 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), submenu);
115 gtk_image_menu_item_set_image( 114 gtk_image_menu_item_set_image(
116 GTK_IMAGE_MENU_ITEM(menu_item), 115 GTK_IMAGE_MENU_ITEM(menu_item),
117 gtk_image_new_from_pixbuf(default_folder_)); 116 gtk_image_new_from_pixbuf(default_folder_));
117 gtk_util::SetAlwaysShowImage(menu_item);
118 118
119 AddBookmarkMenuItem(bookmark_menu_.get(), menu_item); 119 AddBookmarkMenuItem(bookmark_menu_.get(), menu_item);
120 } 120 }
121 } 121 }
122 122
123 void GlobalBookmarkMenu::AddBookmarkMenuItem(GtkWidget* menu, 123 void GlobalBookmarkMenu::AddBookmarkMenuItem(GtkWidget* menu,
124 GtkWidget* menu_item) { 124 GtkWidget* menu_item) {
125 g_object_set_data(G_OBJECT(menu_item), "type-tag", 125 g_object_set_data(G_OBJECT(menu_item), "type-tag",
126 GINT_TO_POINTER(GlobalMenuBar::TAG_BOOKMARK_CLEARABLE)); 126 GINT_TO_POINTER(GlobalMenuBar::TAG_BOOKMARK_CLEARABLE));
127 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); 127 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
128 gtk_widget_show(menu_item); 128 gtk_widget_show(menu_item);
129 } 129 }
130 130
131 void GlobalBookmarkMenu::AddNodeToMenu(const BookmarkNode* node, 131 void GlobalBookmarkMenu::AddNodeToMenu(const BookmarkNode* node,
132 GtkWidget* menu) { 132 GtkWidget* menu) {
133 int child_count = node->child_count(); 133 int child_count = node->child_count();
134 if (!child_count) { 134 if (!child_count) {
135 GtkWidget* item = gtk_menu_item_new_with_label( 135 GtkWidget* item = gtk_menu_item_new_with_label(
136 l10n_util::GetStringUTF8(IDS_MENU_EMPTY_SUBMENU).c_str()); 136 l10n_util::GetStringUTF8(IDS_MENU_EMPTY_SUBMENU).c_str());
137 gtk_widget_set_sensitive(item, FALSE); 137 gtk_widget_set_sensitive(item, FALSE);
138 AddBookmarkMenuItem(menu, item); 138 AddBookmarkMenuItem(menu, item);
139 } else { 139 } else {
140 for (int i = 0; i < child_count; i++) { 140 for (int i = 0; i < child_count; i++) {
141 const BookmarkNode* child = node->GetChild(i); 141 const BookmarkNode* child = node->GetChild(i);
142 GtkWidget* item = gtk_image_menu_item_new(); 142 GtkWidget* item = gtk_image_menu_item_new();
143 gtk_util::SetAlwaysShowImage(item);
144 ConfigureMenuItem(child, item); 143 ConfigureMenuItem(child, item);
145 bookmark_nodes_[child] = item; 144 bookmark_nodes_[child] = item;
146 145
147 if (child->is_folder()) { 146 if (child->is_folder()) {
148 GtkWidget* submenu = gtk_menu_new(); 147 GtkWidget* submenu = gtk_menu_new();
149 AddNodeToMenu(child, submenu); 148 AddNodeToMenu(child, submenu);
150 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); 149 gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu);
151 } else { 150 } else {
152 g_object_set_data(G_OBJECT(item), "bookmark-node", 151 g_object_set_data(G_OBJECT(item), "bookmark-node",
153 const_cast<BookmarkNode*>(child)); 152 const_cast<BookmarkNode*>(child));
154 g_signal_connect(item, "activate", 153 g_signal_connect(item, "activate",
155 G_CALLBACK(OnBookmarkItemActivatedThunk), this); 154 G_CALLBACK(OnBookmarkItemActivatedThunk), this);
156 } 155 }
157 156
158 AddBookmarkMenuItem(menu, item); 157 AddBookmarkMenuItem(menu, item);
159 } 158 }
160 } 159 }
161 } 160 }
162 161
163 void GlobalBookmarkMenu::ConfigureMenuItem(const BookmarkNode* node, 162 void GlobalBookmarkMenu::ConfigureMenuItem(const BookmarkNode* node,
164 GtkWidget* menu_item) { 163 GtkWidget* menu_item) {
164 CHECK(node);
165 CHECK(menu_item);
166
165 // This check is only to make things compile on Hardy; this code won't 167 // This check is only to make things compile on Hardy; this code won't
166 // display any visible widgets in older systems that don't have a global menu 168 // display any visible widgets in older systems that don't have a global menu
167 // bar. 169 // bar.
168 if (gtk_menu_item_set_label_sym) { 170 if (gtk_menu_item_set_label_sym) {
169 gtk_menu_item_set_label_sym( 171 gtk_menu_item_set_label_sym(
170 GTK_MENU_ITEM(menu_item), 172 GTK_MENU_ITEM(menu_item),
171 bookmark_utils::BuildMenuLabelFor(node).c_str()); 173 bookmark_utils::BuildMenuLabelFor(node).c_str());
172 } 174 }
173 175
174 if (node->is_url()) { 176 if (node->is_url()) {
175 gtk_widget_set_tooltip_markup( 177 gtk_widget_set_tooltip_markup(
176 menu_item, 178 menu_item,
177 bookmark_utils::BuildTooltipFor(node).c_str()); 179 bookmark_utils::BuildTooltipFor(node).c_str());
178 } 180 }
179 181
180 const SkBitmap& bitmap = profile_->GetBookmarkModel()->GetFavicon(node); 182 const SkBitmap& bitmap = profile_->GetBookmarkModel()->GetFavicon(node);
181 if (!bitmap.isNull()) { 183 if (!bitmap.isNull()) {
182 GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&bitmap); 184 GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&bitmap);
183 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), 185 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item),
184 gtk_image_new_from_pixbuf(pixbuf)); 186 gtk_image_new_from_pixbuf(pixbuf));
185 g_object_unref(pixbuf); 187 g_object_unref(pixbuf);
186 } else { 188 } else {
187 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), 189 GdkPixbuf* pixbuf = node->is_url() ? default_favicon_ : default_folder_;
188 gtk_image_new_from_pixbuf( 190 CHECK(pixbuf);
189 node->is_url() ? default_favicon_ : 191 GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf);
190 default_folder_)); 192 CHECK(image);
193
194 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), image);
191 } 195 }
196
197 gtk_util::SetAlwaysShowImage(menu_item);
192 } 198 }
193 199
194 GtkWidget* GlobalBookmarkMenu::MenuItemForNode(const BookmarkNode* node) { 200 GtkWidget* GlobalBookmarkMenu::MenuItemForNode(const BookmarkNode* node) {
195 if (!node) 201 if (!node)
196 return NULL; 202 return NULL;
197 std::map<const BookmarkNode*, GtkWidget*>::iterator it = 203 std::map<const BookmarkNode*, GtkWidget*>::iterator it =
198 bookmark_nodes_.find(node); 204 bookmark_nodes_.find(node);
199 if (it == bookmark_nodes_.end()) 205 if (it == bookmark_nodes_.end())
200 return NULL; 206 return NULL;
201 return it->second; 207 return it->second;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 void GlobalBookmarkMenu::OnBookmarkItemActivated(GtkWidget* menu_item) { 292 void GlobalBookmarkMenu::OnBookmarkItemActivated(GtkWidget* menu_item) {
287 // The actual mouse event that generated this activated event was in a 293 // The actual mouse event that generated this activated event was in a
288 // different process. Go with something default. 294 // different process. Go with something default.
289 const BookmarkNode* node = static_cast<const BookmarkNode*>( 295 const BookmarkNode* node = static_cast<const BookmarkNode*>(
290 g_object_get_data(G_OBJECT(menu_item), "bookmark-node")); 296 g_object_get_data(G_OBJECT(menu_item), "bookmark-node"));
291 297
292 browser_->OpenURL(node->GetURL(), GURL(), NEW_FOREGROUND_TAB, 298 browser_->OpenURL(node->GetURL(), GURL(), NEW_FOREGROUND_TAB,
293 PageTransition::AUTO_BOOKMARK); 299 PageTransition::AUTO_BOOKMARK);
294 } 300 }
295 301
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/global_bookmark_menu.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698