elementary/elm_win : Elementary's focus control should be started
authorwoohyun <woohyun@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 7 Sep 2011 01:41:19 +0000 (01:41 +0000)
committerwoohyun <woohyun@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 7 Sep 2011 01:41:19 +0000 (01:41 +0000)
after the canvas gets focus. There can be a case that the canvas doesn't get
focus when elm_win is shown.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@63240 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_win.c

index e414f38..804c154 100644 (file)
@@ -26,6 +26,7 @@ struct _Elm_Win
    } shot;
    Eina_Bool autodel : 1;
    int *autodel_clear, rot;
+   int show_count;
    struct {
       int x, y;
    } screen;
@@ -306,7 +307,12 @@ _elm_win_focus_in(Ecore_Evas *ee)
    if (!obj) return;
    win = elm_widget_data_get(obj);
    if (!win) return;
-   if (!elm_widget_focus_get(win->win_obj))
+   if (win->show_count == 1)
+     {
+        elm_object_focus_set(win->win_obj, EINA_TRUE);
+        win->show_count++;
+     }
+   else
      elm_widget_focus_restore(win->win_obj);
    evas_object_smart_callback_call(win->win_obj, SIG_FOCUS_IN, NULL);
    win->focus_highlight.cur.visible = EINA_TRUE;
@@ -433,11 +439,11 @@ _deferred_ecore_evas_free(void *data)
 }
 
 static void
-_elm_win_obj_callback_show(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_win_obj_callback_show(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
    Elm_Win *win = data;
 
-   elm_object_focus_set(obj, EINA_TRUE);
+   if (!win->show_count) win->show_count++;
    if (win->shot.info) _shot_handle(win);
 }