2007-01-23 Oliver Hunt <oliver@apple.com>
authoroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2007 09:12:36 +0000 (09:12 +0000)
committeroliver <oliver@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2007 09:12:36 +0000 (09:12 +0000)
commit8fdaaaeb0eb5df80a216bbcdf381ea6f3727ad91
tree4b7353262e1225d58c12746a28aab4ef688d9c81
parent348849380b05c27743dd6f2938d12a53673f7fac
2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Added DragController to handled drag and drop state and control logic.
        Currently this only handles logic for Dragging and Dropping, and is
        unable to initialise a drag itself.

        platform/DragData encapsulate the paltform Drag data (NSDraggingInfo on Mac,
        QMimeType in Qt).  This provides methods to pull data out the drag data as a String,
        a URL, a DocumentFragment (for rich content), or a Colour.

        * WebCore.exp:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Clipboard.cpp: Added.
        (WebCore::Clipboard::setAccessPolicy):
        (WebCore::dragOpFromIEOp):
        (WebCore::IEOpFromDragOp):
        (WebCore::Clipboard::sourceOperation):
        (WebCore::Clipboard::destinationOperation):
        (WebCore::Clipboard::setSourceOperation):
        (WebCore::Clipboard::setDestinationOperation):
        (WebCore::Clipboard::setDropEffect):
        (WebCore::Clipboard::setEffectAllowed):
          move platform independent functions from ClipboardMac to Clipboard

        * dom/Clipboard.h:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::dropEffect):
        (WebCore::Clipboard::effectAllowed):
        (WebCore::Clipboard::policy):
          as above -- also removed virtual modifier from now
          platform independent methods

        * editing/Editor.cpp:
        (WebCore::Editor::smartInsertDeleteEnabled):
        (WebCore::Editor::shouldApplyStyle):
        * editing/Editor.h:
          adding calls through to EditorClient

        * page/DragActions.h: Added.
        (WebCore::):
          Replicates a number of NS* enums in the WebCore namespace

        * page/DragClient.h: Added.
        (WebCore::DragClient::~DragClient):
          Standard client interface for dragging UIDelegate

        * page/DragController.cpp: Added.
        (WebCore::createMouseEvent):
        (WebCore::DragController::DragController):
        (WebCore::DragController::~DragController):
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::isMoveDrag):
        (WebCore::visiblePositionForPoint):
        (WebCore::DragController::cancelDrag):
        (WebCore::documentAtPoint):
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::concludeDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::tryDHTMLDrag):
          Class to handle state and logic for dragging and dropping

        * page/DragController.h: Added.
        (WebCore::DragController::client):
        (WebCore::DragController::didInitiateDrag):
        (WebCore::DragController::isHandlingDrag):
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::document):
        (WebCore::DragController::dragInitiator):
        (WebCore::DragController::dragDestinationAction):
        (WebCore::DragController::dragSourceAction):
        (WebCore::DragController::dragEnded):
        (WebCore::DragController::setIsHandlingDrag):
        (WebCore::DragController::setDidInitiateDrag):
        (WebCore::DragController::setDragOperation):
        (WebCore::DragController::setDragSourceAction):
        (WebCore::DragController::setDragInitiator):
          See above

        * page/Page.cpp:
        (WebCore::Page::Page):
          Update Page to have DragController

        * page/Page.h:
        (WebCore::Page::dragController):
          ditto

        * page/mac/DragControllerMac.mm: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
          Platform specific portions of the DragController

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::dragSourceEndedAt):
          Convert from NSDragOperation to WebCore::DragOperation

        * page/mac/WebCoreFrameBridge.h:
        * page/mac/WebCoreFrameBridge.mm:
          Remove obsolete Drag functions

        * page/qt/DragControllerQt.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
          Basic stubs to maintain Qt  build

        * platform/DragData.cpp: Added.
        (WebCore::DragData::DragData):
        * platform/DragData.h: Added.
        (WebCore::DragData::clientPosition):
        (WebCore::DragData::globalPosition):
        (WebCore::DragData::platformData):
        (WebCore::DragData::draggingSourceOperationMask):
          DragData class to encapsulate platform drag data/event

        * platform/graphics/svg/SVGImage.cpp:
        (WebCore::SVGImage::setData):
          Addition of dummy DragClient

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyDragClient::~SVGEmptyDragClient):
        (WebCore::SVGEmptyDragClient::willPerformDragDestinationAction):
        (WebCore::SVGEmptyDragClient::actionMaskForDrag):
        (WebCore::SVGEmptyDragClient::dragControllerDestroyed):
          ditto

        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac):
        (WebCore::ClipboardMac::clearData):
        (WebCore::ClipboardMac::clearAllData):
        (WebCore::ClipboardMac::getData):
        (WebCore::ClipboardMac::setData):
        (WebCore::ClipboardMac::types):
        (WebCore::ClipboardMac::setDragImage):
         Moving platform independent logic to Clipboard, and updating
         platform specific methods to use appropriate accessors rather than
         directly manipulating data they no longer own

        * platform/mac/DragDataMac.mm: Added.
        (WebCore::DragData::DragData):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::imageExistsAtPaths):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
          Mac implementations of DragData methods.  A number of these use
          a Helper class that accesses WebKit functionality.  That functionality
          should be migrated to WebCore in the future.

        * platform/mac/PasteboardHelper.h: Added.
        (WebCore::PasteboardHelper::~PasteboardHelper):
          Temporary, and Mac only, helper class to access WebKit functionality
          from WebCore

        * platform/qt/DragDataQt.cpp: Added.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
         Basic stubs to maintain Qt build

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
         Correct HitTestResult copy contructor to copy localPoint

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@19039 268f45cc-cd09-0410-ab3c-d52691b4dbfc
29 files changed:
WebCore/ChangeLog
WebCore/WebCore.exp
WebCore/WebCore.pro
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/dom/Clipboard.cpp [new file with mode: 0755]
WebCore/dom/Clipboard.h
WebCore/editing/Editor.cpp
WebCore/editing/Editor.h
WebCore/page/DragActions.h [new file with mode: 0644]
WebCore/page/DragClient.h [new file with mode: 0644]
WebCore/page/DragController.cpp [new file with mode: 0644]
WebCore/page/DragController.h [new file with mode: 0644]
WebCore/page/Page.cpp
WebCore/page/Page.h
WebCore/page/mac/DragControllerMac.mm [new file with mode: 0644]
WebCore/page/mac/EventHandlerMac.mm
WebCore/page/mac/WebCoreFrameBridge.h
WebCore/page/mac/WebCoreFrameBridge.mm
WebCore/page/qt/DragControllerQt.cpp [new file with mode: 0644]
WebCore/platform/DragData.cpp [new file with mode: 0644]
WebCore/platform/DragData.h [new file with mode: 0644]
WebCore/platform/graphics/svg/SVGImage.cpp
WebCore/platform/graphics/svg/SVGImageEmptyClients.h
WebCore/platform/mac/ClipboardMac.h
WebCore/platform/mac/ClipboardMac.mm
WebCore/platform/mac/DragDataMac.mm [new file with mode: 0644]
WebCore/platform/mac/PasteboardHelper.h [new file with mode: 0644]
WebCore/platform/qt/DragDataQt.cpp [new file with mode: 0644]
WebCore/rendering/HitTestResult.cpp