[ElmSharp] Fixed incorrect behavior problem in event API 10/146210/9
authordarkleem <cdark.lim@samsung.com>
Fri, 25 Aug 2017 08:27:58 +0000 (17:27 +0900)
committerdarkleem <cdark.lim@samsung.com>
Fri, 1 Sep 2017 08:11:29 +0000 (17:11 +0900)
Change-Id: I2888dd67202f433e56fc538b7ee22f7926572ba1
Signed-off-by: darkleem <cdark.lim@samsung.com>
src/ElmSharp/ElmSharp/EvasObject.cs
test/ElmSharp.Test/TC/EventTest1.cs [new file with mode: 0644]

index 9c5b71b..5aa942c 100644 (file)
@@ -439,11 +439,17 @@ namespace ElmSharp
         {
             get
             {
-                return Interop.Evas.evas_object_repeat_events_get(RealHandle);
+                var result = Interop.Evas.evas_object_repeat_events_get(Handle);
+                Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_repeat_events_get(RealHandle));
+                return result;
             }
             set
             {
-                Interop.Evas.evas_object_repeat_events_set(RealHandle, value);
+                if (Handle != RealHandle)
+                {
+                    Interop.Evas.evas_object_repeat_events_set(RealHandle, value);
+                }
+                Interop.Evas.evas_object_repeat_events_set(Handle, value);
             }
         }
 
@@ -454,11 +460,17 @@ namespace ElmSharp
         {
             get
             {
-                return Interop.Evas.evas_object_propagate_events_get(RealHandle);
+                var result = Interop.Evas.evas_object_propagate_events_get(Handle);
+                Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_propagate_events_get(RealHandle));
+                return result;
             }
             set
             {
-                Interop.Evas.evas_object_propagate_events_set(RealHandle, value);
+                if (Handle != RealHandle)
+                {
+                    Interop.Evas.evas_object_propagate_events_set(RealHandle, value);
+                }
+                Interop.Evas.evas_object_propagate_events_set(Handle, value);
             }
         }
 
@@ -469,11 +481,17 @@ namespace ElmSharp
         {
             get
             {
-                return Interop.Evas.evas_object_pass_events_get(RealHandle);
+                var result = Interop.Evas.evas_object_pass_events_get(Handle);
+                Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_pass_events_get(RealHandle));
+                return result;
             }
             set
             {
-                Interop.Evas.evas_object_pass_events_set(RealHandle, value);
+                if (Handle != RealHandle)
+                {
+                    Interop.Evas.evas_object_pass_events_set(RealHandle, value);
+                }
+                Interop.Evas.evas_object_pass_events_set(Handle, value);
             }
         }
 
@@ -564,11 +582,17 @@ namespace ElmSharp
         {
             get
             {
-                return Interop.Evas.evas_object_freeze_events_get(RealHandle);
+                var result = Interop.Evas.evas_object_freeze_events_get(Handle);
+                Debug.Assert(Handle == RealHandle || result == Interop.Evas.evas_object_freeze_events_get(RealHandle));
+                return result;
             }
             set
             {
-                Interop.Evas.evas_object_freeze_events_set(RealHandle, value);
+                if (Handle != RealHandle)
+                {
+                    Interop.Evas.evas_object_freeze_events_set(RealHandle, value);
+                }
+                Interop.Evas.evas_object_freeze_events_set(Handle, value);
             }
         }
 
