@@ -58,15 +58,27 @@ Elm.Native.Graphics.Input = function(elm) {
5858 btn.elmHover = Render.render(model.hover);
5959 btn.elmDown = Render.render(model.down);
6060
61− function replace(node) { return function() {
61+ function replace(node) {
6262 if (node !== btn.firstChild) btn.replaceChild(node, btn.firstChild);
63− };
6463 }
65− var hover = replace(btn.elmHover);
66− function up() { hover(); elm.notify(events.id, btn.elmEvent); }
67− btn.addEventListener('mouseover', hover);
68− btn.addEventListener('mouseout' , replace(btn.elmUp));
69− btn.addEventListener('mousedown', replace(btn.elmDown));
64+ var overCount = 0;
65+ function over(e) {
66+ if (overCount++ > 0) return;
67+ replace(btn.elmHover);
68+ }
69+ function out(e) {
70+ if (btn.contains(e.toElement || e.relatedTarget)) return;
71+ overCount = 0;
72+ replace(btn.elmUp);
73+ }
74+ function up() {
75+ replace(btn.elmHover);
76+ elm.notify(events.id, btn.elmEvent);
77+ }
78+ function down() { replace(btn.elmDown); }
79+ btn.addEventListener('mouseover', over);
80+ btn.addEventListener('mouseout' , out);
81+ btn.addEventListener('mousedown', down);
7082 btn.addEventListener('mouseup' , up);
7183
7284 btn.appendChild(btn.elmUp);