elm_win_focus_highlight_animate_set(data, EINA_FALSE);
}
+static void
+_rd_changed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
+{
+ int value = elm_radio_state_value_get(obj);
+
+ if (value == 0)
+ elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK);
+ else if (value == 1)
+ elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_IN);
+ else
+ elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_KEY_ONLY);
+}
+
void
test_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
- Evas_Object *win, *tbx, *tbar, *menu;
+ Evas_Object *win, *tbx, *tbar, *mainbx, *menu, *ttb;
Elm_Object_Item *tb_it;
Elm_Object_Item *menu_it;
unsigned int i, j;
elm_box_pack_end(tbx, tbar);
evas_object_show(tbar);
- Evas_Object *mainbx = elm_box_add(win);
+ mainbx = elm_box_add(win);
elm_box_horizontal_set(mainbx, EINA_TRUE);
evas_object_size_hint_weight_set(mainbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_pack_end(tbx, mainbx);
Evas_Object *ly = elm_layout_add(win);
snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
elm_layout_file_set(ly, buf, "twolines");
- evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
+ evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(mainbx, ly);
my_show(ly);
evas_object_smart_callback_add(bt2, "clicked", my_enable, bt);
my_show(bt2);
elm_object_focus_custom_chain_append(bx2, bt2, NULL);
+
+ Evas_Object *bt3;
+ bt3 = elm_button_add(win);
+ elm_object_text_set(bt3, "KeyOnly with Auto");
+ elm_object_focus_move_policy_set(bt3, ELM_FOCUS_MOVE_POLICY_KEY_ONLY);
+ elm_object_focus_move_policy_automatic_set(bt, EINA_TRUE); // EINA_TURE is default
+ evas_object_size_hint_align_set(bt3, EVAS_HINT_FILL,
+ EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(bt3, 0.0, 0.0);
+ elm_box_pack_end(bx2, bt3);
+ my_show(bt3);
+ elm_object_focus_custom_chain_append(bx2, bt3, NULL);
+
+ Evas_Object *bt4;
+ bt4 = elm_button_add(win);
+ elm_object_text_set(bt4, "KeyOnly without Auto");
+ elm_object_focus_move_policy_set(bt4, ELM_FOCUS_MOVE_POLICY_KEY_ONLY);
+ elm_object_focus_move_policy_automatic_set(bt4, EINA_FALSE);
+ evas_object_size_hint_align_set(bt4, EVAS_HINT_FILL,
+ EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(bt4, 0.0, 0.0);
+ elm_box_pack_end(bx2, bt4);
+ my_show(bt4);
+ elm_object_focus_custom_chain_append(bx2, bt4, NULL);
}
}
}
}
- Evas_Object *bx = elm_box_add(win);
- evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
- elm_box_pack_end(tbx, bx);
- my_show(bx);
+ ttb = elm_table_add(win);
+ evas_object_size_hint_weight_set(ttb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_box_pack_end(tbx, ttb);
+ my_show(ttb);
{
Evas_Object *ck;
- ck = elm_check_add(bx);
+ ck = elm_check_add(ttb);
elm_object_text_set(ck, "Focus Highlight Enable");
elm_check_state_set(ck, elm_win_focus_highlight_enabled_get(win));
- elm_box_pack_end(bx, ck);
+ evas_object_size_hint_align_set(ck, 0.0, EVAS_HINT_FILL);
+ elm_table_pack(ttb, ck, 0, 0, 1, 1);
my_show(ck);
evas_object_smart_callback_add(ck, "changed",
_focus_highlight_changed,
win);
- ck = elm_check_add(bx);
+ ck = elm_check_add(ttb);
elm_object_text_set(ck, "Focus Highlight Animation Enable");
elm_check_state_set(ck, elm_win_focus_highlight_animate_get(win));
- elm_box_pack_end(bx, ck);
+ evas_object_size_hint_align_set(ck, 0.0, EVAS_HINT_FILL);
+ elm_table_pack(ttb, ck, 0, 1, 1, 1);
my_show(ck);
evas_object_smart_callback_add(ck, "changed",
_focus_anim_changed,
win);
}
+
+ {
+ Evas_Object *rd, *rdg;
+
+ for (i = 0; i < 3; i++)
+ {
+ rd = elm_radio_add(ttb);
+ elm_radio_state_value_set(rd, i);
+ evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(rd, 0.0, EVAS_HINT_FILL);
+ elm_table_pack(ttb, rd, 1, i, 1, 1);
+ evas_object_show(rd);
+ evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, NULL);
+
+ if (i == 0)
+ {
+ rdg = rd;
+ elm_object_text_set(rd, "Move Policy: Key+Click(Default)");
+ }
+ else if (i == 1)
+ {
+ elm_radio_group_add(rd, rdg);
+ elm_object_text_set(rd, "Move Policy: Key+Click+In");
+ }
+ else
+ {
+ elm_radio_group_add(rd, rdg);
+ elm_object_text_set(rd, "Move Policy: Key Only");
+ }
+ }
+ }
}
/**** focus 2 ****/
priv->obj = obj;
priv->mirrored_auto_mode = EINA_TRUE; /* will follow system locale
* settings */
+ priv->focus_move_policy_auto_mode = EINA_TRUE;
priv->focus_region_show_mode = ELM_FOCUS_REGION_SHOW_WIDGET;
elm_widget_can_focus_set(obj, EINA_TRUE);
priv->is_mirrored = elm_config_mirrored_get();
return EINA_TRUE;
}
+/**
+ * @internal
+ *
+ * Resets the focus_move_policy mode from the system one
+ * for widgets that are in automatic mode.
+ *
+ * @param obj The widget.
+ *
+ */
+static void
+_elm_widget_focus_move_policy_reload(Evas_Object *obj)
+{
+ API_ENTRY return;
+ Elm_Focus_Move_Policy focus_move_policy = elm_config_focus_move_policy_get();
+
+ if (elm_widget_focus_move_policy_automatic_get(obj) &&
+ (sd->focus_move_policy != focus_move_policy))
+ {
+ sd->focus_move_policy = focus_move_policy;
+ }
+}
+
+EOLIAN static void
+_elm_widget_focus_reconfigure(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUSED)
+{
+ const Eina_List *l;
+ Evas_Object *child;
+ API_ENTRY return;
+
+ EINA_LIST_FOREACH(sd->subobjs, l, child)
+ {
+ if (elm_widget_is(child))
+ elm_widget_focus_reconfigure(child);
+ }
+
+ if (sd->hover_obj) elm_widget_focus_reconfigure(sd->hover_obj);
+
+ _elm_widget_focus_move_policy_reload(obj);
+}
+
EAPI void
elm_widget_content_part_set(Evas_Object *obj,
const char *part,
eo_do(obj, elm_obj_container_content_set(part, content));
}
+/**
+ * Returns the widget's focus_move_policy mode setting.
+ *
+ * @param obj The widget.
+ * @return focus_move_policy mode setting of the object.
+ *
+ **/
+EOLIAN static Eina_Bool
+_elm_widget_focus_move_policy_automatic_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd)
+{
+ return sd->focus_move_policy_auto_mode;
+}
+
+/**
+ * @internal
+ *
+ * Sets the widget's focus_move_policy mode setting.
+ * When widget in automatic mode, it follows the system focus_move_policy mode set by
+ * elm_config_focus_move_policy_set().
+ * @param obj The widget.
+ * @param automatic EINA_TRUE for auto focus_move_policy mode. EINA_FALSE for manual.
+ */
+EOLIAN static void
+_elm_widget_focus_move_policy_automatic_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool automatic)
+{
+ if (sd->focus_move_policy_auto_mode != automatic)
+ {
+ sd->focus_move_policy_auto_mode = automatic;
+
+ if (automatic)
+ {
+ elm_widget_focus_move_policy_set(obj, elm_config_focus_move_policy_get());
+ }
+ }
+}
+
EAPI Evas_Object *
elm_widget_content_part_get(const Evas_Object *obj,
const char *part)