浏览代码

fixed CLICK bubling direction!!!

dmuratshin 9 年之前
父节点
当前提交
d7b5a427d2
共有 2 个文件被更改,包括 14 次插入10 次删除
  1. 7 4
      oxygine/src/Actor.cpp
  2. 7 6
      oxygine/src/SlidingActor.cpp

+ 7 - 4
oxygine/src/Actor.cpp

@@ -288,7 +288,11 @@ namespace oxygine
     {
         _pressedButton[b] = 0;
         if (_pressedOvered == _overred)//!_pressed[0] && !_pressed[1] && !_pressed[2])
-            _getStage()->removeEventListener(TouchEvent::TOUCH_UP, CLOSURE(this, &Actor::_onGlobalTouchUpEvent));
+        {
+            Stage *stage = _getStage();
+            if (stage)
+                stage->removeEventListener(TouchEvent::TOUCH_UP, CLOSURE(this, &Actor::_onGlobalTouchUpEvent));
+        }
 
         updateStatePressed();
     }
@@ -369,7 +373,7 @@ namespace oxygine
             {
                 click = *te;
                 click.type = TouchEvent::CLICK;
-                click.bubbles = false;
+                click.bubbles = true;
                 //will be dispatched later after UP
 
                 setNotPressed(te->mouseButton);
@@ -379,7 +383,6 @@ namespace oxygine
 
         EventDispatcher::dispatchEvent(event);
 
-
         if (!event->stopsImmediatePropagation && event->bubbles && !event->stopsPropagation)
         {
             if (_parent)
@@ -396,7 +399,7 @@ namespace oxygine
             }
         }
 
-        if (click.type)
+        if (click.type && event->target.get() == this)
         {
             //send click event at the end after TOUCH_UP event
             dispatchEvent(&click);

+ 7 - 6
oxygine/src/SlidingActor.cpp

@@ -328,15 +328,16 @@ namespace oxygine
                         while (act && act.get() != _content.get())
                         {
                             for (int i = 0; i < MouseButton_Num; ++i)
+                            {
                                 act->setNotPressed((MouseButton)i);
 
+                                TouchEvent ev(TouchEvent::TOUCH_UP, true, Vector2(-100000, -100000));
+                                ev.mouseButton = (MouseButton)i;
+                                ev.index = te->index;
+                                ev.bubbles = false;
+                                act->dispatchEvent(&ev);
 
-                            TouchEvent ev(TouchEvent::TOUCH_UP, true, Vector2(-100000, -100000));
-                            ev.index = te->index;
-                            ev.bubbles = false;
-                            act->dispatchEvent(&ev);
-
-
+                            }
                             act = act->getParent();
                         }