return ao;
}
-// FIXME: There are applications which do not use elm_win as top widget.
-// This is workaround! Those could not use focus!
-static Eina_Bool _focus_enabled(Evas_Object *obj)
-{
- if (!elm_widget_focus_get(obj)) return EINA_FALSE;
-
- const Evas_Object *win = elm_widget_top_get(obj);
- const char *type = evas_object_type_get(win);
-
- if (type && !strcmp(type, "elm_win"))
- {
- return elm_win_focus_highlight_enabled_get(win);
- }
- return EINA_FALSE;
-}
-
EOLIAN static Eina_Bool
_elm_ctxpopup_elm_widget_focus_next(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item)
{
EOLIAN static Eina_Bool
_elm_ctxpopup_elm_widget_focus_direction(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd, const Evas_Object *base, double degree, Evas_Object **direction, Elm_Object_Item **direction_item, double *weight)
{
- Eina_Bool int_ret;
-
Eina_List *l = NULL;
void *(*list_data_get)(const Eina_List *list);
l = eina_list_append(l, sd->box);
- int_ret = elm_widget_focus_list_direction_get
- (obj, base, l, list_data_get, degree, direction, direction_item, weight);
+ elm_widget_focus_list_direction_get
+ (obj, base, l, list_data_get, degree, direction, direction_item, weight);
eina_list_free(l);
- return int_ret;
+ return EINA_TRUE;
}
static Eina_Bool
if (elm_widget_disabled_get(obj)) return EINA_FALSE;
if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
- if (!_focus_enabled(obj)) return EINA_FALSE;
//FIXME: for this key event, _elm_ctxpopup_smart_focus_next should be done first
- if ((!strcmp(ev->keyname, "Tab")) ||
- (!strcmp(ev->keyname, "ISO_Left_Tab")))
+ if ((!strcmp(ev->key, "Tab")) ||
+ (!strcmp(ev->key, "ISO_Left_Tab")))
{
+ Eina_Bool ret;
+ Evas_Object *target = NULL;
+ Elm_Object_Item *target_item = NULL;
+ Elm_Focus_Direction dir;
+
+ if (evas_key_modifier_is_set(ev->modifiers, "Control") ||
+ evas_key_modifier_is_set(ev->modifiers, "Alt"))
+ return EINA_FALSE;
+ if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
+ dir = ELM_FOCUS_PREVIOUS;
+ else
+ dir = ELM_FOCUS_NEXT;
+
+ ret = elm_widget_focus_next_get(sd->box, dir, &target, &target_item);
+ if (ret) elm_widget_focus_steal(target, target_item);
+
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
/////
- if (((!strcmp(ev->keyname, "Left")) ||
- (!strcmp(ev->keyname, "KP_Left")) ||
- (!strcmp(ev->keyname, "Right")) ||
- (!strcmp(ev->keyname, "KP_Right")) ||
- (!strcmp(ev->keyname, "Up")) ||
- (!strcmp(ev->keyname, "KP_Up")) ||
- (!strcmp(ev->keyname, "Down")) ||
- (!strcmp(ev->keyname, "KP_Down"))) && (!ev->string))
+ if (((!strcmp(ev->key, "Left")) ||
+ (!strcmp(ev->key, "KP_Left")) ||
+ (!strcmp(ev->key, "Right")) ||
+ (!strcmp(ev->key, "KP_Right")) ||
+ (!strcmp(ev->key, "Up")) ||
+ (!strcmp(ev->key, "KP_Up")) ||
+ (!strcmp(ev->key, "Down")) ||
+ (!strcmp(ev->key, "KP_Down"))) && (!ev->string))
{
double degree = 0.0;
- if ((!strcmp(ev->keyname, "Left")) ||
- (!strcmp(ev->keyname, "KP_Left")))
+ if ((!strcmp(ev->key, "Left")) ||
+ (!strcmp(ev->key, "KP_Left")))
degree = 270.0;
- else if ((!strcmp(ev->keyname, "Right")) ||
- (!strcmp(ev->keyname, "KP_Right")))
+ else if ((!strcmp(ev->key, "Right")) ||
+ (!strcmp(ev->key, "KP_Right")))
degree = 90.0;
- else if ((!strcmp(ev->keyname, "Up")) ||
- (!strcmp(ev->keyname, "KP_Up")))
+ else if ((!strcmp(ev->key, "Up")) ||
+ (!strcmp(ev->key, "KP_Up")))
degree = 0.0;
- else if ((!strcmp(ev->keyname, "Down")) ||
- (!strcmp(ev->keyname, "KP_Down")))
+ else if ((!strcmp(ev->key, "Down")) ||
+ (!strcmp(ev->key, "KP_Down")))
degree = 180.0;
elm_widget_focus_direction_go(sd->box, degree);
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
- else if (((!strcmp(ev->keyname, "Home")) ||
- (!strcmp(ev->keyname, "KP_Home")) ||
- (!strcmp(ev->keyname, "Prior")) ||
- (!strcmp(ev->keyname, "KP_Prior"))) && (!ev->string))
+ else if (((!strcmp(ev->key, "Home")) ||
+ (!strcmp(ev->key, "KP_Home")) ||
+ (!strcmp(ev->key, "Prior")) ||
+ (!strcmp(ev->key, "KP_Prior"))) && (!ev->string))
{
Elm_Ctxpopup_Item_Data *it = eina_list_data_get(sd->items);
Evas_Object *btn = it->btn;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
return EINA_TRUE;
}
- else if (((!strcmp(ev->keyname, "End")) ||
- (!strcmp(ev->keyname, "KP_End")) ||
- (!strcmp(ev->keyname, "Next")) ||
- (!strcmp(ev->keyname, "KP_Next"))) && (!ev->string))
+ else if (((!strcmp(ev->key, "End")) ||
+ (!strcmp(ev->key, "KP_End")) ||
+ (!strcmp(ev->key, "Next")) ||
+ (!strcmp(ev->key, "KP_Next"))) && (!ev->string))
{
Elm_Ctxpopup_Item_Data *it = eina_list_data_get(eina_list_last(sd->items));
Evas_Object *btn = it->btn;