static const char SMART_NAME[] = "elm_widget";
-#define API_ENTRY \
- Smart_Data *sd = evas_object_smart_data_get(obj); \
- if ((!obj) || (!sd) || (!_elm_widget_is(obj)))
-#define INTERNAL_ENTRY \
- Smart_Data *sd = evas_object_smart_data_get(obj); \
- if (!sd) return;
-
-typedef struct _Smart_Data Smart_Data;
-typedef struct _Edje_Signal_Data Edje_Signal_Data;
+#define API_ENTRY \
+ Smart_Data * sd = evas_object_smart_data_get(obj); \
+ if ((!obj) || (!sd) || (!_elm_widget_is(obj)))
+#define INTERNAL_ENTRY \
+ Smart_Data * sd = evas_object_smart_data_get(obj); \
+ if (!sd) return;
+
+#undef elm_widget_text_set_hook_set
+#undef elm_widget_text_get_hook_set
+#undef elm_widget_content_set_hook_set
+#undef elm_widget_content_get_hook_set
+#undef elm_widget_content_unset_hook_set
+
+typedef struct _Smart_Data Smart_Data;
+typedef struct _Edje_Signal_Data Edje_Signal_Data;
typedef struct _Elm_Event_Cb_Data Elm_Event_Cb_Data;
struct _Smart_Data
{
- Evas_Object *obj;
- const char *type;
- Evas_Object *parent_obj;
- Evas_Coord x, y, w, h;
- Eina_List *subobjs;
- Evas_Object *resize_obj;
- Evas_Object *hover_obj;
- Eina_List *tooltips, *cursors;
- void (*del_func) (Evas_Object *obj);
- void (*del_pre_func) (Evas_Object *obj);
- void (*focus_func) (Evas_Object *obj);
- void (*activate_func) (Evas_Object *obj);
- void (*disable_func) (Evas_Object *obj);
- void (*theme_func) (Evas_Object *obj);
- Eina_Bool (*event_func) (Evas_Object *obj, Evas_Object *source, Evas_Callback_Type type, void *event_info);
- void (*signal_func) (Evas_Object *obj, const char *emission,
- const char *source);
- void (*callback_add_func) (Evas_Object *obj, const char *emission,
- const char *source, void (*func) (void *data,
- Evas_Object *o, const char *emission,
- const char *source), void *data);
- void (*callback_del_func) (Evas_Object *obj, const char *emission,
- const char *source, void (*func) (void *data,
- Evas_Object *o, const char *emission,
- const char *source), void *data);
- void (*changed_func) (Evas_Object *obj);
- Eina_Bool (*focus_next_func) (const Evas_Object *obj, Elm_Focus_Direction dir,
- Evas_Object **next);
- void (*on_focus_func) (void *data, Evas_Object *obj);
- void *on_focus_data;
- void (*on_change_func) (void *data, Evas_Object *obj);
- void *on_change_data;
- void (*on_show_region_func) (void *data, Evas_Object *obj);
- void *on_show_region_data;
- void (*focus_region_func) (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
- void (*on_focus_region_func) (const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
- void *data;
- Evas_Coord rx, ry, rw, rh;
- int scroll_hold;
- int scroll_freeze;
- double scale;
- Elm_Theme *theme;
- const char *style;
- unsigned int focus_order;
- Eina_Bool focus_order_on_calc;
-
- int child_drag_x_locked;
- int child_drag_y_locked;
-
- Eina_List *edje_signals;
-
- Eina_Bool drag_x_locked : 1;
- Eina_Bool drag_y_locked : 1;
-
- Eina_Bool can_focus : 1;
- Eina_Bool child_can_focus : 1;
- Eina_Bool focused : 1;
- Eina_Bool highlight_ignore : 1;
- Eina_Bool highlight_in_theme : 1;
- Eina_Bool disabled : 1;
- Eina_Bool is_mirrored : 1;
- Eina_Bool mirrored_auto_mode : 1; /* This is TRUE by default */
-
- Eina_List *focus_chain;
- Eina_List *event_cb;
+ Evas_Object *obj;
+ const char *type;
+ Evas_Object *parent_obj;
+ Evas_Coord x, y, w, h;
+ Eina_List *subobjs;
+ Evas_Object *resize_obj;
+ Evas_Object *hover_obj;
+ Eina_List *tooltips, *cursors;
+ void (*del_func)(Evas_Object *obj);
+ void (*del_pre_func)(Evas_Object *obj);
+ void (*focus_func)(Evas_Object *obj);
+ void (*activate_func)(Evas_Object *obj);
+ void (*disable_func)(Evas_Object *obj);
+ void (*theme_func)(Evas_Object *obj);
+ Eina_Bool (*event_func)(Evas_Object *obj,
+ Evas_Object *source,
+ Evas_Callback_Type type,
+ void *event_info);
+ void (*signal_func)(Evas_Object *obj,
+ const char *emission,
+ const char *source);
+ void (*callback_add_func)(Evas_Object *obj,
+ const char *emission,
+ const char *source,
+ Edje_Signal_Cb func,
+ void *data);
+ void (*callback_del_func)(Evas_Object *obj,
+ const char *emission,
+ const char *source,
+ Edje_Signal_Cb func,
+ void *data);
+ void (*changed_func)(Evas_Object *obj);
+ Eina_Bool (*focus_next_func)(const Evas_Object *obj,
+ Elm_Focus_Direction dir,
+ Evas_Object **next);
+ void (*on_focus_func)(void *data,
+ Evas_Object *obj);
+ void *on_focus_data;
+ void (*on_change_func)(void *data,
+ Evas_Object *obj);
+ void *on_change_data;
+ void (*on_show_region_func)(void *data,
+ Evas_Object *obj);
+ void *on_show_region_data;
+ void (*focus_region_func)(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y,
+ Evas_Coord w,
+ Evas_Coord h);
+ void (*on_focus_region_func)(const Evas_Object *obj,
+ Evas_Coord *x,
+ Evas_Coord *y,
+ Evas_Coord *w,
+ Evas_Coord *h);
+ Elm_Widget_On_Text_Set_Cb on_text_set_func;
+ Elm_Widget_On_Text_Get_Cb on_text_get_func;
+ Elm_Widget_On_Content_Set_Cb on_content_set_func;
+ Elm_Widget_On_Content_Get_Cb on_content_get_func;
+ Elm_Widget_On_Content_Unset_Cb on_content_unset_func;
+ void *data;
+ Evas_Coord rx, ry, rw, rh;
+ int scroll_hold;
+ int scroll_freeze;
+ double scale;
+ Elm_Theme *theme;
+ const char *style;
+ unsigned int focus_order;
+ Eina_Bool focus_order_on_calc;
+
+ int child_drag_x_locked;
+ int child_drag_y_locked;
+
+ Eina_List *edje_signals;
+
+ Eina_Bool drag_x_locked : 1;
+ Eina_Bool drag_y_locked : 1;
+
+ 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;
+ Eina_Bool disabled : 1;
+ Eina_Bool is_mirrored : 1;
+ Eina_Bool mirrored_auto_mode : 1; /* This is TRUE by default */
+
+ Eina_List *focus_chain;
+ Eina_List *event_cb;
};
struct _Edje_Signal_Data
{
- Evas_Object *obj;
+ Evas_Object *obj;
Edje_Signal_Cb func;
- const char *emission;
- const char *source;
- void *data;
+ const char *emission;
+ const char *source;
+ void *data;
};
-struct _Elm_Event_Cb_Data {
- Elm_Event_Cb func;
- const void *data;
+struct _Elm_Event_Cb_Data
+{
+ Elm_Event_Cb func;
+ const void *data;
};
/* local subsystem functions */
static void _smart_reconfigure(Smart_Data *sd);
static void _smart_add(Evas_Object *obj);
static void _smart_del(Evas_Object *obj);
-static void _smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
-static void _smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
+static void _smart_move(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y);
+static void _smart_resize(Evas_Object *obj,
+ Evas_Coord w,
+ Evas_Coord h);
static void _smart_show(Evas_Object *obj);
static void _smart_hide(Evas_Object *obj);
-static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a);
-static void _smart_clip_set(Evas_Object *obj, Evas_Object * clip);
+static void _smart_color_set(Evas_Object *obj,
+ int r,
+ int g,
+ int b,
+ int a);
+static void _smart_clip_set(Evas_Object *obj,
+ Evas_Object *clip);
static void _smart_clip_unset(Evas_Object *obj);
static void _smart_calculate(Evas_Object *obj);
static void _smart_init(void);
-static void _if_focused_revert(Evas_Object *obj, Eina_Bool can_focus_only);
-static Evas_Object *_newest_focus_order_get(Evas_Object *obj, unsigned int *newest_focus_order, Eina_Bool can_focus_only);
+static void _if_focused_revert(Evas_Object *obj,
+ Eina_Bool can_focus_only);
+static Evas_Object *_newest_focus_order_get(Evas_Object *obj,
+ unsigned int *newest_focus_order,
+ Eina_Bool can_focus_only);
/* local subsystem globals */
static Evas_Smart *_e_smart = NULL;
{
for (; obj; obj = elm_widget_parent_get(obj))
{
- Smart_Data *sd = evas_object_smart_data_get(obj);
- if (!sd) return;
+ INTERNAL_ENTRY
if (!sd->focused) return;
sd->focused = 0;
}
{
for (; obj; obj = elm_widget_parent_get(obj))
{
- Smart_Data *sd = evas_object_smart_data_get(obj);
- if (!sd) return;
+ INTERNAL_ENTRY
if (sd->focused) return;
sd->focused = 1;
}
}
static void
-_sub_obj_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_sub_obj_del(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
{
Smart_Data *sd = data;
}
static void
-_sub_obj_mouse_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_sub_obj_hide(void *data __UNUSED__,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
{
- Evas_Object *o = obj;
- do
- {
- if (_elm_widget_is(o)) break;
- o = evas_object_smart_parent_get(o);
- }
- while (o);
- if (!o) return;
- if (!_is_focusable(o)) return;
- elm_widget_focus_steal(o);
+ elm_widget_focus_hide_handle(obj);
}
static void
-_propagate_x_drag_lock(Evas_Object *obj, int dir)
+_sub_obj_mouse_down(void *data __UNUSED__,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
{
- Smart_Data *sd = evas_object_smart_data_get(obj);
+ elm_widget_focus_mouse_down_handle(obj);
+}
+
+static void
+_propagate_x_drag_lock(Evas_Object *obj,
+ int dir)
+{
+ INTERNAL_ENTRY
if (sd->parent_obj)
{
Smart_Data *sd2 = evas_object_smart_data_get(sd->parent_obj);
}
static void
-_propagate_y_drag_lock(Evas_Object *obj, int dir)
+_propagate_y_drag_lock(Evas_Object *obj,
+ int dir)
{
- Smart_Data *sd = evas_object_smart_data_get(obj);
+ INTERNAL_ENTRY
if (sd->parent_obj)
{
Smart_Data *sd2 = evas_object_smart_data_get(sd->parent_obj);
}
static void
-_propagate_event(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info)
+_propagate_event(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info)
{
- INTERNAL_ENTRY;
- Evas_Callback_Type type = (Evas_Callback_Type)(long) data;
+ INTERNAL_ENTRY
+ Evas_Callback_Type type = (Evas_Callback_Type)(long)data;
Evas_Event_Flags *event_flags = NULL;
switch (type)
{
- case EVAS_CALLBACK_KEY_DOWN:
+ case EVAS_CALLBACK_KEY_DOWN:
{
- Evas_Event_Key_Down *ev = event_info;
- event_flags = &(ev->event_flags);
- break;
+ Evas_Event_Key_Down *ev = event_info;
+ event_flags = &(ev->event_flags);
}
- case EVAS_CALLBACK_KEY_UP:
+ break;
+
+ case EVAS_CALLBACK_KEY_UP:
{
Evas_Event_Key_Up *ev = event_info;
event_flags = &(ev->event_flags);
- break;
}
- case EVAS_CALLBACK_MOUSE_WHEEL:
+ break;
+
+ case EVAS_CALLBACK_MOUSE_WHEEL:
{
- Evas_Event_Mouse_Wheel *ev = event_info;
- event_flags = &(ev->event_flags);
- break;
+ Evas_Event_Mouse_Wheel *ev = event_info;
+ event_flags = &(ev->event_flags);
}
- default:
+ break;
+
+ default:
break;
}
_parent_focus(Evas_Object *obj)
{
API_ENTRY return;
+ if (sd->focused) return;
Evas_Object *o = elm_widget_parent_get(obj);
sd->focus_order_on_calc = EINA_TRUE;
- if (sd->focused) return;
- if (o)
- {
- unsigned int i = 0;
- Evas_Object *ret;
-
- ret = _newest_focus_order_get(o, &i, EINA_TRUE);
-
- /* we don't want to bump a common widget ancestor's
- focus_order *twice* while parent focusing */
- if (!ret || (!i) || (i != focus_order))
- _parent_focus(o);
- }
+ if (o) _parent_focus(o);
if (!sd->focus_order_on_calc)
return; /* we don't want to override it if by means of any of the
- callbacks below one gets to calculate our order
- first. */
+ callbacks below one gets to calculate our order
+ first. */
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;
}
static void
-_elm_object_focus_chain_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_object_focus_chain_del_cb(void *data,
+ Evas *e __UNUSED__,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
{
Smart_Data *sd = data;
widtypes = eina_list_append(widtypes, (void *)ptr);
}
+/**
+ * @defgroup Widget Widget
+ *
+ * @internal
+ * Disposed api for making widgets
+ */
+EAPI void
+elm_widget_type_unregister(const char **ptr)
+{
+ widtypes = eina_list_remove(widtypes, (void *)ptr);
+}
+
EAPI Eina_Bool
elm_widget_api_check(int ver)
{
}
EAPI void
-elm_widget_del_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj))
+elm_widget_del_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj))
{
API_ENTRY return;
sd->del_func = func;
}
EAPI void
-elm_widget_del_pre_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj))
+elm_widget_del_pre_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj))
{
API_ENTRY return;
sd->del_pre_func = func;
}
EAPI void
-elm_widget_focus_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj))
+elm_widget_focus_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj))
{
API_ENTRY return;
sd->focus_func = func;
}
EAPI void
-elm_widget_activate_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj))
+elm_widget_activate_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj))
{
API_ENTRY return;
sd->activate_func = func;
}
EAPI void
-elm_widget_disable_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj))
+elm_widget_disable_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj))
{
API_ENTRY return;
sd->disable_func = func;
}
EAPI void
-elm_widget_theme_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj))
+elm_widget_theme_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj))
{
API_ENTRY return;
sd->theme_func = func;
}
EAPI void
-elm_widget_event_hook_set(Evas_Object *obj, Eina_Bool (*func) (Evas_Object *obj, Evas_Object *source, Evas_Callback_Type type, void *event_info))
+elm_widget_event_hook_set(Evas_Object *obj,
+ Eina_Bool (*func)(Evas_Object *obj,
+ Evas_Object *source,
+ Evas_Callback_Type type,
+ void *event_info))
{
API_ENTRY return;
sd->event_func = func;
}
EAPI void
-elm_widget_changed_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj))
+elm_widget_text_set_hook_set(Evas_Object *obj,
+ Elm_Widget_On_Text_Set_Cb func)
+{
+ API_ENTRY return;
+ sd->on_text_set_func = func;
+}
+
+EAPI void
+elm_widget_text_get_hook_set(Evas_Object *obj,
+ Elm_Widget_On_Text_Get_Cb func)
+{
+ API_ENTRY return;
+ sd->on_text_get_func = func;
+}
+
+EAPI void
+elm_widget_content_set_hook_set(Evas_Object *obj,
+ Elm_Widget_On_Content_Set_Cb func)
+{
+ API_ENTRY return;
+ sd->on_content_set_func = func;
+}
+
+EAPI void
+elm_widget_content_get_hook_set(Evas_Object *obj,
+ Elm_Widget_On_Content_Get_Cb func)
+{
+ API_ENTRY return;
+ sd->on_content_get_func = func;
+}
+
+EAPI void
+elm_widget_content_unset_hook_set(Evas_Object *obj,
+ Elm_Widget_On_Content_Unset_Cb func)
+{
+ API_ENTRY return;
+ sd->on_content_unset_func = func;
+}
+
+EAPI void
+elm_widget_changed_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj))
{
API_ENTRY return;
sd->changed_func = func;
}
EAPI void
-elm_widget_signal_emit_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj, const char *emission, const char *source))
+elm_widget_signal_emit_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj,
+ const char *emission,
+ const char *source))
{
API_ENTRY return;
sd->signal_func = func;
}
EAPI void
-elm_widget_signal_callback_add_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj, const char *emission, const char *source, void (*func_cb) (void *data, Evas_Object *o, const char *emission, const char *source), void *data))
+elm_widget_signal_callback_add_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj,
+ const char *emission,
+ const char *source,
+ Edje_Signal_Cb func_cb,
+ void *data))
{
API_ENTRY return;
sd->callback_add_func = func;
}
EAPI void
-elm_widget_signal_callback_del_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj, const char *emission, const char *source, void (*func_cb) (void *data, Evas_Object *o, const char *emission, const char *source), void *data))
+elm_widget_signal_callback_del_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj,
+ const char *emission,
+ const char *source,
+ Edje_Signal_Cb func_cb,
+ void *data))
{
API_ENTRY return;
sd->callback_del_func = func;
}
EAPI void
-elm_widget_theme_specific(Evas_Object *obj, Elm_Theme *th, Eina_Bool force)
+elm_widget_theme_specific(Evas_Object *obj,
+ Elm_Theme *th,
+ Eina_Bool force)
{
const Eina_List *l;
Evas_Object *child;
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_next_hook_set(Evas_Object *obj, Eina_Bool (*func) (const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next))
+elm_widget_focus_next_hook_set(Evas_Object *obj,
+ Eina_Bool (*func)(const Evas_Object *obj,
+ Elm_Focus_Direction dir,
+ Evas_Object **next))
{
API_ENTRY return;
sd->focus_next_func = func;
* @param mirrored EINA_TRUE to set mirrored mode. EINA_FALSE to unset.
*/
EAPI void
-elm_widget_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
+elm_widget_mirrored_set(Evas_Object *obj,
+ Eina_Bool mirrored)
{
API_ENTRY return;
if (sd->is_mirrored != mirrored)
{
- sd->is_mirrored = mirrored;
- elm_widget_theme(obj);
+ sd->is_mirrored = mirrored;
+ elm_widget_theme(obj);
}
}
Eina_Bool mirrored = elm_mirrored_get();
if (elm_widget_mirrored_automatic_get(obj) && (sd->is_mirrored != mirrored))
{
- sd->is_mirrored = mirrored;
+ sd->is_mirrored = mirrored;
}
}
* @param automatic EINA_TRUE for auto mirrored mode. EINA_FALSE for manual.
*/
EAPI void
-elm_widget_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic)
+elm_widget_mirrored_automatic_set(Evas_Object *obj,
+ Eina_Bool automatic)
{
API_ENTRY return;
if (sd->mirrored_auto_mode != automatic)
{
- sd->mirrored_auto_mode = automatic;
+ sd->mirrored_auto_mode = automatic;
if (automatic)
{
}
EAPI void
-elm_widget_on_focus_hook_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
+elm_widget_on_focus_hook_set(Evas_Object *obj,
+ void (*func)(void *data,
+ Evas_Object *obj),
+ void *data)
{
API_ENTRY return;
sd->on_focus_func = func;
}
EAPI void
-elm_widget_on_change_hook_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
+elm_widget_on_change_hook_set(Evas_Object *obj,
+ void (*func)(void *data,
+ Evas_Object *obj),
+ void *data)
{
API_ENTRY return;
sd->on_change_func = func;
}
EAPI void
-elm_widget_on_show_region_hook_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
+elm_widget_on_show_region_hook_set(Evas_Object *obj,
+ void (*func)(void *data,
+ Evas_Object *obj),
+ void *data)
{
API_ENTRY return;
sd->on_show_region_func = func;
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_region_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h))
+elm_widget_focus_region_hook_set(Evas_Object *obj,
+ void (*func)(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y,
+ Evas_Coord w,
+ Evas_Coord h))
{
API_ENTRY return;
sd->focus_region_func = func;
* @ingroup Widget
*/
EAPI void
-elm_widget_on_focus_region_hook_set(Evas_Object *obj, void (*func) (const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h))
+elm_widget_on_focus_region_hook_set(Evas_Object *obj,
+ void (*func)(const Evas_Object *obj,
+ Evas_Coord *x,
+ Evas_Coord *y,
+ Evas_Coord *w,
+ Evas_Coord *h))
{
API_ENTRY return;
sd->on_focus_region_func = func;
}
EAPI void
-elm_widget_data_set(Evas_Object *obj, void *data)
+elm_widget_data_set(Evas_Object *obj,
+ void *data)
{
API_ENTRY return;
sd->data = data;
}
EAPI void
-elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj)
+elm_widget_sub_object_add(Evas_Object *obj,
+ Evas_Object *sobj)
{
API_ENTRY return;
double scale, pscale = elm_widget_scale_get(sobj);
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;
}
sd->subobjs = eina_list_append(sd->subobjs, sobj);
evas_object_data_set(sobj, "elm-parent", obj);
evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
+ if (_elm_widget_is(sobj))
+ evas_object_event_callback_add(sobj, EVAS_CALLBACK_HIDE, _sub_obj_hide, sd);
evas_object_smart_callback_call(obj, "sub-object-add", sobj);
scale = elm_widget_scale_get(sobj);
th = elm_widget_theme_get(sobj);
}
EAPI void
-elm_widget_sub_object_del(Evas_Object *obj, Evas_Object *sobj)
+elm_widget_sub_object_del(Evas_Object *obj,
+ Evas_Object *sobj)
{
Evas_Object *sobj_parent;
API_ENTRY return;
sobj_parent = evas_object_data_del(sobj, "elm-parent");
if (sobj_parent != obj)
{
- static int abort_on_warn = -1;
- ERR("removing sub object %p from parent %p, "
- "but elm-parent is different %p!",
- sobj, obj, sobj_parent);
- if (EINA_UNLIKELY(abort_on_warn == -1))
- {
- if (getenv("ELM_ERROR_ABORT")) abort_on_warn = 1;
- else abort_on_warn = 0;
- }
- if (abort_on_warn == 1) abort();
- }
- if (!sd->child_can_focus)
- {
- if (_is_focusable(sobj)) sd->child_can_focus = 0;
+ static int abort_on_warn = -1;
+ ERR("removing sub object %p from parent %p, "
+ "but elm-parent is different %p!",
+ sobj, obj, sobj_parent);
+ if (EINA_UNLIKELY(abort_on_warn == -1))
+ {
+ if (getenv("ELM_ERROR_ABORT")) abort_on_warn = 1;
+ else abort_on_warn = 0;
+ }
+ if (abort_on_warn == 1) abort();
}
if (_elm_widget_is(sobj))
{
else
sd->subobjs = eina_list_remove(sd->subobjs, sobj);
if (elm_widget_focus_get(sobj)) _unfocus_parents(obj);
+ if ((sd->child_can_focus) && (_is_focusable(sobj)))
+ {
+ Evas_Object *subobj;
+ const Eina_List *l;
+ sd->child_can_focus = EINA_FALSE;
+ EINA_LIST_FOREACH(sd->subobjs, l, subobj)
+ {
+ if (_is_focusable(subobj))
+ {
+ sd->child_can_focus = EINA_TRUE;
+ break;
+ }
+ }
+ }
}
else
sd->subobjs = eina_list_remove(sd->subobjs, sobj);
evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL,
_sub_obj_del, sd);
+ if (_elm_widget_is(sobj))
+ evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_HIDE,
+ _sub_obj_hide, sd);
evas_object_smart_callback_call(obj, "sub-object-del", sobj);
}
EAPI void
-elm_widget_resize_object_set(Evas_Object *obj, Evas_Object *sobj)
+elm_widget_resize_object_set(Evas_Object *obj,
+ Evas_Object *sobj)
{
API_ENTRY return;
// orphan previous resize obj
if (sd->resize_obj)
{
- evas_object_clip_unset(sd->resize_obj);
- evas_object_data_del(sd->resize_obj, "elm-parent");
- if (_elm_widget_is(sd->resize_obj))
- {
- Smart_Data *sd2 = evas_object_smart_data_get(sd->resize_obj);
- if (sd2) sd2->parent_obj = NULL;
- }
- evas_object_event_callback_del_full(sd->resize_obj, EVAS_CALLBACK_DEL,
+ evas_object_clip_unset(sd->resize_obj);
+ evas_object_data_del(sd->resize_obj, "elm-parent");
+ if (_elm_widget_is(sd->resize_obj))
+ {
+ Smart_Data *sd2 = evas_object_smart_data_get(sd->resize_obj);
+ if (sd2) sd2->parent_obj = NULL;
+ evas_object_event_callback_del_full(sd->resize_obj, EVAS_CALLBACK_HIDE,
+ _sub_obj_hide, sd);
+ }
+ evas_object_event_callback_del_full(sd->resize_obj, EVAS_CALLBACK_DEL,
_sub_obj_del, sd);
- evas_object_event_callback_del_full(sd->resize_obj, EVAS_CALLBACK_MOUSE_DOWN,
+ evas_object_event_callback_del_full(sd->resize_obj, EVAS_CALLBACK_MOUSE_DOWN,
_sub_obj_mouse_down, sd);
- evas_object_smart_member_del(sd->resize_obj);
+ evas_object_smart_member_del(sd->resize_obj);
if (_elm_widget_is(sd->resize_obj))
{
if (elm_widget_focus_get(sd->resize_obj)) _unfocus_parents(obj);
{
Smart_Data *sd2 = evas_object_smart_data_get(sobj);
if (sd2) sd2->parent_obj = NULL;
+ evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_HIDE,
+ _sub_obj_hide, sd);
}
evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL,
_sub_obj_del, sd);
sd->resize_obj = sobj;
if (sd->resize_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;
- }
- evas_object_clip_set(sobj, evas_object_clip_get(obj));
- evas_object_smart_member_add(sobj, obj);
- evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL,
+ if (_elm_widget_is(sd->resize_obj))
+ {
+ Smart_Data *sd2 = evas_object_smart_data_get(sd->resize_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);
+ }
+ evas_object_clip_set(sobj, evas_object_clip_get(obj));
+ evas_object_smart_member_add(sobj, obj);
+ evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL,
_sub_obj_del, sd);
- evas_object_event_callback_add(sobj, EVAS_CALLBACK_MOUSE_DOWN,
+ evas_object_event_callback_add(sobj, EVAS_CALLBACK_MOUSE_DOWN,
_sub_obj_mouse_down, sd);
- _smart_reconfigure(sd);
- evas_object_data_set(sobj, "elm-parent", obj);
- evas_object_smart_callback_call(obj, "sub-object-add", sobj);
+ _smart_reconfigure(sd);
+ evas_object_data_set(sobj, "elm-parent", obj);
+ evas_object_smart_callback_call(obj, "sub-object-add", sobj);
if (_elm_widget_is(sobj))
{
if (elm_widget_focus_get(sobj)) _focus_parents(obj);
}
EAPI void
-elm_widget_hover_object_set(Evas_Object *obj, Evas_Object *sobj)
+elm_widget_hover_object_set(Evas_Object *obj,
+ Evas_Object *sobj)
{
API_ENTRY return;
if (sd->hover_obj)
{
- evas_object_event_callback_del_full(sd->hover_obj, EVAS_CALLBACK_DEL,
- _sub_obj_del, sd);
+ evas_object_event_callback_del_full(sd->hover_obj, EVAS_CALLBACK_DEL,
+ _sub_obj_del, sd);
}
sd->hover_obj = sobj;
if (sd->hover_obj)
{
- evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL,
+ evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL,
_sub_obj_del, sd);
- _smart_reconfigure(sd);
+ _smart_reconfigure(sd);
}
}
EAPI void
-elm_widget_can_focus_set(Evas_Object *obj, Eina_Bool can_focus)
+elm_widget_can_focus_set(Evas_Object *obj,
+ Eina_Bool can_focus)
{
API_ENTRY return;
sd->can_focus = can_focus;
{
evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN,
_propagate_event,
- (void *)(long) EVAS_CALLBACK_KEY_DOWN);
+ (void *)(long)EVAS_CALLBACK_KEY_DOWN);
evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_UP,
_propagate_event,
- (void *)(long) EVAS_CALLBACK_KEY_UP);
+ (void *)(long)EVAS_CALLBACK_KEY_UP);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_WHEEL,
_propagate_event,
(void *)(long)EVAS_CALLBACK_MOUSE_WHEEL);
return sd->child_can_focus;
}
+/**
+ * @internal
+ *
+ * This API makes the widget object and its children to be unfocusable.
+ *
+ * This API can be helpful for an object to be deleted.
+ * When an object will be deleted soon, it and its children may not
+ * want to get focus (by focus reverting or by other focus controls).
+ * Then, just use this API before deleting.
+ *
+ * @param obj The widget root of sub-tree
+ * @param tree_unfocusable If true, set the object sub-tree as unfocusable
+ *
+ * @ingroup Widget
+ */
EAPI void
-elm_widget_highlight_ignore_set(Evas_Object *obj, Eina_Bool ignore)
+elm_widget_tree_unfocusable_set(Evas_Object *obj,
+ Eina_Bool tree_unfocusable)
+{
+ API_ENTRY return;
+
+ if (sd->tree_unfocusable == tree_unfocusable) return;
+ sd->tree_unfocusable = !!tree_unfocusable;
+ elm_widget_focus_tree_unfocusable_handle(obj);
+}
+
+/**
+ * @internal
+ *
+ * This returns true, if the object sub-tree is unfocusable.
+ *
+ * @param obj The widget root of sub-tree
+ * @return EINA_TRUE if the object sub-tree is unfocusable
+ *
+ * @ingroup Widget
+ */
+EAPI Eina_Bool
+elm_widget_tree_unfocusable_get(const Evas_Object *obj)
+{
+ API_ENTRY return EINA_FALSE;
+ return sd->tree_unfocusable;
+}
+
+EAPI void
+elm_widget_highlight_ignore_set(Evas_Object *obj,
+ Eina_Bool ignore)
{
API_ENTRY return;
sd->highlight_ignore = !!ignore;
}
EAPI void
-elm_widget_highlight_in_theme_set(Evas_Object *obj, Eina_Bool highlight)
+elm_widget_highlight_in_theme_set(Evas_Object *obj,
+ Eina_Bool highlight)
{
API_ENTRY return;
sd->highlight_in_theme = !!highlight;
if (!sd->focused) return NULL;
EINA_LIST_FOREACH(sd->subobjs, l, subobj)
{
- Evas_Object *fobj = elm_widget_focused_object_get(subobj);
- if (fobj) return fobj;
+ Evas_Object *fobj = elm_widget_focused_object_get(subobj);
+ if (fobj) return fobj;
}
return (Evas_Object *)obj;
}
if (_elm_widget_is(obj))
{
- Smart_Data *sd = evas_object_smart_data_get(obj);
- if (!sd) return NULL;
- parent = sd->parent_obj;
+ Smart_Data *sd = evas_object_smart_data_get(obj);
+ if (!sd) return NULL;
+ parent = sd->parent_obj;
}
else
{
- parent = evas_object_data_get(obj, "elm-parent");
- if (!parent) parent = evas_object_smart_parent_get(obj);
+ parent = evas_object_data_get(obj, "elm-parent");
+ if (!parent) parent = evas_object_smart_parent_get(obj);
}
while (parent)
{
- Evas_Object *elm_parent;
- if (_elm_widget_is(parent)) break;
- elm_parent = evas_object_data_get(parent, "elm-parent");
+ Evas_Object *elm_parent;
+ if (_elm_widget_is(parent)) break;
+ elm_parent = evas_object_data_get(parent, "elm-parent");
if (elm_parent) parent = elm_parent;
- else parent = evas_object_smart_parent_get(parent);
+ else parent = evas_object_smart_parent_get(parent);
}
return parent;
}
EAPI void
-elm_widget_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
+elm_widget_event_callback_add(Evas_Object *obj,
+ Elm_Event_Cb func,
+ const void *data)
{
API_ENTRY return;
EINA_SAFETY_ON_NULL_RETURN(func);
}
EAPI void *
-elm_widget_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data)
+elm_widget_event_callback_del(Evas_Object *obj,
+ Elm_Event_Cb func,
+ const void *data)
{
API_ENTRY return NULL;
EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
Eina_List *l;
Elm_Event_Cb_Data *ecd;
EINA_LIST_FOREACH(sd->event_cb, l, ecd)
- if ((ecd->func == func) && (ecd->data == data))
- {
- free(ecd);
- sd->event_cb = eina_list_remove_list(sd->event_cb, l);
- return (void *)data;
- }
+ if ((ecd->func == func) && (ecd->data == data))
+ {
+ free(ecd);
+ sd->event_cb = eina_list_remove_list(sd->event_cb, l);
+ return (void *)data;
+ }
return NULL;
}
EAPI Eina_Bool
-elm_widget_event_propagate(Evas_Object *obj, Evas_Callback_Type type, void *event_info, Evas_Event_Flags *event_flags)
+elm_widget_event_propagate(Evas_Object *obj,
+ Evas_Callback_Type type,
+ void *event_info,
+ Evas_Event_Flags *event_flags)
{
API_ENTRY return EINA_FALSE; //TODO reduce.
if (!_elm_widget_is(obj)) return EINA_FALSE;
{
if (ecd->func((void *)ecd->data, parent, obj, type, event_info) ||
(event_flags && ((*event_flags) & EVAS_EVENT_FLAG_ON_HOLD)))
- return EINA_TRUE;
+ return EINA_TRUE;
}
parent = sd->parent_obj;
}
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_custom_chain_set(Evas_Object *obj, Eina_List *objs)
+elm_widget_focus_custom_chain_set(Evas_Object *obj,
+ Eina_List *objs)
{
API_ENTRY return;
if (!sd->focus_next_func)
elm_widget_focus_custom_chain_get(const Evas_Object *obj)
{
API_ENTRY return NULL;
- return (const Eina_List *) sd->focus_chain;
+ return (const Eina_List *)sd->focus_chain;
}
/**
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_custom_chain_append(Evas_Object *obj, Evas_Object *child, Evas_Object *relative_child)
+elm_widget_focus_custom_chain_append(Evas_Object *obj,
+ Evas_Object *child,
+ Evas_Object *relative_child)
{
API_ENTRY return;
EINA_SAFETY_ON_NULL_RETURN(child);
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_custom_chain_prepend(Evas_Object *obj, Evas_Object *child, Evas_Object *relative_child)
+elm_widget_focus_custom_chain_prepend(Evas_Object *obj,
+ Evas_Object *child,
+ Evas_Object *relative_child)
{
API_ENTRY return;
EINA_SAFETY_ON_NULL_RETURN(child);
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_cycle(Evas_Object *obj, Elm_Focus_Direction dir)
+elm_widget_focus_cycle(Evas_Object *obj,
+ Elm_Focus_Direction dir)
{
Evas_Object *target = NULL;
if (!_elm_widget_is(obj))
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_direction_go(Evas_Object *obj __UNUSED__, int x __UNUSED__, int y __UNUSED__)
+elm_widget_focus_direction_go(Evas_Object *obj __UNUSED__,
+ int x __UNUSED__,
+ int y __UNUSED__)
{
return; /* TODO */
}
* @ingroup Widget
*/
EAPI Eina_Bool
-elm_widget_focus_next_get(const Evas_Object *obj, Elm_Focus_Direction dir, Evas_Object **next)
+elm_widget_focus_next_get(const Evas_Object *obj,
+ Elm_Focus_Direction dir,
+ Evas_Object **next)
{
if (!next)
return EINA_FALSE;
API_ENTRY return EINA_FALSE;
/* Ignore if disabled */
- if ((!evas_object_visible_get(obj)) || (elm_widget_disabled_get(obj)))
+ if ((!evas_object_visible_get(obj))
+ || (elm_widget_disabled_get(obj))
+ || (elm_widget_tree_unfocusable_get(obj)))
return EINA_FALSE;
/* Try use hook */
return !elm_widget_focus_get(obj);
}
-
/**
* @internal
*
* @ingroup Widget
*/
EAPI Eina_Bool
-elm_widget_focus_list_next_get(const Evas_Object *obj, const Eina_List *items, void *(*list_data_get) (const Eina_List *list), Elm_Focus_Direction dir, Evas_Object **next)
+elm_widget_focus_list_next_get(const Evas_Object *obj,
+ const Eina_List *items,
+ void *(*list_data_get)(const Eina_List * list),
+ Elm_Focus_Direction dir,
+ Evas_Object **next)
{
- Eina_List *(*list_next) (const Eina_List *list);
+ Eina_List *(*list_next)(const Eina_List * list);
if (!next)
return EINA_FALSE;
l = items;
/* Get First possible */
- for (;l != start; l = list_next(l))
+ for (; l != start; l = list_next(l))
{
Evas_Object *tmp = NULL;
Evas_Object *cur = list_data_get(l);
}
EAPI void
-elm_widget_signal_emit(Evas_Object *obj, const char *emission, const char *source)
+elm_widget_signal_emit(Evas_Object *obj,
+ const char *emission,
+ const char *source)
{
API_ENTRY return;
if (!sd->signal_func) return;
}
static void
-_edje_signal_callback(void *data, Evas_Object *obj __UNUSED__, const char *emission, const char *source)
+_edje_signal_callback(void *data,
+ Evas_Object *obj __UNUSED__,
+ const char *emission,
+ const char *source)
{
Edje_Signal_Data *esd = data;
esd->func(esd->data, esd->obj, emission, source);
}
EAPI void
-elm_widget_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data)
+elm_widget_signal_callback_add(Evas_Object *obj,
+ const char *emission,
+ const char *source,
+ Edje_Signal_Cb func,
+ void *data)
{
Edje_Signal_Data *esd;
API_ENTRY return;
}
EAPI void *
-elm_widget_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source))
+elm_widget_signal_callback_del(Evas_Object *obj,
+ const char *emission,
+ const char *source,
+ Edje_Signal_Cb func)
{
Edje_Signal_Data *esd;
Eina_List *l;
}
EAPI void
-elm_widget_focus_set(Evas_Object *obj, int first)
+elm_widget_focus_set(Evas_Object *obj,
+ int first)
{
API_ENTRY return;
if (!sd->focused)
{
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);
+ 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);
- return;
+ sd->focus_func(obj);
+ return;
}
else
{
- if (first)
- {
- if ((_is_focusable(sd->resize_obj)) &&
- (!elm_widget_disabled_get(sd->resize_obj)))
- {
- elm_widget_focus_set(sd->resize_obj, first);
- }
- else
- {
- const Eina_List *l;
- Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
- {
- if ((_is_focusable(child)) &&
- (!elm_widget_disabled_get(child)))
- {
- elm_widget_focus_set(child, first);
- break;
- }
- }
- }
- }
- else
- {
- const Eina_List *l;
- Evas_Object *child;
- EINA_LIST_REVERSE_FOREACH(sd->subobjs, l, child)
- {
- if ((_is_focusable(child)) &&
- (!elm_widget_disabled_get(child)))
- {
- elm_widget_focus_set(child, first);
- break;
- }
- }
- if (!l)
- {
- if ((_is_focusable(sd->resize_obj)) &&
- (!elm_widget_disabled_get(sd->resize_obj)))
- {
- elm_widget_focus_set(sd->resize_obj, first);
- }
- }
- }
+ if (first)
+ {
+ if ((_is_focusable(sd->resize_obj)) &&
+ (!elm_widget_disabled_get(sd->resize_obj)))
+ {
+ elm_widget_focus_set(sd->resize_obj, first);
+ }
+ else
+ {
+ const Eina_List *l;
+ Evas_Object *child;
+ EINA_LIST_FOREACH(sd->subobjs, l, child)
+ {
+ if ((_is_focusable(child)) &&
+ (!elm_widget_disabled_get(child)))
+ {
+ elm_widget_focus_set(child, first);
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ const Eina_List *l;
+ Evas_Object *child;
+ EINA_LIST_REVERSE_FOREACH(sd->subobjs, l, child)
+ {
+ if ((_is_focusable(child)) &&
+ (!elm_widget_disabled_get(child)))
+ {
+ elm_widget_focus_set(child, first);
+ break;
+ }
+ }
+ if (!l)
+ {
+ if ((_is_focusable(sd->resize_obj)) &&
+ (!elm_widget_disabled_get(sd->resize_obj)))
+ {
+ elm_widget_focus_set(sd->resize_obj, first);
+ }
+ }
+ }
}
}
API_ENTRY return;
if (!sd->focused) return;
if (elm_widget_focus_get(sd->resize_obj))
- elm_widget_focused_object_clear(sd->resize_obj);
+ elm_widget_focused_object_clear(sd->resize_obj);
else
{
- const Eina_List *l;
- Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
- {
- if (elm_widget_focus_get(child))
- {
- elm_widget_focused_object_clear(child);
- break;
- }
- }
+ const Eina_List *l;
+ Evas_Object *child;
+ EINA_LIST_FOREACH(sd->subobjs, l, child)
+ {
+ if (elm_widget_focus_get(child))
+ {
+ elm_widget_focused_object_clear(child);
+ break;
+ }
+ }
}
sd->focused = EINA_FALSE;
if (sd->on_focus_func) sd->on_focus_func(sd->on_focus_data, obj);
if (sd->focused) return;
if (sd->disabled) return;
+ if (!sd->can_focus) return;
+ if (sd->tree_unfocusable) return;
parent = obj;
for (;;)
{
- o = elm_widget_parent_get(parent);
- if (!o) break;
- sd = evas_object_smart_data_get(o);
- if (sd->focused) break;
- parent = o;
+ o = elm_widget_parent_get(parent);
+ if (!o) break;
+ sd = evas_object_smart_data_get(o);
+ if (sd->disabled || sd->tree_unfocusable) return;
+ if (sd->focused) break;
+ parent = o;
}
if (!elm_widget_parent_get(parent))
elm_widget_focused_object_clear(parent);
else
{
- parent = elm_widget_parent_get(parent);
- sd = evas_object_smart_data_get(parent);
- if (sd->resize_obj && elm_widget_focus_get(sd->resize_obj))
+ parent = elm_widget_parent_get(parent);
+ sd = evas_object_smart_data_get(parent);
+ if ((sd->resize_obj) && (elm_widget_focus_get(sd->resize_obj)))
elm_widget_focused_object_clear(sd->resize_obj);
else
- {
- const Eina_List *l;
- Evas_Object *child;
- EINA_LIST_FOREACH(sd->subobjs, l, child)
- {
- if (elm_widget_focus_get(child))
- {
- elm_widget_focused_object_clear(child);
- break;
- }
- }
- }
+ {
+ const Eina_List *l;
+ Evas_Object *child;
+ EINA_LIST_FOREACH(sd->subobjs, l, child)
+ {
+ if (elm_widget_focus_get(child))
+ {
+ elm_widget_focused_object_clear(child);
+ break;
+ }
+ }
+ }
}
_parent_focus(obj);
return;
}
EAPI void
+elm_widget_focus_restore(Evas_Object *obj)
+{
+ Evas_Object *newest = NULL;
+ unsigned int newest_focus_order = 0;
+ API_ENTRY return;
+
+ newest = _newest_focus_order_get(obj, &newest_focus_order, EINA_TRUE);
+ if (newest)
+ {
+ elm_object_unfocus(newest);
+ elm_object_focus(newest);
+ }
+}
+
+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)
{
API_ENTRY return;
}
EAPI void
-elm_widget_disabled_set(Evas_Object *obj, int disabled)
+elm_widget_disabled_set(Evas_Object *obj,
+ Eina_Bool disabled)
{
API_ENTRY return;
if (sd->disabled == disabled) return;
- sd->disabled = disabled;
- if (sd->focused)
- {
- Evas_Object *o, *parent;
-
- parent = obj;
- for (;;)
- {
- o = elm_widget_parent_get(parent);
- if (!o) break;
- parent = o;
- }
- if (elm_widget_focus_get(obj))
- elm_widget_focus_cycle(parent, ELM_FOCUS_NEXT);
- }
+ sd->disabled = !!disabled;
+ elm_widget_focus_disabled_handle(obj);
if (sd->disable_func) sd->disable_func(obj);
}
-EAPI int
+EAPI Eina_Bool
elm_widget_disabled_get(const Evas_Object *obj)
{
API_ENTRY return 0;
}
EAPI void
-elm_widget_show_region_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
+elm_widget_show_region_set(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y,
+ Evas_Coord w,
+ Evas_Coord h,
+ Eina_Bool forceshow)
{
Evas_Object *parent_obj, *child_obj;
Evas_Coord px, py, cx, cy;
API_ENTRY return;
- if ((x == sd->rx) && (y == sd->ry) && (w == sd->rw) && (h == sd->rh)) return;
+ if (!forceshow && (x == sd->rx) && (y == sd->ry)
+ && (w == sd->rw) && (h == sd->rh)) return;
sd->rx = x;
sd->ry = y;
sd->rw = w;
sd->rh = h;
if (sd->on_show_region_func)
- sd->on_show_region_func(sd->on_show_region_data, obj);
+ sd->on_show_region_func(sd->on_show_region_data, obj);
do
{
parent_obj = sd->parent_obj;
child_obj = sd->obj;
+ if ((!parent_obj) || (!_elm_widget_is(parent_obj))) break;
sd = evas_object_smart_data_get(parent_obj);
-
- if ((!parent_obj) || (!sd) || (!_elm_widget_is(parent_obj))) break;
+ if (!sd) break;
evas_object_geometry_get(parent_obj, &px, &py, NULL, NULL);
evas_object_geometry_get(child_obj, &cx, &cy, NULL, NULL);
}
EAPI void
-elm_widget_show_region_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
+elm_widget_show_region_get(const Evas_Object *obj,
+ Evas_Coord *x,
+ Evas_Coord *y,
+ Evas_Coord *w,
+ Evas_Coord *h)
{
API_ENTRY return;
if (x) *x = sd->rx;
* @ingroup Widget
*/
EAPI void
-elm_widget_focus_region_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
+elm_widget_focus_region_get(const Evas_Object *obj,
+ Evas_Coord *x,
+ Evas_Coord *y,
+ Evas_Coord *w,
+ Evas_Coord *h)
{
Smart_Data *sd;
API_ENTRY return;
sd->scroll_hold++;
if (sd->scroll_hold == 1)
- evas_object_smart_callback_call(obj, "scroll-hold-on", obj);
+ evas_object_smart_callback_call(obj, "scroll-hold-on", obj);
if (sd->parent_obj) elm_widget_scroll_hold_push(sd->parent_obj);
// FIXME: on delete/reparent hold pop
}
sd->scroll_hold--;
if (sd->scroll_hold < 0) sd->scroll_hold = 0;
if (!sd->scroll_hold)
- evas_object_smart_callback_call(obj, "scroll-hold-off", obj);
+ evas_object_smart_callback_call(obj, "scroll-hold-off", obj);
if (sd->parent_obj) elm_widget_scroll_hold_pop(sd->parent_obj);
}
API_ENTRY return;
sd->scroll_freeze++;
if (sd->scroll_freeze == 1)
- evas_object_smart_callback_call(obj, "scroll-freeze-on", obj);
+ evas_object_smart_callback_call(obj, "scroll-freeze-on", obj);
if (sd->parent_obj) elm_widget_scroll_freeze_push(sd->parent_obj);
// FIXME: on delete/reparent freeze pop
}
sd->scroll_freeze--;
if (sd->scroll_freeze < 0) sd->scroll_freeze = 0;
if (!sd->scroll_freeze)
- evas_object_smart_callback_call(obj, "scroll-freeze-off", obj);
+ evas_object_smart_callback_call(obj, "scroll-freeze-off", obj);
if (sd->parent_obj) elm_widget_scroll_freeze_pop(sd->parent_obj);
}
}
EAPI void
-elm_widget_scale_set(Evas_Object *obj, double scale)
+elm_widget_scale_set(Evas_Object *obj,
+ double scale)
{
API_ENTRY return;
if (scale <= 0.0) scale = 0.0;
if (sd->scale != scale)
{
- sd->scale = scale;
- elm_widget_theme(obj);
+ sd->scale = scale;
+ elm_widget_theme(obj);
}
}
// FIXME: save walking up the tree by storing/caching parent scale
if (sd->scale == 0.0)
{
- if (sd->parent_obj)
- return elm_widget_scale_get(sd->parent_obj);
- else
- return 1.0;
+ if (sd->parent_obj)
+ return elm_widget_scale_get(sd->parent_obj);
+ else
+ return 1.0;
}
return sd->scale;
}
EAPI void
-elm_widget_theme_set(Evas_Object *obj, Elm_Theme *th)
+elm_widget_theme_set(Evas_Object *obj,
+ Elm_Theme *th)
{
API_ENTRY return;
if (sd->theme != th)
}
}
+EAPI void
+elm_widget_text_part_set(Evas_Object *obj, const char *item, const char *label)
+{
+ API_ENTRY return;
+
+ if (!sd->on_text_set_func)
+ return;
+
+ sd->on_text_set_func(obj, item, label);
+}
+
+EAPI const char *
+elm_widget_text_part_get(const Evas_Object *obj, const char *item)
+{
+ API_ENTRY return NULL;
+
+ if (!sd->on_text_get_func)
+ return NULL;
+
+ return sd->on_text_get_func(obj, item);
+}
+
+EAPI void
+elm_widget_content_part_set(Evas_Object *obj, const char *part, Evas_Object *content)
+{
+ API_ENTRY return;
+
+ if (!sd->on_content_set_func) return;
+ sd->on_content_set_func(obj, part, content);
+}
+
+EAPI Evas_Object *
+elm_widget_content_part_get(const Evas_Object *obj, const char *part)
+{
+ API_ENTRY return NULL;
+
+ if (!sd->on_content_get_func) return NULL;
+ return sd->on_content_get_func(obj, part);
+}
+
+EAPI Evas_Object *
+elm_widget_content_part_unset(Evas_Object *obj, const char *part)
+{
+ API_ENTRY return NULL;
+
+ if (!sd->on_content_unset_func) return NULL;
+ return sd->on_content_unset_func(obj, part);
+}
+
EAPI Elm_Theme *
elm_widget_theme_get(const Evas_Object *obj)
{
if (!sd->theme)
{
if (sd->parent_obj)
- return elm_widget_theme_get(sd->parent_obj);
+ return elm_widget_theme_get(sd->parent_obj);
else
- return NULL;
+ return NULL;
}
return sd->theme;
}
EAPI void
-elm_widget_style_set(Evas_Object *obj, const char *style)
+elm_widget_style_set(Evas_Object *obj,
+ const char *style)
{
API_ENTRY return;
if (eina_stringshare_replace(&sd->style, style))
- elm_widget_theme(obj);
+ elm_widget_theme(obj);
}
EAPI const char *
}
EAPI void
-elm_widget_type_set(Evas_Object *obj, const char *type)
+elm_widget_type_set(Evas_Object *obj,
+ const char *type)
{
API_ENTRY return;
eina_stringshare_replace(&sd->type, type);
}
EAPI void
-elm_widget_tooltip_add(Evas_Object *obj, Elm_Tooltip *tt)
+elm_widget_tooltip_add(Evas_Object *obj,
+ Elm_Tooltip *tt)
{
API_ENTRY return;
sd->tooltips = eina_list_append(sd->tooltips, tt);
}
EAPI void
-elm_widget_tooltip_del(Evas_Object *obj, Elm_Tooltip *tt)
+elm_widget_tooltip_del(Evas_Object *obj,
+ Elm_Tooltip *tt)
{
API_ENTRY return;
sd->tooltips = eina_list_remove(sd->tooltips, tt);
}
EAPI void
-elm_widget_cursor_add(Evas_Object *obj, Elm_Cursor *cur)
+elm_widget_cursor_add(Evas_Object *obj,
+ Elm_Cursor *cur)
{
API_ENTRY return;
sd->cursors = eina_list_append(sd->cursors, cur);
}
EAPI void
-elm_widget_cursor_del(Evas_Object *obj, Elm_Cursor *cur)
+elm_widget_cursor_del(Evas_Object *obj,
+ Elm_Cursor *cur)
{
API_ENTRY return;
sd->cursors = eina_list_remove(sd->cursors, cur);
}
EAPI void
-elm_widget_drag_lock_x_set(Evas_Object *obj, Eina_Bool lock)
+elm_widget_drag_lock_x_set(Evas_Object *obj,
+ Eina_Bool lock)
{
API_ENTRY return;
if (sd->drag_x_locked == lock) return;
}
EAPI void
-elm_widget_drag_lock_y_set(Evas_Object *obj, Eina_Bool lock)
+elm_widget_drag_lock_y_set(Evas_Object *obj,
+ Eina_Bool lock)
{
API_ENTRY return;
if (sd->drag_y_locked == lock) return;
}
EAPI Eina_Bool
-elm_widget_theme_object_set(Evas_Object *obj, Evas_Object *edj, const char *wname, const char *welement, const char *wstyle)
+elm_widget_theme_object_set(Evas_Object *obj,
+ Evas_Object *edj,
+ const char *wname,
+ const char *welement,
+ const char *wstyle)
{
API_ENTRY return EINA_FALSE;
return _elm_theme_object_set(obj, edj, wname, welement, wstyle);
}
EAPI Eina_Bool
-elm_widget_type_check(const Evas_Object *obj, const char *type)
+elm_widget_type_check(const Evas_Object *obj,
+ const char *type)
{
const char *provided, *expected = "(unknown)";
static int abort_on_warn = -1;
{
provided = evas_object_type_get(obj);
if ((!provided) || (!provided[0]))
- provided = "(unknown)";
+ provided = "(unknown)";
}
ERR("Passing Object: %p, of type: '%s' when expecting type: '%s'", obj, provided, expected);
if (abort_on_warn == -1)
if (!str) return NULL;
for (b = s = str; 1; s++)
{
- if ((*s == ' ') || (!*s))
- {
- char *t = malloc(s - b + 1);
- if (t)
- {
- strncpy(t, b, s - b);
- t[s - b] = 0;
- list = eina_list_append(list, eina_stringshare_add(t));
- free(t);
- }
- b = s + 1;
- }
- if (!*s) break;
+ if ((*s == ' ') || (!*s))
+ {
+ char *t = malloc(s - b + 1);
+ if (t)
+ {
+ strncpy(t, b, s - b);
+ t[s - b] = 0;
+ list = eina_list_append(list, eina_stringshare_add(t));
+ free(t);
+ }
+ b = s + 1;
+ }
+ if (!*s) break;
}
return list;
}
EINA_LIST_FREE(list, s) eina_stringshare_del(s);
}
+EAPI void
+elm_widget_focus_hide_handle(Evas_Object *obj)
+{
+ _if_focused_revert(obj, EINA_TRUE);
+}
+
+EAPI void
+elm_widget_focus_mouse_down_handle(Evas_Object *obj)
+{
+ Evas_Object *o = obj;
+ do
+ {
+ if (_elm_widget_is(o)) break;
+ o = evas_object_smart_parent_get(o);
+ }
+ while (o);
+ if (!o) return;
+ if (!_is_focusable(o)) return;
+ elm_widget_focus_steal(o);
+}
+
+EAPI void
+elm_widget_focus_tree_unfocusable_handle(Evas_Object *obj)
+{
+ API_ENTRY return;
+
+ if (!elm_widget_parent_get(obj))
+ elm_widget_focused_object_clear(obj);
+ else
+ _if_focused_revert(obj, EINA_TRUE);
+}
+
+EAPI void
+elm_widget_focus_disabled_handle(Evas_Object *obj)
+{
+ API_ENTRY return;
+
+ elm_widget_focus_tree_unfocusable_handle(obj);
+}
+
/**
* @internal
*
* @ingroup Widget
*/
EAPI Elm_Widget_Item *
-_elm_widget_item_new(Evas_Object *widget, size_t alloc_size)
+_elm_widget_item_new(Evas_Object *widget,
+ size_t alloc_size)
{
if (!_elm_widget_is(widget))
return NULL;
* @ingroup Widget
*/
EAPI void
-_elm_widget_item_del_cb_set(Elm_Widget_Item *item, Evas_Smart_Cb del_cb)
+_elm_widget_item_del_cb_set(Elm_Widget_Item *item,
+ Evas_Smart_Cb del_cb)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
* @ingroup Widget
*/
EAPI void
-_elm_widget_item_data_set(Elm_Widget_Item *item, const void *data)
+_elm_widget_item_data_set(Elm_Widget_Item *item,
+ const void *data)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
if ((item->data) && (item->data != data))
struct _Elm_Widget_Item_Tooltip
{
- Elm_Widget_Item *item;
- Elm_Tooltip_Item_Content_Cb func;
- Evas_Smart_Cb del_cb;
- const void *data;
+ Elm_Widget_Item *item;
+ Elm_Tooltip_Item_Content_Cb func;
+ Evas_Smart_Cb del_cb;
+ const void *data;
};
static Evas_Object *
-_elm_widget_item_tooltip_label_create(void *data, Evas_Object *obj, void *item __UNUSED__)
+_elm_widget_item_tooltip_label_create(void *data,
+ Evas_Object *obj,
+ void *item __UNUSED__)
{
Evas_Object *label = elm_label_add(obj);
if (!label)
return NULL;
elm_object_style_set(label, "tooltip");
- elm_label_label_set(label, data);
+ elm_object_text_set(label, data);
return label;
}
static void
-_elm_widget_item_tooltip_label_del_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+_elm_widget_item_tooltip_label_del_cb(void *data,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
{
eina_stringshare_del(data);
}
* @ingroup Widget
*/
EAPI void
-_elm_widget_item_tooltip_text_set(Elm_Widget_Item *item, const char *text)
+_elm_widget_item_tooltip_text_set(Elm_Widget_Item *item,
+ const char *text)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
EINA_SAFETY_ON_NULL_RETURN(text);
text = eina_stringshare_add(text);
_elm_widget_item_tooltip_content_cb_set
(item, _elm_widget_item_tooltip_label_create, text,
- _elm_widget_item_tooltip_label_del_cb);
+ _elm_widget_item_tooltip_label_del_cb);
}
static Evas_Object *
-_elm_widget_item_tooltip_create(void *data, Evas_Object *obj)
+_elm_widget_item_tooltip_create(void *data,
+ Evas_Object *obj)
{
Elm_Widget_Item_Tooltip *wit = data;
return wit->func((void *)wit->data, obj, wit->item);
}
static void
-_elm_widget_item_tooltip_del_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+_elm_widget_item_tooltip_del_cb(void *data,
+ Evas_Object *obj,
+ void *event_info __UNUSED__)
{
Elm_Widget_Item_Tooltip *wit = data;
if (wit->del_cb) wit->del_cb((void *)wit->data, obj, wit->item);
* @ingroup Widget
*/
EAPI void
-_elm_widget_item_tooltip_content_cb_set(Elm_Widget_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb)
+_elm_widget_item_tooltip_content_cb_set(Elm_Widget_Item *item,
+ Elm_Tooltip_Item_Content_Cb func,
+ const void *data,
+ Evas_Smart_Cb del_cb)
{
Elm_Widget_Item_Tooltip *wit;
elm_object_sub_tooltip_content_cb_set
(item->view, item->widget, _elm_widget_item_tooltip_create, wit,
- _elm_widget_item_tooltip_del_cb);
+ _elm_widget_item_tooltip_del_cb);
return;
- error_noitem:
+error_noitem:
if (del_cb) del_cb((void *)data, NULL, item);
return;
- error:
+error:
if (del_cb) del_cb((void *)data, item->widget, item);
}
* @ingroup Widget
*/
EAPI void
-_elm_widget_item_tooltip_style_set(Elm_Widget_Item *item, const char *style)
+_elm_widget_item_tooltip_style_set(Elm_Widget_Item *item,
+ const char *style)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
elm_object_tooltip_style_set(item->view, style);
}
EAPI void
-_elm_widget_item_cursor_set(Elm_Widget_Item *item, const char *cursor)
+_elm_widget_item_cursor_set(Elm_Widget_Item *item,
+ const char *cursor)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
elm_object_sub_cursor_set(item->view, item->widget, cursor);
* @ingroup Widget
*/
EAPI void
-_elm_widget_item_cursor_style_set(Elm_Widget_Item *item, const char *style)
+_elm_widget_item_cursor_style_set(Elm_Widget_Item *item,
+ const char *style)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
elm_object_cursor_style_set(item->view, style);
* @ingroup Widget
*/
EAPI void
-_elm_widget_item_cursor_engine_only_set(Elm_Widget_Item *item, Eina_Bool engine_only)
+_elm_widget_item_cursor_engine_only_set(Elm_Widget_Item *item,
+ Eina_Bool engine_only)
{
ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
elm_object_cursor_engine_only_set(item->view, engine_only);
if (sd->resize_obj)
{
evas_object_move(sd->resize_obj, sd->x, sd->y);
- evas_object_resize(sd->resize_obj, sd->w, sd->h);
+ evas_object_resize(sd->resize_obj, sd->w, sd->h);
}
if (sd->hover_obj)
{
evas_object_move(sd->hover_obj, sd->x, sd->y);
- evas_object_resize(sd->hover_obj, sd->w, sd->h);
+ evas_object_resize(sd->hover_obj, sd->w, sd->h);
}
}
+EAPI void
+_elm_widget_item_content_part_set(Elm_Widget_Item *item,
+ const char *part,
+ Evas_Object *content)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+ if (!item->on_content_set_func) return;
+ item->on_content_set_func((Elm_Object_Item *) item, part, content);
+}
+
+EAPI Evas_Object *
+_elm_widget_item_content_part_get(const Elm_Widget_Item *item,
+ const char *part)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, NULL);
+ if (!item->on_content_get_func) return NULL;
+ return item->on_content_get_func((Elm_Object_Item *) item, part);
+}
+
+EAPI Evas_Object *
+_elm_widget_item_content_part_unset(Elm_Widget_Item *item,
+ const char *part)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, NULL);
+ if (!item->on_content_unset_func) return NULL;
+ return item->on_content_unset_func((Elm_Object_Item *) item, part);
+}
+
+EAPI void
+_elm_widget_item_text_part_set(Elm_Widget_Item *item,
+ const char *part,
+ const char *label)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+ if (!item->on_text_set_func) return;
+ item->on_text_set_func((Elm_Object_Item *) item, part, label);
+}
+
+EAPI const char *
+_elm_widget_item_text_part_get(const Elm_Widget_Item *item,
+ const char *part)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item, NULL);
+ if (!item->on_text_get_func) return NULL;
+ return item->on_text_get_func((Elm_Object_Item *) item, part);
+}
+
+EAPI void
+_elm_widget_item_content_set_hook_set(Elm_Widget_Item *item,
+ Elm_Widget_On_Content_Set_Cb func)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+ item->on_content_set_func = func;
+}
+
+EAPI void
+_elm_widget_item_content_get_hook_set(Elm_Widget_Item *item,
+ Elm_Widget_On_Content_Get_Cb func)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+ item->on_content_get_func = func;
+}
+
+EAPI void
+_elm_widget_item_content_unset_hook_set(Elm_Widget_Item *item,
+ Elm_Widget_On_Content_Unset_Cb func)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+ item->on_content_unset_func = func;
+}
+
+EAPI void
+_elm_widget_item_text_set_hook_set(Elm_Widget_Item *item,
+ Elm_Widget_On_Text_Set_Cb func)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+ item->on_text_set_func = func;
+}
+
+EAPI void
+_elm_widget_item_text_get_hook_set(Elm_Widget_Item *item,
+ Elm_Widget_On_Text_Get_Cb func)
+{
+ ELM_WIDGET_ITEM_CHECK_OR_RETURN(item);
+ item->on_text_get_func = func;
+}
+
static void
_smart_add(Evas_Object *obj)
{
}
static Evas_Object *
-_newest_focus_order_get(Evas_Object *obj, unsigned int *newest_focus_order, Eina_Bool can_focus_only)
+_newest_focus_order_get(Evas_Object *obj,
+ unsigned int *newest_focus_order,
+ Eina_Bool can_focus_only)
{
const Eina_List *l;
Evas_Object *child, *ret, *best;
API_ENTRY return NULL;
- if (!evas_object_visible_get(obj)) return NULL;
+
+ if (!evas_object_visible_get(obj)
+ || (elm_widget_disabled_get(obj))
+ || (elm_widget_tree_unfocusable_get(obj)))
+ return NULL;
+
best = NULL;
if (*newest_focus_order < sd->focus_order)
{
if (can_focus_only)
{
if ((!best) || (!elm_widget_can_focus_get(best)))
- return NULL;
+ return NULL;
}
return best;
}
static void
-_if_focused_revert(Evas_Object *obj, Eina_Bool can_focus_only)
+_if_focused_revert(Evas_Object *obj,
+ Eina_Bool can_focus_only)
{
Evas_Object *top;
Evas_Object *newest = NULL;
unsigned int newest_focus_order = 0;
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
if (!sd->focused) return;
if (!sd->parent_obj) return;
Evas_Object *sobj;
Edje_Signal_Data *esd;
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
if (sd->del_pre_func) sd->del_pre_func(obj);
if (sd->resize_obj)
{
- sobj = sd->resize_obj;
- sd->resize_obj = NULL;
- evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
- evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj);
- evas_object_del(sobj);
+ sobj = sd->resize_obj;
+ sd->resize_obj = NULL;
+ evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
+ evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj);
+ evas_object_del(sobj);
}
if (sd->hover_obj)
{
- sobj = sd->hover_obj;
- sd->hover_obj = NULL;
- evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
- evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj);
- evas_object_del(sobj);
+ sobj = sd->hover_obj;
+ sd->hover_obj = NULL;
+ evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
+ evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj);
+ evas_object_del(sobj);
}
EINA_LIST_FREE(sd->subobjs, sobj)
{
- evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
- evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj);
- evas_object_del(sobj);
+ evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
+ evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj);
+ evas_object_del(sobj);
}
eina_list_free(sd->tooltips); /* should be empty anyway */
eina_list_free(sd->cursors); /* should be empty anyway */
}
static void
-_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
+_smart_move(Evas_Object *obj,
+ Evas_Coord x,
+ Evas_Coord y)
{
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
sd->x = x;
sd->y = y;
_smart_reconfigure(sd);
}
static void
-_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
+_smart_resize(Evas_Object *obj,
+ Evas_Coord w,
+ Evas_Coord h)
{
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
sd->w = w;
sd->h = h;
_smart_reconfigure(sd);
{
Eina_List *list;
Evas_Object *o;
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
if ((list = evas_object_smart_members_get(obj)))
{
EINA_LIST_FREE(list, o)
{
Eina_List *list;
Evas_Object *o;
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
+
list = evas_object_smart_members_get(obj);
EINA_LIST_FREE(list, o)
{
if (evas_object_data_get(o, "_elm_leaveme")) continue;
evas_object_hide(o);
}
- _if_focused_revert(obj, EINA_TRUE);
}
static void
-_smart_color_set(Evas_Object *obj, int r, int g, int b, int a)
+_smart_color_set(Evas_Object *obj,
+ int r,
+ int g,
+ int b,
+ int a)
{
Eina_List *list;
Evas_Object *o;
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
if ((list = evas_object_smart_members_get(obj)))
{
EINA_LIST_FREE(list, o)
}
static void
-_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
+_smart_clip_set(Evas_Object *obj,
+ Evas_Object *clip)
{
Eina_List *list;
Evas_Object *o;
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
if ((list = evas_object_smart_members_get(obj)))
{
EINA_LIST_FREE(list, o)
{
Eina_List *list;
Evas_Object *o;
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
if ((list = evas_object_smart_members_get(obj)))
{
EINA_LIST_FREE(list, o)
static void
_smart_calculate(Evas_Object *obj)
{
- INTERNAL_ENTRY;
+ INTERNAL_ENTRY
if (sd->changed_func) sd->changed_func(obj);
}
_smart_init(void)
{
if (_e_smart) return;
- {
- static const Evas_Smart_Class sc =
- {
- SMART_NAME,
- EVAS_SMART_CLASS_VERSION,
- _smart_add,
- _smart_del,
- _smart_move,
- _smart_resize,
- _smart_show,
- _smart_hide,
- _smart_color_set,
- _smart_clip_set,
- _smart_clip_unset,
- _smart_calculate,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
- };
- _e_smart = evas_smart_class_new(&sc);
- }
+ {
+ static const Evas_Smart_Class sc =
+ {
+ SMART_NAME,
+ EVAS_SMART_CLASS_VERSION,
+ _smart_add,
+ _smart_del,
+ _smart_move,
+ _smart_resize,
+ _smart_show,
+ _smart_hide,
+ _smart_color_set,
+ _smart_clip_set,
+ _smart_clip_unset,
+ _smart_calculate,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ };
+ _e_smart = evas_smart_class_new(&sc);
+ }
}
/* happy debug functions */
#ifdef ELM_DEBUG
static void
-_sub_obj_tree_dump(const Evas_Object *o, int lvl)
+_sub_obj_tree_dump(const Evas_Object *obj,
+ int lvl)
{
int i;
- for (i = 0; i < lvl*3; i++)
+ for (i = 0; i < lvl * 3; i++)
putchar(' ');
- if (_elm_widget_is(o))
+ if (_elm_widget_is(obj))
{
Eina_List *l;
- Smart_Data *sd = evas_object_smart_data_get(o);
- printf("+ %s(%p)\n", sd->type, o);
+ INTERNAL_ENTRY
+ printf("+ %s(%p)\n",
+ sd->type,
+ obj);
if (sd->resize_obj)
_sub_obj_tree_dump(sd->resize_obj, lvl + 1);
- EINA_LIST_FOREACH(sd->subobjs, l, o)
+ EINA_LIST_FOREACH(sd->subobjs, l, obj)
{
- if (o != sd->resize_obj)
- _sub_obj_tree_dump(o, lvl + 1);
+ if (obj != sd->resize_obj)
+ _sub_obj_tree_dump(obj, lvl + 1);
}
}
else
- printf("+ %s(%p)\n", evas_object_type_get(o), o);
+ printf("+ %s(%p)\n", evas_object_type_get(obj), obj);
}
static void
-_sub_obj_tree_dot_dump(const Evas_Object *obj, FILE *output)
+_sub_obj_tree_dot_dump(const Evas_Object *obj,
+ FILE *output)
{
if (!_elm_widget_is(obj))
return;
-
- Smart_Data *sd = evas_object_smart_data_get(obj);
+ INTERNAL_ENTRY
Eina_Bool visible = evas_object_visible_get(obj);
Eina_Bool disabled = elm_widget_disabled_get(obj);
}
fprintf(output, "\"%p\" [ label = \"{%p|%s|%s|visible: %d|"
- "disabled: %d|focused: %d/%d|focus order:%d}\"", obj, obj, sd->type,
+ "disabled: %d|focused: %d/%d|focus order:%d}\"", obj, obj, sd->type,
evas_object_name_get(obj), visible, disabled, focused, can_focus,
sd->focus_order);
if (focused)
- fprintf(output, ", style=bold");
+ fprintf(output, ", style=bold");
if (!visible)
- fprintf(output, ", fontcolor=gray28");
+ fprintf(output, ", fontcolor=gray28");
if ((disabled) || (!visible))
- fprintf(output, ", color=gray");
-
+ fprintf(output, ", color=gray");
fprintf(output, " ];\n");
Eina_List *l;
Evas_Object *o;
EINA_LIST_FOREACH(sd->subobjs, l, o)
- _sub_obj_tree_dot_dump(o, output);
+ _sub_obj_tree_dot_dump(o, output);
}
#endif
}
EAPI void
-elm_widget_tree_dot_dump(const Evas_Object *top, FILE *output)
+elm_widget_tree_dot_dump(const Evas_Object *top,
+ FILE *output)
{
#ifdef ELM_DEBUG
if (!_elm_widget_is(top))
return;
- fprintf(output, "graph "" { node [shape=record];\n");
+ fprintf(output, "graph " " { node [shape=record];\n");
_sub_obj_tree_dot_dump(top, output);
fprintf(output, "}\n");
#else