diff --git a/test/ElmSharp.Test/TC/EventTest1.cs b/test/ElmSharp.Test/TC/EventTest1.cs
new file mode 100644 (file)
index 0000000..25dda27
--- /dev/null
@@ -0,0 +1,130 @@
+using System.Diagnostics;
+
+/*
+ * Copyright (c) 2016 Samsung Electronics Co. Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace ElmSharp.Test
+{
+    class EventTest1 : TestCaseBase
+    {
+        public override string TestName => "EventTest1";
+        public override string TestDescription => "event propagation test";
+
+        Box gParent;
+        GestureLayer _gParentLayer, _parentLayer, childLayer, chLayer;
+
+        public override void Run(Window window)
+        {
+            Conformant conformant = new Conformant(window);
+            conformant.Show();
+            gParent = new Box(window)
+            {
+                BackgroundColor = Color.Yellow,
+                PassEvents = false,
+                PropagateEvents = false,
+            };
+            conformant.SetContent(gParent);
+
+            Box parent = new Box(gParent)
+            {
+                AlignmentX = -1,
+                AlignmentY = -1,
+                WeightX = 1,
+                WeightY = 1,
+                BackgroundColor = Color.Green,
+                PassEvents = false,
+                PropagateEvents = false,
+            };
+            Box child = new Box(parent)
+            {
+                AlignmentX = -1,
+                AlignmentY = -1,
+                WeightX = 1,
+                WeightY = 1,
+                BackgroundColor = Color.Blue,
+                PassEvents = false,
+                PropagateEvents = false,
+            };
+
+            Check ch = new Check(child)
+            {
+                AlignmentX = -1,
+                AlignmentY = -1,
+                WeightX = 1,
+                WeightY = 1,
+                BackgroundColor = Color.Silver,
+                PassEvents = false,
+                PropagateEvents = false,
+            };
+
+            gParent.PackEnd(parent);
+            parent.PackEnd(child);
+            child.PackEnd(ch);
+
+            gParent.Show();
+            parent.Show();
+            child.Show();
+            ch.Show();
+
+            _gParentLayer = new GestureLayer(gParent);
+            _gParentLayer.Attach(gParent);
+            _gParentLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
+            {
+                Debug.WriteLine($"@@@ Grand Parent Tap : {gParent.PassEvents}, {gParent.PropagateEvents}, {gParent.RepeatEvents}");
+            });
+            _parentLayer = new GestureLayer(parent);
+            _parentLayer.Attach(parent);
+            _parentLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
+            {
+                Debug.WriteLine($"@@@ Parent Tap : {parent.PassEvents}, {parent.PropagateEvents}, {parent.RepeatEvents}");
+            });
+            childLayer = new GestureLayer(child);
+            childLayer.Attach(child);
+            childLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
+            {
+                Debug.WriteLine($"@@@ Child Tap : {child.PassEvents}, {child.PropagateEvents}, {child.RepeatEvents}");
+            });
+
+            chLayer = new GestureLayer(ch);
+            chLayer.Attach(ch);
+            chLayer.SetTapCallback(GestureLayer.GestureType.Tap, GestureLayer.GestureState.End, (info) =>
+            {
+                Debug.WriteLine($"@@@ Check1 Tap : {ch.PassEvents}, {ch.PropagateEvents}, {ch.RepeatEvents}");
+            });
+
+            EvasObjectEvent eventGrand = new EvasObjectEvent(gParent, EvasObjectCallbackType.MouseDown);
+            eventGrand.On += (s, e) =>
+            {
+                Debug.WriteLine($"@@@ Grand Parent down : {gParent.PassEvents}, {gParent.PropagateEvents}, {gParent.RepeatEvents}");
+            };
+            EvasObjectEvent evnetParent = new EvasObjectEvent(parent, EvasObjectCallbackType.MouseDown);
+            evnetParent.On += (s, e) =>
+            {
+                Debug.WriteLine($"@@@ Parent down : {parent.PassEvents}, {parent.PropagateEvents}, {parent.RepeatEvents}");
+            };
+            EvasObjectEvent eventChild = new EvasObjectEvent(child, EvasObjectCallbackType.MouseDown);
+            eventChild.On += (s, e) =>
+            {
+                Debug.WriteLine($"@@@ Child down : {child.PassEvents}, {child.PropagateEvents}, {child.RepeatEvents}");
+            };
+            EvasObjectEvent eventCh = new EvasObjectEvent(ch, ch.RealHandle, EvasObjectCallbackType.MouseDown);
+            eventCh.On += (s, e) =>
+            {
+                Debug.WriteLine($"@@@ Check down : {ch.PassEvents}, {ch.PropagateEvents}, {ch.RepeatEvents}");
+            };
+        }
+    }
+}
\ No newline at end of file