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

Side by Side Diff: Source/WebCore/html/HTMLSelectElement.cpp

Issue 9285007: Merge 105386 - REGRESSION(r100111): A 'change' event does not fire when a mouse drag (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/963/
Patch Set: Created 8 years, 11 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
« no previous file with comments | « LayoutTests/fast/forms/select/listbox-drag-in-non-multiple-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 1139
1140 m_activeSelectionState = true; 1140 m_activeSelectionState = true;
1141 1141
1142 bool shiftSelect = m_multiple && shift; 1142 bool shiftSelect = m_multiple && shift;
1143 bool multiSelect = m_multiple && multi && !shift; 1143 bool multiSelect = m_multiple && multi && !shift;
1144 1144
1145 HTMLElement* clickedElement = listItems()[listIndex]; 1145 HTMLElement* clickedElement = listItems()[listIndex];
1146 if (clickedElement->hasTagName(optionTag)) { 1146 if (clickedElement->hasTagName(optionTag)) {
1147 // Keep track of whether an active selection (like during drag 1147 // Keep track of whether an active selection (like during drag
1148 // selection), should select or deselect. 1148 // selection), should select or deselect.
1149 if (toHTMLOptionElement(clickedElement)->selected() && multi) 1149 if (toHTMLOptionElement(clickedElement)->selected() && multiSelect)
1150 m_activeSelectionState = false; 1150 m_activeSelectionState = false;
1151 if (!m_activeSelectionState) 1151 if (!m_activeSelectionState)
1152 toHTMLOptionElement(clickedElement)->setSelectedState(false); 1152 toHTMLOptionElement(clickedElement)->setSelectedState(false);
1153 } 1153 }
1154 1154
1155 // If we're not in any special multiple selection mode, then deselect all 1155 // If we're not in any special multiple selection mode, then deselect all
1156 // other items, excluding the clicked option. If no option was clicked, then 1156 // other items, excluding the clicked option. If no option was clicked, then
1157 // this will deselect all items in the list. 1157 // this will deselect all items in the list.
1158 if (!shiftSelect && !multiSelect) 1158 if (!shiftSelect && !multiSelect)
1159 deselectItemsWithoutValidation(clickedElement); 1159 deselectItemsWithoutValidation(clickedElement);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); 1207 MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
1208 if (mouseEvent->button() != LeftButton || !mouseEvent->buttonDown()) 1208 if (mouseEvent->button() != LeftButton || !mouseEvent->buttonDown())
1209 return; 1209 return;
1210 1210
1211 IntPoint localOffset = roundedIntPoint(renderer()->absoluteToLocal(mouse Event->absoluteLocation(), false, true)); 1211 IntPoint localOffset = roundedIntPoint(renderer()->absoluteToLocal(mouse Event->absoluteLocation(), false, true));
1212 int listIndex = toRenderListBox(renderer())->listIndexAtOffset(toSize(lo calOffset)); 1212 int listIndex = toRenderListBox(renderer())->listIndexAtOffset(toSize(lo calOffset));
1213 if (listIndex >= 0) { 1213 if (listIndex >= 0) {
1214 if (m_multiple) { 1214 if (m_multiple) {
1215 setActiveSelectionEndIndex(listIndex); 1215 setActiveSelectionEndIndex(listIndex);
1216 updateListBoxSelection(false); 1216 updateListBoxSelection(false);
1217 } else 1217 } else {
1218 updateSelectedState(listIndex, false, false); 1218 setActiveSelectionAnchorIndex(listIndex);
1219 setActiveSelectionEndIndex(listIndex);
1220 updateListBoxSelection(true);
1221 }
1219 event->setDefaultHandled(); 1222 event->setDefaultHandled();
1220 } 1223 }
1221 } else if (event->type() == eventNames().mouseupEvent && event->isMouseEvent () && static_cast<MouseEvent*>(event)->button() == LeftButton && document()->fra me()->eventHandler()->autoscrollRenderer() != renderer()) { 1224 } else if (event->type() == eventNames().mouseupEvent && event->isMouseEvent () && static_cast<MouseEvent*>(event)->button() == LeftButton && document()->fra me()->eventHandler()->autoscrollRenderer() != renderer()) {
1222 // This makes sure we fire dispatchFormControlChangeEvent for a single 1225 // This makes sure we fire dispatchFormControlChangeEvent for a single
1223 // click. For drag selection, onChange will fire when the autoscroll 1226 // click. For drag selection, onChange will fire when the autoscroll
1224 // timer stops. 1227 // timer stops.
1225 listBoxOnChange(); 1228 listBoxOnChange();
1226 } else if (event->type() == eventNames().keydownEvent) { 1229 } else if (event->type() == eventNames().keydownEvent) {
1227 if (!event->isKeyboardEvent()) 1230 if (!event->isKeyboardEvent())
1228 return; 1231 return;
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1494 1497
1495 const HTMLSelectElement* toHTMLSelectElement(const Node* node) 1498 const HTMLSelectElement* toHTMLSelectElement(const Node* node)
1496 { 1499 {
1497 ASSERT(!node || node->hasTagName(selectTag)); 1500 ASSERT(!node || node->hasTagName(selectTag));
1498 return static_cast<const HTMLSelectElement*>(node); 1501 return static_cast<const HTMLSelectElement*>(node);
1499 } 1502 }
1500 1503
1501 #endif 1504 #endif
1502 1505
1503 } // namespace 1506 } // namespace
OLDNEW
« no previous file with comments | « LayoutTests/fast/forms/select/listbox-drag-in-non-multiple-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698