return ret;
}
+ internal TouchDataSignal TouchDataSignal()
+ {
+ TouchDataSignal ret = new TouchDataSignal(NDalicPINVOKE.Actor_TouchSignal(Layer.getCPtr(GetRootLayer())), false);
+ if (NDalicPINVOKE.SWIGPendingException.Pending)
+ throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+ return ret;
+ }
+
private StageWheelSignal WheelEventSignal()
{
StageWheelSignal ret = new StageWheelSignal(NDalicPINVOKE.Stage_WheelEventSignal(stageCPtr), false);
}
}
- private event EventHandler<TouchEventArgs> _stageTouchHandler;
- private EventCallbackDelegateType1 _stageTouchCallbackDelegate;
+ private event EventHandler<TouchEventArgs> _rootLayerTouchDataEventHandler;
+ [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+ private delegate bool RootLayerTouchDataCallbackType(IntPtr view, IntPtr touchData);
+ private RootLayerTouchDataCallbackType _rootLayerTouchDataCallback;
/// <summary>
/// This event is emitted when the screen is touched and when the touch ends.<br />
/// If there are multiple touch points, then this will be emitted when the first touch occurs and
{
add
{
- lock (this)
+ if (_rootLayerTouchDataEventHandler == null)
{
- _stageTouchHandler += value;
- _stageTouchCallbackDelegate = OnStageTouch;
- this.TouchSignal().Connect(_stageTouchCallbackDelegate);
+ _rootLayerTouchDataCallback = OnWindowTouch;
+ this.TouchDataSignal().Connect(_rootLayerTouchDataCallback);
}
+ _rootLayerTouchDataEventHandler += value;
}
remove
{
- lock (this)
+ _rootLayerTouchDataEventHandler -= value;
+ if (_rootLayerTouchDataEventHandler == null && TouchSignal().Empty() == false)
{
- if (_stageTouchHandler != null)
- {
- this.TouchSignal().Disconnect(_stageTouchCallbackDelegate);
- }
- _stageTouchHandler -= value;
+ this.TouchDataSignal().Disconnect(_rootLayerTouchDataCallback);
}
}
}
- private void OnStageTouch(IntPtr data)
+ private bool OnWindowTouch(IntPtr view, IntPtr touchData)
{
- TouchEventArgs e = new TouchEventArgs();
-
- if (data != null)
+ if (touchData == global::System.IntPtr.Zero)
{
- e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(data);
+ NUILog.Error("touchData should not be null!");
+ return false;
}
- if (_stageTouchHandler != null)
+ TouchEventArgs e = new TouchEventArgs();
+
+ e.Touch = Tizen.NUI.Touch.GetTouchFromPtr(touchData);
+
+ if (_rootLayerTouchDataEventHandler != null)
{
- _stageTouchHandler(this, e);
+ _rootLayerTouchDataEventHandler(this, e);
}
+ return false;
}
/// <summary>