Bug 951021 Android widget should set modifier state at dispatching events derived from WidgetInputEvent r=nchen

This commit is contained in:
Masayuki Nakano
2013-12-18 11:25:10 +09:00
parent 440e4a743d
commit e4d3600190
3 changed files with 53 additions and 29 deletions

View File

@@ -667,12 +667,8 @@ AndroidGeckoEvent::MakeTouchEvent(nsIWidget* widget)
return event;
}
event.modifiers = 0;
event.modifiers = DOMModifiers();
event.time = Time();
event.InitBasicModifiers(IsCtrlPressed(),
IsAltPressed(),
IsShiftPressed(),
IsMetaPressed());
const nsIntPoint& offset = widget->WidgetToScreenOffset();
event.touches.SetCapacity(endIndex - startIndex);
@@ -733,18 +729,7 @@ AndroidGeckoEvent::MakeMultiTouchInput(nsIWidget* widget)
}
MultiTouchInput event(type, Time(), 0);
if (IsCtrlPressed()) {
event.modifiers |= MODIFIER_CONTROL;
}
if (IsAltPressed()) {
event.modifiers |= MODIFIER_ALT;
}
if (IsShiftPressed()) {
event.modifiers |= MODIFIER_SHIFT;
}
if (IsMetaPressed()) {
event.modifiers |= MODIFIER_META;
}
event.modifiers = DOMModifiers();
if (type < 0) {
// An event we don't know about
@@ -802,7 +787,7 @@ AndroidGeckoEvent::MakeMouseEvent(nsIWidget* widget)
if (msg != NS_MOUSE_MOVE) {
event.clickCount = 1;
}
event.modifiers = 0;
event.modifiers = DOMModifiers();
event.time = Time();
// We are dispatching this event directly into Gecko (as opposed to going
@@ -816,6 +801,37 @@ AndroidGeckoEvent::MakeMouseEvent(nsIWidget* widget)
return event;
}
Modifiers
AndroidGeckoEvent::DOMModifiers() const
{
Modifiers result = 0;
if (mMetaState & AMETA_ALT_MASK) {
result |= MODIFIER_ALT;
}
if (mMetaState & AMETA_SHIFT_MASK) {
result |= MODIFIER_SHIFT;
}
if (mMetaState & AMETA_CTRL_MASK) {
result |= MODIFIER_CONTROL;
}
if (mMetaState & AMETA_META_MASK) {
result |= MODIFIER_META;
}
if (mMetaState & AMETA_FUNCTION_ON) {
result |= MODIFIER_FN;
}
if (mMetaState & AMETA_CAPS_LOCK_ON) {
result |= MODIFIER_CAPSLOCK;
}
if (mMetaState & AMETA_NUM_LOCK_ON) {
result |= MODIFIER_NUMLOCK;
}
if (mMetaState & AMETA_SCROLL_LOCK_ON) {
result |= MODIFIER_SCROLLLOCK;
}
return result;
}
void
AndroidPoint::Init(JNIEnv *jenv, jobject jobj)
{