part { name: "elm.swallow.content";
type: SWALLOW;
description { state: "default" 0.0;
+ align: 0.0 0.0;
rel1 {
to_y: "elm.text";
relative: 0.0 1.0;
}
}
+ group { name: "elm/entry/base-charwrap/default";
+ styles
+ {
+ style { name: "entry_textblock_style_charwrap";
+ base: "font=Sans font_size=10 align=left color=#000 wrap=char";
+ tag: "br" "\n";
+ tag: "tab" "\t";
+ tag: "em" "+ font=Sans:style=Oblique";
+ tag: "b" "+ font=Sans:style=Bold";
+ tag: "link" "+ color=#800 underline=on underline_color=#8008";
+ tag: "hilight" "+ font=Sans:style=Bold";
+ }
+ style { name: "entry_textblock_disabled_style_charwrap";
+ base: "font=Sans font_size=10 align=left color=#00000080 wrap=char";
+ tag: "br" "\n";
+ tag: "tab" "\t";
+ tag: "em" "+ font=Sans:style=Oblique";
+ tag: "b" "+ font=Sans:style=Bold";
+ tag: "link" "+ color=#00000080 underline=on underline_color=#00000080";
+ tag: "hilight" "+ font=Sans:style=Bold";
+ }
+ }
+ parts {
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 1;
+ scale: 1;
+ entry_mode: EDITABLE;
+ select_mode: EXPLICIT;
+ multiline: 1;
+ source: "elm/entry/selection/default"; // selection under
+// source2: "X"; // selection over
+// source3: "X"; // cursor under
+ source4: "elm/entry/cursor/default"; // cursorover
+ source5: "elm/entry/anchor/default"; // anchor under
+// source6: "X"; // anchor over
+ description { state: "default" 0.0;
+ text {
+ style: "entry_textblock_style_charwrap";
+ min: 0 1;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text {
+ style: "entry_textblock_disabled_style_charwrap";
+ min: 0 1;
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "focus";
+ signal: "load";
+ source: "";
+ action: FOCUS_SET;
+ target: "elm.text";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "elm.text";
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
+
group { name: "elm/entry/base-nowrap/default";
parts {
part { name: "elm.text";
}
}
+ group { name: "elm/entry/base-noedit-charwrap/default";
+ parts {
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 1;
+ scale: 1;
+ entry_mode: PLAIN;
+ select_mode: EXPLICIT;
+ multiline: 1;
+ source: "elm/entry/selection/default"; // selection under
+ source5: "elm/entry/anchor/default"; // anchor under
+ description { state: "default" 0.0;
+ text {
+ style: "entry_textblock_style_charwrap";
+ min: 0 1;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text {
+ style: "entry_textblock_disabled_style_charwrap";
+ }
+ }
+ }
+ }
+ programs {
+ program { name: "focus";
+ signal: "load";
+ source: "";
+ action: FOCUS_SET;
+ target: "elm.text";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "elm.text";
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
group { name: "elm/entry/base-nowrap-noedit/default";
parts {
part { name: "elm.text";
}
}
-///////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////
+ group { name: "elm/notify/block_events/default";
+ parts {
+ part { name: "block_events";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 64;
+ visible: 1;
+ }
+ }
+ }
+ }
group { name: "elm/notify/base/default";
//this group is a design similar to the inwin group
images {
rel2.to: "image_2_whole";
}
}
+ part { name: "events_catcher";
+ type: RECT;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ color: 0 0 0 0;
+ }
+ }
}
programs {
program { name: "fade_next";
void
test_notify(void *data, Evas_Object *obj, void *event_info)
{
- Evas_Object *win, *bg, *bx, *bx2, *notify, *bt, *lb;
+ Evas_Object *win, *bg, *bx, *tb, *notify, *bt, *lb;
char buf[PATH_MAX];
win = elm_win_add(NULL, "Notify", ELM_WIN_BASIC);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(bg);
- bx2 = elm_box_add(win);
- evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_win_resize_object_add(win, bx2);
- evas_object_show(bx2);
+ tb = elm_table_add(win);
+ elm_win_resize_object_add(win, tb);
+ evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(tb);
+
+
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
bx = elm_box_add(win);
bt = elm_button_add(win);
elm_button_label_set(bt, "Top");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 1, 0, 1, 1);
evas_object_show(bt);
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
+ elm_notify_repeat_events_set(notify, EINA_FALSE);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
elm_notify_timeout_set(notify, 5);
evas_object_show(bx);
lb = elm_label_add(win);
- elm_label_label_set(lb, "Bottom position. This notify use a timeout of 5 sec.");
+ elm_label_label_set(lb, "Bottom position. This notify use a timeout of 5 sec.<br>"
+ "<b>The events outside the window are blocked.</b>");
elm_box_pack_end(bx, lb);
evas_object_show(lb);
bt = elm_button_add(win);
elm_button_label_set(bt, "Bottom");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 1, 2, 1, 1);
evas_object_show(bt);
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_LEFT);
elm_notify_timeout_set(notify, 10);
bt = elm_button_add(win);
elm_button_label_set(bt, "Left");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 0, 1, 1, 1);
evas_object_show(bt);
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_RIGHT);
bt = elm_button_add(win);
elm_button_label_set(bt, "Right");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 2, 1, 1, 1);
evas_object_show(bt);
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_TOP_LEFT);
bt = elm_button_add(win);
elm_button_label_set(bt, "Top Left");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 0, 0, 1, 1);
evas_object_show(bt);
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_TOP_RIGHT);
bt = elm_button_add(win);
elm_button_label_set(bt, "Top Right");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 2, 0, 1, 1);
evas_object_show(bt);
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM_LEFT);
bt = elm_button_add(win);
elm_button_label_set(bt, "Bottom Left");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 0, 2, 1, 1);
evas_object_show(bt);
notify = elm_notify_add(win);
- elm_win_resize_object_add(win, notify);
evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM_RIGHT);
bt = elm_button_add(win);
elm_button_label_set(bt, "Bottom Right");
evas_object_smart_callback_add(bt, "clicked", _bt, notify);
- elm_box_pack_end(bx2, bt);
+ elm_table_pack(tb, bt, 2, 2, 1, 1);
evas_object_show(bt);
evas_object_show(win);
+ evas_object_resize(win, 300, 350);
}
+
#endif
+
_get(void *data, Evas_Object *obj)
{
int w, h;
- Evas_Object *photo = evas_object_image_add(evas_object_evas_get(obj));
- evas_object_image_file_set(photo, data, NULL);
- evas_object_image_filled_set(photo, 1);
- evas_object_image_size_get(photo, &w, &h);
- evas_object_size_hint_aspect_set(photo, EVAS_ASPECT_CONTROL_BOTH, w, h);
+ Evas_Object *photo = elm_photocam_add(obj);
+ elm_photocam_file_set(photo, data);
+ elm_photocam_zoom_mode_set(photo, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT);
return photo;
}
EAPI Evas_Object *elm_table_add(Evas_Object *parent);
EAPI void elm_table_homogenous_set(Evas_Object *obj, Eina_Bool homogenous);
EAPI void elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h);
+ EAPI void elm_table_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical);
/* smart callbacks called:
*/
EAPI void elm_notify_orient_set(Evas_Object *obj, Elm_Notify_Orient orient);
EAPI void elm_notify_timeout_set(Evas_Object *obj, int timeout);
EAPI void elm_notify_timer_init(Evas_Object *obj);
+ EAPI void elm_notify_repeat_events_set(Evas_Object *obj, Eina_Bool repeat);
+ EAPI void elm_notify_parent_set(Evas_Object *obj, Evas_Object *parent);
/* smart callbacks called:
*/
typedef enum _Elm_Hover_Axis
EAPI const char *elm_entry_selection_get(const Evas_Object *obj);
EAPI void elm_entry_entry_insert(Evas_Object *obj, const char *entry);
EAPI void elm_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap);
+ EAPI void elm_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap);
EAPI void elm_entry_editable_set(Evas_Object *obj, Eina_Bool editable);
EAPI void elm_entry_select_none(Evas_Object *obj);
EAPI void elm_entry_select_all(Evas_Object *obj);
EAPI void elm_menu_item_del(Elm_Menu_Item *item);
EAPI const Eina_List *elm_menu_item_subitems_get(Elm_Menu_Item *item);
/* smart callbacks called:
+ * "clicked" - the user clicked the empty space in the menu to dismiss. event_info is NULL.
*/
-
typedef enum _Elm_List_Mode
{
ELM_LIST_COMPRESS,
EAPI Evas_Object *elm_fileselector_add(Evas_Object *parent);
EAPI void elm_fileselector_is_save_set(Evas_Object *obj, Eina_Bool is_save);
EAPI Eina_Bool elm_fileselector_is_save_get(Evas_Object *obj);
+ EAPI void elm_fileselector_folder_only_set(Evas_Object *obj, Eina_Bool only);
+ EAPI Eina_Bool elm_fileselector_folder_only_get(Evas_Object *obj);
+ EAPI void elm_fileselector_buttons_ok_cancel_set(Evas_Object *obj, Eina_Bool buttons);
+ EAPI Eina_Bool elm_fileselector_buttons_ok_cancel_get(Evas_Object *obj);
EAPI void elm_fileselector_expandable_set(Evas_Object *obj, Eina_Bool expand);
EAPI void elm_fileselector_path_set(Evas_Object *obj, const char *path);
EAPI const char *elm_fileselector_path_get(Evas_Object *obj);
EAPI const char *elm_fileselector_selected_get(Evas_Object *obj);
/* smart callbacks called:
* "selected" - the user click on a file
+ * "directory,open" - the list is populate with a new content. event_info is a directory.
* "done" - the user click on the ok or cancel buttons
*/
_del_pre_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
-
- evas_object_event_callback_del(wd->entry, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
+ evas_object_event_callback_del_full(wd->entry, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
elm_anchorblock_hover_end(obj);
elm_anchorblock_hover_parent_set(obj, NULL);
}
evas_object_resize(wd->pop, info->w, info->h);
wd->hover = elm_hover_add(obj);
- if (wd->hover_style)
+ if (wd->hover_style)
elm_object_style_set(wd->hover, wd->hover_style);
hover_parent = wd->hover_parent;
if (!hover_parent) hover_parent = obj;
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->hover_parent)
- evas_object_event_callback_del(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del);
+ evas_object_event_callback_del_full(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
wd->hover_parent = parent;
if (wd->hover_parent)
evas_object_event_callback_add(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->hover_parent)
- evas_object_event_callback_del(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del);
+ evas_object_event_callback_del_full(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
wd->hover_parent = parent;
if (wd->hover_parent)
evas_object_event_callback_add(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
-/*
+/*
* TODO
* userdefined icon/label cb
* show/hide/add buttons ???
Evas_Object *vbox, *entry, *entry2, *list, *scr2;
const char *path;
const char *selection;
+ Eina_Bool only_folder;
Eina_Bool expand;
+
+ struct
+ {
+ Evas_Object *bx;
+ Evas_Object *ok;
+ Evas_Object *cancel;
+ } buttons;
};
Elm_Genlist_Item_Class itc;
return NULL;
}
-static Eina_Bool
+static Eina_Bool
_itc_state_get(const void *data, Evas_Object *obj, const char *source)
{
return EINA_FALSE;
eina_stringshare_del(p);
}
-static void
+static void
_do_anchors(Evas_Object *obj, const char *path)
{
Widget_Data *wd = elm_widget_data_get(obj);
}
free(tok[0]);
free(tok);
-
+
//~ printf("ANCHOR: %s\n", buf);
elm_entry_entry_set(wd->entry, buf);
}
dir = opendir(path);
if (!dir) return;
+ evas_object_smart_callback_call(obj, "directory,open", (void*)path);
+
if (!parent)
{
elm_genlist_clear(wd->list);
wd->path = eina_stringshare_add(path);
_do_anchors(obj, path);
}
-
+
if (wd->entry2)
elm_entry_entry_set(wd->entry2, "");
real = ecore_file_realpath(buf); //TODO this will resolv symlinks...I dont like it
if (ecore_file_is_dir(real))
dirs = eina_list_append(dirs, real);
- else
+ else if(!wd->only_folder)
files = eina_list_append(files, real);
}
closedir(dir);
free(real);
}
eina_list_free(dirs);
-
+
EINA_LIST_FOREACH(files, l, real)
{
//~ printf("FILE: %s [%p]\n", real, wd->list);
elm_box_pack_end(wd->vbox, box);
evas_object_size_hint_align_set(box, 0.0, 0.0);
evas_object_show(box);
-
+
// up btn
ic = elm_icon_add(parent);
elm_icon_standard_set(ic, "arrow_up");
elm_box_pack_end(box, bt);
evas_object_smart_callback_add(bt, "clicked", _up, obj);
evas_object_show(bt);
-
+
// home btn
ic = elm_icon_add(parent);
elm_icon_standard_set(ic, "home");
wd->entry = elm_entry_add(parent);
elm_widget_sub_object_add(obj, wd->entry);
elm_entry_editable_set(wd->entry, 0);
- elm_entry_single_line_set(wd->entry, EINA_TRUE);
+ elm_entry_single_line_set(wd->entry, EINA_FALSE);
+ elm_entry_line_char_wrap_set(wd->entry, EINA_TRUE);
evas_object_size_hint_weight_set(wd->entry, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(wd->entry, EVAS_HINT_FILL, 0.0);
elm_box_pack_end(wd->vbox, wd->entry);
evas_object_size_hint_align_set(wd->scr2, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(wd->vbox, wd->scr2);
evas_object_show(wd->scr2);
-
- // buttons box
- box = elm_box_add(parent);
- elm_box_horizontal_set(box, 1);
- elm_widget_sub_object_add(obj, box);
- elm_box_pack_end(wd->vbox, box);
- evas_object_show(box);
-
- // cancel btn
- bt = elm_button_add(parent);
- elm_button_label_set(bt, "Cancel");
- elm_widget_sub_object_add(obj, bt);
- elm_box_pack_end(box, bt);
- evas_object_smart_callback_add(bt, "clicked", _canc, obj);
- evas_object_show(bt);
-
- // ok btn
- bt = elm_button_add(parent);
- elm_button_label_set(bt, "OK");
- elm_widget_sub_object_add(obj, bt);
- elm_box_pack_end(box, bt);
- evas_object_smart_callback_add(bt, "clicked", _ok, obj);
- evas_object_show(bt);
+ elm_fileselector_buttons_ok_cancel_set(obj, 1);
+
// Is this the right way to show sub-objs ?? or use the show/hide cbs ??
//~ evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _show, obj);
//~ evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
}
EAPI void
+elm_fileselector_folder_only_set(Evas_Object *obj, Eina_Bool only)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+
+ if(wd->only_folder == only) return ;
+
+ wd->only_folder = only;
+}
+
+EAPI Eina_Bool
+elm_fileselector_only_folder_get(Evas_Object *obj)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ return wd->only_folder;
+}
+
+EAPI void
+elm_fileselector_buttons_ok_cancel_set(Evas_Object *obj, Eina_Bool only)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ Evas_Object *box, *bt;
+
+ if (only)
+ {
+ if (wd->buttons.bx) return;
+ // buttons box
+ box = elm_box_add(obj);
+ wd->buttons.bx = box;
+ elm_box_horizontal_set(box, 1);
+ elm_widget_sub_object_add(obj, box);
+ elm_box_pack_end(wd->vbox, box);
+ evas_object_show(box);
+
+ // cancel btn
+ bt = elm_button_add(obj);
+ wd->buttons.cancel = bt;
+ elm_button_label_set(bt, "Cancel");
+ elm_widget_sub_object_add(obj, bt);
+ elm_box_pack_end(box, bt);
+ evas_object_smart_callback_add(bt, "clicked", _canc, obj);
+ evas_object_show(bt);
+
+ // ok btn
+ bt = elm_button_add(obj);
+ wd->buttons.ok = bt;
+ elm_button_label_set(bt, "OK");
+ elm_widget_sub_object_add(obj, bt);
+ elm_box_pack_end(box, bt);
+ evas_object_smart_callback_add(bt, "clicked", _ok, obj);
+ evas_object_show(bt);
+ }
+ else
+ {
+ evas_object_del(wd->buttons.bx);
+ evas_object_del(wd->buttons.ok);
+ evas_object_del(wd->buttons.cancel);
+ wd->buttons.bx = NULL;
+ }
+}
+
+EAPI Eina_Bool
+elm_fileselector_ok_cancel_get(Evas_Object *obj)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ return wd->buttons.bx ? EINA_TRUE : EINA_FALSE;
+}
+
+EAPI void
elm_fileselector_expandable_set(Evas_Object *obj, Eina_Bool expand)
{
Widget_Data *wd = elm_widget_data_get(obj);
{
Widget_Data *wd = elm_widget_data_get(obj);
Elm_Genlist_Item *it;
-
+
if (wd->entry2)
{
const char *name;
wd->selection = eina_stringshare_add(buf);
return wd->selection;
}
-
+
it = elm_genlist_selected_item_get(wd->list);
if (it) return elm_genlist_item_data_get(it);
* A hoversel is a button that pops up a list of items (automatically
* choosing the direction to display) that have a lable and/or an icon to
* select from. It is a convenience widget to avoid the need to do all the
- * piecing together yourself. It is intended for a small numbr of items in
+ * piecing together yourself. It is intended for a small number of items in
* the hoversel menu (no more than 8), though is capable of many more.
*
* Signals that you can add callbacks for are:
bx = elm_box_add(wd->hover);
elm_box_homogenous_set(bx, 1);
- snprintf(buf, sizeof(buf), "hoversel_vertical_entry/%s",
+ snprintf(buf, sizeof(buf), "hoversel_vertical_entry/%s",
elm_widget_style_get(obj));
EINA_LIST_FOREACH(wd->items, l, it)
{
}
elm_hover_content_set(wd->hover,
- elm_hover_best_content_location_get(wd->hover,
+ elm_hover_best_content_location_get(wd->hover,
ELM_HOVER_AXIS_VERTICAL),
bx);
evas_object_show(bx);
if (!wd) return;
if (wd->hover_parent)
- evas_object_event_callback_del(wd->hover_parent, EVAS_CALLBACK_DEL,
- _parent_del);
+ evas_object_event_callback_del_full(wd->hover_parent, EVAS_CALLBACK_DEL,
+ _parent_del, obj);
wd->hover_parent = parent;
if (wd->hover_parent)
- evas_object_event_callback_add(wd->hover_parent, EVAS_CALLBACK_DEL,
+ evas_object_event_callback_add(wd->hover_parent, EVAS_CALLBACK_DEL,
_parent_del, obj);
}
*
* This will remove all the children items from the hoversel. (should not be
* called while the hoversel is active).
- *
+ *
* @param obj The hoversel object
*
* @ingroup Hoversel
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *sub = event_info;
- evas_object_event_callback_del
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
_sizing_eval(obj);
}
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *sub = event_info;
- evas_object_event_callback_del(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
+ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
if (sub == wd->content) wd->content = NULL;
else if (sub == wd->icon) wd->icon = NULL;
_sizing_eval(obj);
{
elm_widget_sub_object_add(obj, content);
edje_object_part_swallow(wd->bbl, "elm.swallow.content", content);
- evas_object_event_callback_add(content,
+ evas_object_event_callback_add(content,
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_changed_size_hints, obj);
}
* @param obj The given evas pointer
* @param icon The given icon for the bubble
*
- * This function sets the icon showed on the top left of bubble.
+ * This function sets the icon showed on the top left of bubble.
*
* @ingroup Bubble
*/
if (sub == wd->icon)
{
edje_object_signal_emit(wd->btn, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
+ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
wd->icon = NULL;
edje_object_message_signal_process(wd->btn);
_sizing_eval(obj);
if (sub == wd->icon)
{
edje_object_signal_emit(wd->chk, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
+ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
wd->icon = NULL;
_sizing_eval(obj);
}
wd->chk = edje_object_add(e);
_elm_theme_set(wd->chk, "check", "base", "default");
- edje_object_signal_callback_add(wd->chk, "elm,action,check,on", "",
+ edje_object_signal_callback_add(wd->chk, "elm,action,check,on", "",
_signal_check_on, obj);
- edje_object_signal_callback_add(wd->chk, "elm,action,check,off", "",
+ edje_object_signal_callback_add(wd->chk, "elm,action,check,off", "",
_signal_check_off, obj);
- edje_object_signal_callback_add(wd->chk, "elm,action,check,toggle", "",
+ edje_object_signal_callback_add(wd->chk, "elm,action,check,toggle", "",
_signal_check_toggle, obj);
elm_widget_resize_object_set(obj, wd->chk);
Eina_List *items;
Eina_Bool changed : 1;
Eina_Bool linewrap : 1;
+ Eina_Bool char_linewrap : 1;
Eina_Bool single_line : 1;
Eina_Bool password : 1;
Eina_Bool editable : 1;
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
Evas_Coord resw, resh, minminw;
- if (wd->linewrap)
+ if (wd->linewrap || wd->char_linewrap)
{
evas_object_geometry_get(wd->ent, NULL, NULL, &resw, &resh);
if ((resw == wd->lastw) && (!wd->changed)) return;
{
Widget_Data *wd = elm_widget_data_get(data);
- if (wd->linewrap) _sizing_eval(data);
+ if (wd->linewrap || wd->char_linewrap) _sizing_eval(data);
if (wd->hoversel) _hoversel_position(data);
// Evas_Coord ww, hh;
// evas_object_geometry_get(wd->ent, NULL, NULL, &ww, &hh);
evas_object_smart_callback_add(wd->hoversel, "dismissed", _dismissed, data);
if (!wd->selmode)
{
- elm_hoversel_item_add(wd->hoversel, "Select", NULL, ELM_ICON_NONE,
+ elm_hoversel_item_add(wd->hoversel, "Select", NULL, ELM_ICON_NONE,
_select, data);
if (wd->editable)
- elm_hoversel_item_add(wd->hoversel, "Paste", NULL, ELM_ICON_NONE,
+ elm_hoversel_item_add(wd->hoversel, "Paste", NULL, ELM_ICON_NONE,
_paste, data);
}
else
{
- elm_hoversel_item_add(wd->hoversel, "Copy", NULL, ELM_ICON_NONE,
+ elm_hoversel_item_add(wd->hoversel, "Copy", NULL, ELM_ICON_NONE,
_copy, data);
if (wd->editable)
- elm_hoversel_item_add(wd->hoversel, "Cut", NULL, ELM_ICON_NONE,
+ elm_hoversel_item_add(wd->hoversel, "Cut", NULL, ELM_ICON_NONE,
_cut, data);
- elm_hoversel_item_add(wd->hoversel, "Cancel", NULL, ELM_ICON_NONE,
+ elm_hoversel_item_add(wd->hoversel, "Cancel", NULL, ELM_ICON_NONE,
_cancel, data);
}
EINA_LIST_FOREACH(wd->items, l, it)
{
- elm_hoversel_item_add(wd->hoversel, it->label, it->icon_file,
+ elm_hoversel_item_add(wd->hoversel, it->label, it->icon_file,
it->icon_type, _item_clicked, it);
}
if (wd->hoversel)
else
{
if (wd->linewrap) return "base";
+ else if (wd->char_linewrap) return "base-charwrap";
else return "base-nowrap";
}
}
else
{
if (wd->linewrap) return "base-noedit";
+ else if (wd->char_linewrap) return "base-noedit-charwrap";
else return "base-nowrap-noedit";
}
}
pos = pos2;
pos2 = evas_string_char_next_get((unsigned char *)(text), pos2, &ch);
if ((ch <= 0) || (pos2 <= 0)) break;
- if (ch == '\n')
+ if (ch == '\n')
str = _str_append(str, "<br>", &str_len, &str_alloc);
- else if (ch == '\t')
+ else if (ch == '\t')
str = _str_append(str, "<\t>", &str_len, &str_alloc);
- else if (ch == '<')
+ else if (ch == '<')
str = _str_append(str, "<", &str_len, &str_alloc);
- else if (ch == '>')
+ else if (ch == '>')
str = _str_append(str, ">", &str_len, &str_alloc);
- else if (ch == '&')
+ else if (ch == '&')
str = _str_append(str, "&", &str_len, &str_alloc);
else
{
top = elm_widget_top_get(data);
if ((top) && (elm_win_xwindow_get(top)))
- ecore_x_selection_primary_set(elm_win_xwindow_get(top), txt,
+ ecore_x_selection_primary_set(elm_win_xwindow_get(top), txt,
strlen(txt));
#endif
free(txt);
top = elm_widget_top_get(data);
if ((top) && (elm_win_xwindow_get(top)))
- ecore_x_selection_primary_set(elm_win_xwindow_get(top), txt,
+ ecore_x_selection_primary_set(elm_win_xwindow_get(top), txt,
strlen(txt));
#endif
free(txt);
t = _mkup_to_text(wd->cut_sel);
if (t)
{
- ecore_x_selection_primary_set(elm_win_xwindow_get(top),
+ ecore_x_selection_primary_set(elm_win_xwindow_get(top),
t, strlen(t));
free(t);
}
Evas_Coord cx, cy, cw, ch;
evas_object_smart_callback_call(data, "cursor,changed", NULL);
- edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text",
+ edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text",
&cx, &cy, &cw, &ch);
if (!wd->deferred_recalc_job)
elm_widget_show_region_set(data, cx, cy, cw, ch);
ei.name = n;
ei.button = atoi(buf2);
ei.x = ei.y = ei.w = ei.h = 0;
- geoms =
+ geoms =
edje_object_part_text_anchor_geometry_get(wd->ent, "elm.text", ei.name);
if (geoms)
{
elm_widget_can_focus_set(obj, 1);
wd->linewrap = EINA_TRUE;
+ wd->char_linewrap= EINA_FALSE;
wd->editable = EINA_TRUE;
wd->disabled = EINA_FALSE;
wd->context_menu = EINA_TRUE;
wd->ent = edje_object_add(e);
evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOVE, _move, obj);
evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_RESIZE, _resize, obj);
- evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_DOWN,
+ evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_DOWN,
_mouse_down, obj);
- evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_UP,
+ evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_UP,
_mouse_up, obj);
- evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_MOVE,
+ evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_MOVE,
_mouse_move, obj);
_elm_theme_set(wd->ent, "entry", "base", "default");
- edje_object_signal_callback_add(wd->ent, "entry,changed", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "entry,changed", "elm.text",
_signal_entry_changed, obj);
- edje_object_signal_callback_add(wd->ent, "selection,start", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "selection,start", "elm.text",
_signal_selection_start, obj);
- edje_object_signal_callback_add(wd->ent, "selection,changed", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "selection,changed", "elm.text",
_signal_selection_changed, obj);
- edje_object_signal_callback_add(wd->ent, "selection,cleared", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "selection,cleared", "elm.text",
_signal_selection_cleared, obj);
- edje_object_signal_callback_add(wd->ent, "entry,paste,request", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "entry,paste,request", "elm.text",
_signal_entry_paste_request, obj);
- edje_object_signal_callback_add(wd->ent, "entry,copy,notify", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "entry,copy,notify", "elm.text",
_signal_entry_copy_notify, obj);
- edje_object_signal_callback_add(wd->ent, "entry,cut,notify", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "entry,cut,notify", "elm.text",
_signal_entry_cut_notify, obj);
- edje_object_signal_callback_add(wd->ent, "cursor,changed", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "cursor,changed", "elm.text",
_signal_cursor_changed, obj);
- edje_object_signal_callback_add(wd->ent, "anchor,mouse,down,*", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "anchor,mouse,down,*", "elm.text",
_signal_anchor_down, obj);
- edje_object_signal_callback_add(wd->ent, "anchor,mouse,up,*", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "anchor,mouse,up,*", "elm.text",
_signal_anchor_up, obj);
- edje_object_signal_callback_add(wd->ent, "anchor,mouse,move,*", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "anchor,mouse,move,*", "elm.text",
_signal_anchor_move, obj);
- edje_object_signal_callback_add(wd->ent, "anchor,mouse,in,*", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "anchor,mouse,in,*", "elm.text",
_signal_anchor_in, obj);
- edje_object_signal_callback_add(wd->ent, "anchor,mouse,out,*", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "anchor,mouse,out,*", "elm.text",
_signal_anchor_out, obj);
- edje_object_signal_callback_add(wd->ent, "entry,key,enter", "elm.text",
+ edje_object_signal_callback_add(wd->ent, "entry,key,enter", "elm.text",
_signal_key_enter, obj);
edje_object_part_text_set(wd->ent, "elm.text", "<br>");
elm_widget_resize_object_set(obj, wd->ent);
if (wd->single_line == single_line) return;
wd->single_line = single_line;
wd->linewrap = EINA_FALSE;
+ wd->char_linewrap = EINA_FALSE;
t = eina_stringshare_add(elm_entry_entry_get(obj));
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
elm_entry_entry_set(obj, t);
wd->password = password;
wd->single_line = EINA_TRUE;
wd->linewrap = EINA_FALSE;
+ wd->char_linewrap = EINA_FALSE;
t = eina_stringshare_add(elm_entry_entry_get(obj));
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
elm_entry_entry_set(obj, t);
if (wd->linewrap == wrap) return;
wd->linewrap = wrap;
+ if(wd->linewrap)
+ wd->char_linewrap = EINA_FALSE;
+ t = eina_stringshare_add(elm_entry_entry_get(obj));
+ _elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
+ elm_entry_entry_set(obj, t);
+ eina_stringshare_del(t);
+ _sizing_eval(obj);
+}
+
+EAPI void
+elm_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ const char *t;
+
+ if (wd->char_linewrap == wrap) return;
+ wd->char_linewrap = wrap;
+ if(wd->char_linewrap)
+ wd->linewrap = EINA_FALSE;
t = eina_stringshare_add(elm_entry_entry_get(obj));
_elm_theme_set(wd->ent, "entry", _getbase(obj), elm_widget_style_get(obj));
elm_entry_entry_set(obj, t);
if (!wd) return;
if (wd->context_menu == !disabled) return;
wd->context_menu = !disabled;
-
+
if (wd->context_menu)
{
evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, obj);
}
else
{
- evas_object_event_callback_del(wd->ent, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down);
- evas_object_event_callback_del(wd->ent, EVAS_CALLBACK_MOUSE_UP, _mouse_up);
+ evas_object_event_callback_del_full(wd->ent, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, obj);
+ evas_object_event_callback_del_full(wd->ent, EVAS_CALLBACK_MOUSE_UP, _mouse_up, obj);
}
}
evas_object_smart_callback_call(obj, "clicked", NULL);
elm_hover_target_set(obj, NULL);
elm_hover_parent_set(obj, NULL);
- evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_MOVE, _hov_move);
- evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_RESIZE, _hov_resize);
- evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_SHOW, _hov_show);
- evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_HIDE, _hov_hide);
+ evas_object_event_callback_del_full(wd->hov, EVAS_CALLBACK_MOVE, _hov_move, obj);
+ evas_object_event_callback_del_full(wd->hov, EVAS_CALLBACK_RESIZE, _hov_resize, obj);
+ evas_object_event_callback_del_full(wd->hov, EVAS_CALLBACK_SHOW, _hov_show, obj);
+ evas_object_event_callback_del_full(wd->hov, EVAS_CALLBACK_HIDE, _hov_hide, obj);
EINA_LIST_FREE(wd->subs, si)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (wd->target)
- evas_object_event_callback_del(wd->target, EVAS_CALLBACK_DEL,
- _target_del);
+ evas_object_event_callback_del_full(wd->target, EVAS_CALLBACK_DEL,
+ _target_del, obj);
wd->target = target;
if (wd->target)
{
if (wd->parent)
{
- evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_MOVE,
- _parent_move);
- evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_RESIZE,
- _parent_resize);
- evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_SHOW,
- _parent_show);
- evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_HIDE,
- _parent_hide);
- evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_DEL,
- _parent_del);
+ evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_MOVE,
+ _parent_move, obj);
+ evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_RESIZE,
+ _parent_resize, obj);
+ evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_SHOW,
+ _parent_show, obj);
+ evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_HIDE,
+ _parent_hide, obj);
+ evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_DEL,
+ _parent_del, obj);
}
wd->parent = parent;
if (wd->parent)
{
Widget_Data *wd = elm_widget_data_get(obj);
- edje_object_scale_set(wd->lay, elm_widget_scale_get(obj) *
+ edje_object_scale_set(wd->lay, elm_widget_scale_get(obj) *
_elm_config->scale);
_sizing_eval(obj);
}
{
if (si->obj == sub)
{
- evas_object_event_callback_del(sub,
- EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
+ evas_object_event_callback_del_full(sub,
+ EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints,
+ obj);
wd->subs = eina_list_remove_list(wd->subs, l);
eina_stringshare_del(si->swallow);
free(si);
{
elm_widget_sub_object_add(obj, content);
edje_object_part_swallow(wd->lay, swallow, content);
- evas_object_event_callback_add(content,
+ evas_object_event_callback_add(content,
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_changed_size_hints, obj);
si = ELM_NEW(Subinfo);
{
if (it->icon == sub) it->icon = NULL;
if (it->end == sub) it->end = NULL;
- evas_object_event_callback_del(sub,
- EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
+ evas_object_event_callback_del_full(sub,
+ EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
_fix_items(obj);
_sizing_eval(obj);
break;
evas_object_smart_callback_add(obj, "scroll-hold-off", _hold_off, obj);
evas_object_smart_callback_add(obj, "scroll-freeze-on", _freeze_on, obj);
evas_object_smart_callback_add(obj, "scroll-freeze-off", _freeze_off, obj);
-
+
_sizing_eval(obj);
return obj;
}
static void _submenu_hide(Elm_Menu_Item *item);
static void _submenu_open(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _menu_hide(void *data, Evas_Object *obj, void *event_info);
static void
_del_pre_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
- evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_RESIZE, _parent_resize);
+ evas_object_event_callback_del_full(wd->parent, EVAS_CALLBACK_RESIZE, _parent_resize, obj);
}
EINA_LIST_FREE(l, item)
{
ll = eina_list_append(ll, item->items);
- if (item->label)
- eina_stringshare_del(item->label);
- if (item->hv)
- {
- evas_object_del(item->hv);
- evas_object_del(item->location);
- }
+ if (item->label) eina_stringshare_del(item->label);
+ if (item->icon) evas_object_del(item->icon);
+ if (item->hv) evas_object_del(item->hv);
+ if (item->location) evas_object_del(item->location);
+ if (item->o) evas_object_del(item->o);
free(item);
}
}
- if (wd->hv)
- {
- evas_object_del(wd->hv);
- evas_object_del(wd->location);
- }
+ if (wd->hv) evas_object_del(wd->hv);
+ if (wd->location) evas_object_del(wd->location);
free(wd);
}
{
ll = eina_list_append(ll, item->items);
if (item->separator)
- _elm_theme_set(item->o, "menu", "separator",
+ _elm_theme_set(item->o, "menu", "separator",
elm_widget_style_get(obj));
else if (item->bx)
- {
- _elm_theme_set(item->o, "menu", "item_with_submenu",
+ {
+ _elm_theme_set(item->o, "menu", "item_with_submenu",
elm_widget_style_get(obj));
elm_menu_item_label_set(item, item->label);
elm_menu_item_icon_set(item, item->icon);
- }
+ }
else
{
- _elm_theme_set(item->o, "menu", "item",
+ _elm_theme_set(item->o, "menu", "item",
elm_widget_style_get(obj));
elm_menu_item_label_set(item, item->label);
elm_menu_item_icon_set(item, item->icon);
else
edje_object_signal_emit(item->o, "elm,state,enabled", "elm");
edje_object_message_signal_process(item->o);
- edje_object_scale_set(item->o, elm_widget_scale_get(obj) *
+ edje_object_scale_set(item->o, elm_widget_scale_get(obj) *
_elm_config->scale);
}
}
static void
+_hover_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ _menu_hide(data, obj, event_info);
+ evas_object_smart_callback_call(data, "clicked", NULL);
+}
+
+static void
_menu_hide(void *data, Evas_Object *obj, void *event_info)
{
Eina_List *l;
evas_object_show(wd->hv);
}
-static void
+static void
_item_obj_create(Elm_Menu_Item *item)
{
Widget_Data *wd = elm_widget_data_get(item->menu);
evas_object_size_hint_weight_set(item->o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(item->o, EVAS_HINT_FILL, EVAS_HINT_FILL);
_elm_theme_set(item->o, "menu", "item", elm_widget_style_get(item->menu));
- edje_object_signal_callback_add(item->o, "elm,action,click", "",
- _menu_item_select, item);
- edje_object_signal_callback_add(item->o, "elm,action,activate", "",
+ edje_object_signal_callback_add(item->o, "elm,action,click", "",
+ _menu_item_select, item);
+ edje_object_signal_callback_add(item->o, "elm,action,activate", "",
_menu_item_activate, item);
evas_object_show(item->o);
}
-static void
+static void
_item_separator_obj_create(Elm_Menu_Item *item)
{
Widget_Data *wd = elm_widget_data_get(item->menu);
evas_object_size_hint_weight_set(item->o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_fill_set(item->o, EVAS_HINT_FILL, EVAS_HINT_FILL);
_elm_theme_set(item->o, "menu", "separator", elm_widget_style_get(item->menu));
- edje_object_signal_callback_add(item->o, "elm,action,activate", "",
+ edje_object_signal_callback_add(item->o, "elm,action,activate", "",
_menu_item_activate, item);
evas_object_show(item->o);
}
-static void
+static void
_item_submenu_obj_create(Elm_Menu_Item *item)
{
Widget_Data *wd = elm_widget_data_get(item->menu);
elm_menu_item_label_set(item, item->label);
elm_menu_item_icon_set(item, item->icon);
- edje_object_signal_callback_add(item->o, "elm,action,open", "",
+ edje_object_signal_callback_add(item->o, "elm,action,open", "",
_submenu_open, item);
evas_object_event_callback_add(item->o, EVAS_CALLBACK_MOVE, _item_move_resize, item);
evas_object_event_callback_add(item->o, EVAS_CALLBACK_RESIZE, _item_move_resize, item);
elm_hover_parent_set(wd->hv, parent);
elm_hover_target_set(wd->hv, wd->location);
elm_object_style_set(wd->hv, "menu");
- evas_object_smart_callback_add(wd->hv, "clicked", _menu_hide, obj);
+ evas_object_smart_callback_add(wd->hv, "clicked", _hover_clicked_cb, obj);
wd->bx = elm_box_add(obj);
evas_object_event_callback_add(wd->bx, EVAS_CALLBACK_RESIZE, _menu_resize, obj);
* @param obj The menu object.
* @param parent The new parent.
*/
-EAPI void
+EAPI void
elm_menu_parent_set(Evas_Object *obj, Evas_Object *parent)
{
Eina_List *l, *_l, *ll = NULL;
/*
* Move the menu to a new position
- *
+ *
* @param obj The menu object.
* @param x The new position.
* @param y The new position.
*/
-EAPI void
+EAPI void
elm_menu_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (parent)
{
if (!parent->bx)
- _item_submenu_obj_create(parent);
+ _item_submenu_obj_create(parent);
elm_box_pack_end(parent->bx, subitem->o);
parent->items = eina_list_append(parent->items, subitem);
}
_sizing_eval(item->menu);
}
-EAPI const char *
+EAPI const char *
elm_menu_item_label_get(Elm_Menu_Item *item)
{
if (!item) return ;
else
{
if (!parent->bx)
- _item_submenu_obj_create(parent);
+ _item_submenu_obj_create(parent);
elm_box_pack_end(parent->bx, subitem->o);
parent->items = eina_list_append(parent->items, subitem);
}
struct _Widget_Data
{
- Evas_Object *notify, *content;
+ Evas_Object *notify, *content, *parent;
Elm_Notify_Orient orient;
+ Eina_Bool repeat_events;
+ Evas_Object *block_events;
int timeout;
Ecore_Timer *timer;
{
Widget_Data *wd = elm_widget_data_get(obj);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_RESIZE, _resize);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_MOVE, _resize);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW, _show);
- evas_object_event_callback_del(obj, EVAS_CALLBACK_HIDE, _hide);
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, _resize, obj);
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_MOVE, _resize, obj);
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_SHOW, _show, obj);
+ evas_object_event_callback_del_full(obj, EVAS_CALLBACK_HIDE, _hide, obj);
}
{
Widget_Data *wd = elm_widget_data_get(obj);
+ elm_notify_content_set(obj, NULL);
+ elm_notify_parent_set(obj, NULL);
+ elm_notify_repeat_events_set(obj, EINA_TRUE);
+ if (wd->timer)
+ {
+ ecore_timer_del(wd->timer);
+ wd->timer = NULL;
+ }
free(wd);
}
if (!wd) return;
_elm_theme_set(wd->notify, "notify", "base", "default");
- edje_object_scale_set(wd->notify, elm_widget_scale_get(obj) *
+ if(wd->block_events)
+ _elm_theme_set(wd->block_events, "notify", "block_events", "default");
+ edje_object_scale_set(wd->notify, elm_widget_scale_get(obj) *
_elm_config->scale);
_sizing_eval(obj);
}
static void
_sizing_eval(Evas_Object *obj)
{
- //Widget_Data *wd = elm_widget_data_get(obj);
- //Evas_Coord minw = -1, minh = -1;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ Evas_Coord x,y,w,h;
+ if(!wd->parent) return ;
- //edje_object_size_min_calc(wd->notify, &minw, &minh);
- //evas_object_size_hint_min_set(obj, minw, minh);
+ evas_object_geometry_get(wd->parent, &x, &y, &w, &h);
+ evas_object_resize(obj, w, h);
+ evas_object_move(obj, x, y);
}
static void
{
Widget_Data *wd = elm_widget_data_get(obj);
- evas_object_event_callback_del(wd->content,
- EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
- evas_object_del(wd->content);
- if (wd->timer)
- {
- ecore_timer_del(wd->timer);
- wd->timer = NULL;
- }
+ if(event_info == wd->content)
+ wd->content = NULL;
}
static void
_calc(data);
}
-static void
+static void
_calc(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
evas_object_geometry_get(obj, &x, &y, &w, &h);
edje_object_size_min_calc(wd->notify, &minw, &minh);
+
if (wd->content)
{
int offx = (w - minw) / 2;
Widget_Data *wd = elm_widget_data_get(obj);
evas_object_show(wd->notify);
+
+ if(!wd->repeat_events)
+ evas_object_show(wd->block_events);
if (wd->timer)
{
ecore_timer_del(wd->timer);
Widget_Data *wd = elm_widget_data_get(obj);
evas_object_hide(wd->notify);
-
+ if(!wd->repeat_events)
+ evas_object_hide(wd->block_events);
if (wd->timer)
{
ecore_timer_del(wd->timer);
}
}
+static void
+_parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+
+ wd->parent = NULL;
+ evas_object_hide(obj);
+}
+
+static void
+_parent_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+
+ wd->parent = NULL;
+ evas_object_hide(obj);
+}
+
/**
* Add a new notify to the parent
*
elm_widget_del_hook_set(obj, _del_hook);
elm_widget_theme_hook_set(obj, _theme_hook);
+ wd->repeat_events = EINA_TRUE;
+
wd->notify = edje_object_add(e);
elm_notify_orient_set(obj, ELM_NOTIFY_ORIENT_TOP);
evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _show, obj);
evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _hide, obj);
+ elm_notify_parent_set(obj, parent);
+
_sizing_eval(obj);
return obj;
}
{
Widget_Data *wd = elm_widget_data_get(obj);
- if (wd->content)
- elm_widget_sub_object_del(obj, wd->content);
+ if(wd->content)
+ {
+ evas_object_event_callback_del_full(wd->content,
+ EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ evas_object_event_callback_del_full(wd->content,
+ EVAS_CALLBACK_RESIZE,
+ _content_resize, obj);
+ evas_object_del(wd->content);
+ wd->content = NULL;
+ }
if (content)
{
- elm_widget_sub_object_add(obj, content);
edje_object_part_swallow(wd->notify, "elm.swallow.content", content);
- evas_object_event_callback_add(content,
+ evas_object_event_callback_add(content,
EVAS_CALLBACK_CHANGED_SIZE_HINTS,
_changed_size_hints, obj);
- evas_object_event_callback_add(content,
+ evas_object_event_callback_add(content,
EVAS_CALLBACK_RESIZE,
_content_resize, obj);
wd->content = content;
+ elm_widget_sub_object_add(obj, content);
+ _sizing_eval(obj);
+ }
+ _calc(obj);
+}
+
+/**
+ * Set the notify parent
+ *
+ * @param obj The notify object
+ * @param content The new parent
+ *
+ * @ingroup Notify
+ */
+EAPI void
+elm_notify_parent_set(Evas_Object *obj, Evas_Object *parent)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+
+ if(wd->parent)
+ {
+ evas_object_event_callback_del_full(wd->parent,
+ EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ evas_object_event_callback_del_full(wd->parent,
+ EVAS_CALLBACK_RESIZE,
+ _changed_size_hints, obj);
+ evas_object_event_callback_del_full(wd->parent,
+ EVAS_CALLBACK_MOVE,
+ _changed_size_hints, obj);
+ evas_object_event_callback_del_full(wd->parent,
+ EVAS_CALLBACK_DEL,
+ _parent_del, obj);
+ evas_object_event_callback_del_full(wd->parent,
+ EVAS_CALLBACK_HIDE,
+ _parent_hide, obj);
+ wd->parent = NULL;
+ }
+
+ if (parent)
+ {
+ edje_object_part_swallow(wd->notify, "elm.swallow.parent", parent);
+ evas_object_event_callback_add(parent,
+ EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
+ evas_object_event_callback_add(parent,
+ EVAS_CALLBACK_RESIZE,
+ _changed_size_hints, obj);
+ evas_object_event_callback_add(parent,
+ EVAS_CALLBACK_MOVE,
+ _changed_size_hints, obj);
+ evas_object_event_callback_add(parent,
+ EVAS_CALLBACK_DEL,
+ _parent_del, obj);
+ evas_object_event_callback_add(parent,
+ EVAS_CALLBACK_HIDE,
+ _parent_hide, obj);
+ wd->parent = parent;
_sizing_eval(obj);
}
_calc(obj);
wd->timer = ecore_timer_add(wd->timeout, _timer_cb, obj);
}
+/**
+ * When true if the user clicks outside the window the events will be
+ * catch by the others widgets, else the events are block and the signal
+ * dismiss will be sent when the user click outside the window.
+ *
+ * @note The default value is EINA_TRUE.
+ *
+ * @param obj The notify object
+ * @param repeats EINA_TRUE Events are repeats, else no
+ */
+EAPI void
+elm_notify_repeat_events_set(Evas_Object *obj, Eina_Bool repeat)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+
+ if(repeat == wd->repeat_events) return;
+
+ wd->repeat_events = repeat;
+ if(!repeat)
+ {
+ wd->block_events = edje_object_add(evas_object_evas_get(obj));
+ _elm_theme_set(wd->block_events, "notify", "block_events", "default");
+ elm_widget_resize_object_set(obj,wd->block_events);
+ }
+ else
+ {
+ evas_object_del(wd->block_events);
+ }
+}
+
if (it->content == sub)
{
wd->stack = eina_list_remove_list(wd->stack, l);
- evas_object_event_callback_del
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, it);
evas_object_del(it->base);
_eval_top(it->obj);
free(it);
_theme_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
+
+ edje_object_part_unswallow(NULL, wd->spacer);
+
if (wd->horizontal)
_elm_theme_set(wd->progressbar, "progressbar", "horizontal", elm_widget_style_get(obj));
else
else
evas_object_size_hint_min_set(wd->spacer, 1, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale);
-
edje_object_part_swallow(wd->progressbar, "elm.swallow.bar", wd->spacer);
+
_units_set(obj);
edje_object_message_signal_process(wd->progressbar);
edje_object_scale_set(wd->progressbar, elm_widget_scale_get(obj) * _elm_config->scale);
if (sub == wd->icon)
{
edje_object_signal_emit(wd->progressbar, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
wd->icon = NULL;
_sizing_eval(obj);
}
if (wd->units)
{
char buf[1024];
-
+
snprintf(buf, sizeof(buf), wd->units, 100 * wd->val);
edje_object_part_text_set(wd->progressbar, "elm.text.status", buf);
}
if (sub == wd->icon)
{
edje_object_signal_emit(wd->chk, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
wd->icon = NULL;
_sizing_eval(obj);
}
* region around, allowing to move through a much larger object that is
* contained in the scroller. The scroiller will always have a small minimum
* size by default as it won't be limited by the contents of the scroller.
- *
+ *
* Signals that you can add callbacks for are:
- *
+ *
* edge,left - the left edge of the content has been reached
- *
+ *
* edge,right - the right edge of the content has been reached
- *
+ *
* edge,top - the top edge of the content has been reached
- *
+ *
* edge,bottom - the bottom edge of the content has been reached
- *
+ *
* scroll - the content has been scrolled (moved)
- *
+ *
* scroll,anim,start - scrolling animation has started
- *
+ *
* scroll,anim,stop - scrolling animation has stopped
- *
+ *
* scroll,drag,start - dragging the contents around has started
- *
+ *
* scroll,drag,stop - dragging the contents around has stopped
*/
typedef struct _Widget_Data Widget_Data;
if (sub == wd->content)
{
elm_widget_on_show_region_hook_set(wd->content, NULL, NULL);
- evas_object_event_callback_del(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
- _changed_size_hints);
+ evas_object_event_callback_del_full (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints, obj);
wd->content = NULL;
_sizing_eval(obj);
}
/**
* Set the scroller scrollbar policy
*
- * This sets the scrollbar visibility policy for the given scroller.
+ * This sets the scrollbar visibility policy for the given scroller.
* ELM_SMART_SCROLLER_POLICY_AUTO means the scrollber is made visible if it
* is needed, and otherwise kept hidden. ELM_SMART_SCROLLER_POLICY_ON turns
* it on all the time, and ELM_SMART_SCROLLER_POLICY_OFF always keeps it off.
y Y coordinate of the region
w Width of the region
h Height of the region
-
+
EAPI void elm_scroller_region_show ( Evas_Object * obj, * @param v_bounce Will the scroller bounce vertically or not
*
* @ingroup Scroller
* is "half a viewport". Sane usable valus are normally between 0.0 and 1.0
* including 1.0. If you only want 1 axis to be page "limited", use 0.0 for
* the other axis.
- *
+ *
* @param obj The scroller object
* @param h_pagerel The horizontal page relative size
* @param v_pagerel The vertical page relative size
* See also elm_scroller_page_relative_set(). This, instead of a page size
* being relaive to the viewport, sets it to an absolute fixed value, with
* 0 turning it off for that axis.
- *
+ *
* @param obj The scroller object
* @param h_pagesize The horizontal page size
* @param v_pagesize The vertical page size
if (sub == wd->icon)
{
edje_object_signal_emit(wd->slider, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
wd->icon = NULL;
_sizing_eval(obj);
}
edje_object_part_unswallow(NULL, item->o);
edje_object_part_swallow(wd->slideshow, "elm.swallow.1", item->o);
- if(wd->timeout>0)
- wd->timer = ecore_timer_add(wd->timeout, _timer_cb, data);
}
_end(obj, obj, NULL, NULL);
if (wd->timer) ecore_timer_del(wd->timer);
- wd->timer = NULL;
-
+ if(wd->timeout>0)
+ wd->timer = ecore_timer_add(wd->timeout, _timer_cb, obj);
+
if(!next->o && next->itc->func.get)
{
next->o = next->itc->func.get((void*)next->data, obj);
_end(obj, obj, NULL, NULL);
if (wd->timer) ecore_timer_del(wd->timer);
- wd->timer = NULL;
+ if(wd->timeout>0)
+ wd->timer = ecore_timer_add(wd->timeout, _timer_cb, obj);
if(!prev->o && prev->itc->func.get)
{
if (sub == wd->icon)
{
edje_object_signal_emit(wd->tgl, "elm,state,icon,hidden", "elm");
- evas_object_event_callback_del
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
wd->icon = NULL;
_sizing_eval(obj);
}
_elm_theme_set(wd->tgl, "toggle", "base", "default");
wd->ontext = eina_stringshare_add("ON");
wd->offtext = eina_stringshare_add("OFF");
- edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,on", "",
+ edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,on", "",
_signal_toggle_on, obj);
- edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,off", "",
+ edje_object_signal_callback_add(wd->tgl, "elm,action,toggle,off", "",
_signal_toggle_off, obj);
elm_widget_resize_object_set(obj, wd->tgl);
edje_object_part_text_set(wd->tgl, "elm.ontext", wd->ontext);
Eina_Bool selected : 1;
Eina_Bool disabled : 1;
Eina_Bool separator : 1;
-
+
Eina_Bool menu;
Evas_Object *o_menu;
};
if(it->menu)
{
evas_object_show(it->o_menu);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_RESIZE,
+ evas_object_event_callback_add(it->base, EVAS_CALLBACK_RESIZE,
_menu_move_resize, it);
- evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOVE,
+ evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOVE,
_menu_move_resize, it);
_menu_move_resize(it, NULL, NULL, NULL);
static void
_menu_move_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
- Elm_Toolbar_Item *it = data;
- Evas_Coord x, y, w, h;
- Widget_Data *wd = elm_widget_data_get(it->obj);
+ Elm_Toolbar_Item *it = data;
+ Evas_Coord x,y,w,h;
+ Widget_Data *wd = elm_widget_data_get(it->obj);
- if ((!wd) || (!wd->menu_parent)) return;
- evas_object_geometry_get(it->base, &x, &y, &w, &h);
- elm_menu_move(it->o_menu, x, y + h);
+ if (!wd || !wd->menu_parent) return;
+
+ evas_object_geometry_get(it->base, &x, &y, &w, &h);
+ elm_menu_move(it->o_menu, x, y+h);
}
static void
wd->scrollable = EINA_TRUE;
wd->homogeneous = EINA_TRUE;
wd->align = 0.5;
-
+
wd->bx = evas_object_box_add(e);
evas_object_size_hint_align_set(wd->bx, wd->align, 0.5);
evas_object_box_layout_set(wd->bx, _layout, wd, NULL);
* Set if the alignment of the items.
*
* @param obj The toolbar object
- * @param align The new alignment. (left) 0.0 ... 1.0 (right)
+ * @param align The new alignment. (left) 0.0 ... 1.0 (right)
*/
EAPI void
elm_toolbar_align_set(Evas_Object *obj, double align)
item->o_menu = elm_menu_add(item->base);
if (wd->menu_parent)
elm_menu_parent_set(item->o_menu, wd->menu_parent);
- evas_object_event_callback_add(item->o_menu, EVAS_CALLBACK_HIDE,
+ evas_object_event_callback_add(item->o_menu, EVAS_CALLBACK_HIDE,
_menu_hide, item);
}
else if (item->o_menu)
{
- evas_object_event_callback_del(item->o_menu, EVAS_CALLBACK_HIDE,
- _menu_hide);
+ evas_object_event_callback_del_full(item->o_menu, EVAS_CALLBACK_HIDE,
+ _menu_hide, item);
evas_object_del(item->o_menu);
}
}
if (obj == sd->resize_obj)
sd->resize_obj = NULL;
- else if (obj == sd->hover_obj)
+ else if (obj == sd->hover_obj)
sd->hover_obj = NULL;
else
sd->subobjs = eina_list_remove(sd->subobjs, obj);
Smart_Data *sd2 = evas_object_smart_data_get(sobj);
if (sd2)
{
- if (sd2->parent_obj)
+ if (sd2->parent_obj)
elm_widget_sub_object_del(sd2->parent_obj, sobj);
sd2->parent_obj = obj;
}
Smart_Data *sd2 = evas_object_smart_data_get(sobj);
if (sd2) sd2->parent_obj = NULL;
}
- evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del);
+ evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
evas_object_smart_callback_call(obj, "sub-object-del", sobj);
}
Smart_Data *sd2 = evas_object_smart_data_get(sd->resize_obj);
if (sd2) sd2->parent_obj = NULL;
}
- evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_DEL,
- _sub_obj_del);
- evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_MOUSE_DOWN,
- _sub_obj_mouse_down);
+ 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,
+ _sub_obj_mouse_down, sd);
evas_object_smart_member_del(sd->resize_obj);
}
sd->resize_obj = sobj;
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_smart_callback_call(obj, "sub-object-add", sobj);
{
API_ENTRY return;
if (sd->hover_obj)
- evas_object_event_callback_del(sd->hover_obj, EVAS_CALLBACK_DEL,
- _sub_obj_del);
+ {
+ evas_object_event_callback_del_full(sd->hover_obj, EVAS_CALLBACK_DEL,
+ _sub_obj_del, sd);
+ }
sd->hover_obj = sobj;
if (sd->hover_obj)
{
{
/* the previous focused item was unfocused - so focus
* the next one (that can be focused) */
- if (elm_widget_focus_jump(sd->resize_obj, forward))
+ if (elm_widget_focus_jump(sd->resize_obj, forward))
return 1;
else noloop = 1;
}
if (elm_widget_focus_get(sd->resize_obj))
{
/* jump to the next focused item or focus this item */
- if (elm_widget_focus_jump(sd->resize_obj, forward))
+ if (elm_widget_focus_jump(sd->resize_obj, forward))
return 1;
/* it returned 0 - it got to the last item and is past it */
focus_next = 1;
{
/* the previous focused item was unfocused - so focus
* the next one (that can be focused) */
- if (elm_widget_focus_jump(child, forward))
+ if (elm_widget_focus_jump(child, forward))
return 1;
else break;
}
if (elm_widget_focus_get(child))
{
/* jump to the next focused item or focus this item */
- if (elm_widget_focus_jump(child, forward))
+ if (elm_widget_focus_jump(child, forward))
return 1;
/* it returned 0 - it got to the last item and is past it */
focus_next = 1;
{
/* the previous focused item was unfocused - so focus
* the next one (that can be focused) */
- if (elm_widget_focus_jump(child, forward))
+ if (elm_widget_focus_jump(child, forward))
return 1;
else break;
}
if (elm_widget_focus_get(child))
{
/* jump to the next focused item or focus this item */
- if (elm_widget_focus_jump(child, forward))
+ if (elm_widget_focus_jump(child, forward))
return 1;
/* it returned 0 - it got to the last item and is past it */
focus_next = 1;
{
/* the previous focused item was unfocused - so focus
* the next one (that can be focused) */
- if (elm_widget_focus_jump(sd->resize_obj, forward))
+ if (elm_widget_focus_jump(sd->resize_obj, forward))
return 1;
}
else
if (elm_widget_focus_get(sd->resize_obj))
{
/* jump to the next focused item or focus this item */
- if (elm_widget_focus_jump(sd->resize_obj, forward))
+ if (elm_widget_focus_jump(sd->resize_obj, forward))
return 1;
/* it returned 0 - it got to the last item and is past it */
focus_next = 1;
sd->ry = y;
sd->rw = w;
sd->rh = h;
- if (sd->on_show_region_func)
+ if (sd->on_show_region_func)
sd->on_show_region_func(sd->on_show_region_data, obj);
}
{
sobj = sd->resize_obj;
sd->resize_obj = NULL;
- evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del);
+ evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd);
evas_object_smart_callback_call(sd->obj, "sub-object-del", sd->resize_obj);
evas_object_del(sobj);
}
{
sobj = sd->resize_obj;
sd->hover_obj = NULL;
- evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del);
+ 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(sobj, EVAS_CALLBACK_DEL, _sub_obj_del);
+ 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(strcmp(elm_widget_type_get(obj), "win")) return;
win = elm_widget_data_get(obj);
if (!win) return;
- evas_object_event_callback_del(subobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _elm_win_subobj_callback_changed_size_hints);
- evas_object_event_callback_del(subobj, EVAS_CALLBACK_DEL, _elm_win_subobj_callback_del);
+ evas_object_event_callback_del_full(subobj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _elm_win_subobj_callback_changed_size_hints, obj);
+ evas_object_event_callback_del_full(subobj, EVAS_CALLBACK_DEL, _elm_win_subobj_callback_del, obj);
win->subobjs = eina_list_remove(win->subobjs, subobj);
elm_widget_sub_object_del(obj, subobj);
_elm_win_eval_subobjs(obj);
Evas_Object *sub = event_info;
if (sub == wd->content)
{
- evas_object_event_callback_del
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj);
wd->content = NULL;
_sizing_eval(obj);
}
typedef struct _Smart_Data Smart_Data;
struct _Smart_Data
-{
+{
Evas_Object *smart_obj;
Evas_Object *child_obj;
Evas_Coord x, y, w, h;
Evas_Coord child_w, child_h, px, py;
-};
+};
/* local subsystem functions */
static void _smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info);
{
evas_object_clip_unset(sd->child_obj);
evas_object_smart_member_del(sd->child_obj);
- evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_FREE, _smart_child_del_hook);
- evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_RESIZE, _smart_child_resize_hook);
+ evas_object_event_callback_del_full(sd->child_obj, EVAS_CALLBACK_FREE, _smart_child_del_hook, sd);
+ evas_object_event_callback_del_full(sd->child_obj, EVAS_CALLBACK_RESIZE, _smart_child_resize_hook, sd);
sd->child_obj = NULL;
}
if (child)
{
Evas_Coord w, h;
int r, g, b, a;
-
+
sd->child_obj = child;
evas_object_smart_member_add(sd->child_obj, sd->smart_obj);
evas_object_geometry_get(sd->child_obj, NULL, NULL, &w, &h);
_smart_child_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
Smart_Data *sd;
-
+
sd = data;
sd->child_obj = NULL;
evas_object_smart_callback_call(sd->smart_obj, "changed", NULL);
{
Smart_Data *sd;
Evas_Coord w, h;
-
+
sd = data;
evas_object_geometry_get(sd->child_obj, NULL, NULL, &w, &h);
if ((w != sd->child_w) || (h != sd->child_h))
_smart_add(Evas_Object *obj)
{
Smart_Data *sd;
-
+
sd = calloc(1, sizeof(Smart_Data));
if (!sd) return;
sd->smart_obj = obj;
{
INTERNAL_ENTRY;
evas_object_clip_unset(sd->child_obj);
-}
+}
/* never need to touch this */
SMART_NAME,
EVAS_SMART_CLASS_VERSION,
_smart_add,
- _smart_del,
+ _smart_del,
_smart_move,
_smart_resize,
_smart_show,
Ecore_Animator *animator;
} x, y;
} scrollto;
-
+
double pagerel_h, pagerel_v;
Evas_Coord pagesize_h, pagesize_v;
-
+
unsigned char hbar_visible : 1;
unsigned char vbar_visible : 1;
unsigned char extern_pan : 1;
if (sd->child_obj)
{
_elm_smart_pan_child_set(sd->pan_obj, NULL);
- evas_object_event_callback_del(sd->child_obj, EVAS_CALLBACK_DEL, _smart_child_del_hook);
+ evas_object_event_callback_del_full(sd->child_obj, EVAS_CALLBACK_DEL, _smart_child_del_hook, sd);
}
sd->child_obj = child;
Smart_Data *sd = data;
Evas_Coord px, py;
double t, tt;
-
+
t = ecore_loop_time_get();
tt = (t - sd->scrollto.x.t_start) / (sd->scrollto.x.t_end - sd->scrollto.x.t_start);
tt = 1.0 - tt;
Smart_Data *sd = data;
Evas_Coord px, py;
double t, tt;
-
+
t = ecore_loop_time_get();
tt = (t - sd->scrollto.y.t_start) / (sd->scrollto.y.t_end - sd->scrollto.y.t_start);
tt = 1.0 - tt;
_smart_page_x_get(Smart_Data *sd, int offset)
{
Evas_Coord x, y, w, h, cw, ch;
-
+
elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y);
elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &w, &h);
sd->pan_func.child_size_get(sd->pan_obj, &cw, &ch);
-
+
x += offset;
-
+
if (sd->pagerel_h > 0.0)
{
x = x + (w * sd->pagerel_h * 0.5);
_smart_page_y_get(Smart_Data *sd, int offset)
{
Evas_Coord x, y, w, h, cw, ch;
-
+
elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y);
elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &w, &h);
sd->pan_func.child_size_get(sd->pan_obj, &cw, &ch);
-
+
y += offset;
-
+
if (sd->pagerel_v > 0.0)
{
y = y + (h * sd->pagerel_v * 0.5);
_smart_page_adjust(Smart_Data *sd)
{
Evas_Coord x, y, w, h;
-
+
if (!_smart_do_page(sd)) return;
-
+
elm_smart_scroller_child_viewport_size_get(sd->smart_obj, &w, &h);
-
+
x = _smart_page_x_get(sd, 0);
y = _smart_page_y_get(sd, 0);
-
+
elm_smart_scroller_child_region_show(sd->smart_obj, x, y, w, h);
}
sd->down.sy = y;
sd->down.locked = 0;
memset(&(sd->down.history[0]), 0, sizeof(sd->down.history[0]) * 20);
-#ifdef EVTIME
+#ifdef EVTIME
sd->down.history[0].timestamp = ev->timestamp / 1000.0;
-#else
+#else
sd->down.history[0].timestamp = ecore_loop_time_get();
-#endif
+#endif
sd->down.history[0].x = ev->canvas.x;
sd->down.history[0].y = ev->canvas.y;
}
#ifdef EVTIME
t = ev->timestamp / 1000.0;
-#else
+#else
t = ecore_loop_time_get();
-#endif
+#endif
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
ax = ev->canvas.x;
ay = ev->canvas.y;
at = 0.0;
-#ifdef SCROLLDBG
+#ifdef SCROLLDBG
printf("------\n");
-#endif
+#endif
for (i = 0; i < 20; i++)
{
dt = t - sd->down.history[i].timestamp;
if (dt > 0.2) break;
-#ifdef SCROLLDBG
- printf("H: %i %i @ %1.3f\n",
- sd->down.history[i].x,
+#ifdef SCROLLDBG
+ printf("H: %i %i @ %1.3f\n",
+ sd->down.history[i].x,
sd->down.history[i].y, dt);
-#endif
+#endif
at += dt;
ax += sd->down.history[i].x;
ay += sd->down.history[i].y;
if (_smart_do_page(sd))
{
Evas_Coord pgx, pgy;
-
+
elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y);
pgx = _smart_page_x_get(sd, ox);
if (pgx != x) _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx);
if (_smart_do_page(sd))
{
Evas_Coord pgx, pgy;
-
+
elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y);
pgx = _smart_page_x_get(sd, ox);
if (pgx != x) _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx);
memmove(&(sd->down.history[1]), &(sd->down.history[0]),
sizeof(sd->down.history[0]) * 19);
-#ifdef EVTIME
+#ifdef EVTIME
sd->down.history[0].timestamp = ev->timestamp / 1000.0;
-#else
+#else
sd->down.history[0].timestamp = ecore_loop_time_get();
-#endif
+#endif
sd->down.history[0].x = ev->cur.canvas.x;
sd->down.history[0].y = ev->cur.canvas.y;