forked from enlightenment/efl
We can change the focusable state of elm_layout by calling elm_object_focus_allow_set from application side.
This commit is contained in:
parent
dbbe13e7ca
commit
27d51db839
|
@ -395,7 +395,10 @@ static void
|
|||
_elm_layout_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
||||
{
|
||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||
*ret = EINA_TRUE;
|
||||
if (!elm_widget_can_focus_get(obj))
|
||||
*ret = EINA_TRUE;
|
||||
else
|
||||
*ret = EINA_FALSE;
|
||||
}
|
||||
/* WARNING: if you're making a widget *not* supposed to have focusable
|
||||
* child objects, but still inheriting from elm_layout, just set its
|
||||
|
@ -501,7 +504,10 @@ static void
|
|||
_elm_layout_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
||||
{
|
||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||
*ret = EINA_TRUE;
|
||||
if (!elm_widget_can_focus_get(obj))
|
||||
*ret = EINA_TRUE;
|
||||
else
|
||||
*ret = EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -172,6 +172,53 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] =
|
|||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static void
|
||||
_obj_mouse_down(void *data,
|
||||
Evas *e __UNUSED__,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
void *event_info)
|
||||
{
|
||||
ELM_WIDGET_DATA_GET(data, sd);
|
||||
Evas_Event_Mouse_Down *ev = event_info;
|
||||
if (!(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
|
||||
sd->still_in = EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_obj_mouse_move(void *data,
|
||||
Evas *e __UNUSED__,
|
||||
Evas_Object *obj,
|
||||
void *event_info)
|
||||
{
|
||||
ELM_WIDGET_DATA_GET(data, sd);
|
||||
Evas_Event_Mouse_Move *ev = event_info;
|
||||
if (sd->still_in)
|
||||
{
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
||||
sd->still_in = EINA_FALSE;
|
||||
else
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
evas_object_geometry_get(obj, &x, &y, &w, &h);
|
||||
if ((ev->cur.canvas.x < x) || (ev->cur.canvas.y < y) ||
|
||||
(ev->cur.canvas.x >= (x + w)) || (ev->cur.canvas.y >= (y + h)))
|
||||
sd->still_in = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_obj_mouse_up(void *data,
|
||||
Evas *e __UNUSED__,
|
||||
Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
{
|
||||
ELM_WIDGET_DATA_GET(data, sd);
|
||||
if (sd->still_in)
|
||||
elm_widget_focus_mouse_up_handle(obj);
|
||||
sd->still_in = EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_widget_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||
{
|
||||
|
@ -184,6 +231,12 @@ _elm_widget_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
elm_widget_can_focus_set(obj, EINA_TRUE);
|
||||
elm_widget_mirrored_set(obj, elm_config_mirrored_get());
|
||||
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_obj_mouse_down, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE,
|
||||
_obj_mouse_move, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP,
|
||||
_obj_mouse_up, obj);
|
||||
/* just a helper for inheriting classes */
|
||||
if (priv->resize_obj)
|
||||
{
|
||||
|
@ -459,53 +512,6 @@ _elm_widget_focus_direction_manager_is(const Evas_Object *obj)
|
|||
return manager_is;
|
||||
}
|
||||
|
||||
static void
|
||||
_obj_mouse_down(void *data,
|
||||
Evas *e __UNUSED__,
|
||||
Evas_Object *obj __UNUSED__,
|
||||
void *event_info)
|
||||
{
|
||||
ELM_WIDGET_DATA_GET(data, sd);
|
||||
Evas_Event_Mouse_Down *ev = event_info;
|
||||
if (!(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
|
||||
sd->still_in = EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_obj_mouse_move(void *data,
|
||||
Evas *e __UNUSED__,
|
||||
Evas_Object *obj,
|
||||
void *event_info)
|
||||
{
|
||||
ELM_WIDGET_DATA_GET(data, sd);
|
||||
Evas_Event_Mouse_Move *ev = event_info;
|
||||
if (sd->still_in)
|
||||
{
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
|
||||
sd->still_in = EINA_FALSE;
|
||||
else
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
evas_object_geometry_get(obj, &x, &y, &w, &h);
|
||||
if ((ev->cur.canvas.x < x) || (ev->cur.canvas.y < y) ||
|
||||
(ev->cur.canvas.x >= (x + w)) || (ev->cur.canvas.y >= (y + h)))
|
||||
sd->still_in = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_obj_mouse_up(void *data,
|
||||
Evas *e __UNUSED__,
|
||||
Evas_Object *obj,
|
||||
void *event_info __UNUSED__)
|
||||
{
|
||||
ELM_WIDGET_DATA_GET(data, sd);
|
||||
if (sd->still_in)
|
||||
elm_widget_focus_mouse_up_handle(obj);
|
||||
sd->still_in = EINA_FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
_propagate_x_drag_lock(Evas_Object *obj,
|
||||
int dir)
|
||||
|
@ -1187,19 +1193,7 @@ _elm_widget_resize_object_set(Eo *obj, void *_pd, va_list *list)
|
|||
}
|
||||
|
||||
sd->resize_obj = sobj;
|
||||
if (!sobj)
|
||||
{
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_obj_mouse_down, obj);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_MOVE,
|
||||
_obj_mouse_move, obj);
|
||||
evas_object_event_callback_del_full(obj,
|
||||
EVAS_CALLBACK_MOUSE_UP,
|
||||
_obj_mouse_up, obj);
|
||||
return;
|
||||
}
|
||||
if (!sobj) return;
|
||||
|
||||
// orphan new resize obj
|
||||
parent = evas_object_data_get(sobj, "elm-parent");
|
||||
|
@ -1216,17 +1210,9 @@ _elm_widget_resize_object_set(Eo *obj, void *_pd, va_list *list)
|
|||
elm_widget_sub_object_del(parent, sobj);
|
||||
}
|
||||
}
|
||||
|
||||
elm_widget_sub_object_add(obj, sobj);
|
||||
|
||||
evas_object_smart_member_add(sobj, obj);
|
||||
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
|
||||
_obj_mouse_down, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE,
|
||||
_obj_mouse_move, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP,
|
||||
_obj_mouse_up, obj);
|
||||
_smart_reconfigure(sd);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue