forked from enlightenment/efl
elementary : Elementary focus can be controlled only when top window's
canvas gets focus. If elementary's focus control is tried with unfocused canvas, newest_focus_count is only updated. SVN revision: 63245
This commit is contained in:
parent
52b792ce75
commit
d20294db8e
|
@ -184,6 +184,8 @@ const void *_elm_module_symbol_get(Elm_Module *m, const char *name);
|
|||
|
||||
void _elm_widget_type_clear(void);
|
||||
void _elm_widget_focus_region_show(const Evas_Object *obj);
|
||||
void _elm_widget_top_win_focused_set(Evas_Object *obj, Eina_Bool top_win_focused);
|
||||
Eina_Bool _elm_widget_top_win_focused_get(const Evas_Object *obj);
|
||||
|
||||
void _elm_unneed_ethumb(void);
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ struct _Smart_Data
|
|||
Eina_Bool can_focus : 1;
|
||||
Eina_Bool child_can_focus : 1;
|
||||
Eina_Bool focused : 1;
|
||||
Eina_Bool top_win_focused : 1;
|
||||
Eina_Bool tree_unfocusable : 1;
|
||||
Eina_Bool highlight_ignore : 1;
|
||||
Eina_Bool highlight_in_theme : 1;
|
||||
|
@ -333,12 +334,13 @@ _parent_focus(Evas_Object *obj)
|
|||
|
||||
focus_order++;
|
||||
sd->focus_order = focus_order;
|
||||
sd->focused = EINA_TRUE;
|
||||
if (sd->on_focus_func) sd->on_focus_func(sd->on_focus_data, obj);
|
||||
if (sd->focus_func) sd->focus_func(obj);
|
||||
|
||||
_elm_widget_focus_region_show(obj);
|
||||
|
||||
if (sd->top_win_focused)
|
||||
{
|
||||
sd->focused = EINA_TRUE;
|
||||
if (sd->on_focus_func) sd->on_focus_func(sd->on_focus_data, obj);
|
||||
if (sd->focus_func) sd->focus_func(obj);
|
||||
_elm_widget_focus_region_show(obj);
|
||||
}
|
||||
sd->focus_order_on_calc = EINA_FALSE;
|
||||
}
|
||||
|
||||
|
@ -873,6 +875,7 @@ elm_widget_sub_object_add(Evas_Object *obj,
|
|||
if (sd2->parent_obj)
|
||||
elm_widget_sub_object_del(sd2->parent_obj, sobj);
|
||||
sd2->parent_obj = obj;
|
||||
sd2->top_win_focused = sd->top_win_focused;
|
||||
if (!sd->child_can_focus && (_is_focusable(sobj)))
|
||||
sd->child_can_focus = EINA_TRUE;
|
||||
}
|
||||
|
@ -1017,7 +1020,11 @@ elm_widget_resize_object_set(Evas_Object *obj,
|
|||
if (_elm_widget_is(sd->resize_obj))
|
||||
{
|
||||
Smart_Data *sd2 = evas_object_smart_data_get(sd->resize_obj);
|
||||
if (sd2) sd2->parent_obj = obj;
|
||||
if (sd2)
|
||||
{
|
||||
sd2->parent_obj = obj;
|
||||
sd2->top_win_focused = sd->top_win_focused;
|
||||
}
|
||||
evas_object_event_callback_add(sobj, EVAS_CALLBACK_HIDE,
|
||||
_sub_obj_hide, sd);
|
||||
}
|
||||
|
@ -1952,6 +1959,30 @@ elm_widget_focus_restore(Evas_Object *obj)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
_elm_widget_top_win_focused_set(Evas_Object *obj, Eina_Bool top_win_focused)
|
||||
{
|
||||
const Eina_List *l;
|
||||
Evas_Object *child;
|
||||
API_ENTRY return;
|
||||
|
||||
if (sd->top_win_focused == top_win_focused) return;
|
||||
if (sd->resize_obj)
|
||||
_elm_widget_top_win_focused_set(sd->resize_obj, top_win_focused);
|
||||
EINA_LIST_FOREACH(sd->subobjs, l, child)
|
||||
{
|
||||
_elm_widget_top_win_focused_set(child, top_win_focused);
|
||||
}
|
||||
sd->top_win_focused = top_win_focused;
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
_elm_widget_top_win_focused_get(const Evas_Object *obj)
|
||||
{
|
||||
API_ENTRY return EINA_FALSE;
|
||||
return sd->top_win_focused;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_widget_activate(Evas_Object *obj)
|
||||
{
|
||||
|
|
|
@ -307,6 +307,7 @@ _elm_win_focus_in(Ecore_Evas *ee)
|
|||
if (!obj) return;
|
||||
win = elm_widget_data_get(obj);
|
||||
if (!win) return;
|
||||
_elm_widget_top_win_focused_set(win->win_obj, EINA_TRUE);
|
||||
if (win->show_count == 1)
|
||||
{
|
||||
elm_object_focus_set(win->win_obj, EINA_TRUE);
|
||||
|
@ -336,6 +337,7 @@ _elm_win_focus_out(Ecore_Evas *ee)
|
|||
win = elm_widget_data_get(obj);
|
||||
if (!win) return;
|
||||
elm_object_focus_set(win->win_obj, EINA_FALSE);
|
||||
_elm_widget_top_win_focused_set(win->win_obj, EINA_FALSE);
|
||||
evas_object_smart_callback_call(win->win_obj, SIG_FOCUS_OUT, NULL);
|
||||
win->focus_highlight.cur.visible = EINA_FALSE;
|
||||
_elm_win_focus_highlight_reconfigure_job_start(win);
|
||||
|
|
Loading…
Reference in New Issue