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

Side by Side Diff: chrome/browser/ui/gtk/bookmarks/bookmark_bubble_gtk.cc

Issue 8528036: gtk/bookmarks: Cache BookmarkModel in BookmarkBubbleGtk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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/bookmarks/bookmark_bubble_gtk.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/bookmarks/bookmark_bubble_gtk.h" 5 #include "chrome/browser/ui/gtk/bookmarks/bookmark_bubble_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 } 82 }
83 } 83 }
84 } 84 }
85 85
86 BookmarkBubbleGtk::BookmarkBubbleGtk(GtkWidget* anchor, 86 BookmarkBubbleGtk::BookmarkBubbleGtk(GtkWidget* anchor,
87 Profile* profile, 87 Profile* profile,
88 const GURL& url, 88 const GURL& url,
89 bool newly_bookmarked) 89 bool newly_bookmarked)
90 : url_(url), 90 : url_(url),
91 profile_(profile), 91 profile_(profile),
92 model_(profile->GetBookmarkModel()),
92 theme_service_(GtkThemeService::GetFrom(profile_)), 93 theme_service_(GtkThemeService::GetFrom(profile_)),
93 anchor_(anchor), 94 anchor_(anchor),
94 content_(NULL), 95 content_(NULL),
95 name_entry_(NULL), 96 name_entry_(NULL),
96 folder_combo_(NULL), 97 folder_combo_(NULL),
97 bubble_(NULL), 98 bubble_(NULL),
98 factory_(this), 99 factory_(this),
99 newly_bookmarked_(newly_bookmarked), 100 newly_bookmarked_(newly_bookmarked),
100 apply_edits_(true), 101 apply_edits_(true),
101 remove_bookmark_(false) { 102 remove_bookmark_(false) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 197
197 BookmarkBubbleGtk::~BookmarkBubbleGtk() { 198 BookmarkBubbleGtk::~BookmarkBubbleGtk() {
198 DCHECK(!content_); // |content_| should have already been destroyed. 199 DCHECK(!content_); // |content_| should have already been destroyed.
199 200
200 DCHECK(g_bubble); 201 DCHECK(g_bubble);
201 g_bubble = NULL; 202 g_bubble = NULL;
202 203
203 if (apply_edits_) { 204 if (apply_edits_) {
204 ApplyEdits(); 205 ApplyEdits();
205 } else if (remove_bookmark_) { 206 } else if (remove_bookmark_) {
206 BookmarkModel* model = profile_->GetBookmarkModel(); 207 const BookmarkNode* node = model_->GetMostRecentlyAddedNodeForURL(url_);
207 const BookmarkNode* node = model->GetMostRecentlyAddedNodeForURL(url_);
208 if (node) 208 if (node)
209 model->Remove(node->parent(), node->parent()->GetIndexOf(node)); 209 model_->Remove(node->parent(), node->parent()->GetIndexOf(node));
210 } 210 }
211 } 211 }
212 212
213 void BookmarkBubbleGtk::OnDestroy(GtkWidget* widget) { 213 void BookmarkBubbleGtk::OnDestroy(GtkWidget* widget) {
214 // We are self deleting, we have a destroy signal setup to catch when we 214 // We are self deleting, we have a destroy signal setup to catch when we
215 // destroyed (via the BubbleGtk being destroyed), and delete ourself. 215 // destroyed (via the BubbleGtk being destroyed), and delete ourself.
216 content_ = NULL; // We are being destroyed. 216 content_ = NULL; // We are being destroyed.
217 delete this; 217 delete this;
218 } 218 }
219 219
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 262
263 apply_edits_ = false; 263 apply_edits_ = false;
264 remove_bookmark_ = true; 264 remove_bookmark_ = true;
265 bubble_->Close(); 265 bubble_->Close();
266 } 266 }
267 267
268 void BookmarkBubbleGtk::ApplyEdits() { 268 void BookmarkBubbleGtk::ApplyEdits() {
269 // Set this to make sure we don't attempt to apply edits again. 269 // Set this to make sure we don't attempt to apply edits again.
270 apply_edits_ = false; 270 apply_edits_ = false;
271 271
272 BookmarkModel* model = profile_->GetBookmarkModel(); 272 const BookmarkNode* node = model_->GetMostRecentlyAddedNodeForURL(url_);
273 const BookmarkNode* node = model->GetMostRecentlyAddedNodeForURL(url_);
274 if (node) { 273 if (node) {
275 const string16 new_title( 274 const string16 new_title(
276 UTF8ToUTF16(gtk_entry_get_text(GTK_ENTRY(name_entry_)))); 275 UTF8ToUTF16(gtk_entry_get_text(GTK_ENTRY(name_entry_))));
277 276
278 if (new_title != node->GetTitle()) { 277 if (new_title != node->GetTitle()) {
279 model->SetTitle(node, new_title); 278 model_->SetTitle(node, new_title);
280 UserMetrics::RecordAction( 279 UserMetrics::RecordAction(
281 UserMetricsAction("BookmarkBubble_ChangeTitleInBubble")); 280 UserMetricsAction("BookmarkBubble_ChangeTitleInBubble"));
282 } 281 }
283 282
284 int index = gtk_combo_box_get_active(GTK_COMBO_BOX(folder_combo_)); 283 int index = gtk_combo_box_get_active(GTK_COMBO_BOX(folder_combo_));
285 284
286 // Last index means 'Choose another folder...' 285 // Last index means 'Choose another folder...'
287 if (index < folder_combo_model_->GetItemCount() - 1) { 286 if (index < folder_combo_model_->GetItemCount() - 1) {
288 const BookmarkNode* new_parent = folder_combo_model_->GetNodeAt(index); 287 const BookmarkNode* new_parent = folder_combo_model_->GetNodeAt(index);
289 if (new_parent != node->parent()) { 288 if (new_parent != node->parent()) {
290 UserMetrics::RecordAction( 289 UserMetrics::RecordAction(
291 UserMetricsAction("BookmarkBubble_ChangeParent")); 290 UserMetricsAction("BookmarkBubble_ChangeParent"));
292 model->Move(node, new_parent, new_parent->child_count()); 291 model_->Move(node, new_parent, new_parent->child_count());
293 } 292 }
294 } 293 }
295 } 294 }
296 } 295 }
297 296
298 std::string BookmarkBubbleGtk::GetTitle() { 297 std::string BookmarkBubbleGtk::GetTitle() {
299 BookmarkModel* bookmark_model= profile_->GetBookmarkModel(); 298 const BookmarkNode* node = model_->GetMostRecentlyAddedNodeForURL(url_);
300 const BookmarkNode* node =
301 bookmark_model->GetMostRecentlyAddedNodeForURL(url_);
302 if (!node) { 299 if (!node) {
303 NOTREACHED(); 300 NOTREACHED();
304 return std::string(); 301 return std::string();
305 } 302 }
306 303
307 return UTF16ToUTF8(node->GetTitle()); 304 return UTF16ToUTF8(node->GetTitle());
308 } 305 }
309 306
310 void BookmarkBubbleGtk::ShowEditor() { 307 void BookmarkBubbleGtk::ShowEditor() {
311 const BookmarkNode* node = 308 const BookmarkNode* node = model_->GetMostRecentlyAddedNodeForURL(url_);
312 profile_->GetBookmarkModel()->GetMostRecentlyAddedNodeForURL(url_);
313 309
314 // Commit any edits now. 310 // Commit any edits now.
315 ApplyEdits(); 311 ApplyEdits();
316 312
317 // Closing might delete us, so we'll cache what we need on the stack. 313 // Closing might delete us, so we'll cache what we need on the stack.
318 Profile* profile = profile_; 314 Profile* profile = profile_;
319 GtkWindow* toplevel = GTK_WINDOW(gtk_widget_get_toplevel(anchor_)); 315 GtkWindow* toplevel = GTK_WINDOW(gtk_widget_get_toplevel(anchor_));
320 316
321 // Close the bubble, deleting the C++ objects, etc. 317 // Close the bubble, deleting the C++ objects, etc.
322 bubble_->Close(); 318 bubble_->Close();
323 319
324 if (node) { 320 if (node) {
325 BookmarkEditor::Show(toplevel, profile, 321 BookmarkEditor::Show(toplevel, profile,
326 BookmarkEditor::EditDetails::EditNode(node), 322 BookmarkEditor::EditDetails::EditNode(node),
327 BookmarkEditor::SHOW_TREE); 323 BookmarkEditor::SHOW_TREE);
328 } 324 }
329 } 325 }
330 326
331 void BookmarkBubbleGtk::InitFolderComboModel() { 327 void BookmarkBubbleGtk::InitFolderComboModel() {
332 const BookmarkNode* node = 328 const BookmarkNode* node = model_->GetMostRecentlyAddedNodeForURL(url_);
333 profile_->GetBookmarkModel()->GetMostRecentlyAddedNodeForURL(url_);
334 DCHECK(node); 329 DCHECK(node);
335 330
336 folder_combo_model_.reset(new RecentlyUsedFoldersComboModel( 331 folder_combo_model_.reset(new RecentlyUsedFoldersComboModel(model_, node));
337 profile_->GetBookmarkModel(), node));
338 332
339 // We always have nodes + 1 entries in the combo. The last entry will be 333 // We always have nodes + 1 entries in the combo. The last entry will be
340 // the 'Select another folder...' entry that opens the bookmark editor. 334 // the 'Select another folder...' entry that opens the bookmark editor.
341 for (int i = 0; i < folder_combo_model_->GetItemCount(); ++i) { 335 for (int i = 0; i < folder_combo_model_->GetItemCount(); ++i) {
342 gtk_combo_box_append_text(GTK_COMBO_BOX(folder_combo_), 336 gtk_combo_box_append_text(GTK_COMBO_BOX(folder_combo_),
343 UTF16ToUTF8(folder_combo_model_->GetItemAt(i)).c_str()); 337 UTF16ToUTF8(folder_combo_model_->GetItemAt(i)).c_str());
344 } 338 }
345 339
346 gtk_combo_box_set_active(GTK_COMBO_BOX(folder_combo_), 340 gtk_combo_box_set_active(GTK_COMBO_BOX(folder_combo_),
347 folder_combo_model_->node_parent_index()); 341 folder_combo_model_->node_parent_index());
348 } 342 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/bookmarks/bookmark_bubble_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698