UserActionElementSet.cpp [plain text]
#include "config.h"
#include "UserActionElementSet.h"
#include "Element.h"
namespace WebCore {
void UserActionElementSet::didDetach(Element* element)
{
ASSERT(element->isUserActionElement());
clearFlags(element, IsActiveFlag | InActiveChainFlag | IsHoveredFlag);
}
void UserActionElementSet::documentDidRemoveLastRef()
{
m_elements.clear();
}
bool UserActionElementSet::hasFlags(const Element* element, unsigned flags) const
{
ASSERT(element->isUserActionElement());
ElementFlagMap::const_iterator found = m_elements.find(const_cast<Element*>(element));
if (found == m_elements.end())
return false;
return found->value & flags;
}
void UserActionElementSet::clearFlags(Element* element, unsigned flags)
{
if (!element->isUserActionElement()) {
ASSERT(m_elements.end() == m_elements.find(element));
return;
}
ElementFlagMap::iterator found = m_elements.find(element);
if (found == m_elements.end()) {
element->setUserActionElement(false);
return;
}
unsigned updated = found->value & ~flags;
if (!updated) {
element->setUserActionElement(false);
m_elements.remove(found);
return;
}
found->value = updated;
}
void UserActionElementSet::setFlags(Element* element, unsigned flags)
{
ElementFlagMap::iterator result = m_elements.find(element);
if (result != m_elements.end()) {
ASSERT(element->isUserActionElement());
result->value |= flags;
return;
}
element->setUserActionElement(true);
m_elements.add(element, flags);
}
}