OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2009, 2010 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Google Inc. | 3 * Copyright (C) 2008 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 | 488 |
489 // For range to be null a WebKit client must have done something bad while | 489 // For range to be null a WebKit client must have done something bad while |
490 // manually controlling drag behaviour | 490 // manually controlling drag behaviour |
491 if (!range) | 491 if (!range) |
492 return false; | 492 return false; |
493 ResourceFetcher* fetcher = range->ownerDocument().fetcher(); | 493 ResourceFetcher* fetcher = range->ownerDocument().fetcher(); |
494 ResourceCacheValidationSuppressor validationSuppressor(fetcher); | 494 ResourceCacheValidationSuppressor validationSuppressor(fetcher); |
495 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { | 495 if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRich
lyEditable()) { |
496 bool chosePlainText = false; | 496 bool chosePlainText = false; |
497 RefPtr<DocumentFragment> fragment = documentFragmentFromDragData(dragDat
a, innerFrame.get(), range, true, chosePlainText); | 497 RefPtr<DocumentFragment> fragment = documentFragmentFromDragData(dragDat
a, innerFrame.get(), range, true, chosePlainText); |
498 if (!fragment || !innerFrame->editor().shouldInsertFragment(fragment, ra
nge, EditorInsertActionDropped)) { | 498 if (!fragment) |
499 return false; | 499 return false; |
500 } | |
501 | 500 |
502 if (dragIsMove(innerFrame->selection(), dragData)) { | 501 if (dragIsMove(innerFrame->selection(), dragData)) { |
503 // NSTextView behavior is to always smart delete on moving a selecti
on, | 502 // NSTextView behavior is to always smart delete on moving a selecti
on, |
504 // but only to smart insert if the selection granularity is word gra
nularity. | 503 // but only to smart insert if the selection granularity is word gra
nularity. |
505 bool smartDelete = innerFrame->editor().smartInsertDeleteEnabled(); | 504 bool smartDelete = innerFrame->editor().smartInsertDeleteEnabled(); |
506 bool smartInsert = smartDelete && innerFrame->selection().granularit
y() == WordGranularity && dragData->canSmartReplace(); | 505 bool smartInsert = smartDelete && innerFrame->selection().granularit
y() == WordGranularity && dragData->canSmartReplace(); |
507 MoveSelectionCommand::create(fragment, dragCaret.base(), smartInsert
, smartDelete)->apply(); | 506 MoveSelectionCommand::create(fragment, dragCaret.base(), smartInsert
, smartDelete)->apply(); |
508 } else { | 507 } else { |
509 if (setSelectionToDragCaret(innerFrame.get(), dragCaret, range, poin
t)) { | 508 if (setSelectionToDragCaret(innerFrame.get(), dragCaret, range, poin
t)) { |
510 ReplaceSelectionCommand::CommandOptions options = ReplaceSelecti
onCommand::SelectReplacement | ReplaceSelectionCommand::PreventNesting; | 509 ReplaceSelectionCommand::CommandOptions options = ReplaceSelecti
onCommand::SelectReplacement | ReplaceSelectionCommand::PreventNesting; |
511 if (dragData->canSmartReplace()) | 510 if (dragData->canSmartReplace()) |
512 options |= ReplaceSelectionCommand::SmartReplace; | 511 options |= ReplaceSelectionCommand::SmartReplace; |
513 if (chosePlainText) | 512 if (chosePlainText) |
514 options |= ReplaceSelectionCommand::MatchStyle; | 513 options |= ReplaceSelectionCommand::MatchStyle; |
515 ASSERT(m_documentUnderMouse); | 514 ASSERT(m_documentUnderMouse); |
516 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), fra
gment, options)->apply(); | 515 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), fra
gment, options)->apply(); |
517 } | 516 } |
518 } | 517 } |
519 } else { | 518 } else { |
520 String text = dragData->asPlainText(innerFrame.get()); | 519 String text = dragData->asPlainText(innerFrame.get()); |
521 if (text.isEmpty() || !innerFrame->editor().shouldInsertText(text, range
.get(), EditorInsertActionDropped)) { | 520 if (text.isEmpty()) |
522 return false; | 521 return false; |
523 } | |
524 | 522 |
525 if (setSelectionToDragCaret(innerFrame.get(), dragCaret, range, point))
{ | 523 if (setSelectionToDragCaret(innerFrame.get(), dragCaret, range, point))
{ |
526 ASSERT(m_documentUnderMouse); | 524 ASSERT(m_documentUnderMouse); |
527 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), createF
ragmentFromText(range.get(), text), ReplaceSelectionCommand::SelectReplacement
| ReplaceSelectionCommand::MatchStyle | ReplaceSelectionCommand::PreventNesting)
->apply(); | 525 ReplaceSelectionCommand::create(*m_documentUnderMouse.get(), createF
ragmentFromText(range.get(), text), ReplaceSelectionCommand::SelectReplacement
| ReplaceSelectionCommand::MatchStyle | ReplaceSelectionCommand::PreventNesting)
->apply(); |
528 } | 526 } |
529 } | 527 } |
530 | 528 |
531 if (rootEditableElement) { | 529 if (rootEditableElement) { |
532 if (Frame* frame = rootEditableElement->document().frame()) | 530 if (Frame* frame = rootEditableElement->document().frame()) |
533 frame->eventHandler()->updateDragStateAfterEditDragIfNeeded(rootEdit
ableElement.get()); | 531 frame->eventHandler()->updateDragStateAfterEditDragIfNeeded(rootEdit
ableElement.get()); |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 return false; | 926 return false; |
929 #endif | 927 #endif |
930 } | 928 } |
931 | 929 |
932 void DragController::cleanupAfterSystemDrag() | 930 void DragController::cleanupAfterSystemDrag() |
933 { | 931 { |
934 } | 932 } |
935 | 933 |
936 } // namespace WebCore | 934 } // namespace WebCore |
937 | 935 |
OLD | NEW |