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