From 6faa1f83dab99b85c59cfe41184ee11471756e4d Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 22 Aug 2012 10:02:32 +0000 Subject: [PATCH] make elm inlined window focus in work and thus key events work. :) SVN revision: 75534 --- legacy/elementary/src/bin/test_win_inline.c | 10 ++++++++++ legacy/elementary/src/lib/elm_main.c | 14 ++++++++++++++ legacy/elementary/src/lib/elm_win.c | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/legacy/elementary/src/bin/test_win_inline.c b/legacy/elementary/src/bin/test_win_inline.c index b996e5ed48..538a497444 100644 --- a/legacy/elementary/src/bin/test_win_inline.c +++ b/legacy/elementary/src/bin/test_win_inline.c @@ -134,6 +134,14 @@ fill(Evas_Object *win, Eina_Bool do_bg) evas_object_show(sc); } +static void +cb_mouse_down(void *data __UNUSED__, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev = event_info; + + if (ev->button == 1) elm_object_focus_set(obj, EINA_TRUE); +} + static void cb_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj, void *event_info) { @@ -219,6 +227,7 @@ test_win_inline(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_ evas_object_show(bg); win2 = elm_win_add(win, "inlined", ELM_WIN_INLINED_IMAGE); + evas_object_event_callback_add(elm_win_inlined_image_object_get(win2), EVAS_CALLBACK_MOUSE_DOWN, cb_mouse_down, NULL); fill(win2, EINA_TRUE); evas_object_move(win2, 20, 60); @@ -230,6 +239,7 @@ test_win_inline(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_ evas_object_show(win2); win3 = elm_win_add(win, "inlined", ELM_WIN_INLINED_IMAGE); + evas_object_event_callback_add(elm_win_inlined_image_object_get(win3), EVAS_CALLBACK_MOUSE_DOWN, cb_mouse_down, NULL); elm_win_alpha_set(win3, EINA_TRUE); fill(win3, EINA_FALSE); diff --git a/legacy/elementary/src/lib/elm_main.c b/legacy/elementary/src/lib/elm_main.c index c9f41549ae..ec04c6891c 100644 --- a/legacy/elementary/src/lib/elm_main.c +++ b/legacy/elementary/src/lib/elm_main.c @@ -1053,8 +1053,22 @@ elm_object_focus_set(Evas_Object *obj, if (elm_widget_is(obj)) { + const char *type; + if (focus == elm_widget_focus_get(obj)) return; + // ugly, but, special case for inlined windows + type = evas_object_type_get(obj); + if ((type) && (!strcmp(type, "elm_win"))) + { + Evas_Object *inlined = elm_win_inlined_image_object_get(obj); + + if (inlined) + { + evas_object_focus_set(inlined, focus); + return; + } + } if (focus) elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT); else diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c index 6c03d1a010..8412415130 100644 --- a/legacy/elementary/src/lib/elm_win.c +++ b/legacy/elementary/src/lib/elm_win.c @@ -680,7 +680,7 @@ _elm_win_focus_in(Ecore_Evas *ee) EINA_SAFETY_ON_NULL_RETURN(sd); obj = ELM_WIDGET_DATA(sd)->obj; - + _elm_widget_top_win_focused_set(obj, EINA_TRUE); if (!elm_widget_focus_order_get(obj)) {