A multilingual input method framework
Revision | 1ac01a0d238cc1124db6349afca8faa3cf394228 (tree) |
---|---|
Time | 2005-09-01 01:54:16 |
Author | ekato <ekato@ff9a...> |
Commiter | ekato |
* xim/ : Port changes in r1366 from trunk.
@@ -407,6 +407,9 @@ void XimIC::setFocus() | ||
407 | 407 | } |
408 | 408 | } |
409 | 409 | |
410 | +// Note that the sequence of XIM_SET_IC_FOCUS and XIM_UNSET_FOCUS | |
411 | +// events is not consistent. Be careful about hiding caret state and | |
412 | +// candidate window. | |
410 | 413 | void XimIC::unsetFocus() |
411 | 414 | { |
412 | 415 | if (!mIsActive) |
@@ -415,14 +418,6 @@ void XimIC::unsetFocus() | ||
415 | 418 | mIsActive = false; |
416 | 419 | nrActiveIC--; |
417 | 420 | m_kkContext->focusOut(); |
418 | - // Since the sequence of XIM_SET_IC_FOCUS and XIM_UNSET_FOCUS | |
419 | - // events is not consistent, unsetting focus of candidate window | |
420 | - // is now handled in XimIC::setFocus() and focus_in message from | |
421 | - // helper application. | |
422 | - // | |
423 | - // if (mConvdisp && m_kkContext->hasActiveCandwin()) { | |
424 | - // mConvdisp->unset_focus(); | |
425 | - // } | |
426 | 421 | } |
427 | 422 | |
428 | 423 | void XimIC::OnKeyEvent(keyEventX e) |
@@ -305,7 +305,7 @@ InputContext::~InputContext() | ||
305 | 305 | mFocusedContext = NULL; |
306 | 306 | |
307 | 307 | if (mConvdisp) |
308 | - mConvdisp->set_pe(0); | |
308 | + mConvdisp->set_pe(NULL); | |
309 | 309 | |
310 | 310 | delete m_pe; |
311 | 311 | uim_release_context(mUc); |
@@ -451,6 +451,13 @@ void | ||
451 | 451 | InputContext::focusOut() |
452 | 452 | { |
453 | 453 | uim_helper_client_focus_out(mUc); |
454 | + if (mFocusedContext == this) { | |
455 | + Canddisp *disp = canddisp_singleton(); | |
456 | + if (isCaretStateShown()) | |
457 | + disp->hide_caret_state(); | |
458 | + if (hasActiveCandwin()) | |
459 | + disp->hide(); | |
460 | + } | |
454 | 461 | } |
455 | 462 | |
456 | 463 | XimServer * |
@@ -471,7 +478,7 @@ InputContext::commit_cb(void *ptr, const char *str) | ||
471 | 478 | InputContext *ic = (InputContext *)ptr; |
472 | 479 | XimIC *xic = ic->get_ic(); |
473 | 480 | |
474 | - clear_cb(ptr); | |
481 | + ic->clear_pe_stat(); | |
475 | 482 | ic->update_preedit(); |
476 | 483 | xic->commit_string(str); |
477 | 484 | } |
@@ -479,7 +486,7 @@ InputContext::commit_cb(void *ptr, const char *str) | ||
479 | 486 | void InputContext::clear_cb(void *ptr) |
480 | 487 | { |
481 | 488 | InputContext *ic = (InputContext *)ptr; |
482 | - ic->clear_preedit(); | |
489 | + ic->clear_pe_stat(); | |
483 | 490 | } |
484 | 491 | |
485 | 492 | void InputContext::pushback_cb(void *ptr, int attr, const char *str) |
@@ -534,11 +541,18 @@ void InputContext::update_prop_label_cb(void *ptr, const char *str) | ||
534 | 541 | ic->update_prop_label(str); |
535 | 542 | } |
536 | 543 | |
537 | -void InputContext::clear_preedit() | |
544 | +void InputContext::clear_pe_stat() | |
538 | 545 | { |
539 | 546 | m_pe->clear(); |
540 | 547 | } |
541 | 548 | |
549 | +void InputContext::clear_preedit() | |
550 | +{ | |
551 | + clear_pe_stat(); | |
552 | + if (mConvdisp) | |
553 | + mConvdisp->clear_preedit(); | |
554 | +} | |
555 | + | |
542 | 556 | uString InputContext::get_preedit_string() |
543 | 557 | { |
544 | 558 | uString str; |
@@ -614,11 +628,10 @@ bool InputContext::hasActiveCandwin() | ||
614 | 628 | return mCandwinActive; |
615 | 629 | } |
616 | 630 | |
631 | +// reset | |
617 | 632 | void InputContext::clear() |
618 | 633 | { |
619 | 634 | clear_preedit(); |
620 | - if (mConvdisp) | |
621 | - mConvdisp->clear_preedit(); | |
622 | 635 | candidate_deactivate(); |
623 | 636 | uim_reset_context(mUc); |
624 | 637 | } |
@@ -193,15 +193,15 @@ public: | ||
193 | 193 | static void update_prop_label_cb(void *ptr, const char *str); |
194 | 194 | static InputContext *focusedContext(); |
195 | 195 | static void deletefocusedContext(); |
196 | -protected: | |
196 | +private: | |
197 | 197 | void commit_string(char *); |
198 | + void clear_pe_stat(); | |
199 | + | |
198 | 200 | XimIC *mXic; |
199 | 201 | XimServer *mServer; |
200 | 202 | pe_stat *m_pe; |
201 | 203 | Convdisp *mConvdisp; |
202 | 204 | uim_context mUc; |
203 | -private: | |
204 | - static InputContext *mFocusedContext; | |
205 | 205 | bool mCandwinActive; |
206 | 206 | int mDisplayLimit; |
207 | 207 | int mNumPage; |
@@ -211,6 +211,8 @@ private: | ||
211 | 211 | char *mEngineName; |
212 | 212 | char *mLocaleName; |
213 | 213 | bool mCaretStateShown; |
214 | +private: | |
215 | + static InputContext *mFocusedContext; | |
214 | 216 | }; |
215 | 217 | |
216 | 218 | class Locale { |