for popout hover.
SVN revision: 37818
}
part { name: "elm.swallow.slot.left";
type: SWALLOW;
+ clip_to: "leftclip";
description { state: "default" 0.0;
align: 0.0 0.5;
rel1.to: "elm.swallow.slot.middle";
}
part { name: "elm.swallow.slot.right";
type: SWALLOW;
+ clip_to: "rightclip";
description { state: "default" 0.0;
align: 1.0 0.5;
rel1.to: "elm.swallow.slot.middle";
}
part { name: "elm.swallow.slot.bottom";
type: SWALLOW;
+ clip_to: "bottomclip";
description { state: "default" 0.0;
align: 0.5 1.0;
rel1.to: "elm.swallow.slot.middle";
/* smart callbacks called:
*/
+ typedef enum _Elm_Hover_Axis
+ {
+ ELM_HOVER_AXIS_NONE,
+ ELM_HOVER_AXIS_HORIZONTAL,
+ ELM_HOVER_AXIS_VERTICAL,
+ ELM_HOVER_AXIS_BOTH
+ } Elm_Hover_Axis;
EAPI Evas_Object *elm_hover_add(Evas_Object *parent);
EAPI void elm_hover_target_set(Evas_Object *obj, Evas_Object *target);
EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent);
EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content);
EAPI void elm_hover_style_set(Evas_Object *obj, const char *style);
+ EAPI const char *elm_hover_best_content_location_get(Evas_Object *obj, Elm_Hover_Axis pref_axis);
/* smart callbacks called:
* "clicked" - the user clicked the empty space in the hover to dismiss
*/
// * left/right arrow broken with password mode for entry + utf8 chars...
//
//// (incomplete - medium priority)
+// * bubble should allow style (left/right + top/bottom)
+// * hover needs a "best direction" call for where to put entries with constraints
+// * buttons need a "bigbutton" option
// * disabled not supported
// * tab widget focusing (not useful for touchscreen tho...)
-// * bubble should allow style (left/right + top/bottom)
// * on the fly theme changes - test (should work)
// * entry selection conflicts with finger scroll (make selection start/stop work on signals?)
// * need a hold-scroll counter in elm_widget
// * add fullscreen mode on/off for windows
//
//// (more widgets/features - medium priority)
+// * need multi-sel (with button + hover + ...)
+// * need "photoframe" widget (for contact photos?)
// * toolbar widget (edje + box + button + separators)
// * listitem widget (simple label + icon)
// * radio widget + group handling
// * checkbox widget (like toggle)
// * need separator widget (h/v)
// * need slide-open "panel" that can hold stuff and optionally scroll
-// * need "photoframe" widget (for contact photos?)
// * need calendar widget (select date)
-// * need multi-sel (with button + hover + ...)
// * need slider widget
// * need range selector (select range of values from X to Y over an interval)
// * need "dialogbutton" widget (bigger button for bottom of wins)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *top = elm_widget_top_get(obj);
+ if (!wd->editable) return;
if (elm_widget_focus_get(obj))
{
evas_object_focus_set(wd->ent, 1);
_signal_dismiss(void *data, Evas_Object *obj, const char *emission, const char *source)
{
Widget_Data *wd = elm_widget_data_get(data);
- evas_object_smart_callback_call(data, "clicked", NULL);
evas_object_hide(data);
+ evas_object_smart_callback_call(data, "clicked", NULL);
}
static void
_reval_content(obj);
_sizing_eval(obj);
}
+
+EAPI const char *
+elm_hover_best_content_location_get(Evas_Object *obj, Elm_Hover_Axis pref_axis)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ Evas_Coord x = 0, y = 0, w = 0, h = 0, x2 = 0, y2 = 0, w2 = 0, h2 = 0;
+ Evas_Coord spc_l, spc_r, spc_t, spc_b;
+
+ if (wd->parent) evas_object_geometry_get(wd->parent, &x, &y, &w, &h);
+ if (wd->hov) evas_object_geometry_get(wd->hov, &x2, &y2, &w2, &h2);
+ spc_l = x2 - x;
+ spc_r = (x + w) - (x2 + w2);
+ if (spc_l < 0) spc_l = 0;
+ if (spc_r < 0) spc_r = 0;
+ spc_t = y2 - y;
+ spc_b = (y + h) - (y2 + y2);
+ if (spc_t < 0) spc_t = 0;
+ if (spc_b < 0) spc_b = 0;
+ if (pref_axis == ELM_HOVER_AXIS_HORIZONTAL)
+ {
+ if (spc_l < spc_r) return "right";
+ else return "left";
+ }
+ else if (pref_axis == ELM_HOVER_AXIS_VERTICAL)
+ {
+ if (spc_t < spc_b) return "bottom";
+ else return "top";
+ }
+ if (spc_l < spc_r)
+ {
+ if (spc_t > spc_r) return "top";
+ else if (spc_b > spc_r) return "bottom";
+ return "right";
+ }
+ if (spc_t > spc_r) return "top";
+ else if (spc_b > spc_r) return "bottom";
+ return "left";
+}
_sub_obj_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Smart_Data *sd = data;
- if (obj == sd->resize_obj) sd->resize_obj = NULL;
+ if (obj == sd->resize_obj)
+ {
+ sd->resize_obj = NULL;
+ evas_object_smart_callback_call(sd->obj, "sub-object-del", obj);
+ }
else if (obj == sd->hover_obj) sd->hover_obj = NULL;
- else sd->subobjs = eina_list_remove(sd->subobjs, obj);
+ else
+ {
+ sd->subobjs = eina_list_remove(sd->subobjs, obj);
+ evas_object_smart_callback_call(sd->obj, "sub-object-del", obj);
+ }
}
static void
}
if (!strcmp(evas_object_type_get(sobj), SMART_NAME))
{
- sd = evas_object_smart_data_get(sobj);
- if (sd)
+ Smart_Data *sd2 = evas_object_smart_data_get(sobj);
+ if (sd2)
{
- if (sd->parent_obj) elm_widget_sub_object_del(sd->parent_obj, sobj);
- sd->parent_obj = obj;
+ if (sd2->parent_obj) elm_widget_sub_object_del(sd2->parent_obj, sobj);
+ sd2->parent_obj = obj;
}
}
+ evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
evas_object_smart_callback_call(obj, "sub-object-add", sobj);
}
}
if (!strcmp(evas_object_type_get(sobj), SMART_NAME))
{
- sd = evas_object_smart_data_get(sobj);
- if (sd) sd->parent_obj = NULL;
+ Smart_Data *sd2 = evas_object_smart_data_get(sobj);
+ if (sd2) sd->parent_obj = NULL;
}
+ evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del);
evas_object_smart_callback_call(obj, "sub-object-del", sobj);
}