diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-11 01:17:09 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-11 01:17:09 +0000 |
commit | deecf5b9ba80231978a0dd8f3660f77b33428ded (patch) | |
tree | fa8dbec2156186bcf2b310a303a8db102550c016 /chrome/browser/gtk/bookmark_tree_model.cc | |
parent | 78a851f6bcfaca69a31bc0b7547e07feffd57e37 (diff) | |
download | chromium_src-deecf5b9ba80231978a0dd8f3660f77b33428ded.zip chromium_src-deecf5b9ba80231978a0dd8f3660f77b33428ded.tar.gz chromium_src-deecf5b9ba80231978a0dd8f3660f77b33428ded.tar.bz2 |
Linux bookmark manager:
- Add more dragging.
- Make right pane updating less clobbery.
Review URL: http://codereview.chromium.org/122005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18136 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/bookmark_tree_model.cc')
-rw-r--r-- | chrome/browser/gtk/bookmark_tree_model.cc | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/chrome/browser/gtk/bookmark_tree_model.cc b/chrome/browser/gtk/bookmark_tree_model.cc index 1b5f4de..14f7471 100644 --- a/chrome/browser/gtk/bookmark_tree_model.cc +++ b/chrome/browser/gtk/bookmark_tree_model.cc @@ -13,35 +13,17 @@ namespace { -// Helper function for BuildTreeStoreFrom() which recursively inserts data from -// a BookmarkNode tree into a GtkTreeStore. -void RecursiveInsert(BookmarkNode* node, int selected_id, - GtkTreeStore* store, GtkTreeIter* selected_iter, - GtkTreeIter* parent) { - GtkTreeIter iter; - - for (int i = 0; i < node->GetChildCount(); ++i) { - BookmarkNode* child = node->GetChild(i); - if (child->is_folder()) { - gtk_tree_store_append(store, &iter, parent); - // TODO(estade): we should show the folder open when it's expanded. - gtk_tree_store_set(store, &iter, - bookmark_utils::FOLDER_ICON, - bookmark_utils::GetFolderIcon(), - bookmark_utils::FOLDER_NAME, - WideToUTF8(child->GetTitle()).c_str(), - bookmark_utils::ITEM_ID, child->id(), - -1); - if (selected_id && child->id() == selected_id) { - // Save the iterator. Since we're using a GtkTreeStore, we're - // guaranteed that the iterator will remain valid as long as the above - // appended item exists. - *selected_iter = iter; - } - - RecursiveInsert(child, selected_id, store, selected_iter, &iter); - } - } +void AddSingleNodeToTreeStore(GtkTreeStore* store, BookmarkNode* node, + GtkTreeIter *iter, GtkTreeIter* parent) { + gtk_tree_store_append(store, iter, parent); + // TODO(estade): we should show the folder open icon when it's expanded. + gtk_tree_store_set(store, iter, + bookmark_utils::FOLDER_ICON, + bookmark_utils::GetFolderIcon(), + bookmark_utils::FOLDER_NAME, + WideToUTF8(node->GetTitle()).c_str(), + bookmark_utils::ITEM_ID, node->id(), + -1); } // Helper function for CommitTreeStoreDifferencesBetween() which recursively @@ -97,7 +79,32 @@ GtkTreeStore* MakeFolderTreeStore() { void AddToTreeStore(BookmarkModel* model, int selected_id, GtkTreeStore* store, GtkTreeIter* selected_iter) { - RecursiveInsert(model->root_node(), selected_id, store, selected_iter, NULL); + BookmarkNode* root_node = model->root_node(); + for (int i = 0; i < root_node->GetChildCount(); ++i) { + AddToTreeStoreAt(root_node->GetChild(i), selected_id, store, + selected_iter, NULL); + } +} + +void AddToTreeStoreAt(BookmarkNode* node, int selected_id, + GtkTreeStore* store, GtkTreeIter* selected_iter, + GtkTreeIter* parent) { + if (!node->is_folder()) + return; + + GtkTreeIter iter; + AddSingleNodeToTreeStore(store, node, &iter, parent); + if (selected_iter && node->id() == selected_id) { + // Save the iterator. Since we're using a GtkTreeStore, we're + // guaranteed that the iterator will remain valid as long as the above + // appended item exists. + *selected_iter = iter; + } + + for (int i = 0; i < node->GetChildCount(); ++i) { + AddToTreeStoreAt(node->GetChild(i), selected_id, store, + selected_iter, &iter); + } } BookmarkNode* CommitTreeStoreDifferencesBetween( |