WebViewBaseInputMethodFilter.cpp [plain text]
#include "config.h"
#include "WebViewBaseInputMethodFilter.h"
#include "NativeWebKeyboardEvent.h"
#include "WebKitWebViewBasePrivate.h"
#include "WebPageProxy.h"
#include <WebCore/Color.h>
#include <WebCore/CompositionResults.h>
#include <WebCore/Editor.h>
using namespace WebCore;
namespace WebKit {
void WebViewBaseInputMethodFilter::setWebView(WebKitWebViewBase* webView)
{
GtkInputMethodFilter::setWidget(GTK_WIDGET(webView));
m_webPageProxy = webkitWebViewBaseGetPage(webView);
ASSERT(m_webPageProxy);
}
bool WebViewBaseInputMethodFilter::canEdit()
{
return true;
}
bool WebViewBaseInputMethodFilter::sendSimpleKeyEvent(GdkEventKey* event, WTF::String simpleString, EventFakedForComposition faked)
{
ASSERT(m_webPageProxy);
m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast<GdkEvent*>(event),
CompositionResults(simpleString), faked));
return true;
}
bool WebViewBaseInputMethodFilter::sendKeyEventWithCompositionResults(GdkEventKey* event, ResultsToSend resultsToSend, EventFakedForComposition faked)
{
ASSERT(m_webPageProxy);
m_webPageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast<GdkEvent*>(event),
CompositionResults(CompositionResults::WillSendCompositionResultsSoon),
faked));
if (resultsToSend & Composition && !m_confirmedComposition.isNull())
confirmCompositionText(m_confirmedComposition);
if (resultsToSend & Preedit && !m_preedit.isNull())
setPreedit(m_preedit, m_cursorOffset);
return true;
}
void WebViewBaseInputMethodFilter::confirmCompositionText(String text)
{
ASSERT(m_webPageProxy);
m_webPageProxy->confirmComposition(text, -1, 0);
}
void WebViewBaseInputMethodFilter::confirmCurrentComposition()
{
ASSERT(m_webPageProxy);
m_webPageProxy->confirmComposition(String(), -1, 0);
}
void WebViewBaseInputMethodFilter::cancelCurrentComposition()
{
ASSERT(m_webPageProxy);
m_webPageProxy->cancelComposition();
}
void WebViewBaseInputMethodFilter::setPreedit(String newPreedit, int )
{
ASSERT(m_webPageProxy);
m_webPageProxy->setComposition(newPreedit, Vector<CompositionUnderline>{ CompositionUnderline(0, newPreedit.length(), Color(1, 1, 1), false) },
m_cursorOffset, m_cursorOffset, 0 , 0 );
}
}