Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: base/win/text_services_bridge.cc

Issue 10826223: Replace PeekMessage for TSF awareness (Closed) Base URL: http://git.chromium.org/chromium/src.git@yukawa
Patch Set: add comments Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/win/text_services_bridge.h"
6
7 namespace base {
8 namespace win {
9
10 TextServicesBridge::TextServicesBridge() : client_id_(TF_CLIENTID_NULL) {
11 is_initialized_ = scoped_com_initialiser_.succeeded();
cpu_(ooo_6.6-7.5) 2012/08/22 21:37:18 COM is initialized on this thread, don't do this.
rvargas (doing something else) 2012/08/23 01:20:19 However, this CL is introducing requirements that
12 if (!is_initialized_) {
13 return;
14 }
15
16 is_initialized_ &= SUCCEEDED(thread_mgr_.CreateInstance(CLSID_TF_ThreadMgr));
17 if (!is_initialized_)
18 return;
19
20 is_initialized_ &= SUCCEEDED(message_pump_.QueryFrom(thread_mgr_));
21 is_initialized_ &= SUCCEEDED(keystroke_mgr_.QueryFrom(thread_mgr_));
22 // When activate succeeded, |client_id| is set valid value.
23 is_initialized_ &= SUCCEEDED(thread_mgr_->Activate(&client_id_));
24 }
25
26 TextServicesBridge::~TextServicesBridge() {
27 if (is_initialized_)
28 thread_mgr_->Deactivate();
29 }
30
31 bool TextServicesBridge::Init() {
32 return is_initialized_;
cpu_(ooo_6.6-7.5) 2012/08/22 21:37:18 maybe we should do lines 16 to 23 here instead.
33 }
34
35 // Wraps for ITfMessagePump::PeekMessage with win32 PeekMessage signature.
36 // Obtains messages from application message queue.
37 BOOL TextServicesBridge::DoPeekMessage(MSG* message,
38 HWND hwnd,
39 UINT msg_filter_min,
40 UINT msg_filter_max,
41 UINT remove_msg) {
42 BOOL result = FALSE;
43 if (FAILED(message_pump_->PeekMessage(message, hwnd, msg_filter_min,
44 msg_filter_max,
45 remove_msg, &result))) {
46 result = FALSE;
47 }
48
49 return result;
50 }
51
52 // Sends msg to Text Service Manager.
53 // The msg will be used to input composition text.
54 // Returns true if|msg| was consumed by text service manager.
55 bool TextServicesBridge::ProcessMessage(const MSG& msg) {
56 if (msg.message == WM_KEYDOWN) {
57 BOOL eaten = FALSE;
58 HRESULT hr = keystroke_mgr_->TestKeyDown(msg.wParam, msg.lParam, &eaten);
59 if (FAILED(hr) && !eaten)
60 return false;
61 eaten = FALSE;
62 hr = keystroke_mgr_->KeyDown(msg.wParam, msg.lParam, &eaten);
63 return (SUCCEEDED(hr) && eaten);
64 }
65
66 if (msg.message == WM_KEYUP) {
67 BOOL eaten = FALSE;
68 HRESULT hr = keystroke_mgr_->TestKeyUp(msg.wParam, msg.lParam, &eaten);
69 if (FAILED(hr) && !eaten)
70 return false;
71 eaten = FALSE;
72 hr = keystroke_mgr_->KeyUp(msg.wParam, msg.lParam, &eaten);
73 return (SUCCEEDED(hr) && eaten);
74 }
75
76 return false;
77 }
78
79 } // namespace win
80 } // namespace base
OLDNEW
« base/win/text_services_bridge.h ('K') | « base/win/text_services_bridge.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698