Bug-org 965685 Merge nsIWidget::NotifyIMEOfTextChange() and nsIWidget::NotifyIME()
初回投稿日時: 2014年02月22日14時54分21秒
最終更新日時: 2014年02月22日14時55分36秒
カテゴリ: Mozilla Core Mozilla30 バグ修正
SNS:
Tweet (list)
nsIWidget::NotifyIME()
は、通知内容を数字ひとつ渡しているだけだったので、nsIWidget::NotifyIMEOfTextChange()
だけが特別扱いになっているのが以前から気になっていました。
この修正で、数値ではなく、構造体を渡すようにしたので、今後、簡単に追加情報を含めて、IME関係の通知後にある典型的な処理を省いたりすることで、単純化・ランタイムコストの削減を行いたいと思っています。引数は以下のIMENotification
構造体のみになります。
enum IMEMessage MOZ_ENUM_TYPE(int8_t) { // XXX We should replace NOTIFY_IME_OF_CURSOR_POS_CHANGED with // NOTIFY_IME_OF_SELECTION_CHANGE later. NOTIFY_IME_OF_CURSOR_POS_CHANGED, // An editable content is getting focus NOTIFY_IME_OF_FOCUS, // An editable content is losing focus NOTIFY_IME_OF_BLUR, // Selection in the focused editable content is changed NOTIFY_IME_OF_SELECTION_CHANGE, // Text in the focused editable content is changed NOTIFY_IME_OF_TEXT_CHANGE, // Composition string has been updated NOTIFY_IME_OF_COMPOSITION_UPDATE, // Request to commit current composition to IME // (some platforms may not support) REQUEST_TO_COMMIT_COMPOSITION, // Request to cancel current composition to IME // (some platforms may not support) REQUEST_TO_CANCEL_COMPOSITION }; struct IMENotification { IMENotification(IMEMessage aMessage) : mMessage(aMessage) { switch (aMessage) { case NOTIFY_IME_OF_TEXT_CHANGE: mTextChangeData.mStartOffset = 0; mTextChangeData.mOldEndOffset = 0; mTextChangeData.mNewEndOffset = 0; break; default: break; } } IMEMessage mMessage; union { // NOTIFY_IME_OF_TEXT_CHANGE specific data struct { uint32_t mStartOffset; uint32_t mOldEndOffset; uint32_t mNewEndOffset; uint32_t OldLength() const { return mOldEndOffset - mStartOffset; } uint32_t NewLength() const { return mNewEndOffset - mStartOffset; } int32_t AdditionalLength() const { return static_cast<int32_t>(mNewEndOffset - mOldEndOffset); } bool IsInInt32Range() const { return mStartOffset <= INT32_MAX && mOldEndOffset <= INT32_MAX && mNewEndOffset <= INT32_MAX; } } mTextChangeData; }; private: IMENotification(); };