Reviewed by Anders.
Test for <rdar://problem/
3824247> Select All works even if -khtml-user-select:none; style is set
* editing/selection/select-all-user-select-none-expected.txt: Added.
* editing/selection/select-all-user-select-none.html: Added.
WebCore:
Reviewed by Anders.
- Fix for <rdar://problem/
3824247> Select All works even if -khtml-user-select:none; style is set
Also made user-select:none work on new list boxes, and cleaned up the list box defaultEventHandler.
Test: editing/selection/select-all-user-select-none.html
* editing/SelectionController.cpp: (WebCore::SelectionController::selectAll): Make sure canSelect is true on the root renderer.
* html/HTMLSelectElement.cpp:
(WebCore::HTMLSelectElement::canSelectAll): Check canSelect here.
(WebCore::HTMLSelectElement::selectAll): Added nil check for renderer.
(WebCore::HTMLSelectElement::defaultEventHandler): Return early if the event has been handled.
(WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Check canSelect here.
* html/HTMLSelectElement.h:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@18338
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2006-12-19 Adele Peterson <adele@apple.com>
+
+ Reviewed by Anders.
+
+ Test for <rdar://problem/3824247> Select All works even if -khtml-user-select:none; style is set
+
+ * editing/selection/select-all-user-select-none-expected.txt: Added.
+ * editing/selection/select-all-user-select-none.html: Added.
+
2006-12-19 Anders Carlsson <acarlsson@apple.com>
Reviewed by Adele.
--- /dev/null
+Test Passed
--- /dev/null
+<html>
+ <head>
+ <style>
+ html {
+ -webkit-user-select: none;
+ }
+ </style>
+ <script>
+ function test() {
+ if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+ document.execCommand('SelectAll');
+ if (window.getSelection().toString() == "")
+ document.body.innerHTML = "Test Passed";
+ }
+ </script>
+ </head>
+ <body onload="test()">
+ Test Failed (this should not be selected)
+ </body>
+</html>
+2006-12-19 Adele Peterson <adele@apple.com>
+
+ Reviewed by Anders.
+
+ - Fix for <rdar://problem/3824247> Select All works even if -khtml-user-select:none; style is set
+
+ Also made user-select:none work on new list boxes, and cleaned up the list box defaultEventHandler.
+
+ Test: editing/selection/select-all-user-select-none.html
+
+ * editing/SelectionController.cpp: (WebCore::SelectionController::selectAll): Make sure canSelect is true on the root renderer.
+ * html/HTMLSelectElement.cpp:
+ (WebCore::HTMLSelectElement::canSelectAll): Check canSelect here.
+ (WebCore::HTMLSelectElement::selectAll): Added nil check for renderer.
+ (WebCore::HTMLSelectElement::defaultEventHandler): Return early if the event has been handled.
+ (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Check canSelect here.
+ * html/HTMLSelectElement.h:
+
2006-12-19 Anders Carlsson <acarlsson@apple.com>
Reviewed by Adele.
}
Node* root = isContentEditable() ? highestEditableRoot(m_sel.start()) : document->documentElement();
+ if (!root->renderer() || !root->renderer()->canSelect())
+ return;
Selection newSelection(Selection::selectionFromContentsOfNode(root));
if (m_frame->shouldChangeSelection(newSelection))
setSelection(newSelection);
return HTMLGenericFormElement::isMouseFocusable();
}
+bool HTMLSelectElement::canSelectAll() const
+{
+ return !usesMenuList() && renderer() && renderer()->canSelect();
+}
+
void HTMLSelectElement::selectAll()
{
ASSERT(!usesMenuList());
- if (!multiple())
+ if (!renderer() || !multiple())
return;
m_activeSelectionState = true;
menuListDefaultEventHandler(evt);
else
listBoxDefaultEventHandler(evt);
+
+ if (evt->defaultHandled())
+ return;
if (!evt->defaultHandled() && evt->type() == keypressEvent && evt->isKeyboardEvent()) {
KeyboardEvent* keyboardEvent = static_cast<KeyboardEvent*>(evt);
&& isprint(static_cast<KeyboardEvent*>(evt)->charCode())) {
typeAheadFind(static_cast<KeyboardEvent*>(evt));
evt->setDefaultHandled();
+ return;
}
}
void HTMLSelectElement::listBoxDefaultEventHandler(Event* evt)
{
- if (!renderer())
+ if (!renderer() || !renderer()->canSelect())
return;
if (evt->type() == mousedownEvent) {
setActiveSelectionEndIndex(listIndex);
updateListBoxSelection(!multiSelect);
renderer()->repaint();
+ evt->setDefaultHandled();
}
} else if (evt->type() == mouseupEvent && document()->frame()->eventHandler()->autoscrollRenderer() != renderer())
// This makes sure we fire onChange for a single click. For drag selection, onChange will fire when the autoscroll timer stops.
}
static_cast<RenderListBox*>(renderer())->scrollToRevealElementAtListIndex(endIndex);
- evt->setDefaultHandled();
updateListBoxSelection(deselectOthers);
- renderer()->repaint();
-
+ renderer()->repaint();
listBoxOnChange();
+ evt->setDefaultHandled();
}
}
}
virtual bool isKeyboardFocusable(KeyboardEvent*) const;
virtual bool isMouseFocusable() const;
- virtual bool canSelectAll() const { return !usesMenuList(); }
+ virtual bool canSelectAll() const;
virtual void selectAll();
virtual void recalcStyle(StyleChange);