[ElmSharp] Fix Focus Clearing issue (#510)
authorJay Cho <chojoong@gmail.com>
Wed, 10 Oct 2018 07:16:32 +0000 (16:16 +0900)
committerarosis78 <35049857+arosis78@users.noreply.github.com>
Wed, 10 Oct 2018 07:16:32 +0000 (16:16 +0900)
src/ElmSharp/ElmSharp/Widget.cs
src/ElmSharp/Interop/Interop.Elementary.cs [changed mode: 0755->0644]

index 4a6fcbb..0831836 100644 (file)
@@ -293,7 +293,14 @@ namespace ElmSharp
         /// <since_tizen> preview </since_tizen>
         public void SetFocus(bool isFocus)
         {
-            Interop.Elementary.elm_object_focus_set(RealHandle, isFocus);
+            if (isFocus)
+            {
+                Interop.Elementary.elm_object_focus_set(RealHandle, isFocus);
+            }
+            else
+            {
+                Interop.Elementary.elm_object_focused_clear(RealHandle);
+            }
         }
 
         /// <summary>
old mode 100755 (executable)
new mode 100644 (file)
index 5e7acc4..8a8cb0c
@@ -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))
+            {
+                efl_ui_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.efl_class_name_get(Eo.efl_class_get(win)) == "Efl.Ui.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 efl_ui_widget_focused_object_clear(IntPtr handle);
+
         [DllImport(Libraries.Elementary)]
         internal static extern void elm_config_preferred_engine_set(string name);