10617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen/* 20617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * Copyright (C) 2010 Apple Inc. All rights reserved. 30617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 40617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * Redistribution and use in source and binary forms, with or without 50617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * modification, are permitted provided that the following conditions 60617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * are met: 70617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 1. Redistributions of source code must retain the above copyright 80617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * notice, this list of conditions and the following disclaimer. 90617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 2. Redistributions in binary form must reproduce the above copyright 100617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * notice, this list of conditions and the following disclaimer in the 110617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * documentation and/or other materials provided with the distribution. 120617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * 130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 140617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 150617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 160617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 170617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 180617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 190617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 200617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 210617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 230617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen * THE POSSIBILITY OF SUCH DAMAGE. 240617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen */ 250617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "config.h" 270617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "UserTypingGestureIndicator.h" 280617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 290617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "Frame.h" 300617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "Node.h" 310617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include <wtf/StdLibExtras.h> 320617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 330617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsennamespace WebCore { 340617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 350617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenstatic bool s_processingUserTypingGesture; 360617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenbool UserTypingGestureIndicator::processingUserTypingGesture() 370617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 380617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return s_processingUserTypingGesture; 390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 400617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 410617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenstatic RefPtr<Node>& focusedNode() 420617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 430617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen DEFINE_STATIC_LOCAL(RefPtr<Node>, node, ()); 440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return node; 450617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 460617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 470617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenNode* UserTypingGestureIndicator::focusedElementAtGestureStart() 480617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 490617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen return focusedNode().get(); 500617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 510617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 520617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenUserTypingGestureIndicator::UserTypingGestureIndicator(Frame* frame) 530617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen : m_previousProcessingUserTypingGesture(s_processingUserTypingGesture) 540617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen , m_previousFocusedNode(focusedNode()) 550617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 560617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen s_processingUserTypingGesture = true; 570617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen focusedNode() = frame->document() ? frame->document()->focusedNode() : 0; 580617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 590617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 600617145a89917ae7735fe1c9538688ab9a577df5Kristian MonsenUserTypingGestureIndicator::~UserTypingGestureIndicator() 610617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen{ 620617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen s_processingUserTypingGesture = m_previousProcessingUserTypingGesture; 630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen focusedNode() = m_previousFocusedNode; 640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} 650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 660617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen} // namespace WebCore 67