| Index: win8/metro_driver/ime/ime_popup_monitor.cc
|
| diff --git a/win8/metro_driver/ime/ime_popup_monitor.cc b/win8/metro_driver/ime/ime_popup_monitor.cc
|
| deleted file mode 100644
|
| index a478607aad4e6d7e45dbb125ca465c0c59d46dd6..0000000000000000000000000000000000000000
|
| --- a/win8/metro_driver/ime/ime_popup_monitor.cc
|
| +++ /dev/null
|
| @@ -1,82 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "win8/metro_driver/ime/ime_popup_monitor.h"
|
| -
|
| -#include <windows.h>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "win8/metro_driver/ime/ime_popup_observer.h"
|
| -
|
| -namespace metro_driver {
|
| -namespace {
|
| -
|
| -ImePopupObserver* g_observer_ = NULL;
|
| -HWINEVENTHOOK g_hook_handle_ = NULL;
|
| -
|
| -void CALLBACK ImeEventCallback(HWINEVENTHOOK win_event_hook_handle,
|
| - DWORD event,
|
| - HWND window_handle,
|
| - LONG object_id,
|
| - LONG child_id,
|
| - DWORD event_thread,
|
| - DWORD event_time) {
|
| - // This function is registered to SetWinEventHook to be called back on the UI
|
| - // thread.
|
| - DCHECK(base::MessageLoopForUI::IsCurrent());
|
| -
|
| - if (!g_observer_)
|
| - return;
|
| - switch (event) {
|
| - case EVENT_OBJECT_IME_SHOW:
|
| - g_observer_->OnImePopupChanged(ImePopupObserver::kPopupShown);
|
| - return;
|
| - case EVENT_OBJECT_IME_HIDE:
|
| - g_observer_->OnImePopupChanged(ImePopupObserver::kPopupHidden);
|
| - return;
|
| - case EVENT_OBJECT_IME_CHANGE:
|
| - g_observer_->OnImePopupChanged(ImePopupObserver::kPopupUpdated);
|
| - return;
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void AddImePopupObserver(ImePopupObserver* observer) {
|
| - CHECK(g_observer_ == NULL)
|
| - << "Currently only one observer is supported at the same time.";
|
| - g_observer_ = observer;
|
| -
|
| - // IMEs running under immersive mode are supposed to generate WinEvent
|
| - // whenever their popup UI such as candidate window is shown, updated, and
|
| - // hidden to support accessibility applications.
|
| - // http://msdn.microsoft.com/en-us/library/windows/apps/hh967425.aspx#accessibility
|
| - // Note that there is another mechanism in TSF, called ITfUIElementSink, to
|
| - // subscribe when the visibility of an IME's UI element is changed. However,
|
| - // MS-IME running under immersive mode does not fully support this API.
|
| - // Thus, WinEvent is more reliable for this purpose.
|
| - g_hook_handle_ = SetWinEventHook(
|
| - EVENT_OBJECT_IME_SHOW,
|
| - EVENT_OBJECT_IME_CHANGE,
|
| - NULL,
|
| - ImeEventCallback,
|
| - GetCurrentProcessId(), // monitor the metro_driver process only
|
| - 0, // hook all threads because MS-IME emits WinEvent in a worker thread
|
| - WINEVENT_OUTOFCONTEXT); // allows us to receive message in the UI thread
|
| - LOG_IF(ERROR, !g_hook_handle_) << "SetWinEventHook failed.";
|
| -}
|
| -
|
| -void RemoveImePopupObserver(ImePopupObserver* observer) {
|
| - if (g_observer_ != observer)
|
| - return;
|
| - g_observer_ = NULL;
|
| - if (!g_hook_handle_)
|
| - return;
|
| - const bool unhook_succeeded = !!UnhookWinEvent(g_hook_handle_);
|
| - LOG_IF(ERROR, !unhook_succeeded) << "UnhookWinEvent failed.";
|
| - g_hook_handle_ = NULL;
|
| -}
|
| -
|
| -} // namespace metro_driver
|
|
|