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

Side by Side Diff: chrome/browser/gtk/bookmark_tree_model.cc

Issue 155456: Try the original CL "Always persist bookmark IDs" again with the fix to... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 5 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/gtk/bookmark_tree_model.h ('k') | chrome/browser/views/bookmark_editor_view.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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/gtk/bookmark_tree_model.h" 5 #include "chrome/browser/gtk/bookmark_tree_model.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "app/resource_bundle.h" 9 #include "app/resource_bundle.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 23 matching lines...) Expand all
34 GtkTreePath* selected_path, 34 GtkTreePath* selected_path,
35 const BookmarkNode** selected_node) { 35 const BookmarkNode** selected_node) {
36 GtkTreePath* current_path = gtk_tree_model_get_path(tree_model, parent_iter); 36 GtkTreePath* current_path = gtk_tree_model_get_path(tree_model, parent_iter);
37 if (gtk_tree_path_compare(current_path, selected_path) == 0) 37 if (gtk_tree_path_compare(current_path, selected_path) == 0)
38 *selected_node = bb_node; 38 *selected_node = bb_node;
39 gtk_tree_path_free(current_path); 39 gtk_tree_path_free(current_path);
40 40
41 GtkTreeIter child_iter; 41 GtkTreeIter child_iter;
42 if (gtk_tree_model_iter_children(tree_model, &child_iter, parent_iter)) { 42 if (gtk_tree_model_iter_children(tree_model, &child_iter, parent_iter)) {
43 do { 43 do {
44 int id = bookmark_utils::GetIdFromTreeIter(tree_model, &child_iter); 44 int64 id = bookmark_utils::GetIdFromTreeIter(tree_model, &child_iter);
45 std::wstring title = 45 std::wstring title =
46 bookmark_utils::GetTitleFromTreeIter(tree_model, &child_iter); 46 bookmark_utils::GetTitleFromTreeIter(tree_model, &child_iter);
47 const BookmarkNode* child_bb_node = NULL; 47 const BookmarkNode* child_bb_node = NULL;
48 if (id == 0) { 48 if (id == 0) {
49 child_bb_node = bb_model->AddGroup(bb_node, bb_node->GetChildCount(), 49 child_bb_node = bb_model->AddGroup(bb_node, bb_node->GetChildCount(),
50 title); 50 title);
51 } else { 51 } else {
52 // Existing node, reset the title (BBModel ignores changes if the title 52 // Existing node, reset the title (BBModel ignores changes if the title
53 // is the same). 53 // is the same).
54 for (int j = 0; j < bb_node->GetChildCount(); ++j) { 54 for (int j = 0; j < bb_node->GetChildCount(); ++j) {
(...skipping 12 matching lines...) Expand all
67 } while (gtk_tree_model_iter_next(tree_model, &child_iter)); 67 } while (gtk_tree_model_iter_next(tree_model, &child_iter));
68 } 68 }
69 } 69 }
70 70
71 } // namespace 71 } // namespace
72 72
73 namespace bookmark_utils { 73 namespace bookmark_utils {
74 74
75 GtkTreeStore* MakeFolderTreeStore() { 75 GtkTreeStore* MakeFolderTreeStore() {
76 return gtk_tree_store_new(FOLDER_STORE_NUM_COLUMNS, GDK_TYPE_PIXBUF, 76 return gtk_tree_store_new(FOLDER_STORE_NUM_COLUMNS, GDK_TYPE_PIXBUF,
77 G_TYPE_STRING, G_TYPE_INT); 77 G_TYPE_STRING, G_TYPE_INT64);
78 } 78 }
79 79
80 void AddToTreeStore(BookmarkModel* model, int selected_id, 80 void AddToTreeStore(BookmarkModel* model, int64 selected_id,
81 GtkTreeStore* store, GtkTreeIter* selected_iter) { 81 GtkTreeStore* store, GtkTreeIter* selected_iter) {
82 const BookmarkNode* root_node = model->root_node(); 82 const BookmarkNode* root_node = model->root_node();
83 for (int i = 0; i < root_node->GetChildCount(); ++i) { 83 for (int i = 0; i < root_node->GetChildCount(); ++i) {
84 AddToTreeStoreAt(root_node->GetChild(i), selected_id, store, 84 AddToTreeStoreAt(root_node->GetChild(i), selected_id, store,
85 selected_iter, NULL); 85 selected_iter, NULL);
86 } 86 }
87 } 87 }
88 88
89 void AddToTreeStoreAt(const BookmarkNode* node, int selected_id, 89 void AddToTreeStoreAt(const BookmarkNode* node, int64 selected_id,
90 GtkTreeStore* store, GtkTreeIter* selected_iter, 90 GtkTreeStore* store, GtkTreeIter* selected_iter,
91 GtkTreeIter* parent) { 91 GtkTreeIter* parent) {
92 if (!node->is_folder()) 92 if (!node->is_folder())
93 return; 93 return;
94 94
95 GtkTreeIter iter; 95 GtkTreeIter iter;
96 AddSingleNodeToTreeStore(store, node, &iter, parent); 96 AddSingleNodeToTreeStore(store, node, &iter, parent);
97 if (selected_iter && node->id() == selected_id) { 97 if (selected_iter && node->id() == selected_id) {
98 // Save the iterator. Since we're using a GtkTreeStore, we're 98 // Save the iterator. Since we're using a GtkTreeStore, we're
99 // guaranteed that the iterator will remain valid as long as the above 99 // guaranteed that the iterator will remain valid as long as the above
(...skipping 21 matching lines...) Expand all
121 // The top level of this tree is weird and needs to be special cased. The 121 // The top level of this tree is weird and needs to be special cased. The
122 // BookmarksNode tree is rooted on a root node while the GtkTreeStore has a 122 // BookmarksNode tree is rooted on a root node while the GtkTreeStore has a
123 // set of top level nodes that are the root BookmarksNode's children. These 123 // set of top level nodes that are the root BookmarksNode's children. These
124 // items in the top level are not editable and therefore don't need the extra 124 // items in the top level are not editable and therefore don't need the extra
125 // complexity of trying to modify their title. 125 // complexity of trying to modify their title.
126 const BookmarkNode* root_node = bb_model->root_node(); 126 const BookmarkNode* root_node = bb_model->root_node();
127 do { 127 do {
128 DCHECK(GetIdFromTreeIter(tree_model, &tree_root) != 0) 128 DCHECK(GetIdFromTreeIter(tree_model, &tree_root) != 0)
129 << "It should be impossible to add another toplevel node"; 129 << "It should be impossible to add another toplevel node";
130 130
131 int id = GetIdFromTreeIter(tree_model, &tree_root); 131 int64 id = GetIdFromTreeIter(tree_model, &tree_root);
132 const BookmarkNode* child_node = NULL; 132 const BookmarkNode* child_node = NULL;
133 for (int j = 0; j < root_node->GetChildCount(); ++j) { 133 for (int j = 0; j < root_node->GetChildCount(); ++j) {
134 const BookmarkNode* node = root_node->GetChild(j); 134 const BookmarkNode* node = root_node->GetChild(j);
135 if (node->is_folder() && node->id() == id) { 135 if (node->is_folder() && node->id() == id) {
136 child_node = node; 136 child_node = node;
137 break; 137 break;
138 } 138 }
139 } 139 }
140 DCHECK(child_node); 140 DCHECK(child_node);
141 141
142 GtkTreeIter child_iter = tree_root; 142 GtkTreeIter child_iter = tree_root;
143 RecursiveResolve(bb_model, child_node, tree_model, &child_iter, 143 RecursiveResolve(bb_model, child_node, tree_model, &child_iter,
144 selected_path, &node_to_return); 144 selected_path, &node_to_return);
145 } while (gtk_tree_model_iter_next(tree_model, &tree_root)); 145 } while (gtk_tree_model_iter_next(tree_model, &tree_root));
146 146
147 gtk_tree_path_free(selected_path); 147 gtk_tree_path_free(selected_path);
148 return node_to_return; 148 return node_to_return;
149 } 149 }
150 150
151 int GetIdFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { 151 int64 GetIdFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) {
152 GValue value = { 0, }; 152 GValue value = { 0, };
153 int ret_val = -1; 153 int64 ret_val = -1;
154 gtk_tree_model_get_value(model, iter, ITEM_ID, &value); 154 gtk_tree_model_get_value(model, iter, ITEM_ID, &value);
155 if (G_VALUE_HOLDS_INT(&value)) 155 if (G_VALUE_HOLDS_INT64(&value))
156 ret_val = g_value_get_int(&value); 156 ret_val = g_value_get_int64(&value);
157 else 157 else
158 NOTREACHED() << "Impossible type mismatch"; 158 NOTREACHED() << "Impossible type mismatch";
159 159
160 return ret_val; 160 return ret_val;
161 } 161 }
162 162
163 std::wstring GetTitleFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) { 163 std::wstring GetTitleFromTreeIter(GtkTreeModel* model, GtkTreeIter* iter) {
164 GValue value = { 0, }; 164 GValue value = { 0, };
165 std::wstring ret_val; 165 std::wstring ret_val;
166 gtk_tree_model_get_value(model, iter, FOLDER_NAME, &value); 166 gtk_tree_model_get_value(model, iter, FOLDER_NAME, &value);
167 if (G_VALUE_HOLDS_STRING(&value)) { 167 if (G_VALUE_HOLDS_STRING(&value)) {
168 const gchar* utf8str = g_value_get_string(&value); 168 const gchar* utf8str = g_value_get_string(&value);
169 ret_val = UTF8ToWide(utf8str); 169 ret_val = UTF8ToWide(utf8str);
170 g_value_unset(&value); 170 g_value_unset(&value);
171 } else { 171 } else {
172 NOTREACHED() << "Impossible type mismatch"; 172 NOTREACHED() << "Impossible type mismatch";
173 } 173 }
174 174
175 return ret_val; 175 return ret_val;
176 } 176 }
177 177
178 } // namespace bookmark_utils 178 } // namespace bookmark_utils
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_tree_model.h ('k') | chrome/browser/views/bookmark_editor_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698