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

Unified Diff: chrome/browser/tab_contents/web_drop_target_win.cc

Issue 1132003: Hook up HTML5 effectAllowed and dragEffect on Windows. (Closed)
Patch Set: Created 10 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/tab_contents/web_drop_target_win.cc
diff --git a/chrome/browser/tab_contents/web_drop_target_win.cc b/chrome/browser/tab_contents/web_drop_target_win.cc
index f3110d3b85d1012631704156bbc424ee0395cb9f..00f0427e26b5766734688ee573fac0ec5e7ce180 100644
--- a/chrome/browser/tab_contents/web_drop_target_win.cc
+++ b/chrome/browser/tab_contents/web_drop_target_win.cc
@@ -19,9 +19,11 @@
#include "webkit/glue/webdropdata.h"
#include "webkit/glue/window_open_disposition.h"
+using WebKit::WebDragOperationsMask;
+using WebKit::WebDragOperationNone;
using WebKit::WebDragOperationCopy;
+using WebKit::WebDragOperationLink;
using WebKit::WebDragOperationMove;
-using WebKit::WebDragOperationsMask;
namespace {
@@ -36,6 +38,27 @@ DWORD GetPreferredDropEffect(DWORD effect) {
return DROPEFFECT_NONE;
}
+DWORD GetPreferredDragCursor(WebDragOperationsMask op) {
+ if (op & WebDragOperationCopy)
+ return DROPEFFECT_COPY;
+ if (op & WebDragOperationLink)
+ return DROPEFFECT_LINK;
+ if (op & WebDragOperationMove)
+ return DROPEFFECT_MOVE;
+ return DROPEFFECT_NONE;
+}
+
+WebDragOperationsMask WinDragOpToWebDragOp(DWORD effect) {
+ WebDragOperationsMask op = WebDragOperationNone;
+ if (effect & DROPEFFECT_COPY)
+ op = static_cast<WebDragOperationsMask>(op | WebDragOperationCopy);
+ if (effect & DROPEFFECT_LINK)
+ op = static_cast<WebDragOperationsMask>(op | WebDragOperationLink);
+ if (effect & DROPEFFECT_MOVE)
+ op = static_cast<WebDragOperationsMask>(op | WebDragOperationMove);
+ return op;
+}
+
} // anonymous namespace
// InterstitialDropTarget is like a BaseDropTarget implementation that
@@ -85,7 +108,7 @@ WebDropTarget::WebDropTarget(HWND source_hwnd, TabContents* tab_contents)
: BaseDropTarget(source_hwnd),
tab_contents_(tab_contents),
current_rvh_(NULL),
- is_drop_target_(false),
+ drag_cursor_(WebDragOperationNone),
interstitial_drop_target_(new InterstitialDropTarget(tab_contents)) {
}
@@ -112,16 +135,14 @@ DWORD WebDropTarget::OnDragEnter(IDataObject* data_object,
if (drop_data.url.is_empty())
OSExchangeDataProviderWin::GetPlainTextURL(data_object, &drop_data.url);
- is_drop_target_ = true;
+ drag_cursor_ = WebDragOperationNone;
POINT client_pt = cursor_position;
ScreenToClient(GetHWND(), &client_pt);
tab_contents_->render_view_host()->DragTargetDragEnter(drop_data,
gfx::Point(client_pt.x, client_pt.y),
gfx::Point(cursor_position.x, cursor_position.y),
- static_cast<WebDragOperationsMask>(WebDragOperationCopy |
- WebDragOperationMove));
- // FIXME(snej): Send actual operation
+ WinDragOpToWebDragOp(effect));
// This is non-null if tab_contents_ is showing an ExtensionDOMUI with
// support for (at the moment experimental) drag and drop extensions.
@@ -153,9 +174,7 @@ DWORD WebDropTarget::OnDragOver(IDataObject* data_object,
tab_contents_->render_view_host()->DragTargetDragOver(
gfx::Point(client_pt.x, client_pt.y),
gfx::Point(cursor_position.x, cursor_position.y),
- static_cast<WebDragOperationsMask>(WebDragOperationCopy |
- WebDragOperationMove));
- // FIXME(snej): Send actual operation
+ WinDragOpToWebDragOp(effect));
if (tab_contents_->GetBookmarkDragDelegate()) {
OSExchangeData os_exchange_data(new OSExchangeDataProviderWin(data_object));
@@ -164,10 +183,7 @@ DWORD WebDropTarget::OnDragOver(IDataObject* data_object,
tab_contents_->GetBookmarkDragDelegate()->OnDragOver(bookmark_drag_data);
}
- if (!is_drop_target_)
- return DROPEFFECT_NONE;
-
- return GetPreferredDropEffect(effect);
+ return GetPreferredDragCursor(drag_cursor_);
}
void WebDropTarget::OnDragLeave(IDataObject* data_object) {
« no previous file with comments | « chrome/browser/tab_contents/web_drop_target_win.h ('k') | chrome/browser/views/tab_contents/tab_contents_drag_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698