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();
};