Index: chrome/browser/gtk/bookmark_tree_model.cc |
diff --git a/chrome/browser/gtk/bookmark_tree_model.cc b/chrome/browser/gtk/bookmark_tree_model.cc |
index dd63a8dd94a4ad960c86e2ae7b4030b0bb2f1861..2d59a186db3f51f35f4b6146914da26c20996f08 100644 |
--- a/chrome/browser/gtk/bookmark_tree_model.cc |
+++ b/chrome/browser/gtk/bookmark_tree_model.cc |
@@ -14,6 +14,8 @@ |
namespace { |
+const char* kCellRendererTextKey = "__CELL_RENDERER_TEXT__"; |
+ |
void AddSingleNodeToTreeStore(GtkTreeStore* store, const BookmarkNode* node, |
GtkTreeIter *iter, GtkTreeIter* parent) { |
gtk_tree_store_append(store, iter, parent); |
@@ -23,12 +25,11 @@ void AddSingleNodeToTreeStore(GtkTreeStore* store, const BookmarkNode* node, |
// (and indeed, Nautilus does not render an expanded directory any |
// differently). |
gtk_tree_store_set(store, iter, |
- bookmark_utils::FOLDER_ICON, |
- GtkThemeProvider::GetFolderIcon(true), |
- bookmark_utils::FOLDER_NAME, |
- WideToUTF8(node->GetTitle()).c_str(), |
- bookmark_utils::ITEM_ID, node->id(), |
- -1); |
+ bookmark_utils::FOLDER_ICON, GtkThemeProvider::GetFolderIcon(true), |
+ bookmark_utils::FOLDER_NAME, WideToUTF8(node->GetTitle()).c_str(), |
+ bookmark_utils::ITEM_ID, node->id(), |
+ bookmark_utils::IS_EDITABLE, node->is_folder(), |
+ -1); |
} |
// Helper function for CommitTreeStoreDifferencesBetween() which recursively |
@@ -73,13 +74,27 @@ void RecursiveResolve(BookmarkModel* bb_model, const BookmarkNode* bb_node, |
} |
} |
+// Update the folder name in the GtkTreeStore. |
+void OnFolderNameEdited(GtkCellRendererText* render, |
+ gchar* path, gchar* new_folder_name, GtkTreeStore* tree_store) { |
+ GtkTreeIter folder_iter; |
+ GtkTreePath* tree_path = gtk_tree_path_new_from_string(path); |
+ gboolean rv = gtk_tree_model_get_iter(GTK_TREE_MODEL(tree_store), |
+ &folder_iter, tree_path); |
+ DCHECK(rv); |
+ gtk_tree_store_set(tree_store, &folder_iter, |
+ bookmark_utils::FOLDER_NAME, new_folder_name, |
+ -1); |
+ gtk_tree_path_free(tree_path); |
+} |
+ |
} // namespace |
namespace bookmark_utils { |
GtkTreeStore* MakeFolderTreeStore() { |
return gtk_tree_store_new(FOLDER_STORE_NUM_COLUMNS, GDK_TYPE_PIXBUF, |
- G_TYPE_STRING, G_TYPE_INT64); |
+ G_TYPE_STRING, G_TYPE_INT64, G_TYPE_BOOLEAN); |
} |
void AddToTreeStore(BookmarkModel* model, int64 selected_id, |
@@ -99,18 +114,28 @@ GtkWidget* MakeTreeViewForStore(GtkTreeStore* store) { |
"pixbuf", FOLDER_ICON); |
GtkCellRenderer* text_renderer = gtk_cell_renderer_text_new(); |
g_object_set(text_renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
+ g_signal_connect(text_renderer, "edited", G_CALLBACK(OnFolderNameEdited), |
+ store); |
gtk_tree_view_column_pack_start(column, text_renderer, TRUE); |
- gtk_tree_view_column_add_attribute(column, text_renderer, |
- "text", FOLDER_NAME); |
+ gtk_tree_view_column_set_attributes(column, text_renderer, |
+ "text", FOLDER_NAME, |
+ "editable", IS_EDITABLE, |
+ NULL); |
GtkWidget* tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
// Let |tree_view| own the store. |
g_object_unref(store); |
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), FALSE); |
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); |
+ g_object_set_data(G_OBJECT(tree_view), kCellRendererTextKey, text_renderer); |
return tree_view; |
} |
+GtkCellRenderer* GetCellRendererText(GtkTreeView* tree_view) { |
+ return static_cast<GtkCellRenderer*>( |
+ g_object_get_data(G_OBJECT(tree_view), kCellRendererTextKey)); |
+} |
+ |
void AddToTreeStoreAt(const BookmarkNode* node, int64 selected_id, |
GtkTreeStore* store, GtkTreeIter* selected_iter, |
GtkTreeIter* parent) { |