OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #define INITGUID // required for GUID_PROP_INPUTSCOPE | 5 #define INITGUID // required for GUID_PROP_INPUTSCOPE |
6 #include "ui/base/ime/win/tsf_text_store.h" | 6 #include "ui/base/ime/win/tsf_text_store.h" |
7 | 7 |
8 #include <InputScope.h> | 8 #include <InputScope.h> |
9 #include <OleCtl.h> | 9 #include <OleCtl.h> |
10 | 10 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 if (acp_end == -1) | 246 if (acp_end == -1) |
247 acp_end = string_buffer_size; | 247 acp_end = string_buffer_size; |
248 if (!((0 <= acp_start) && | 248 if (!((0 <= acp_start) && |
249 (acp_start <= acp_end) && | 249 (acp_start <= acp_end) && |
250 (acp_end <= string_buffer_size))) { | 250 (acp_end <= string_buffer_size))) { |
251 return TF_E_INVALIDPOS; | 251 return TF_E_INVALIDPOS; |
252 } | 252 } |
253 acp_end = std::min(acp_end, acp_start + static_cast<LONG>(text_buffer_size)); | 253 acp_end = std::min(acp_end, acp_start + static_cast<LONG>(text_buffer_size)); |
254 *text_buffer_copied = acp_end - acp_start; | 254 *text_buffer_copied = acp_end - acp_start; |
255 | 255 |
256 const string16& result = | 256 const base::string16& result = |
257 string_buffer_.substr(acp_start, *text_buffer_copied); | 257 string_buffer_.substr(acp_start, *text_buffer_copied); |
258 for (size_t i = 0; i < result.size(); ++i) { | 258 for (size_t i = 0; i < result.size(); ++i) { |
259 text_buffer[i] = result[i]; | 259 text_buffer[i] = result[i]; |
260 } | 260 } |
261 | 261 |
262 if (run_info_buffer_size) { | 262 if (run_info_buffer_size) { |
263 run_info_buffer[0].uCount = *text_buffer_copied; | 263 run_info_buffer[0].uCount = *text_buffer_copied; |
264 run_info_buffer[0].type = TS_RT_PLAIN; | 264 run_info_buffer[0].type = TS_RT_PLAIN; |
265 *run_info_buffer_copied = 1; | 265 *run_info_buffer_copied = 1; |
266 } | 266 } |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 return S_OK; | 405 return S_OK; |
406 } | 406 } |
407 | 407 |
408 if (!HasReadWriteLock()) | 408 if (!HasReadWriteLock()) |
409 return TS_E_NOLOCK; | 409 return TS_E_NOLOCK; |
410 if (!text_buffer) | 410 if (!text_buffer) |
411 return E_INVALIDARG; | 411 return E_INVALIDARG; |
412 | 412 |
413 DCHECK_LE(start_pos, end_pos); | 413 DCHECK_LE(start_pos, end_pos); |
414 string_buffer_ = string_buffer_.substr(0, start_pos) + | 414 string_buffer_ = string_buffer_.substr(0, start_pos) + |
415 string16(text_buffer, text_buffer + text_buffer_size) + | 415 base::string16(text_buffer, text_buffer + text_buffer_size) + |
416 string_buffer_.substr(end_pos); | 416 string_buffer_.substr(end_pos); |
417 if (acp_start) | 417 if (acp_start) |
418 *acp_start = start_pos; | 418 *acp_start = start_pos; |
419 if (acp_end) | 419 if (acp_end) |
420 *acp_end = new_end_pos; | 420 *acp_end = new_end_pos; |
421 if (text_change) { | 421 if (text_change) { |
422 text_change->acpStart = start_pos; | 422 text_change->acpStart = start_pos; |
423 text_change->acpOldEnd = end_pos; | 423 text_change->acpOldEnd = end_pos; |
424 text_change->acpNewEnd = new_end_pos; | 424 text_change->acpNewEnd = new_end_pos; |
425 } | 425 } |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 current_lock_type_ = 0; | 516 current_lock_type_ = 0; |
517 } | 517 } |
518 | 518 |
519 if (!edit_flag_) { | 519 if (!edit_flag_) { |
520 return S_OK; | 520 return S_OK; |
521 } | 521 } |
522 | 522 |
523 // If the text store is edited in OnLockGranted(), we may need to call | 523 // If the text store is edited in OnLockGranted(), we may need to call |
524 // TextInputClient::InsertText() or TextInputClient::SetCompositionText(). | 524 // TextInputClient::InsertText() or TextInputClient::SetCompositionText(). |
525 const size_t new_committed_size = committed_size_; | 525 const size_t new_committed_size = committed_size_; |
526 const string16& new_committed_string = | 526 const base::string16& new_committed_string = |
527 string_buffer_.substr(last_committed_size, | 527 string_buffer_.substr(last_committed_size, |
528 new_committed_size - last_committed_size); | 528 new_committed_size - last_committed_size); |
529 const string16& composition_string = | 529 const base::string16& composition_string = |
530 string_buffer_.substr(new_committed_size); | 530 string_buffer_.substr(new_committed_size); |
531 | 531 |
532 // If there is new committed string, calls TextInputClient::InsertText(). | 532 // If there is new committed string, calls TextInputClient::InsertText(). |
533 if ((!new_committed_string.empty()) && text_input_client_) { | 533 if ((!new_committed_string.empty()) && text_input_client_) { |
534 text_input_client_->InsertText(new_committed_string); | 534 text_input_client_->InsertText(new_committed_string); |
535 } | 535 } |
536 | 536 |
537 // Calls TextInputClient::SetCompositionText(). | 537 // Calls TextInputClient::SetCompositionText(). |
538 CompositionText composition_text; | 538 CompositionText composition_text; |
539 composition_text.text = composition_string; | 539 composition_text.text = composition_string; |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
877 if (edit_flag_) | 877 if (edit_flag_) |
878 return false; | 878 return false; |
879 | 879 |
880 if (string_buffer_.empty()) | 880 if (string_buffer_.empty()) |
881 return true; | 881 return true; |
882 | 882 |
883 // See the comment in TSFTextStore::CancelComposition. | 883 // See the comment in TSFTextStore::CancelComposition. |
884 // This logic is based on the observation about how to emulate | 884 // This logic is based on the observation about how to emulate |
885 // ImmNotifyIME(NI_COMPOSITIONSTR, CPS_COMPLETE, 0) by CUAS. | 885 // ImmNotifyIME(NI_COMPOSITIONSTR, CPS_COMPLETE, 0) by CUAS. |
886 | 886 |
887 const string16& composition_text = string_buffer_.substr(committed_size_); | 887 const base::string16& composition_text = |
| 888 string_buffer_.substr(committed_size_); |
888 if (!composition_text.empty()) | 889 if (!composition_text.empty()) |
889 text_input_client_->InsertText(composition_text); | 890 text_input_client_->InsertText(composition_text); |
890 | 891 |
891 const size_t previous_buffer_size = string_buffer_.size(); | 892 const size_t previous_buffer_size = string_buffer_.size(); |
892 string_buffer_.clear(); | 893 string_buffer_.clear(); |
893 committed_size_ = 0; | 894 committed_size_ = 0; |
894 selection_.set_start(0); | 895 selection_.set_start(0); |
895 selection_.set_end(0); | 896 selection_.set_end(0); |
896 if (text_store_acp_sink_mask_ & TS_AS_SEL_CHANGE) | 897 if (text_store_acp_sink_mask_ & TS_AS_SEL_CHANGE) |
897 text_store_acp_sink_->OnSelectionChange(); | 898 text_store_acp_sink_->OnSelectionChange(); |
(...skipping 16 matching lines...) Expand all Loading... |
914 | 915 |
915 bool TSFTextStore::HasReadLock() const { | 916 bool TSFTextStore::HasReadLock() const { |
916 return (current_lock_type_ & TS_LF_READ) == TS_LF_READ; | 917 return (current_lock_type_ & TS_LF_READ) == TS_LF_READ; |
917 } | 918 } |
918 | 919 |
919 bool TSFTextStore::HasReadWriteLock() const { | 920 bool TSFTextStore::HasReadWriteLock() const { |
920 return (current_lock_type_ & TS_LF_READWRITE) == TS_LF_READWRITE; | 921 return (current_lock_type_ & TS_LF_READWRITE) == TS_LF_READWRITE; |
921 } | 922 } |
922 | 923 |
923 } // namespace ui | 924 } // namespace ui |
OLD | NEW |