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

Side by Side Diff: ui/views/controls/textfield/native_textfield_views.cc

Issue 11416327: Omnibox should accept and navigate URLs dropped using drag and drop. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: patch Created 8 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/controls/textfield/native_textfield_views.h" 5 #include "ui/views/controls/textfield/native_textfield_views.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 return false; 186 return false;
187 } 187 }
188 188
189 bool NativeTextfieldViews::GetDropFormats( 189 bool NativeTextfieldViews::GetDropFormats(
190 int* formats, 190 int* formats,
191 std::set<OSExchangeData::CustomFormat>* custom_formats) { 191 std::set<OSExchangeData::CustomFormat>* custom_formats) {
192 if (!textfield_->enabled() || textfield_->read_only()) 192 if (!textfield_->enabled() || textfield_->read_only())
193 return false; 193 return false;
194 // TODO(msw): Can we support URL, FILENAME, etc.? 194 // TODO(msw): Can we support URL, FILENAME, etc.?
195 *formats = ui::OSExchangeData::STRING; 195 *formats = ui::OSExchangeData::STRING;
196 TextfieldController* controller = textfield_->GetController();
197 if (controller)
198 controller->AppendDropFormats(formats, custom_formats);
196 return true; 199 return true;
197 } 200 }
198 201
199 bool NativeTextfieldViews::CanDrop(const OSExchangeData& data) { 202 bool NativeTextfieldViews::CanDrop(const OSExchangeData& data) {
200 return textfield_->enabled() && !textfield_->read_only() && data.HasString(); 203 int formats;
204 std::set<OSExchangeData::CustomFormat> custom_formats;
205 GetDropFormats(&formats, &custom_formats);
206 return textfield_->enabled() && !textfield_->read_only() &&
207 data.HasAnyFormat(formats, custom_formats);
201 } 208 }
202 209
203 int NativeTextfieldViews::OnDragUpdated(const ui::DropTargetEvent& event) { 210 int NativeTextfieldViews::OnDragUpdated(const ui::DropTargetEvent& event) {
204 DCHECK(CanDrop(event.data())); 211 DCHECK(CanDrop(event.data()));
205 bool in_selection = GetRenderText()->IsPointInSelection(event.location()); 212 bool in_selection = GetRenderText()->IsPointInSelection(event.location());
206 is_drop_cursor_visible_ = !in_selection; 213 is_drop_cursor_visible_ = !in_selection;
207 // TODO(msw): Pan over text when the user drags to the visible text edge. 214 // TODO(msw): Pan over text when the user drags to the visible text edge.
208 OnCaretBoundsChanged(); 215 OnCaretBoundsChanged();
209 SchedulePaint(); 216 SchedulePaint();
210 217
211 if (initiating_drag_) { 218 if (initiating_drag_) {
212 if (in_selection) 219 if (in_selection)
213 return ui::DragDropTypes::DRAG_NONE; 220 return ui::DragDropTypes::DRAG_NONE;
214 return event.IsControlDown() ? ui::DragDropTypes::DRAG_COPY : 221 return event.IsControlDown() ? ui::DragDropTypes::DRAG_COPY :
215 ui::DragDropTypes::DRAG_MOVE; 222 ui::DragDropTypes::DRAG_MOVE;
216 } 223 }
217 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_MOVE; 224 return ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_MOVE;
218 } 225 }
219 226
220 int NativeTextfieldViews::OnPerformDrop(const ui::DropTargetEvent& event) { 227 int NativeTextfieldViews::OnPerformDrop(const ui::DropTargetEvent& event) {
221 DCHECK(CanDrop(event.data())); 228 DCHECK(CanDrop(event.data()));
229
230 TextfieldController* controller = textfield_->GetController();
231 if (controller) {
232 int drag_operation = controller->OnDrop(event.data());
233 if (drag_operation != ui::DragDropTypes::DRAG_NONE)
234 return drag_operation;
235 }
236
222 DCHECK(!initiating_drag_ || 237 DCHECK(!initiating_drag_ ||
223 !GetRenderText()->IsPointInSelection(event.location())); 238 !GetRenderText()->IsPointInSelection(event.location()));
224 OnBeforeUserAction(); 239 OnBeforeUserAction();
225 skip_input_method_cancel_composition_ = true; 240 skip_input_method_cancel_composition_ = true;
226 241
227 gfx::SelectionModel drop_destination_model = 242 gfx::SelectionModel drop_destination_model =
228 GetRenderText()->FindCursorPosition(event.location()); 243 GetRenderText()->FindCursorPosition(event.location());
229 string16 text; 244 string16 text;
230 event.data().GetString(&text); 245 event.data().GetString(&text);
231 text = GetTextForDisplay(text); 246 text = GetTextForDisplay(text);
(...skipping 1030 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 // Filter out all control characters, including tab and new line characters, 1277 // Filter out all control characters, including tab and new line characters,
1263 // and all characters with Alt modifier. But we need to allow characters with 1278 // and all characters with Alt modifier. But we need to allow characters with
1264 // AltGr modifier. 1279 // AltGr modifier.
1265 // On Windows AltGr is represented by Alt+Ctrl, and on Linux it's a different 1280 // On Windows AltGr is represented by Alt+Ctrl, and on Linux it's a different
1266 // flag that we don't care about. 1281 // flag that we don't care about.
1267 return ((ch >= 0x20 && ch < 0x7F) || ch > 0x9F) && 1282 return ((ch >= 0x20 && ch < 0x7F) || ch > 0x9F) &&
1268 (flags & ~(ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN)) != ui::EF_ALT_DOWN; 1283 (flags & ~(ui::EF_SHIFT_DOWN | ui::EF_CAPS_LOCK_DOWN)) != ui::EF_ALT_DOWN;
1269 } 1284 }
1270 1285
1271 } // namespace views 1286 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698