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

Side by Side Diff: ui/views/widget/desktop_aura/desktop_drop_target_win.cc

Issue 878413003: Support buttons attribute for drag event (chromium side). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/widget/desktop_aura/desktop_drop_target_win.h" 5 #include "ui/views/widget/desktop_aura/desktop_drop_target_win.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/win/win_util.h" 8 #include "base/win/win_util.h"
9 #include "ui/aura/window.h" 9 #include "ui/aura/window.h"
10 #include "ui/aura/window_tree_host.h" 10 #include "ui/aura/window_tree_host.h"
11 #include "ui/base/dragdrop/drag_drop_types.h" 11 #include "ui/base/dragdrop/drag_drop_types.h"
12 #include "ui/base/dragdrop/drop_target_event.h" 12 #include "ui/base/dragdrop/drop_target_event.h"
13 #include "ui/base/dragdrop/os_exchange_data_provider_win.h" 13 #include "ui/base/dragdrop/os_exchange_data_provider_win.h"
14 #include "ui/events/event_constants.h" 14 #include "ui/events/event_constants.h"
15 #include "ui/wm/public/drag_drop_client.h" 15 #include "ui/wm/public/drag_drop_client.h"
16 #include "ui/wm/public/drag_drop_delegate.h" 16 #include "ui/wm/public/drag_drop_delegate.h"
17 17
18 using aura::client::DragDropClient; 18 using aura::client::DragDropClient;
19 using aura::client::DragDropDelegate; 19 using aura::client::DragDropDelegate;
20 using ui::OSExchangeData; 20 using ui::OSExchangeData;
21 using ui::OSExchangeDataProviderWin; 21 using ui::OSExchangeDataProviderWin;
22 22
23 namespace {
24
25 int ConvertKeyStateToAuraEventFlags(DWORD key_state)
26 {
27 int flags = 0;
28
29 if (key_state & MK_CONTROL)
30 flags |= ui::EF_CONTROL_DOWN;
31 if (key_state & MK_ALT)
32 flags |= ui::EF_ALT_DOWN;
33 if (key_state & MK_SHIFT)
34 flags |= ui::EF_SHIFT_DOWN;
35 if (key_state & MK_LBUTTON)
36 flags |= ui::EF_LEFT_MOUSE_BUTTON;
37 if (key_state & MK_MBUTTON)
38 flags |= ui::EF_MIDDLE_MOUSE_BUTTON;
39 if (key_state & MK_RBUTTON)
40 flags |= ui::EF_RIGHT_MOUSE_BUTTON;
41
42 return flags;
43 }
44
45 } // namespace
Avi (use Gerrit) 2015/03/11 02:08:15 ditto
46
23 namespace views { 47 namespace views {
24 48
25 DesktopDropTargetWin::DesktopDropTargetWin(aura::Window* root_window, 49 DesktopDropTargetWin::DesktopDropTargetWin(aura::Window* root_window,
26 HWND window) 50 HWND window)
27 : ui::DropTargetWin(window), 51 : ui::DropTargetWin(window),
28 root_window_(root_window), 52 root_window_(root_window),
29 target_window_(NULL) { 53 target_window_(NULL) {
30 } 54 }
31 55
32 DesktopDropTargetWin::~DesktopDropTargetWin() { 56 DesktopDropTargetWin::~DesktopDropTargetWin() {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 return; 149 return;
126 150
127 data->reset(new OSExchangeData(new OSExchangeDataProviderWin(data_object))); 151 data->reset(new OSExchangeData(new OSExchangeDataProviderWin(data_object)));
128 location = root_location; 152 location = root_location;
129 aura::Window::ConvertPointToTarget(root_window_, target_window_, &location); 153 aura::Window::ConvertPointToTarget(root_window_, target_window_, &location);
130 event->reset(new ui::DropTargetEvent( 154 event->reset(new ui::DropTargetEvent(
131 *(data->get()), 155 *(data->get()),
132 location, 156 location,
133 root_location, 157 root_location,
134 ui::DragDropTypes::DropEffectToDragOperation(effect))); 158 ui::DragDropTypes::DropEffectToDragOperation(effect)));
135 int flags = 0; 159 (*event)->set_flags(ConvertKeyStateToAuraEventFlags(key_state));
136 flags |= base::win::IsAltPressed() ? ui::EF_ALT_DOWN : ui::EF_NONE;
137 flags |= base::win::IsShiftPressed() ? ui::EF_SHIFT_DOWN : ui::EF_NONE;
138 flags |= base::win::IsCtrlPressed() ? ui::EF_CONTROL_DOWN : ui::EF_NONE;
139 (*event)->set_flags(flags);
140 if (target_window_changed) 160 if (target_window_changed)
141 (*delegate)->OnDragEntered(*event->get()); 161 (*delegate)->OnDragEntered(*event->get());
142 } 162 }
143 163
144 void DesktopDropTargetWin::NotifyDragLeave() { 164 void DesktopDropTargetWin::NotifyDragLeave() {
145 if (!target_window_) 165 if (!target_window_)
146 return; 166 return;
147 DragDropDelegate* delegate = 167 DragDropDelegate* delegate =
148 aura::client::GetDragDropDelegate(target_window_); 168 aura::client::GetDragDropDelegate(target_window_);
149 if (delegate) 169 if (delegate)
150 delegate->OnDragExited(); 170 delegate->OnDragExited();
151 target_window_->RemoveObserver(this); 171 target_window_->RemoveObserver(this);
152 target_window_ = NULL; 172 target_window_ = NULL;
153 } 173 }
154 174
155 } // namespace views 175 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698