diff options
author | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-26 01:27:55 +0000 |
---|---|---|
committer | tc@google.com <tc@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-26 01:27:55 +0000 |
commit | 58377e2edb08dabeeba8a01bfb4484eb61527b4a (patch) | |
tree | 25fe434821c4537d799a316c91a995394ec00efb /base | |
parent | 24c289f856db14a85e5840ad0132512ef59c5c5f (diff) | |
download | chromium_src-58377e2edb08dabeeba8a01bfb4484eb61527b4a.zip chromium_src-58377e2edb08dabeeba8a01bfb4484eb61527b4a.tar.gz chromium_src-58377e2edb08dabeeba8a01bfb4484eb61527b4a.tar.bz2 |
Add an identity (id) to system drag & drop.
Used for gears file drag & drop in chrome, assign a drag id (identity) to
each drag and drop session.
Send the identity to the renderer WebViewImpl in drag enter notifications,
provide a getter method.
BUG=7995
Original patch by noel.gordon@gmail.com in:
http://codereview.chromium.org/28108/show
Review URL: http://codereview.chromium.org/28158
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10430 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/base_drop_target.cc | 6 | ||||
-rw-r--r-- | base/base_drop_target.h | 11 |
2 files changed, 17 insertions, 0 deletions
diff --git a/base/base_drop_target.cc b/base/base_drop_target.cc index 9809255..1dda396 100644 --- a/base/base_drop_target.cc +++ b/base/base_drop_target.cc @@ -11,6 +11,7 @@ /////////////////////////////////////////////////////////////////////////////// IDropTargetHelper* BaseDropTarget::cached_drop_target_helper_ = NULL; +int32 BaseDropTarget::drag_identity_ = 0; BaseDropTarget::BaseDropTarget(HWND hwnd) : hwnd_(hwnd), @@ -53,6 +54,11 @@ HRESULT BaseDropTarget::DragEnter(IDataObject* data_object, *effect = DROPEFFECT_NONE; return S_OK; } + + // Update the drag identity, skipping 0. + if (++drag_identity_ == 0) + ++drag_identity_; + current_data_object_ = data_object; POINT screen_pt = { cursor_position.x, cursor_position.y }; *effect = OnDragEnter(current_data_object_, key_state, screen_pt, *effect); diff --git a/base/base_drop_target.h b/base/base_drop_target.h index 9f20752..cf63be28 100644 --- a/base/base_drop_target.h +++ b/base/base_drop_target.h @@ -85,6 +85,9 @@ class BaseDropTarget : public IDropTarget { POINT cursor_position, DWORD effect); + // Return the drag identity. + static int32 GetDragIdentity() { return drag_identity_; } + private: // Returns the cached drop helper, creating one if necessary. The returned // object is not addrefed. May return NULL if the object couldn't be created. @@ -103,6 +106,14 @@ class BaseDropTarget : public IDropTarget { // first time it is actually used. static IDropTargetHelper* cached_drop_target_helper_; + // The drag identity (id). An up-counter that increases when the cursor first + // moves over the HWND in a DnD session (OnDragEnter). 0 is reserved to mean + // the "no/unknown" identity, and is used for initialization. The identity is + // sent to the renderer in drag enter notifications. Note: the identity value + // is passed over the renderer NPAPI interface to gears, so use int32 instead + // of int here. + static int32 drag_identity_; + // The HWND of the source. This HWND is used to determine coordinates for // mouse events that are sent to the renderer notifying various drag states. HWND hwnd_; |