OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). | 2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). |
3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
4 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 4 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
5 * (C) 2001 Dirk Mueller (mueller@kde.org) | 5 * (C) 2001 Dirk Mueller (mueller@kde.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights
reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights
reserved. |
7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 7 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
8 * Copyright (C) 2010 Google Inc. All rights reserved. | 8 * Copyright (C) 2010 Google Inc. All rights reserved. |
9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
10 * | 10 * |
(...skipping 1319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 if (m_activeSelectionAnchorIndex < 0 || !shiftSelect) | 1330 if (m_activeSelectionAnchorIndex < 0 || !shiftSelect) |
1331 setActiveSelectionAnchorIndex(listIndex); | 1331 setActiveSelectionAnchorIndex(listIndex); |
1332 | 1332 |
1333 setActiveSelectionEndIndex(listIndex); | 1333 setActiveSelectionEndIndex(listIndex); |
1334 updateListBoxSelection(!multiSelect); | 1334 updateListBoxSelection(!multiSelect); |
1335 } | 1335 } |
1336 | 1336 |
1337 void HTMLSelectElement::listBoxDefaultEventHandler(Event* event) | 1337 void HTMLSelectElement::listBoxDefaultEventHandler(Event* event) |
1338 { | 1338 { |
1339 const Vector<HTMLElement*>& listItems = this->listItems(); | 1339 const Vector<HTMLElement*>& listItems = this->listItems(); |
1340 bool dragSelection = false; | |
1341 if (event->type() == EventTypeNames::gesturetap && event->isGestureEvent())
{ | 1340 if (event->type() == EventTypeNames::gesturetap && event->isGestureEvent())
{ |
1342 focus(); | 1341 focus(); |
1343 // Calling focus() may cause us to lose our renderer or change the rende
r type, in which case do not want to handle the event. | 1342 // Calling focus() may cause us to lose our renderer or change the rende
r type, in which case do not want to handle the event. |
1344 if (!renderer() || !renderer()->isListBox()) | 1343 if (!renderer() || !renderer()->isListBox()) |
1345 return; | 1344 return; |
1346 | 1345 |
1347 // Convert to coords relative to the list box if needed. | 1346 // Convert to coords relative to the list box if needed. |
1348 GestureEvent& gestureEvent = toGestureEvent(*event); | 1347 GestureEvent& gestureEvent = toGestureEvent(*event); |
1349 IntPoint localOffset = roundedIntPoint(renderer()->absoluteToLocal(gestu
reEvent.absoluteLocation(), UseTransforms)); | 1348 IntPoint localOffset = roundedIntPoint(renderer()->absoluteToLocal(gestu
reEvent.absoluteLocation(), UseTransforms)); |
1350 int listIndex = toRenderListBox(renderer())->listIndexAtOffset(toIntSize
(localOffset)); | 1349 int listIndex = toRenderListBox(renderer())->listIndexAtOffset(toIntSize
(localOffset)); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1391 return; | 1390 return; |
1392 | 1391 |
1393 setActiveSelectionEndIndex(listIndex); | 1392 setActiveSelectionEndIndex(listIndex); |
1394 updateListBoxSelection(false); | 1393 updateListBoxSelection(false); |
1395 } else { | 1394 } else { |
1396 setActiveSelectionAnchorIndex(listIndex); | 1395 setActiveSelectionAnchorIndex(listIndex); |
1397 setActiveSelectionEndIndex(listIndex); | 1396 setActiveSelectionEndIndex(listIndex); |
1398 updateListBoxSelection(true); | 1397 updateListBoxSelection(true); |
1399 } | 1398 } |
1400 } | 1399 } |
1401 dragSelection = true; | |
1402 } | 1400 } |
1403 } else if (event->type() == EventTypeNames::mouseup && event->isMouseEvent()
&& toMouseEvent(event)->button() == LeftButton && renderer() && !toRenderBox(re
nderer())->autoscrollInProgress()) { | 1401 } else if (event->type() == EventTypeNames::mouseup && event->isMouseEvent()
&& toMouseEvent(event)->button() == LeftButton && renderer() && !toRenderBox(re
nderer())->autoscrollInProgress()) { |
1404 // We didn't start this click/drag on any options. | 1402 // We didn't start this click/drag on any options. |
1405 if (m_lastOnChangeSelection.isEmpty()) | 1403 if (m_lastOnChangeSelection.isEmpty()) |
1406 return; | 1404 return; |
1407 // This makes sure we fire dispatchFormControlChangeEvent for a single | 1405 listBoxOnChange(); |
1408 // click. For drag selection, onChange will fire when the autoscroll | |
1409 // timer stops. | |
1410 if (!dragSelection) { | |
1411 listBoxOnChange(); | |
1412 } | |
1413 } else if (event->type() == EventTypeNames::keydown) { | 1406 } else if (event->type() == EventTypeNames::keydown) { |
1414 if (!event->isKeyboardEvent()) | 1407 if (!event->isKeyboardEvent()) |
1415 return; | 1408 return; |
1416 const String& keyIdentifier = toKeyboardEvent(event)->keyIdentifier(); | 1409 const String& keyIdentifier = toKeyboardEvent(event)->keyIdentifier(); |
1417 | 1410 |
1418 bool handled = false; | 1411 bool handled = false; |
1419 int endIndex = 0; | 1412 int endIndex = 0; |
1420 if (m_activeSelectionEndIndex < 0) { | 1413 if (m_activeSelectionEndIndex < 0) { |
1421 // Initialize the end index | 1414 // Initialize the end index |
1422 if (keyIdentifier == "Down" || keyIdentifier == "PageDown") { | 1415 if (keyIdentifier == "Down" || keyIdentifier == "PageDown") { |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1656 { | 1649 { |
1657 return true; | 1650 return true; |
1658 } | 1651 } |
1659 | 1652 |
1660 void HTMLSelectElement::updateListOnRenderer() | 1653 void HTMLSelectElement::updateListOnRenderer() |
1661 { | 1654 { |
1662 setOptionsChangedOnRenderer(); | 1655 setOptionsChangedOnRenderer(); |
1663 } | 1656 } |
1664 | 1657 |
1665 } // namespace | 1658 } // namespace |
OLD | NEW |