diff options
Diffstat (limited to 'Source/WebKit/win/WebDropSource.cpp')
| -rw-r--r-- | Source/WebKit/win/WebDropSource.cpp | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/Source/WebKit/win/WebDropSource.cpp b/Source/WebKit/win/WebDropSource.cpp deleted file mode 100644 index f4a3fb641..000000000 --- a/Source/WebKit/win/WebDropSource.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2007 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "WebDropSource.h" - -#include "WebKitDLL.h" -#include "WebView.h" - -#include <WebCore/Cursor.h> -#include <WebCore/DragActions.h> -#include <WebCore/EventHandler.h> -#include <WebCore/Frame.h> -#include <WebCore/FrameView.h> -#include <WebCore/Page.h> -#include <WebCore/PlatformMouseEvent.h> -#include <wtf/CurrentTime.h> - -#include <Windows.h> - -using namespace WebCore; - - -HRESULT WebDropSource::createInstance(WebView* webView, IDropSource** result) -{ - if (!webView || !result) - return E_INVALIDARG; - *result = new WebDropSource(webView); - return S_OK; -} - -WebDropSource::WebDropSource(WebView* webView) -: m_ref(1) -, m_dropped(false) -, m_webView(webView) -{ - gClassCount++; - gClassNameCount.add("WebDropSource"); -} - -WebDropSource::~WebDropSource() -{ - gClassCount--; - gClassNameCount.remove("WebDropSource"); -} - -STDMETHODIMP WebDropSource::QueryInterface(REFIID riid, void** ppvObject) -{ - *ppvObject = 0; - if (IsEqualIID(riid, IID_IUnknown) || - IsEqualIID(riid, IID_IDropSource)) { - *ppvObject = this; - AddRef(); - - return S_OK; - } - - return E_NOINTERFACE; -} - -STDMETHODIMP_(ULONG) WebDropSource::AddRef(void) -{ - return InterlockedIncrement(&m_ref); -} - -STDMETHODIMP_(ULONG) WebDropSource::Release(void) -{ - long c = InterlockedDecrement(&m_ref); - if (c == 0) - delete this; - return c; -} - -PlatformMouseEvent generateMouseEvent(WebView* webView, bool isDrag) -{ - POINTL pt; - ::GetCursorPos((LPPOINT)&pt); - POINTL localpt = pt; - HWND viewWindow; - if (SUCCEEDED(webView->viewWindow((OLE_HANDLE*)&viewWindow))) - ::ScreenToClient(viewWindow, (LPPOINT)&localpt); - return PlatformMouseEvent(IntPoint(localpt.x, localpt.y), IntPoint(pt.x, pt.y), - isDrag ? LeftButton : NoButton, PlatformEvent::MouseMoved, 0, false, false, false, false, currentTime()); -} - -STDMETHODIMP WebDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) -{ - if (fEscapePressed || !(grfKeyState & (MK_LBUTTON|MK_RBUTTON))) { - m_dropped = !fEscapePressed; - return fEscapePressed? DRAGDROP_S_CANCEL : DRAGDROP_S_DROP; - } - - return S_OK; -} - -STDMETHODIMP WebDropSource::GiveFeedback(DWORD dwEffect) -{ - BOOL showCustomCursors; - if (FAILED(WebPreferences::sharedStandardPreferences()->customDragCursorsEnabled(&showCustomCursors))) - return DRAGDROP_S_USEDEFAULTCURSORS; - - // If we don't want to hide the stop icon, let Windows select the cursor. - if (!showCustomCursors) - return DRAGDROP_S_USEDEFAULTCURSORS; - - // If we are going to show something other than the not allowed arrow, then let Windows - // show the cursor. - if (dwEffect != DROPEFFECT_NONE) - return DRAGDROP_S_USEDEFAULTCURSORS; - - HWND viewWindow; - if (FAILED(m_webView->viewWindow(reinterpret_cast<OLE_HANDLE*>(&viewWindow)))) - return DRAGDROP_S_USEDEFAULTCURSORS; - - RECT webViewRect; - GetWindowRect(viewWindow, &webViewRect); - - POINT cursorPoint; - GetCursorPos(&cursorPoint); - - if (!PtInRect(&webViewRect, cursorPoint)) { - // If our cursor is outside the bounds of the webView, we want to let Windows select the cursor. - return DRAGDROP_S_USEDEFAULTCURSORS; - } - - FrameView* view = m_webView->page()->mainFrame()->view(); - if (!view) - return DRAGDROP_S_USEDEFAULTCURSORS; - - // When dragging inside a WebView and the drag is not allowed, don't show the not allowed icon, - // instead, show the pointer cursor. - // FIXME <rdar://7577595>: Custom cursors aren't supported during drag and drop (default to pointer). - view->setCursor(pointerCursor()); - return S_OK; -} |
