| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/bookmarks/bookmark_utils.h" | 5 #include "chrome/browser/bookmarks/bookmark_utils.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "app/drag_drop_types.h" | |
| 10 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
| 11 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 12 #include "base/file_path.h" | 11 #include "base/file_path.h" |
| 13 #include "base/string_number_conversions.h" | 12 #include "base/string_number_conversions.h" |
| 14 #include "base/string16.h" | 13 #include "base/string16.h" |
| 15 #include "base/time.h" | 14 #include "base/time.h" |
| 16 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 17 #include "chrome/browser/bookmarks/bookmark_node_data.h" | 16 #include "chrome/browser/bookmarks/bookmark_node_data.h" |
| 18 #include "chrome/browser/bookmarks/bookmark_model.h" | 17 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 19 #if defined(OS_MACOSX) | 18 #if defined(OS_MACOSX) |
| 20 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h" | 19 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h" |
| 21 #endif | 20 #endif |
| 22 #include "chrome/browser/browser_list.h" | 21 #include "chrome/browser/browser_list.h" |
| 23 #include "chrome/browser/browser_window.h" | 22 #include "chrome/browser/browser_window.h" |
| 24 #include "chrome/browser/history/query_parser.h" | 23 #include "chrome/browser/history/query_parser.h" |
| 25 #include "chrome/browser/platform_util.h" | 24 #include "chrome/browser/platform_util.h" |
| 26 #include "chrome/browser/prefs/pref_service.h" | 25 #include "chrome/browser/prefs/pref_service.h" |
| 27 #include "chrome/browser/profiles/profile.h" | 26 #include "chrome/browser/profiles/profile.h" |
| 28 #include "chrome/browser/tab_contents/page_navigator.h" | 27 #include "chrome/browser/tab_contents/page_navigator.h" |
| 29 #include "chrome/browser/tab_contents/tab_contents.h" | 28 #include "chrome/browser/tab_contents/tab_contents.h" |
| 30 #include "chrome/browser/ui/browser.h" | 29 #include "chrome/browser/ui/browser.h" |
| 31 #include "chrome/common/notification_service.h" | 30 #include "chrome/common/notification_service.h" |
| 32 #include "chrome/common/pref_names.h" | 31 #include "chrome/common/pref_names.h" |
| 33 #include "grit/app_strings.h" | 32 #include "grit/app_strings.h" |
| 34 #include "grit/chromium_strings.h" | 33 #include "grit/chromium_strings.h" |
| 35 #include "grit/generated_resources.h" | 34 #include "grit/generated_resources.h" |
| 36 #include "net/base/net_util.h" | 35 #include "net/base/net_util.h" |
| 36 #include "ui/base/dragdrop/drag_drop_types.h" |
| 37 #include "ui/base/models/tree_node_iterator.h" |
| 37 #include "views/event.h" | 38 #include "views/event.h" |
| 38 #include "ui/base/models/tree_node_iterator.h" | |
| 39 | 39 |
| 40 #if defined(TOOLKIT_VIEWS) | 40 #if defined(TOOLKIT_VIEWS) |
| 41 #include "ui/base/dragdrop/os_exchange_data.h" | 41 #include "ui/base/dragdrop/os_exchange_data.h" |
| 42 #include "views/drag_utils.h" | 42 #include "views/drag_utils.h" |
| 43 #include "views/widget/root_view.h" | 43 #include "views/widget/root_view.h" |
| 44 #include "views/widget/widget.h" | 44 #include "views/widget/widget.h" |
| 45 #elif defined(TOOLKIT_GTK) | 45 #elif defined(TOOLKIT_GTK) |
| 46 #include "chrome/browser/gtk/custom_drag.h" | 46 #include "chrome/browser/gtk/custom_drag.h" |
| 47 #endif | 47 #endif |
| 48 | 48 |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 } // namespace | 203 } // namespace |
| 204 | 204 |
| 205 namespace bookmark_utils { | 205 namespace bookmark_utils { |
| 206 | 206 |
| 207 int num_urls_before_prompting = 15; | 207 int num_urls_before_prompting = 15; |
| 208 | 208 |
| 209 int PreferredDropOperation(int source_operations, int operations) { | 209 int PreferredDropOperation(int source_operations, int operations) { |
| 210 int common_ops = (source_operations & operations); | 210 int common_ops = (source_operations & operations); |
| 211 if (!common_ops) | 211 if (!common_ops) |
| 212 return 0; | 212 return 0; |
| 213 if (DragDropTypes::DRAG_COPY & common_ops) | 213 if (ui::DragDropTypes::DRAG_COPY & common_ops) |
| 214 return DragDropTypes::DRAG_COPY; | 214 return ui::DragDropTypes::DRAG_COPY; |
| 215 if (DragDropTypes::DRAG_LINK & common_ops) | 215 if (ui::DragDropTypes::DRAG_LINK & common_ops) |
| 216 return DragDropTypes::DRAG_LINK; | 216 return ui::DragDropTypes::DRAG_LINK; |
| 217 if (DragDropTypes::DRAG_MOVE & common_ops) | 217 if (ui::DragDropTypes::DRAG_MOVE & common_ops) |
| 218 return DragDropTypes::DRAG_MOVE; | 218 return ui::DragDropTypes::DRAG_MOVE; |
| 219 return DragDropTypes::DRAG_NONE; | 219 return ui::DragDropTypes::DRAG_NONE; |
| 220 } | 220 } |
| 221 | 221 |
| 222 int BookmarkDragOperation(const BookmarkNode* node) { | 222 int BookmarkDragOperation(const BookmarkNode* node) { |
| 223 if (node->is_url()) { | 223 if (node->is_url()) { |
| 224 return DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_MOVE | | 224 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_MOVE | |
| 225 DragDropTypes::DRAG_LINK; | 225 ui::DragDropTypes::DRAG_LINK; |
| 226 } | 226 } |
| 227 return DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_MOVE; | 227 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_MOVE; |
| 228 } | 228 } |
| 229 | 229 |
| 230 int BookmarkDropOperation(Profile* profile, | 230 int BookmarkDropOperation(Profile* profile, |
| 231 const views::DropTargetEvent& event, | 231 const views::DropTargetEvent& event, |
| 232 const BookmarkNodeData& data, | 232 const BookmarkNodeData& data, |
| 233 const BookmarkNode* parent, | 233 const BookmarkNode* parent, |
| 234 int index) { | 234 int index) { |
| 235 if (data.IsFromProfile(profile) && data.size() > 1) | 235 if (data.IsFromProfile(profile) && data.size() > 1) |
| 236 // Currently only accept one dragged node at a time. | 236 // Currently only accept one dragged node at a time. |
| 237 return DragDropTypes::DRAG_NONE; | 237 return ui::DragDropTypes::DRAG_NONE; |
| 238 | 238 |
| 239 if (!bookmark_utils::IsValidDropLocation(profile, data, parent, index)) | 239 if (!bookmark_utils::IsValidDropLocation(profile, data, parent, index)) |
| 240 return DragDropTypes::DRAG_NONE; | 240 return ui::DragDropTypes::DRAG_NONE; |
| 241 | 241 |
| 242 if (data.GetFirstNode(profile)) { | 242 if (data.GetFirstNode(profile)) { |
| 243 // User is dragging from this profile: move. | 243 // User is dragging from this profile: move. |
| 244 return DragDropTypes::DRAG_MOVE; | 244 return ui::DragDropTypes::DRAG_MOVE; |
| 245 } | 245 } |
| 246 // User is dragging from another app, copy. | 246 // User is dragging from another app, copy. |
| 247 return PreferredDropOperation(event.GetSourceOperations(), | 247 return PreferredDropOperation(event.GetSourceOperations(), |
| 248 DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_LINK); | 248 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK); |
| 249 } | 249 } |
| 250 | 250 |
| 251 int PerformBookmarkDrop(Profile* profile, | 251 int PerformBookmarkDrop(Profile* profile, |
| 252 const BookmarkNodeData& data, | 252 const BookmarkNodeData& data, |
| 253 const BookmarkNode* parent_node, | 253 const BookmarkNode* parent_node, |
| 254 int index) { | 254 int index) { |
| 255 BookmarkModel* model = profile->GetBookmarkModel(); | 255 BookmarkModel* model = profile->GetBookmarkModel(); |
| 256 if (data.IsFromProfile(profile)) { | 256 if (data.IsFromProfile(profile)) { |
| 257 const std::vector<const BookmarkNode*> dragged_nodes = | 257 const std::vector<const BookmarkNode*> dragged_nodes = |
| 258 data.GetNodes(profile); | 258 data.GetNodes(profile); |
| 259 if (!dragged_nodes.empty()) { | 259 if (!dragged_nodes.empty()) { |
| 260 // Drag from same profile. Move nodes. | 260 // Drag from same profile. Move nodes. |
| 261 for (size_t i = 0; i < dragged_nodes.size(); ++i) { | 261 for (size_t i = 0; i < dragged_nodes.size(); ++i) { |
| 262 model->Move(dragged_nodes[i], parent_node, index); | 262 model->Move(dragged_nodes[i], parent_node, index); |
| 263 index = parent_node->IndexOfChild(dragged_nodes[i]) + 1; | 263 index = parent_node->IndexOfChild(dragged_nodes[i]) + 1; |
| 264 } | 264 } |
| 265 return DragDropTypes::DRAG_MOVE; | 265 return ui::DragDropTypes::DRAG_MOVE; |
| 266 } | 266 } |
| 267 return DragDropTypes::DRAG_NONE; | 267 return ui::DragDropTypes::DRAG_NONE; |
| 268 } | 268 } |
| 269 // Dropping a group from different profile. Always accept. | 269 // Dropping a group from different profile. Always accept. |
| 270 bookmark_utils::CloneBookmarkNode(model, data.elements, parent_node, index); | 270 bookmark_utils::CloneBookmarkNode(model, data.elements, parent_node, index); |
| 271 return DragDropTypes::DRAG_COPY; | 271 return ui::DragDropTypes::DRAG_COPY; |
| 272 } | 272 } |
| 273 | 273 |
| 274 bool IsValidDropLocation(Profile* profile, | 274 bool IsValidDropLocation(Profile* profile, |
| 275 const BookmarkNodeData& data, | 275 const BookmarkNodeData& data, |
| 276 const BookmarkNode* drop_parent, | 276 const BookmarkNode* drop_parent, |
| 277 int index) { | 277 int index) { |
| 278 if (!drop_parent->is_folder()) { | 278 if (!drop_parent->is_folder()) { |
| 279 NOTREACHED(); | 279 NOTREACHED(); |
| 280 return false; | 280 return false; |
| 281 } | 281 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 drag_data.Write(profile, &data); | 330 drag_data.Write(profile, &data); |
| 331 | 331 |
| 332 views::RootView* root_view = | 332 views::RootView* root_view = |
| 333 views::Widget::GetWidgetFromNativeView(view)->GetRootView(); | 333 views::Widget::GetWidgetFromNativeView(view)->GetRootView(); |
| 334 | 334 |
| 335 // Allow nested message loop so we get DnD events as we drag this around. | 335 // Allow nested message loop so we get DnD events as we drag this around. |
| 336 bool was_nested = MessageLoop::current()->IsNested(); | 336 bool was_nested = MessageLoop::current()->IsNested(); |
| 337 MessageLoop::current()->SetNestableTasksAllowed(true); | 337 MessageLoop::current()->SetNestableTasksAllowed(true); |
| 338 | 338 |
| 339 root_view->StartDragForViewFromMouseEvent(NULL, data, | 339 root_view->StartDragForViewFromMouseEvent(NULL, data, |
| 340 DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_MOVE | | 340 ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_MOVE | |
| 341 DragDropTypes::DRAG_LINK); | 341 ui::DragDropTypes::DRAG_LINK); |
| 342 | 342 |
| 343 MessageLoop::current()->SetNestableTasksAllowed(was_nested); | 343 MessageLoop::current()->SetNestableTasksAllowed(was_nested); |
| 344 #elif defined(OS_MACOSX) | 344 #elif defined(OS_MACOSX) |
| 345 // Allow nested message loop so we get DnD events as we drag this around. | 345 // Allow nested message loop so we get DnD events as we drag this around. |
| 346 bool was_nested = MessageLoop::current()->IsNested(); | 346 bool was_nested = MessageLoop::current()->IsNested(); |
| 347 MessageLoop::current()->SetNestableTasksAllowed(true); | 347 MessageLoop::current()->SetNestableTasksAllowed(true); |
| 348 bookmark_pasteboard_helper_mac::StartDrag(profile, nodes, view); | 348 bookmark_pasteboard_helper_mac::StartDrag(profile, nodes, view); |
| 349 MessageLoop::current()->SetNestableTasksAllowed(was_nested); | 349 MessageLoop::current()->SetNestableTasksAllowed(was_nested); |
| 350 #elif defined(TOOLKIT_GTK) | 350 #elif defined(TOOLKIT_GTK) |
| 351 BookmarkDrag::BeginDrag(profile, nodes); | 351 BookmarkDrag::BeginDrag(profile, nodes); |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 return true; | 662 return true; |
| 663 | 663 |
| 664 for (int i = 0; i < node->GetChildCount(); ++i) { | 664 for (int i = 0; i < node->GetChildCount(); ++i) { |
| 665 if (NodeHasURLs(node->GetChild(i))) | 665 if (NodeHasURLs(node->GetChild(i))) |
| 666 return true; | 666 return true; |
| 667 } | 667 } |
| 668 return false; | 668 return false; |
| 669 } | 669 } |
| 670 | 670 |
| 671 } // namespace bookmark_utils | 671 } // namespace bookmark_utils |
| OLD | NEW |