From: Chungryeol Lim Date: Wed, 17 Jan 2018 07:12:10 +0000 (+0900) Subject: [ElmSharp] Changed Widget.SetFocus() internal routine (#35) X-Git-Tag: submit/tizen_4.0/20180118.063616~1^2~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=775e5cb1615d3dd50af247a7e86430b58e66dc11;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [ElmSharp] Changed Widget.SetFocus() internal routine (#35) * [ElmSharp] Changed Widget.SetFocus() internal routine * [ElmSharp] fix elm_object_focuse_clear() routine order * [ElmSharp] elm_object_focus_clear() code clean up --- diff --git a/src/ElmSharp/ElmSharp/Widget.cs b/src/ElmSharp/ElmSharp/Widget.cs index fcc315d5a..7b109feef 100644 --- a/src/ElmSharp/ElmSharp/Widget.cs +++ b/src/ElmSharp/ElmSharp/Widget.cs @@ -293,14 +293,11 @@ namespace ElmSharp /// preview 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); } /// diff --git a/src/ElmSharp/Interop/Interop.Elementary.cs b/src/ElmSharp/Interop/Interop.Elementary.cs index ceef160d5..08ce9c908 100755 --- a/src/ElmSharp/Interop/Interop.Elementary.cs +++ b/src/ElmSharp/Interop/Interop.Elementary.cs @@ -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);