[ElmSharp] Changed Widget.SetFocus() internal routine (#35)
authorChungryeol Lim <darkleem@naver.com>
Wed, 17 Jan 2018 07:12:10 +0000 (16:12 +0900)
committerarosis78 <35049857+arosis78@users.noreply.github.com>
Wed, 17 Jan 2018 07:12:10 +0000 (16:12 +0900)
* [ElmSharp] Changed Widget.SetFocus() internal routine

* [ElmSharp] fix elm_object_focuse_clear() routine order

* [ElmSharp] elm_object_focus_clear() code clean up

src/ElmSharp/ElmSharp/Widget.cs
src/ElmSharp/Interop/Interop.Elementary.cs

index fcc315d..7b109fe 100644 (file)
@@ -293,14 +293,11 @@ namespace ElmSharp
         /// <since_tizen> preview </since_tizen>
         public void SetFocus(bool isFocus)
         {
-            Interop.Elementary.elm_object_focus_set(RealHandle, isFocus);
-
-            // Temporary code due to focus issue (will be removed at Tizen 5.0)
-            if (this is Window)
-            {
-                if (isFocus && !Interop.Evas.evas_object_focus_get(RealHandle))
-                    Interop.Evas.evas_object_focus_set(RealHandle, true);
-            }
+            if (isFocus)
+                Interop.Elementary.elm_object_focus_set(RealHandle, isFocus);
+            else
+                // Temporary code due to focus issue (will be removed at Tizen 5.0)
+                Interop.Elementary.elm_object_focused_clear(RealHandle);
         }
 
         /// <summary>
index ceef160..08ce9c9 100755 (executable)
@@ -91,6 +91,33 @@ internal static partial class Interop
             return Marshal.PtrToStringAnsi(_elm_config_profile_get());
         }
 
+        internal static void elm_object_focused_clear(IntPtr handle)
+        {
+            if (elm_widget_is(handle))
+            {
+                elm_widget_focused_object_clear(handle);
+            }
+            else
+            {
+                Evas.evas_object_focus_set(handle, false);
+            }
+
+            IntPtr win = elm_widget_top_get(handle);
+            if (win != IntPtr.Zero && Eo.eo_class_name_get(Eo.eo_class_get(win)) == "Elm_Win")
+            {
+                Evas.evas_object_focus_set(win, true);
+            }
+        }
+
+        [DllImport(Libraries.Elementary)]
+        internal static extern IntPtr elm_widget_top_get(IntPtr handle);
+
+        [DllImport(Libraries.Elementary)]
+        internal static extern bool elm_widget_is(IntPtr handle);
+
+        [DllImport(Libraries.Elementary)]
+        internal static extern void elm_widget_focused_object_clear(IntPtr handle);
+
         [DllImport(Libraries.Elementary)]
         internal static extern void elm_config_preferred_engine_set(string name);