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

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

Issue 126163: Bookmark dragging cleanup.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 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/gtk/bookmark_manager_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) 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_manager_gtk.h" 5 #include "chrome/browser/gtk/bookmark_manager_gtk.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "chrome/browser/bookmarks/bookmark_manager.h" 10 #include "chrome/browser/bookmarks/bookmark_manager.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 BookmarkNode* node = parent->GetChild(index); 105 BookmarkNode* node = parent->GetChild(index);
106 // Update left store. 106 // Update left store.
107 if (node->is_folder()) { 107 if (node->is_folder()) {
108 GtkTreeIter iter = { 0, }; 108 GtkTreeIter iter = { 0, };
109 if (RecursiveFind(GTK_TREE_MODEL(left_store_), &iter, parent->id())) 109 if (RecursiveFind(GTK_TREE_MODEL(left_store_), &iter, parent->id()))
110 bookmark_utils::AddToTreeStoreAt(node, 0, left_store_, NULL, &iter); 110 bookmark_utils::AddToTreeStoreAt(node, 0, left_store_, NULL, &iter);
111 } 111 }
112 112
113 // Update right store. 113 // Update right store.
114 if (parent->id() == GetFolder()->id()) { 114 if (parent->id() == GetFolder()->id()) {
115 GtkTreeIter iter = { 0, }; 115 AppendNodeToRightStore(node, index);
116 if (RecursiveFind(GTK_TREE_MODEL(right_store_), &iter,
117 parent->GetChild(index - 1)->id())) {
118 AppendNodeToRightStore(node, &iter);
119 }
120 } 116 }
121 } 117 }
122 118
123 void BookmarkManagerGtk::BookmarkNodeRemoved(BookmarkModel* model, 119 void BookmarkManagerGtk::BookmarkNodeRemoved(BookmarkModel* model,
124 BookmarkNode* parent, 120 BookmarkNode* parent,
125 int index) { 121 int index) {
126 NOTREACHED(); 122 NOTREACHED();
127 } 123 }
128 124
129 void BookmarkManagerGtk::BookmarkNodeRemoved(BookmarkModel* model, 125 void BookmarkManagerGtk::BookmarkNodeRemoved(BookmarkModel* model,
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 right_tree_view_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(right_store_)); 301 right_tree_view_ = gtk_tree_view_new_with_model(GTK_TREE_MODEL(right_store_));
306 // Let |tree_view| own the store. 302 // Let |tree_view| own the store.
307 g_object_unref(right_store_); 303 g_object_unref(right_store_);
308 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), title_column); 304 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), title_column);
309 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column); 305 gtk_tree_view_append_column(GTK_TREE_VIEW(right_tree_view_), url_column);
310 g_signal_connect(right_tree_view_, "row-activated", 306 g_signal_connect(right_tree_view_, "row-activated",
311 G_CALLBACK(OnRightTreeViewRowActivated), this); 307 G_CALLBACK(OnRightTreeViewRowActivated), this);
312 g_signal_connect(right_selection(), "changed", 308 g_signal_connect(right_selection(), "changed",
313 G_CALLBACK(OnRightSelectionChanged), this); 309 G_CALLBACK(OnRightSelectionChanged), this);
314 310
315 gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(right_tree_view_), 311 // TODO(estade): support GDK_ACTION_COPY for dragging to other apps.
316 GDK_BUTTON1_MASK, 312 gtk_drag_source_set(right_tree_view_,
317 bookmark_utils::kTargetTable, 313 GDK_BUTTON1_MASK,
318 bookmark_utils::kTargetTableSize, 314 bookmark_utils::kTargetTable,
319 GDK_ACTION_MOVE); 315 bookmark_utils::kTargetTableSize,
320 gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(right_tree_view_), 316 GDK_ACTION_MOVE);
321 bookmark_utils::kTargetTable, 317 gtk_drag_dest_set(right_tree_view_, GTK_DEST_DEFAULT_ALL,
322 bookmark_utils::kTargetTableSize, 318 bookmark_utils::kTargetTable,
323 GDK_ACTION_MOVE); 319 bookmark_utils::kTargetTableSize,
320 GDK_ACTION_MOVE);
324 g_signal_connect(right_tree_view_, "drag-data-get", 321 g_signal_connect(right_tree_view_, "drag-data-get",
325 G_CALLBACK(&OnRightTreeViewDragGet), this); 322 G_CALLBACK(&OnRightTreeViewDragGet), this);
326 g_signal_connect(right_tree_view_, "drag-data-received", 323 g_signal_connect(right_tree_view_, "drag-data-received",
327 G_CALLBACK(&OnRightTreeViewDragReceived), this); 324 G_CALLBACK(&OnRightTreeViewDragReceived), this);
328 g_signal_connect(right_tree_view_, "drag-motion", 325 g_signal_connect(right_tree_view_, "drag-motion",
329 G_CALLBACK(&OnRightTreeViewDragMotion), this); 326 G_CALLBACK(&OnRightTreeViewDragMotion), this);
330 // Connect after so we can overwrite the drag icon. 327 g_signal_connect(right_tree_view_, "drag-begin",
331 g_signal_connect_after(right_tree_view_, "drag-begin", 328 G_CALLBACK(&OnRightTreeViewDragBegin), this);
332 G_CALLBACK(&OnRightTreeViewDragBegin), this);
333 329
334 GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL); 330 GtkWidget* scrolled = gtk_scrolled_window_new(NULL, NULL);
335 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled), 331 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
336 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 332 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
337 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled), 333 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled),
338 GTK_SHADOW_ETCHED_IN); 334 GTK_SHADOW_ETCHED_IN);
339 gtk_container_add(GTK_CONTAINER(scrolled), right_tree_view_); 335 gtk_container_add(GTK_CONTAINER(scrolled), right_tree_view_);
340 336
341 return scrolled; 337 return scrolled;
342 } 338 }
343 339
344 void BookmarkManagerGtk::BuildLeftStore() { 340 void BookmarkManagerGtk::BuildLeftStore() {
345 GtkTreeIter select_iter; 341 GtkTreeIter select_iter;
346 bookmark_utils::AddToTreeStore(model_, 342 bookmark_utils::AddToTreeStore(model_,
347 model_->GetBookmarkBarNode()->id(), left_store_, &select_iter); 343 model_->GetBookmarkBarNode()->id(), left_store_, &select_iter);
348 gtk_tree_selection_select_iter(left_selection(), &select_iter); 344 gtk_tree_selection_select_iter(left_selection(), &select_iter);
349 345
350 // TODO(estade): Add recently bookmarked node and search node. 346 // TODO(estade): Add recently bookmarked node and search node.
351 } 347 }
352 348
353 void BookmarkManagerGtk::BuildRightStore() { 349 void BookmarkManagerGtk::BuildRightStore() {
354 BookmarkNode* node = GetFolder(); 350 BookmarkNode* node = GetFolder();
355 // TODO(estade): eventually we may hit a fake node here (recently bookmarked 351 // TODO(estade): eventually we may hit a fake node here (recently bookmarked
356 // or search), but until then we require that node != NULL. 352 // or search), but until then we require that node != NULL.
357 DCHECK(node); 353 DCHECK(node);
358 gtk_list_store_clear(right_store_); 354 gtk_list_store_clear(right_store_);
359 GtkTreeIter iter;
360 355
361 for (int i = 0; i < node->GetChildCount(); ++i) { 356 for (int i = 0; i < node->GetChildCount(); ++i)
362 AppendNodeToRightStore(node->GetChild(i), &iter); 357 AppendNodeToRightStore(node->GetChild(i), i);
363 }
364 } 358 }
365 359
366 BookmarkNode* BookmarkManagerGtk::GetNodeAt(GtkTreeModel* model, 360 BookmarkNode* BookmarkManagerGtk::GetNodeAt(GtkTreeModel* model,
367 GtkTreeIter* iter) { 361 GtkTreeIter* iter) {
368 bool left = model == GTK_TREE_MODEL(left_store_); 362 bool left = model == GTK_TREE_MODEL(left_store_);
369 GValue value = { 0, }; 363 GValue value = { 0, };
370 if (left) 364 if (left)
371 gtk_tree_model_get_value(model, iter, bookmark_utils::ITEM_ID, &value); 365 gtk_tree_model_get_value(model, iter, bookmark_utils::ITEM_ID, &value);
372 else 366 else
373 gtk_tree_model_get_value(model, iter, RIGHT_PANE_ID, &value); 367 gtk_tree_model_get_value(model, iter, RIGHT_PANE_ID, &value);
(...skipping 20 matching lines...) Expand all
394 gtk_tree_model_get_iter(model, &iter, 388 gtk_tree_model_get_iter(model, &iter,
395 reinterpret_cast<GtkTreePath*>(item->data)); 389 reinterpret_cast<GtkTreePath*>(item->data));
396 nodes.push_back(GetNodeAt(model, &iter)); 390 nodes.push_back(GetNodeAt(model, &iter));
397 } 391 }
398 g_list_free(paths); 392 g_list_free(paths);
399 393
400 return nodes; 394 return nodes;
401 } 395 }
402 396
403 void BookmarkManagerGtk::AppendNodeToRightStore(BookmarkNode* node, 397 void BookmarkManagerGtk::AppendNodeToRightStore(BookmarkNode* node,
404 GtkTreeIter* iter) { 398 int index) {
399 GtkTreeIter iter;
400 if (index == 0) {
401 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(right_store_), &iter);
402 gtk_list_store_prepend(right_store_, &iter);
403 } else {
404 gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(right_store_), &iter, NULL,
405 index - 1);
406 gtk_list_store_append(right_store_, &iter);
407 }
408
405 GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model_); 409 GdkPixbuf* pixbuf = bookmark_utils::GetPixbufForNode(node, model_);
406 gtk_list_store_append(right_store_, iter); 410 gtk_list_store_set(right_store_, &iter,
407 gtk_list_store_set(right_store_, iter,
408 RIGHT_PANE_PIXBUF, pixbuf, 411 RIGHT_PANE_PIXBUF, pixbuf,
409 RIGHT_PANE_TITLE, WideToUTF8(node->GetTitle()).c_str(), 412 RIGHT_PANE_TITLE, WideToUTF8(node->GetTitle()).c_str(),
410 RIGHT_PANE_URL, node->GetURL().spec().c_str(), 413 RIGHT_PANE_URL, node->GetURL().spec().c_str(),
411 RIGHT_PANE_ID, node->id(), -1); 414 RIGHT_PANE_ID, node->id(), -1);
412 g_object_unref(pixbuf); 415 g_object_unref(pixbuf);
413 } 416 }
414 417
415 bool BookmarkManagerGtk::RecursiveFind(GtkTreeModel* model, GtkTreeIter* iter, 418 bool BookmarkManagerGtk::RecursiveFind(GtkTreeModel* model, GtkTreeIter* iter,
416 int target) { 419 int target) {
417 GValue value = { 0, }; 420 GValue value = { 0, };
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 return; 512 return;
510 } 513 }
511 514
512 GtkTreeIter iter; 515 GtkTreeIter iter;
513 gtk_tree_model_get_iter(GTK_TREE_MODEL(bm->left_store_), &iter, path); 516 gtk_tree_model_get_iter(GTK_TREE_MODEL(bm->left_store_), &iter, path);
514 BookmarkNode* folder = bm->GetNodeAt(GTK_TREE_MODEL(bm->left_store_), &iter); 517 BookmarkNode* folder = bm->GetNodeAt(GTK_TREE_MODEL(bm->left_store_), &iter);
515 for (std::vector<BookmarkNode*>::iterator it = nodes.begin(); 518 for (std::vector<BookmarkNode*>::iterator it = nodes.begin();
516 it != nodes.end(); ++it) { 519 it != nodes.end(); ++it) {
517 // Don't try to drop a node into one of its descendants. 520 // Don't try to drop a node into one of its descendants.
518 if (!folder->HasAncestor(*it)) 521 if (!folder->HasAncestor(*it))
519 bm->model_->Move(*it, folder, 0); 522 bm->model_->Move(*it, folder, folder->GetChildCount());
520 } 523 }
521 524
522 gtk_tree_path_free(path); 525 gtk_tree_path_free(path);
523 gtk_drag_finish(context, dnd_success, delete_selection_data, time); 526 gtk_drag_finish(context, dnd_success, delete_selection_data, time);
524 } 527 }
525 528
526 // static 529 // static
527 gboolean BookmarkManagerGtk::OnLeftTreeViewDragMotion(GtkWidget* tree_view, 530 gboolean BookmarkManagerGtk::OnLeftTreeViewDragMotion(GtkWidget* tree_view,
528 GdkDragContext* context, gint x, gint y, guint time, 531 GdkDragContext* context, gint x, gint y, guint time,
529 BookmarkManagerGtk* bm) { 532 BookmarkManagerGtk* bm) {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 std::vector<BookmarkNode*> nodes = bm->GetRightSelection(); 687 std::vector<BookmarkNode*> nodes = bm->GetRightSelection();
685 if (nodes.empty()) 688 if (nodes.empty())
686 return; 689 return;
687 if (nodes.size() == 1 && nodes[0]->is_folder()) { 690 if (nodes.size() == 1 && nodes[0]->is_folder()) {
688 // Double click on a folder descends into the folder. 691 // Double click on a folder descends into the folder.
689 bm->SelectInTree(nodes[0]); 692 bm->SelectInTree(nodes[0]);
690 return; 693 return;
691 } 694 }
692 bookmark_utils::OpenAll(bm->window_, bm->profile_, NULL, nodes, CURRENT_TAB); 695 bookmark_utils::OpenAll(bm->window_, bm->profile_, NULL, nodes, CURRENT_TAB);
693 } 696 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/bookmark_manager_gtk.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698