+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN(wd);
+ _request_sizing_eval(wd);
+}
+
+EAPI Eina_Bool
+elm_layout_part_cursor_set(Evas_Object *obj, const char *part_name, const char *cursor)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part_name, EINA_FALSE);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(wd, EINA_FALSE);
+ Evas_Object *part_obj;
+ Part_Cursor *pc;
+
+ part_obj = (Evas_Object *)edje_object_part_object_get(wd->lay, part_name);
+ if (!part_obj)
+ {
+ const char *group, *file;
+ edje_object_file_get(wd->lay, &file, &group);
+ WRN("no part '%s' in group '%s' of file '%s'. Cannot set cursor '%s'",
+ part_name, group, file, cursor);
+ return EINA_FALSE;
+ }
+ if (evas_object_pass_events_get(part_obj))
+ {
+ const char *group, *file;
+ edje_object_file_get(wd->lay, &file, &group);
+ WRN("part '%s' in group '%s' of file '%s' has mouse_events: 0. "
+ "Cannot set cursor '%s'",
+ part_name, group, file, cursor);
+ return EINA_FALSE;
+ }
+
+ pc = _parts_cursors_find(wd, part_name);
+ if (pc) eina_stringshare_replace(&pc->cursor, cursor);
+ else
+ {
+ pc = calloc(1, sizeof(*pc));
+ pc->part = eina_stringshare_add(part_name);
+ pc->cursor = eina_stringshare_add(cursor);
+ pc->style = eina_stringshare_add("default");
+ wd->parts_cursors = eina_list_append(wd->parts_cursors, pc);
+ }
+
+ pc->obj = part_obj;
+ elm_object_sub_cursor_set(part_obj, obj, pc->cursor);
+ return EINA_TRUE;
+}
+
+EAPI const char *
+elm_layout_part_cursor_get(const Evas_Object *obj, const char *part_name)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part_name, NULL);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(wd, NULL);
+ Part_Cursor *pc = _parts_cursors_find(wd, part_name);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc->obj, NULL);
+ return elm_object_cursor_get(pc->obj);
+}
+
+EAPI Eina_Bool
+elm_layout_part_cursor_unset(Evas_Object *obj, const char *part_name)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part_name, EINA_FALSE);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(wd, EINA_FALSE);
+ Eina_List *l;
+ Part_Cursor *pc;
+
+ EINA_LIST_FOREACH(wd->parts_cursors, l, pc)
+ {
+ if (!strcmp(part_name, pc->part))
+ {
+ if (pc->obj) elm_object_cursor_unset(pc->obj);
+ _part_cursor_free(pc);
+ wd->parts_cursors = eina_list_remove_list(wd->parts_cursors, l);
+ return EINA_TRUE;
+ }
+ }
+
+ return EINA_FALSE;
+}
+
+EAPI Eina_Bool
+elm_layout_part_cursor_style_set(Evas_Object *obj, const char *part_name, const char *style)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part_name, EINA_FALSE);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(wd, EINA_FALSE);
+ Part_Cursor *pc = _parts_cursors_find(wd, part_name);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc->obj, EINA_FALSE);
+
+ eina_stringshare_replace(&pc->style, style);
+ elm_object_cursor_style_set(pc->obj, pc->style);
+ return EINA_TRUE;
+}
+
+EAPI const char *
+elm_layout_part_cursor_style_get(const Evas_Object *obj, const char *part_name)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part_name, NULL);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(wd, NULL);
+ Part_Cursor *pc = _parts_cursors_find(wd, part_name);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc->obj, NULL);
+ return elm_object_cursor_style_get(pc->obj);
+}
+
+EAPI Eina_Bool
+elm_layout_part_cursor_engine_only_set(Evas_Object *obj, const char *part_name, Eina_Bool engine_only)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part_name, EINA_FALSE);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(wd, EINA_FALSE);
+ Part_Cursor *pc = _parts_cursors_find(wd, part_name);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc->obj, EINA_FALSE);
+
+ pc->engine_only = !!engine_only;
+ elm_object_cursor_theme_search_enabled_set(pc->obj, pc->engine_only);
+ return EINA_TRUE;
+}
+
+EAPI Eina_Bool
+elm_layout_part_cursor_engine_only_get(const Evas_Object *obj, const char *part_name)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(part_name, EINA_FALSE);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(wd, EINA_FALSE);
+ Part_Cursor *pc = _parts_cursors_find(wd, part_name);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(pc->obj, EINA_FALSE);
+ return elm_object_cursor_theme_search_enabled_get(pc->obj);