From 6d65116923a8f247c079f589fb8cb0037d549063 Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Sun, 28 Aug 2011 07:12:16 +0000 Subject: [PATCH] elementary/ctxpopup - added elm_ctxpopup_direction_get API SVN revision: 62905 --- src/lib/Elementary.h.in | 12 ++++++++++++ src/lib/elc_ctxpopup.c | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index b93c74c..9da2dee 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -24827,6 +24827,7 @@ extern "C" { the clicked area */ ELM_CTXPOPUP_DIRECTION_UP, /**< ctxpopup show appear above the clicked area */ + ELM_CTXPOPUP_DIRECTION_DONT_KNOW, /**< ctxpopup does not determine it's direction yet*/ } Elm_Ctxpopup_Direction; /** @@ -25022,6 +25023,17 @@ extern "C" { * @see elm_ctxpopup_direction_priority_set() for more information. */ EAPI void elm_ctxpopup_direction_priority_get(Evas_Object *obj, Elm_Ctxpopup_Direction *first, Elm_Ctxpopup_Direction *second, Elm_Ctxpopup_Direction *third, Elm_Ctxpopup_Direction *fourth) EINA_ARG_NONNULL(1); + + /** + * @brief Get the current direction of a ctxpopup. + * + * @param obj Ctxpopup object + * @return current direction of a ctxpopup + * + * @warning Once the ctxpopup showed up, the direction would be determined + */ + EAPI Elm_Ctxpopup_Direction elm_ctxpopup_direction_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); + /** * @} */ diff --git a/src/lib/elc_ctxpopup.c b/src/lib/elc_ctxpopup.c index 8f62775..0511972 100644 --- a/src/lib/elc_ctxpopup.c +++ b/src/lib/elc_ctxpopup.c @@ -231,6 +231,8 @@ _hover_parent_resize(void *data, Evas *e __UNUSED__, if (!wd) return; + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + if (wd->visible) { _scroller_size_reset(wd); @@ -246,6 +248,8 @@ _hover_parent_move(void *data, Evas *e __UNUSED__, if (!wd) return; + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + if (wd->visible) { _scroller_size_reset(wd); @@ -322,6 +326,8 @@ _ctxpopup_changed_size_hints(void *data __UNUSED__, Evas *e __UNUSED__, wd = elm_widget_data_get(obj); if (!wd) return; + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + if (wd->visible) _sizing_eval(obj); } @@ -337,7 +343,7 @@ _calc_base_geometry(Evas_Object *obj, Evas_Coord_Rectangle *rect) Evas_Coord_Rectangle hover_area; Evas_Coord_Rectangle parent_size; Evas_Coord_Point arrow_size; - Elm_Ctxpopup_Direction dir = ELM_CTXPOPUP_DIRECTION_DOWN; + Elm_Ctxpopup_Direction dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; Evas_Coord_Point temp; int idx; @@ -394,6 +400,7 @@ _calc_base_geometry(Evas_Object *obj, Evas_Coord_Rectangle *rect) { switch (wd->dir_priority[idx]) { + case ELM_CTXPOPUP_DIRECTION_DONT_KNOW: case ELM_CTXPOPUP_DIRECTION_UP: temp.y = (pos.y - base_size.y); if ((temp.y - arrow_size.y) < hover_area.y) @@ -772,6 +779,8 @@ _theme_hook(Evas_Object *obj) elm_object_style_set(wd->scr, elm_object_style_get(obj)); } + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + if (wd->visible) { _scroller_size_reset(wd); @@ -801,6 +810,8 @@ _content_set_hook(Evas_Object *obj, const char *part __UNUSED__, wd->content = content; + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + if (wd->visible) _sizing_eval(obj); } @@ -825,6 +836,7 @@ _content_unset_hook(Evas_Object *obj, const char *part __UNUSED__) edje_object_signal_emit(wd->base, "elm,state,content,disable", "elm"); wd->content = NULL; + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; return content; @@ -859,6 +871,7 @@ _parent_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, evas_object_geometry_get(obj, NULL, NULL, &w, &h); evas_object_resize(wd->bg, w, h); + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; if (!wd->visible) return; @@ -1135,6 +1148,7 @@ elm_ctxpopup_add(Evas_Object *parent) wd->dir_priority[1] = ELM_CTXPOPUP_DIRECTION_LEFT; wd->dir_priority[2] = ELM_CTXPOPUP_DIRECTION_RIGHT; wd->dir_priority[3] = ELM_CTXPOPUP_DIRECTION_DOWN; + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; evas_object_event_callback_add(parent, EVAS_CALLBACK_RESIZE, _parent_resize, obj); @@ -1176,6 +1190,7 @@ elm_ctxpopup_item_icon_set(Elm_Object_Item *it, Evas_Object *icon) if (!wd) return; _item_icon_set(ctxpopup_it, icon); + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; if (wd->visible) { @@ -1204,6 +1219,7 @@ elm_ctxpopup_item_label_set(Elm_Object_Item *it, const char *label) if (!wd) return; _item_label_set(ctxpopup_it, label); + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; if (wd->visible) { @@ -1260,6 +1276,7 @@ elm_ctxpopup_clear(Evas_Object * obj) _remove_items(wd); _list_del(wd); + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; } EAPI void @@ -1288,6 +1305,8 @@ elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) elm_scroller_bounce_set(wd->scr, EINA_TRUE, EINA_FALSE); } + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + if (wd->visible) _sizing_eval(obj); } @@ -1342,6 +1361,7 @@ elm_ctxpopup_item_append(Evas_Object *obj, const char *label, _item_label_set(item, label); elm_box_pack_end(wd->box, item->base.view); wd->items = eina_list_append(wd->items, item); + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; if (wd->visible) { @@ -1375,6 +1395,8 @@ elm_ctxpopup_item_del(Elm_Object_Item *it) if (eina_list_count(wd->items) < 1) wd->items = NULL; + wd->dir = ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + if (wd->visible) _sizing_eval(ctxpopup_it->base.widget); @@ -1465,3 +1487,14 @@ elm_ctxpopup_direction_priority_get(Evas_Object *obj, if (third) *third = wd->dir_priority[2]; if (fourth) *fourth = wd->dir_priority[3]; } + +EAPI Elm_Ctxpopup_Direction +elm_ctxpopup_direction_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + Widget_Data *wd; + + wd = elm_widget_data_get(obj); + if (!wd) return ELM_CTXPOPUP_DIRECTION_DONT_KNOW; + return wd->dir; +} -- 2.7.4