ic.range[0] += ic.produced.length;
ic.range[1] = ic.range[0] + ic.preedit.length;
MIM.set_caret (target, ic);
+ target.wait_update = false;
};
MIM.focus_in = function (event)
{
var target = event.target;
var ic = target.mim_ic;
- ic.Filter (MIM.Key.FocusIn);
- target.removeEventListener ('');
- setTimeout (MIM.update (target, ic);
- // Ignore further focus-in caused by setSelectionRange ().
- target.mim_ignore_focus_in = true;
- }
- }
-}
-
-MIM.cancel_ignore_focus = function ()
-{
- if (MIM.focus_ignore_target)
+ if (target.wait_focus_in);
{
- MIM.focus_ignore_target.mim_ignore_focus_in = false;
- MIM.focus_ignore_target.mim_ignore_focus_out = false;
+ Xex.Log ("Focus in " + target.tagName + ' IGNORED');
+ event.preventDefault ();
+ return;
}
+ Xex.Log ("Focus in " + target.tagName);
+ ic.Filter (MIM.Key.FocusIn);
+ //target.removeEventListener (target, 'focus', MIM.focus_in);
+ target.wait_update = true;
+ setTimeout (MIM.update (target, ic), 100);
}
MIM.focus_out = function (event)
{
var target = event.target;
var ic = target.mim_ic;
- if (ic)
+ if (target.wait_focus_out)
{
- if (target.mim_ignore_focus_out)
- {
- Xex.Log ('ignore focus_out in ' + target.tagName);
- // Ignore this event which is caused by setSelectionRange ().
- target.mim_ignore_focus_out = false;
- event.preventDefault ();
- }
- else
- {
- Xex.Log ('focus_out in ' + target.tagName);
- if (! MIM.get_range (target, ic))
- ic.reset ();
- ic.Filter (MIM.Key.FocusOut);
- // Ignore further focus-out caused by setSelectionRange ().
- target.mim_ignore_focus_in = true;
- target.mim_ignore_focus_out = true;
- MIM.focus_ignore_target = target;
- MIM.update (target, ic);
- setTimeout (MIM.cancel_ignore_focus, 100);
- }
+ Xex.Log ("Focus out " + target.tagName + ' IGNORED');
+ event.preventDefault ();
+ return;
}
+ Xex.Log ("Focus out " + target.tagName);
+ ic.Filter (MIM.Key.FocusOut);
+ //target.removeEventListener (target, 'blur', MIM.focus_out);
+ target.wait_update = true;
+ setTimeout (MIM.update (target, ic), 100);
};
MIM.keydown = function (event)
}
else
{
+ while (target.wait_update);
if (! MIM.get_range (target, ic))
ic.reset ();
}