#include <Elementary.h>
#include <Elementary_Cursor.h>
#include "elm_priv.h"
+#include "elm_module_priv.h"
#include "els_scroller.h"
Elm_Input_Panel_Return_Key_Type input_panel_return_key_type;
void *input_panel_imdata;
int input_panel_imdata_len;
+ struct
+ {
+ Evas_Object *hover_parent;
+ Evas_Object *pop, *hover;
+ const char *hover_style;
+ } anchor_hover;
Eina_Bool changed : 1;
Eina_Bool single_line : 1;
Eina_Bool password : 1;
Eina_Bool drag_selection_asked : 1;
Eina_Bool can_write : 1;
Eina_Bool autosave : 1;
- Eina_Bool textonly : 1;
Eina_Bool usedown : 1;
Eina_Bool scroll : 1;
Eina_Bool h_bounce : 1;
Eina_Bool input_panel_enable : 1;
Eina_Bool prediction_allow : 1;
Eina_Bool input_panel_return_key_disabled : 1;
+ Eina_Bool autoreturnkey : 1;
+ Elm_Cnp_Mode cnp_mode : 2;
+//// TIZEN ONLY
+ Evas_Object *mgf_proxy;
+ Evas_Object *mgf_clip;
+ Evas_Object *mgf_bg;
+ Evas_Coord mgf_height;
+ float mgf_scale;
+ int mgf_type;
+ Ecore_Job *region_get_job;
+ Ecore_Job *region_recalc_job;
+ const char *password_text;
+ Evas_Coord cx, cy, cw, ch;
+ Eina_Bool double_clicked : 1;
+ Eina_Bool long_pressed : 1;
+ Eina_Bool magnifier_enabled : 1;
+//
};
struct _Elm_Entry_Context_Menu_Item
} Length_Unit;
static const char *widtype = NULL;
+// start for cbhm
+static Evas_Object *cnpwidgetdata = NULL;
+// end for cbhm
#ifdef HAVE_ELEMENTARY_X
static Eina_Bool _drag_drop_cb(void *data, Evas_Object *obj, Elm_Selection_Data *);
static void _content_set_hook(Evas_Object *obj, const char *part, Evas_Object *content);
static Evas_Object *_content_unset_hook(Evas_Object *obj, const char *part);
static Evas_Object *_content_get_hook(const Evas_Object *obj, const char *part);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info);
static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info);
static const char *_getbase(Evas_Object *obj);
static void _signal_entry_changed(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _signal_entry_cut_notify(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _signal_cursor_changed(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _add_chars_till_limit(Evas_Object *obj, char **text, int can_add, Length_Unit unit);
+static void _entry_hover_anchor_clicked(void *data, Evas_Object *obj, void *event_info);
+//// TIZEN ONLY
+static void _signal_selection_end(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _signal_handler_move_start(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _signal_handler_move_end(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _signal_handler_moving(void *data, Evas_Object *obj, const char *emission, const char *source);
+static void _magnifier_create(void *data);
+static void _magnifier_show(void *data);
+static void _magnifier_hide(void *data);
+static void _magnifier_move(void *data);
+static Evas_Coord_Rectangle _layout_region_get(Evas_Object *data);
+static Evas_Coord_Rectangle _viewport_region_get(Evas_Object *data);
+static void _region_get_job(void *data);
+static void _region_recalc_job(void *data);
+//
static const char SIG_CHANGED[] = "changed";
static const char SIG_CHANGED_USER[] = "changed,user";
static const char SIG_CURSOR_CHANGED[] = "cursor,changed";
static const char SIG_CURSOR_CHANGED_MANUAL[] = "cursor,changed,manual";
static const char SIG_ANCHOR_CLICKED[] = "anchor,clicked";
+static const char SIG_ANCHOR_HOVER_OPENED[] = "anchor,hover,opened";
static const char SIG_ANCHOR_DOWN[] = "anchor,down";
static const char SIG_ANCHOR_UP[] = "anchor,up";
static const char SIG_ANCHOR_IN[] = "anchor,in";
{SIG_CURSOR_CHANGED, ""},
{SIG_CURSOR_CHANGED_MANUAL, ""},
{SIG_ANCHOR_CLICKED, ""},
+ {SIG_ANCHOR_HOVER_OPENED, ""},
{SIG_ANCHOR_DOWN, ""},
{SIG_ANCHOR_UP, ""},
{SIG_ANCHOR_IN, ""},
{NULL, NULL}
};
+typedef enum _Elm_Entry_Magnifier_Type
+{
+ _ENTRY_MAGNIFIER_FIXEDSIZE = 0,
+ _ENTRY_MAGNIFIER_FILLWIDTH,
+ _ENTRY_MAGNIFIER_CIRCULAR,
+} Elm_Entry_Magnifier_Type;
+
static Eina_List *entries = NULL;
struct _Mod_Api
void (*obj_hook) (Evas_Object *obj);
void (*obj_unhook) (Evas_Object *obj);
void (*obj_longpress) (Evas_Object *obj);
+ void (*obj_hidemenu) (Evas_Object *obj);
+ void (*obj_mouseup) (Evas_Object *obj);
};
static Mod_Api *
_elm_module_symbol_get(m, "obj_unhook");
((Mod_Api *)(m->api) )->obj_longpress = // called on long press menu
_elm_module_symbol_get(m, "obj_longpress");
+ ((Mod_Api *)(m->api) )->obj_hidemenu = // called on hide menu
+ _elm_module_symbol_get(m, "obj_hidemenu");
+ ((Mod_Api *)(m->api) )->obj_mouseup = // called on mouseup
+ _elm_module_symbol_get(m, "obj_mouseup");
ok: // ok - return api
return m->api;
}
return NULL;
}
-static void
+static Eina_Bool
_load(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
char *text;
- if (!wd) return;
+ if (!wd) return EINA_FALSE;
if (!wd->file)
{
elm_object_text_set(obj, "");
- return;
+ return EINA_TRUE;
}
switch (wd->format)
{
{
elm_object_text_set(obj, text);
free(text);
+ return EINA_TRUE;
}
else
- elm_object_text_set(obj, "");
+ {
+ elm_object_text_set(obj, "");
+ return EINA_FALSE;
+ }
}
static void
wd->delay_write = NULL;
if (wd->autosave) _save(obj);
}
+ elm_entry_anchor_hover_end(obj);
+ elm_entry_anchor_hover_parent_set(obj, NULL);
}
static void
#endif
if (wd->cut_sel) eina_stringshare_del(wd->cut_sel);
if (wd->text) eina_stringshare_del(wd->text);
+ if (wd->password_text) eina_stringshare_del(wd->password_text);
if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job);
+ if (wd->region_get_job) ecore_job_del(wd->region_get_job);
+ if (wd->region_recalc_job) ecore_job_del(wd->region_recalc_job);
if (wd->append_text_idler)
{
ecore_idler_del(wd->append_text_idler);
wd->append_text_left = NULL;
wd->append_text_idler = NULL;
}
+ if (wd->mgf_proxy) evas_object_del(wd->mgf_proxy);
+ if (wd->mgf_bg) evas_object_del(wd->mgf_bg);
+ if (wd->mgf_clip) evas_object_del(wd->mgf_clip);
if (wd->longpress_timer) ecore_timer_del(wd->longpress_timer);
EINA_LIST_FREE(wd->items, it)
{
}
if (wd->delay_write) ecore_timer_del(wd->delay_write);
if (wd->input_panel_imdata) free(wd->input_panel_imdata);
- free(wd);
+ if (wd->anchor_hover.hover_style) eina_stringshare_del(wd->anchor_hover.hover_style);
evas_event_thaw(evas_object_evas_get(obj));
evas_event_thaw_eval(evas_object_evas_get(obj));
+ free(wd);
}
static void
{
Widget_Data *wd = elm_widget_data_get(obj);
edje_object_mirrored_set(wd->ent, rtl);
+ if (wd->anchor_hover.hover)
+ elm_widget_mirrored_set(wd->anchor_hover.hover, rtl);
}
static void
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
/* This is a hack to workaround the way min size hints are treated.
* If the minimum width is smaller than the restricted width, it means
- * the mininmum doesn't matter. */
+ * the minimum doesn't matter. */
if (minw <= resw)
{
Evas_Coord ominw = -1;
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
/* This is a hack to workaround the way min size hints are treated.
* If the minimum width is smaller than the restricted width, it means
- * the mininmum doesn't matter. */
+ * the minimum doesn't matter. */
if (minw <= vw)
{
Evas_Coord ominw = -1;
}
static void
+_check_enable_return_key(Evas_Object *obj)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ Eina_Bool return_key_disabled = EINA_FALSE;
+ if (!wd) return;
+
+ if (!wd->autoreturnkey) return;
+
+ if (elm_entry_is_empty(obj) == EINA_TRUE)
+ return_key_disabled = EINA_TRUE;
+
+ elm_entry_input_panel_return_key_disabled_set(obj, return_key_disabled);
+}
+
+static void
_on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *top = elm_widget_top_get(obj);
if (!wd) return;
- if (!wd->editable) return;
+
if (elm_widget_focus_get(obj))
{
+ printf("[Elm_entry::Focused] obj : %p\n", obj);
evas_object_focus_set(wd->ent, EINA_TRUE);
edje_object_signal_emit(wd->ent, "elm,action,focus", "elm");
- if (top && wd->input_panel_enable)
- elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON);
- evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL);
+ wd->mgf_type = _ENTRY_MAGNIFIER_FIXEDSIZE;
+ if (wd->editable)
+ {
+ if (top && wd->input_panel_enable)
+ elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON);
+ evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL);
+ _check_enable_return_key(obj);
+ }
}
else
{
+ printf("[Elm_entry::Unfocused] obj : %p\n", obj);
edje_object_signal_emit(wd->ent, "elm,action,unfocus", "elm");
evas_object_focus_set(wd->ent, EINA_FALSE);
- if (top && wd->input_panel_enable)
- elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_OFF);
- evas_object_smart_callback_call(obj, SIG_UNFOCUSED, NULL);
+ if ((wd->api) && (wd->api->obj_hidemenu))
+ wd->api->obj_hidemenu(obj);
+
+ if (wd->editable)
+ {
+ if (top && wd->input_panel_enable)
+ elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_OFF);
+ evas_object_smart_callback_call(obj, SIG_UNFOCUSED, NULL);
+ }
}
}
{
Widget_Data *wd = elm_widget_data_get(obj);
Evas_Object *edje;
+ Evas_Object *prev_content;
if ((!wd) || (!content)) return;
if (wd->scroll)
else
edje = wd->ent;
- /* Delete the currently swallowed object */
- Evas_Object *cswallow;
-
if (!part || !strcmp(part, "icon"))
{
- cswallow = edje_object_part_swallow_get(edje, "elm.swallow.icon");
+ prev_content = edje_object_part_swallow_get(edje, "elm.swallow.icon");
edje_object_signal_emit(edje, "elm,action,show,icon", "elm");
}
else if (!strcmp(part, "end"))
{
- cswallow = edje_object_part_swallow_get(edje, "elm.swallow.end");
+ prev_content = edje_object_part_swallow_get(edje, "elm.swallow.end");
edje_object_signal_emit(edje, "elm,action,show,end", "elm");
}
else
- cswallow = edje_object_part_swallow_get(edje, part);
+ prev_content = edje_object_part_swallow_get(edje, part);
- if (cswallow) evas_object_del(cswallow);
+ if (prev_content) evas_object_del(prev_content);
evas_event_freeze(evas_object_evas_get(obj));
elm_widget_sub_object_add(obj, content);
evas_object_smart_callback_call(obj, "language,changed", NULL);
}
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return EINA_FALSE;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (elm_widget_disabled_get(obj)) return EINA_FALSE;
+ return EINA_TRUE;
+}
+
static void
_signal_emit_hook(Evas_Object *obj, const char *emission, const char *source)
{
Widget_Data *wd = elm_widget_data_get(data);
if (wd->hoversel) _hoversel_position(data);
+
+ if (!_elm_config->desktop_entry)
+ {
+ if (wd->region_get_job) ecore_job_del(wd->region_get_job);
+ wd->region_get_job = ecore_job_add(_region_get_job, data);
+ }
}
static void
evas_object_resize(wd->ent, vw, vh);
}
if (wd->hoversel) _hoversel_position(data);
+
+ if (!_elm_config->desktop_entry)
+ {
+ if (wd->region_get_job) ecore_job_del(wd->region_get_job);
+ wd->region_get_job = ecore_job_add(_region_get_job, data);
+ }
}
static void
}
static void
+_selectall(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+ wd->selmode = EINA_TRUE;
+ edje_object_part_text_select_none(wd->ent, "elm.text");
+ edje_object_signal_emit(wd->ent, "elm,state,select,on", "elm");
+ edje_object_part_text_select_all(wd->ent, "elm.text");
+ elm_object_scroll_freeze_pop(data);
+}
+
+static void
_select(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
Widget_Data *wd = elm_widget_data_get(data);
}
edje_object_signal_emit(wd->ent, "elm,state,select,on", "elm");
if (!_elm_config->desktop_entry)
- elm_widget_scroll_hold_push(data);
+ elm_object_scroll_freeze_pop(data); // TIZEN ONLY
+ //elm_widget_scroll_hold_push(data);
+}
+
+static char *
+_remove_item_tags(const char *str)
+{
+ char *ret;
+ if (!str)
+ return NULL;
+
+ Eina_Strbuf *buf = eina_strbuf_new();
+ if (!buf)
+ return NULL;
+
+ if (!eina_strbuf_append(buf, str))
+ return NULL;
+
+ while (EINA_TRUE)
+ {
+ const char *temp = eina_strbuf_string_get(buf);
+
+ char *startTag = NULL;
+ char *endTag = NULL;
+
+ startTag = strstr(temp, "<item");
+ if (!startTag)
+ startTag = strstr(temp, "</item");
+ if (startTag)
+ endTag = strstr(startTag, ">");
+ else
+ break;
+ if (!endTag || startTag > endTag)
+ break;
+
+ size_t sindex = startTag - temp;
+ size_t eindex = endTag - temp + 1;
+ if (!eina_strbuf_remove(buf, sindex, eindex))
+ break;
+ }
+ ret = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+ return ret;
}
void
_elm_entry_entry_paste(Evas_Object *obj, const char *entry)
{
- Elm_Entry_Change_Info info;
- info.merge = EINA_FALSE;
- info.insert = EINA_TRUE;
- info.change.insert.pos = elm_entry_cursor_pos_get(obj);
- info.change.insert.content = eina_stringshare_add(entry);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ char *str = NULL;
+
+ if (wd->cnp_mode == ELM_CNP_MODE_NO_IMAGE)
{
- char *tmp;
- tmp = evas_textblock_text_markup_to_utf8(elm_entry_textblock_get(obj),
- info.change.insert.content);
- info.change.insert.plain_length = eina_unicode_utf8_get_len(tmp);
- free(tmp);
+ str = _remove_item_tags(entry);
+ if (!str) str = strdup(entry);
}
+ else
+ str = strdup(entry);
+ if (!str) str = (char *)entry;
- elm_entry_entry_insert(obj, entry);
- evas_object_smart_callback_call(obj, SIG_CHANGED_USER, &info);
+ edje_object_part_text_user_insert(wd->ent, "elm.text", str);
+ if (str != entry) free(str);
- eina_stringshare_del(info.change.insert.content);
+ // start for cbhm
+#ifdef HAVE_ELEMENTARY_X
+ if (cnpwidgetdata == obj)
+ ecore_x_selection_secondary_set(elm_win_xwindow_get(obj), "",1);
+#endif
+ // end for cbhm
}
static void
if (wd->sel_notify_handler)
{
#ifdef HAVE_ELEMENTARY_X
- Elm_Sel_Format formats;
+ Elm_Sel_Format formats = ELM_SEL_FORMAT_MARKUP;
wd->selection_asked = EINA_TRUE;
- formats = ELM_SEL_FORMAT_MARKUP;
- if (!wd->textonly)
+ if (wd->cnp_mode == ELM_CNP_MODE_PLAINTEXT)
+ formats = ELM_SEL_FORMAT_TEXT;
+ else if (wd->cnp_mode != ELM_CNP_MODE_NO_IMAGE)
formats |= ELM_SEL_FORMAT_IMAGE;
- elm_cnp_selection_get(ELM_SEL_TYPE_CLIPBOARD, formats, data, NULL, NULL);
+ elm_cnp_selection_get(data, ELM_SEL_TYPE_CLIPBOARD, formats, NULL, NULL);
#endif
}
}
if (!wd) return;
sel = edje_object_part_text_selection_get(wd->ent, "elm.text");
if ((!sel) || (!sel[0])) return; /* avoid deleting our own selection */
- elm_cnp_selection_set(seltype, obj, ELM_SEL_FORMAT_MARKUP, sel, strlen(sel));
+ elm_cnp_selection_set(obj, seltype, ELM_SEL_FORMAT_MARKUP, sel, strlen(sel));
if (seltype == ELM_SEL_TYPE_CLIPBOARD)
eina_stringshare_replace(&wd->cut_sel, sel);
}
if (!_elm_config->desktop_entry)
elm_widget_scroll_hold_pop(data);
_store_selection(ELM_SEL_TYPE_CLIPBOARD, data);
- edje_object_part_text_insert(wd->ent, "elm.text", "");
- edje_object_part_text_select_none(wd->ent, "elm.text");
+ edje_object_part_text_user_insert(wd->ent, "elm.text", "");
_sizing_eval(data);
}
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- wd->selmode = EINA_FALSE;
+ wd->selmode = EINA_TRUE; // TIZEN ONLY
if (!_elm_config->desktop_entry)
{
- edje_object_part_text_select_allow_set(wd->ent, "elm.text", EINA_FALSE);
+ //edje_object_part_text_select_allow_set(wd->ent, "elm.text", EINA_FALSE); // TIZEN ONLY
edje_object_signal_emit(wd->ent, "elm,state,select,off", "elm");
elm_widget_scroll_hold_pop(data);
}
edje_object_part_text_select_none(wd->ent, "elm.text");
}
+// start for cbhm
+static void
+_cnpinit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+ cnpwidgetdata = data;
+}
+// end for cbhm
+
+
static void
_item_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
}
}
+static void
+_magnifier_hide(void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ evas_object_hide(wd->mgf_bg);
+ evas_object_hide(wd->mgf_clip);
+
+ if (wd->scroll)
+ elm_smart_scroller_freeze_set(wd->scroller, EINA_FALSE);
+}
+
+static void
+_magnifier_show(void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ evas_object_show(wd->mgf_bg);
+ evas_object_show(wd->mgf_clip);
+}
+
+static void
+_magnifier_move(void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ Evas_Coord x, y, w, h;
+ Evas_Coord cx, cy, cw, ch, ox, oy;
+
+ edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text", &cx, &cy, &cw, &ch);
+
+ if (wd->scroll)
+ {
+ evas_object_geometry_get(wd->scroller, &x, &y, &w, &h);
+ elm_smart_scroller_child_pos_get(wd->scroller, &ox, &oy);
+ cx -= ox;
+ cy -= oy;
+ }
+ else
+ evas_object_geometry_get(data, &x, &y, &w, &h);
+
+ ox = oy = 0;
+
+ if ((cy + y) - wd->mgf_height < 0)
+ oy = -1 * ((cy + y) - wd->mgf_height);
+
+ if (wd->mgf_type == _ENTRY_MAGNIFIER_FIXEDSIZE)
+ evas_object_move(wd->mgf_bg, (cx + x + cw/2) + ox, (cy + y) - wd->mgf_height + oy);
+ else if (wd->mgf_type == _ENTRY_MAGNIFIER_FILLWIDTH)
+ evas_object_move(wd->mgf_bg, x, (cy + y) - wd->mgf_height + oy);
+ else
+ return;
+
+ evas_object_move(wd->mgf_proxy, (1 - wd->mgf_scale) * cx + x + ox, (1 - wd->mgf_scale) * cy + y - wd->mgf_height/2 - ch/2 + oy);
+}
+
+static void
+_magnifier_create(void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ Evas_Coord x, y, w, h, mw, mh;
+ const char* key_data = NULL;
+ double elm_scale;
+
+ if (!wd) return;
+
+ if (wd->mgf_proxy)
+ {
+ evas_object_image_source_unset(wd->mgf_proxy);
+ evas_object_color_set(wd->mgf_proxy, 255, 255, 255, 0);
+ evas_object_hide(wd->mgf_proxy);
+ evas_object_clip_unset(wd->mgf_proxy);
+ evas_object_del(wd->mgf_proxy);
+ }
+ if (wd->mgf_bg) evas_object_del(wd->mgf_bg);
+ if (wd->mgf_clip) evas_object_del(wd->mgf_clip);
+
+ if (wd->scroll)
+ evas_object_geometry_get(wd->scroller, &x, &y, &w, &h);
+ else
+ evas_object_geometry_get(data, &x, &y, &w, &h);
+
+ if ((w <= 0) || (h <= 0))
+ return;
+
+ wd->mgf_bg = edje_object_add(evas_object_evas_get(data));
+
+ if (wd->mgf_type == _ENTRY_MAGNIFIER_FIXEDSIZE)
+ _elm_theme_object_set(data, wd->mgf_bg, "entry", "magnifier", "fixed-size");
+ else if (wd->mgf_type == _ENTRY_MAGNIFIER_FILLWIDTH)
+ _elm_theme_object_set(data, wd->mgf_bg, "entry", "magnifier", "fill-width");
+ else
+ return;
+
+ wd->mgf_clip = evas_object_rectangle_add(evas_object_evas_get(data));
+ evas_object_color_set(wd->mgf_clip, 255, 255, 255, 255);
+ edje_object_part_swallow(wd->mgf_bg, "swallow", wd->mgf_clip);
+
+ key_data = edje_object_data_get(wd->mgf_bg, "height");
+ if (key_data) wd->mgf_height = atoi(key_data);
+ key_data = edje_object_data_get(wd->mgf_bg, "scale");
+ if (key_data) wd->mgf_scale = atof(key_data);
+
+ elm_scale = elm_config_scale_get();
+ wd->mgf_height = (int)((float)wd->mgf_height * elm_scale);
+
+ if (wd->mgf_type == _ENTRY_MAGNIFIER_FILLWIDTH)
+ evas_object_resize(wd->mgf_bg, w, wd->mgf_height);
+
+ if (wd->scroll)
+ {
+ elm_smart_scroller_freeze_set(wd->scroller, EINA_TRUE);
+ wd->mgf_proxy = evas_object_image_add(evas_object_evas_get(wd->scroller));
+ evas_object_image_source_set(wd->mgf_proxy, wd->scroller);
+ }
+ else
+ {
+ wd->mgf_proxy = evas_object_image_add(evas_object_evas_get(data));
+ evas_object_image_source_set(wd->mgf_proxy, data);
+ }
+
+ mw = (Evas_Coord)((float)w * wd->mgf_scale);
+ mh = (Evas_Coord)((float)h * wd->mgf_scale);
+ if ((mw <= 0) || (mh <= 0))
+ return;
+
+ evas_object_resize(wd->mgf_proxy, mw, mh);
+ evas_object_image_fill_set(wd->mgf_proxy, 0, 0, mw, mh);
+ evas_object_color_set(wd->mgf_proxy, 255, 255, 255, 255);
+ evas_object_pass_events_set(wd->mgf_proxy, EINA_TRUE);
+ evas_object_show(wd->mgf_proxy);
+ evas_object_clip_set(wd->mgf_proxy, wd->mgf_clip);
+
+ evas_object_layer_set(wd->mgf_bg, EVAS_LAYER_MAX);
+ evas_object_layer_set(wd->mgf_proxy, EVAS_LAYER_MAX);
+}
+
+static void
+_signal_long_pressed(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+
+ if (!wd) return;
+ wd->long_pressed = EINA_TRUE;
+ _cancel(data, NULL, NULL);
+ if (wd->magnifier_enabled)
+ {
+ _magnifier_create(data);
+ _magnifier_move(data);
+ _magnifier_show(data);
+ elm_object_scroll_freeze_push(data);
+ }
+}
+
static Eina_Bool
_long_press(void *data)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return ECORE_CALLBACK_CANCEL;
- _menu_press(data);
+ if ((!_elm_config->desktop_entry) && (!wd->magnifier_enabled))
+ _menu_press(data); /////// TIZEN ONLY
wd->longpress_timer = NULL;
evas_object_smart_callback_call(data, SIG_LONGPRESSED, NULL);
return ECORE_CALLBACK_CANCEL;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
wd->downx = ev->canvas.x;
wd->downy = ev->canvas.y;
+ wd->long_pressed = EINA_FALSE;
if (ev->button == 1)
{
if (wd->longpress_timer) ecore_timer_del(wd->longpress_timer);
if (wd->disabled) return;
if (ev->button == 1)
{
+ if (!wd->double_clicked)
+ {
+ if ((wd->api) && (wd->api->obj_mouseup))
+ wd->api->obj_mouseup(data);
+ }
+ if (wd->magnifier_enabled)
+ {
+ _magnifier_hide(data);
+ elm_object_scroll_freeze_pop(data);
+ if (wd->long_pressed) _menu_press(data);
+ }
if (wd->longpress_timer)
{
ecore_timer_del(wd->longpress_timer);
wd->longpress_timer = NULL;
}
}
- else if (ev->button == 3)
+ else if ((ev->button == 3) && (!_elm_config->desktop_entry))
{
wd->usedown = 1;
_menu_press(data);
Evas_Event_Mouse_Move *ev = event_info;
if (!wd) return;
if (wd->disabled) return;
+
+ if (ev->buttons == 1)
+ {
+ if ((wd->long_pressed) && (wd->magnifier_enabled))
+ {
+ _magnifier_show(data);
+ _magnifier_move(data);
+ }
+ }
if (!wd->selmode)
{
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
_sizing_eval(data);
if (wd->text) eina_stringshare_del(wd->text);
wd->text = NULL;
+ if (wd->password_text) eina_stringshare_del(wd->password_text);
+ wd->password_text = NULL;
if (wd->delay_write)
{
ecore_timer_del(wd->delay_write);
wd->delay_write = NULL;
}
+
+ if ((wd->api) && (wd->api->obj_hidemenu))
+ wd->api->obj_hidemenu(data);
+
evas_event_thaw(evas_object_evas_get(data));
evas_event_thaw_eval(evas_object_evas_get(data));
if ((wd->autosave) && (wd->file))
/* callback - this could call callbacks that delete the entry... thus...
* any access to wd after this could be invalid */
evas_object_smart_callback_call(data, event, NULL);
+ _check_enable_return_key(data);
}
static void
}
static void
-_signal_entry_changed_user(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+_signal_handler_move_start(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
{
- Elm_Entry_Change_Info info;
- Edje_Entry_Change_Info *edje_info = (Edje_Entry_Change_Info *)
- edje_object_signal_callback_extra_data_get();
- if (edje_info)
- {
- memcpy(&info, edje_info, sizeof(info));
- evas_object_smart_callback_call(data, SIG_CHANGED_USER, &info);
- }
- else
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ elm_object_scroll_freeze_push(data);
+
+ if ((wd->api) && (wd->api->obj_hidemenu))
+ wd->api->obj_hidemenu(data);
+
+ if (wd->magnifier_enabled)
{
- evas_object_smart_callback_call(data, SIG_CHANGED_USER, NULL);
+ _magnifier_create(data);
+ _magnifier_move(data);
+ _magnifier_show(data);
}
}
static void
-_signal_preedit_changed(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+_signal_handler_move_end(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
{
- _entry_changed_common_handling(data, SIG_PREEDIT_CHANGED);
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ elm_object_scroll_freeze_pop(data);
+
+ if (wd->have_selection)
+ {
+ _magnifier_hide(data);
+ _menu_press(data);
+ }
}
static void
-_signal_undo_request(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+_signal_handler_moving(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
{
- evas_object_smart_callback_call(data, SIG_UNDO_REQUEST, NULL);
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ if (wd->magnifier_enabled)
+ {
+ _magnifier_move(data);
+ _magnifier_show(data);
+ }
}
-static void
-_signal_redo_request(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+static Evas_Coord_Rectangle
+_intersection_region_get(Evas_Coord_Rectangle rect1, Evas_Coord_Rectangle rect2)
{
- evas_object_smart_callback_call(data, SIG_REDO_REQUEST, NULL);
+ Evas_Coord_Rectangle ret_rect;
+ Evas_Coord_Point l1, l2, r1, r2, p1, p2;
+
+ l1.x = rect1.x;
+ l1.y = rect1.y;
+ r1.x = rect1.x + rect1.w;
+ r1.y = rect1.y + rect1.h;
+
+ l2.x = rect2.x;
+ l2.y = rect2.y;
+ r2.x = rect2.x + rect2.w;
+ r2.y = rect2.y + rect2.h;
+
+ p1.x = (l1.x > l2.x) ? l1.x : l2.x;
+ p1.y = (l1.y > l2.y) ? l1.y : l2.y;
+ p2.x = (r1.x < r2.x) ? r1.x : r2.x;
+ p2.y = (r1.y < r2.y) ? r1.y : r2.y;
+
+ ret_rect.x = p1.x;
+ ret_rect.y = p1.y;
+ ret_rect.w = (p2.x > p1.x) ? p2.x - p1.x : -1;
+ ret_rect.h = (p2.y > p1.y) ? p2.y - p1.y : -1;
+
+ return ret_rect;
}
-static void
-_signal_selection_start(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+static Evas_Coord_Rectangle
+_viewport_region_get(Evas_Object *data)
{
+ Evas_Coord_Rectangle geometry, ret_rect;
+ geometry.x = geometry.y = geometry.w = geometry.h = -1;
+ ret_rect = geometry;
+
Widget_Data *wd = elm_widget_data_get(data);
- const Eina_List *l;
- Evas_Object *entry;
- if (!wd) return;
- EINA_LIST_FOREACH(entries, l, entry)
+ if (!wd) return geometry;
+ if (!data || !strlen(elm_widget_type_get(data))) return geometry;
+
+ if (wd->scroll)
{
- if (entry != data) elm_entry_select_none(entry);
+ evas_object_geometry_get(wd->scroller, &geometry.x, &geometry.y, &geometry.w, &geometry.h);
+ ret_rect = geometry;
}
- wd->have_selection = EINA_TRUE;
- evas_object_smart_callback_call(data, SIG_SELECTION_START, NULL);
-#ifdef HAVE_ELEMENTARY_X
- if (wd->sel_notify_handler)
- {
- const char *txt = elm_entry_selection_get(data);
- Evas_Object *top;
- top = elm_widget_top_get(data);
- if (txt && top && (elm_win_xwindow_get(top)))
- elm_cnp_selection_set(ELM_SEL_TYPE_PRIMARY, data,
- ELM_SEL_FORMAT_MARKUP, txt, strlen(txt));
+ Evas_Object *parent_obj = data;
+
+ while ((parent_obj = elm_widget_parent_get(parent_obj)))
+ {
+ if (!strcmp(elm_widget_type_get(parent_obj), "scroller") ||
+ !strcmp(elm_widget_type_get(parent_obj), "genlist"))
+ {
+ evas_object_geometry_get(parent_obj, &geometry.x, &geometry.y, &geometry.w, &geometry.h);
+ if ((ret_rect.w == -1) && (ret_rect.h == -1)) ret_rect = geometry;
+ ret_rect = _intersection_region_get(geometry, ret_rect);
+ }
}
-#endif
+
+ return ret_rect;
}
-static void
-_signal_selection_all(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+static Evas_Coord_Rectangle
+_layout_region_get(Evas_Object *data)
{
+ Evas_Coord_Rectangle geometry;
+ geometry.x = geometry.y = geometry.w = geometry.h = -1;
+
Widget_Data *wd = elm_widget_data_get(data);
- if (!wd) return;
- elm_entry_select_all(data);
+ if (!wd) return geometry;
+ if (!data || !strlen(elm_widget_type_get(data))) return geometry;
+
+ Evas_Object *child_obj = data;
+ Evas_Object *parent_obj;
+
+ while ((parent_obj = elm_widget_parent_get(child_obj)))
+ {
+ if (!strcmp(elm_widget_type_get(parent_obj), "conformant"))
+ {
+ evas_object_geometry_get(child_obj, &geometry.x, &geometry.y, &geometry.w, &geometry.h);
+ return geometry;
+ }
+ child_obj = parent_obj;
+ }
+
+ return geometry;
}
static void
-_signal_selection_none(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+_region_get_job(void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+ wd->region_get_job = NULL;
+
+ if (!_elm_config->desktop_entry)
+ {
+ if (wd->region_recalc_job) ecore_job_del(wd->region_recalc_job);
+ wd->region_recalc_job = ecore_job_add(_region_recalc_job, data);
+
+ evas_smart_objects_calculate(evas_object_evas_get(data));
+ }
+}
+
+static void
+_region_recalc_job(void *data)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ Evas_Coord_Rectangle ret_rect;
+ if (!wd) return;
+ wd->region_recalc_job = NULL;
+
+ if (!_elm_config->desktop_entry)
+ {
+ ret_rect = _viewport_region_get(data);
+ edje_object_part_text_viewport_region_set(wd->ent, "elm.text", ret_rect.x, ret_rect.y, ret_rect.w, ret_rect.h);
+ ret_rect = _layout_region_get(data);
+ edje_object_part_text_layout_region_set(wd->ent, "elm.text", ret_rect.x, ret_rect.y, ret_rect.w, ret_rect.h);
+ }
+}
+
+static void
+_signal_selection_end(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ if (wd->magnifier_enabled)
+ _magnifier_hide(data);
+ _menu_press(data);
+}
+
+static void
+_signal_entry_changed_user(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ Elm_Entry_Change_Info info;
+ Edje_Entry_Change_Info *edje_info = (Edje_Entry_Change_Info *)
+ edje_object_signal_callback_extra_data_get();
+ if (edje_info)
+ {
+ memcpy(&info, edje_info, sizeof(info));
+ evas_object_smart_callback_call(data, SIG_CHANGED_USER, &info);
+ }
+ else
+ {
+ evas_object_smart_callback_call(data, SIG_CHANGED_USER, NULL);
+ }
+}
+
+static void
+_signal_preedit_changed(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ _entry_changed_common_handling(data, SIG_PREEDIT_CHANGED);
+}
+
+static void
+_signal_undo_request(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ evas_object_smart_callback_call(data, SIG_UNDO_REQUEST, NULL);
+}
+
+static void
+_signal_redo_request(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ evas_object_smart_callback_call(data, SIG_REDO_REQUEST, NULL);
+}
+
+static void
+_signal_selection_start(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ const Eina_List *l;
+ Evas_Object *entry;
+ if (!wd) return;
+ EINA_LIST_FOREACH(entries, l, entry)
+ {
+ if (entry != data) elm_entry_select_none(entry);
+ }
+ wd->have_selection = EINA_TRUE;
+ wd->selmode = EINA_TRUE;
+ evas_object_smart_callback_call(data, SIG_SELECTION_START, NULL);
+#ifdef HAVE_ELEMENTARY_X
+ if (wd->sel_notify_handler)
+ {
+ const char *txt = elm_entry_selection_get(data);
+ Evas_Object *top;
+
+ top = elm_widget_top_get(data);
+ if (txt && top && (elm_win_xwindow_get(top)))
+ elm_cnp_selection_set(data, ELM_SEL_TYPE_PRIMARY,
+ ELM_SEL_FORMAT_MARKUP, txt, strlen(txt));
+ }
+#endif
+}
+
+static void
+_signal_magnifier_changed(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ Evas_Coord cx, cy, cw, ch;
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+
+ 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, EINA_FALSE);
+ else
+ {
+ wd->deferred_cur = EINA_TRUE;
+ wd->cx = cx;
+ wd->cy = cy;
+ wd->cw = cw;
+ wd->ch = ch;
+ }
+}
+
+static void
+_signal_selection_all(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+ elm_entry_select_all(data);
+}
+
+static void
+_signal_selection_none(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
static void
_signal_selection_changed(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
{
+ Evas_Coord cx, cy, cw, ch;
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
wd->have_selection = EINA_TRUE;
+ wd->selmode = EINA_TRUE;
evas_object_smart_callback_call(data, SIG_SELECTION_CHANGED, NULL);
_store_selection(ELM_SEL_TYPE_PRIMARY, data);
+
+// TIZEN ONLY
+ 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, EINA_FALSE);
+ else
+ {
+ wd->deferred_cur = EINA_TRUE;
+ wd->cx = cx;
+ wd->cy = cy;
+ wd->cw = cw;
+ wd->ch = ch;
+ }
+//
}
static void
if (!wd) return;
if (!wd->have_selection) return;
wd->have_selection = EINA_FALSE;
+ wd->selmode = EINA_FALSE; /////////////// exist in ours only - necessary ?
evas_object_smart_callback_call(data, SIG_SELECTION_CLEARED, NULL);
if (wd->sel_notify_handler)
{
top = elm_widget_top_get(data);
if ((top) && (elm_win_xwindow_get(top)))
- elm_cnp_selection_set(ELM_SEL_TYPE_PRIMARY, data,
+ elm_cnp_selection_set(data, ELM_SEL_TYPE_PRIMARY,
ELM_SEL_FORMAT_MARKUP, wd->cut_sel,
strlen(wd->cut_sel));
#endif
#endif
}
}
+
+ if ((wd->api) && (wd->api->obj_hidemenu))
+ {
+ wd->api->obj_hidemenu(data);
+ }
}
static void
_signal_entry_paste_request(void *data, Evas_Object *obj __UNUSED__, const char *emission, const char *source __UNUSED__)
{
Widget_Data *wd = elm_widget_data_get(data);
+#ifdef HAVE_ELEMENTARY_X
Elm_Sel_Type type = (emission[sizeof("ntry,paste,request,")] == '1') ?
ELM_SEL_TYPE_PRIMARY : ELM_SEL_TYPE_CLIPBOARD;
+#endif
+
if (!wd) return;
+ if (!wd->editable) return;
evas_object_smart_callback_call(data, SIG_SELECTION_PASTE, NULL);
if (wd->sel_notify_handler)
{
if ((top) && (elm_win_xwindow_get(top)))
{
wd->selection_asked = EINA_TRUE;
- elm_cnp_selection_get(type, ELM_SEL_FORMAT_MARKUP, data,
- NULL, NULL);
+ Elm_Sel_Format formats = ELM_SEL_FORMAT_MARKUP;
+ if (wd->cnp_mode == ELM_CNP_MODE_PLAINTEXT)
+ formats = ELM_SEL_FORMAT_TEXT;
+ else if (wd->cnp_mode != ELM_CNP_MODE_NO_IMAGE)
+ formats |= ELM_SEL_FORMAT_IMAGE;
+ elm_cnp_selection_get(data, type, formats,
+ NULL, NULL);
}
#endif
}
_signal_anchor_geoms_do_things_with(wd, &ei);
if (!wd->disabled)
- evas_object_smart_callback_call(data, SIG_ANCHOR_CLICKED, &ei);
+ {
+ evas_object_smart_callback_call(data, SIG_ANCHOR_CLICKED, &ei);
+
+ if (!_elm_config->desktop_entry)
+ _entry_hover_anchor_clicked(data, data, &ei);
+ }
}
static void
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
+ wd->double_clicked = EINA_FALSE;
evas_object_smart_callback_call(data, SIG_PRESS, NULL);
+
+ if ((wd->api) && (wd->api->obj_hidemenu))
+ wd->api->obj_hidemenu(data);
}
static void
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
+
+ if (!_elm_config->desktop_entry && !wd->double_clicked)
+ _cancel(data, NULL, NULL);
}
static void
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
+ wd->double_clicked = EINA_TRUE;
evas_object_smart_callback_call(data, SIG_CLICKED_DOUBLE, NULL);
}
static Eina_Bool
_event_selection_clear(void *data __UNUSED__, int type __UNUSED__, void *event __UNUSED__)
{
+#if 0
Widget_Data *wd = elm_widget_data_get(data);
Ecore_X_Event_Selection_Clear *ev = event;
if (!wd) return ECORE_CALLBACK_PASS_ON;
{
elm_entry_select_none(data);
}
+#else
+
+ // start for cbhm
+ Evas_Object *top = elm_widget_top_get(data);
+ Ecore_X_Event_Selection_Clear *ev = event;
+
+ if (!top)
+ return ECORE_CALLBACK_PASS_ON;
+
+ if (ev->selection != ECORE_X_SELECTION_SECONDARY)
+ {
+ return ECORE_CALLBACK_PASS_ON;
+ }
+
+ if (cnpwidgetdata == data)
+ {
+ Widget_Data *wd = elm_widget_data_get(data);
+ Elm_Sel_Format formats = ELM_SEL_FORMAT_MARKUP;
+ evas_object_smart_callback_call(data, SIG_SELECTION_PASTE, NULL);
+ if (wd->cnp_mode == ELM_CNP_MODE_PLAINTEXT)
+ formats = ELM_SEL_FORMAT_TEXT;
+ else if (wd->cnp_mode != ELM_CNP_MODE_NO_IMAGE)
+ formats |= ELM_SEL_FORMAT_IMAGE;
+ elm_cnp_selection_get(data, ELM_SEL_TYPE_SECONDARY, formats, NULL, NULL);
+ }
+
+ // end for cbhm
+#endif
return ECORE_CALLBACK_PASS_ON;
}
char backup;
Evas_Object *obj = (Evas_Object *) data;
Widget_Data *wd = elm_widget_data_get(obj);
- evas_event_freeze(evas_object_evas_get(obj));
if (wd->text) eina_stringshare_del(wd->text);
wd->text = NULL;
+ if (wd->password_text) eina_stringshare_del(wd->password_text);
+ wd->password_text = NULL;
+ evas_event_freeze(evas_object_evas_get(obj));
wd->changed = EINA_TRUE;
start = wd->append_text_position;
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- evas_event_freeze(evas_object_evas_get(obj));
if (!entry) entry = "";
if (item && strcmp(item, "default"))
{
return;
}
+ evas_event_freeze(evas_object_evas_get(obj));
if (wd->text) eina_stringshare_del(wd->text);
wd->text = NULL;
+ if (wd->password_text) eina_stringshare_del(wd->password_text);
+ wd->password_text = NULL;
wd->changed = EINA_TRUE;
/* Clear currently pending job if there is one */
if (item && strcmp(item, "default")) return NULL;
const char *text;
if (!wd) return NULL;
- if (wd->text) return wd->text;
+
text = edje_object_part_text_get(wd->ent, "elm.text");
if (!text)
{
return NULL;
}
memcpy(tmpbuf, text, tlen);
- memcpy(tmpbuf + tlen, wd->append_text_left, wd->append_text_len);
+ if (wd->append_text_left)
+ memcpy(tmpbuf + tlen, wd->append_text_left, strlen(wd->append_text_left));
tmpbuf[tlen + wd->append_text_len] = '\0';
eina_stringshare_replace(&wd->text, tmpbuf);
free(tmpbuf);
{
eina_stringshare_replace(&wd->text, text);
}
+ if (wd->password)
+ {
+ char *pw_text;
+ pw_text = elm_entry_markup_to_utf8(wd->text);
+ if (pw_text)
+ {
+ eina_stringshare_replace(&wd->password_text, pw_text);
+ free(pw_text);
+ return wd->password_text;
+ }
+ }
return wd->text;
}
EAPI Evas_Object *
elm_entry_add(Evas_Object *parent)
{
- Evas_Object *obj, *top;
+#ifdef HAVE_ELEMENTARY_X
+ Evas_Object *top;
+#endif
+ Evas_Object *obj;
Evas *e;
Widget_Data *wd;
elm_widget_signal_callback_del_hook_set(obj, _signal_callback_del_hook);
elm_object_cursor_set(obj, ELM_CURSOR_XTERM);
elm_widget_can_focus_set(obj, EINA_TRUE);
- elm_widget_highlight_ignore_set(obj, EINA_TRUE);
elm_widget_text_set_hook_set(obj, _elm_entry_text_set);
elm_widget_text_get_hook_set(obj, _elm_entry_text_get);
elm_widget_content_set_hook_set(obj, _content_set_hook);
elm_widget_content_unset_hook_set(obj, _content_unset_hook);
elm_widget_content_get_hook_set(obj, _content_get_hook);
elm_widget_translate_hook_set(obj, _translate_hook);
+ elm_widget_event_hook_set(obj, _event_hook);
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, wd);
wd->disabled = EINA_FALSE;
wd->context_menu = EINA_TRUE;
wd->autosave = EINA_TRUE;
- wd->textonly = EINA_FALSE;
+ wd->cnp_mode = ELM_CNP_MODE_MARKUP;
wd->scroll = EINA_FALSE;
wd->input_panel_imdata = NULL;
+//TIZEN ONLY
+ wd->magnifier_enabled = EINA_TRUE;
+//
wd->ent = edje_object_add(e);
edje_object_item_provider_set(wd->ent, _get_item, obj);
_signal_undo_request, obj);
edje_object_signal_callback_add(wd->ent, "entry,redo,request", "elm.text",
_signal_redo_request, obj);
+// TIZEN ONLY
+ edje_object_signal_callback_add(wd->ent, "handler,move,start", "elm.text",
+ _signal_handler_move_start, obj);
+ edje_object_signal_callback_add(wd->ent, "handler,move,end", "elm.text",
+ _signal_handler_move_end, obj);
+ edje_object_signal_callback_add(wd->ent, "handler,moving", "elm.text",
+ _signal_handler_moving, obj);
+ edje_object_signal_callback_add(wd->ent, "selection,end", "elm.text",
+ _signal_selection_end, obj);
+ edje_object_signal_callback_add(wd->ent, "long,pressed", "elm.text",
+ _signal_long_pressed, obj);
+ edje_object_signal_callback_add(wd->ent, "magnifier,changed", "elm.text",
+ _signal_magnifier_changed, obj);
+//
edje_object_part_text_set(wd->ent, "elm.text", "");
if (_elm_config->desktop_entry)
edje_object_part_text_select_allow_set(wd->ent, "elm.text", EINA_TRUE);
+ else
+ {
+ edje_object_part_text_copy_paste_disabled_set(wd->ent, "elm.text", EINA_FALSE);
+ edje_object_part_text_viewport_region_set(wd->ent, "elm.text", -1, -1, -1, -1);
+ edje_object_part_text_layout_region_set(wd->ent, "elm.text", -1, -1, -1, -1);
+ }
elm_widget_resize_object_set(obj, wd->ent);
_sizing_eval(obj);
elm_entry_input_panel_layout_set(obj, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+
elm_entry_input_panel_enabled_set(obj, EINA_TRUE);
elm_entry_prediction_allow_set(obj, EINA_TRUE);
return obj;
}
+void elm_entry_extension_module_data_get(Evas_Object *obj,Elm_Entry_Extension_data *ext_mod)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ ext_mod->cancel = _cancel;
+ ext_mod->copy = _copy;
+ ext_mod->cut = _cut;
+ ext_mod->paste = _paste;
+ ext_mod->select = _select;
+ ext_mod->selectall = _selectall;
+ ext_mod->ent = wd->ent;
+ ext_mod->items = wd->items;
+ ext_mod->editable = wd->editable;
+ ext_mod->have_selection = wd->have_selection;
+ ext_mod->password = wd->password;
+ ext_mod->selmode = wd->selmode;
+ ext_mod->cnpinit = _cnpinit;
+ ext_mod->context_menu = wd->context_menu;
+ ext_mod->cnp_mode = wd->cnp_mode;
+ ext_mod->viewport_rect = _viewport_region_get(obj);
+}
+
+EAPI void
+elm_entry_text_style_user_push(Evas_Object *obj, const char *style)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ edje_object_part_text_style_user_push(wd->ent, "elm.text", style);
+ _theme_hook(obj);
+}
+
+EAPI void
+elm_entry_text_style_user_pop(Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ edje_object_part_text_style_user_pop(wd->ent, "elm.text");
+ _theme_hook(obj);
+}
+
+EAPI const char*
+elm_entry_text_style_user_peek(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+ return edje_object_part_text_style_user_peek(wd->ent, "elm.text");
+}
+
EAPI void
elm_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line)
{
if (wd->single_line == single_line) return;
wd->single_line = single_line;
wd->linewrap = ELM_WRAP_NONE;
- elm_entry_cnp_textonly_set(obj, EINA_TRUE);
+ elm_entry_cnp_mode_set(obj, ELM_CNP_MODE_NO_IMAGE);
_theme_hook(obj);
if (wd->scroller)
{
if (wd->single_line)
- elm_smart_scroller_policy_set(wd->scroller,
- ELM_SMART_SCROLLER_POLICY_OFF,
- ELM_SMART_SCROLLER_POLICY_OFF);
+ {
+ elm_smart_scroller_policy_set(wd->scroller,
+ ELM_SMART_SCROLLER_POLICY_OFF,
+ ELM_SMART_SCROLLER_POLICY_OFF);
+ elm_smart_scroller_bounce_allow_set(wd->scroller, EINA_FALSE, EINA_FALSE); // TIZEN ONLY
+ }
else
{
const Elm_Scroller_Policy map[3] =
elm_smart_scroller_policy_set(wd->scroller,
map[wd->policy_h],
map[wd->policy_v]);
+ elm_smart_scroller_bounce_allow_set(wd->scroller, EINA_FALSE, EINA_FALSE); // TIZEN ONLY
}
_sizing_eval(obj);
}
Evas_Textblock_Cursor *cur;
Eina_Bool ret;
if (!wd) return EINA_TRUE;
+
+ if (0) { // TIZEN ONLY
/* It's a hack until we get the support suggested above.
* We just create a cursor, point it to the begining, and then
* try to advance it, if it can advance, the tb is not empty,
* otherwise it is. */
tb = edje_object_part_object_get(wd->ent, "elm.text");
cur = evas_object_textblock_cursor_new((Evas_Object *) tb); /* This is
- actually, ok for the time being, thsese hackish stuff will be removed
+ actually, ok for the time being, these hackish stuff will be removed
once evas 1.0 is out*/
evas_textblock_cursor_pos_set(cur, 0);
ret = evas_textblock_cursor_char_next(cur);
evas_textblock_cursor_free(cur);
return !ret;
+ }
+
+ char *str = elm_entry_markup_to_utf8(elm_entry_entry_get(obj));
+ if (!str) return EINA_TRUE;
+
+ ret = (strlen(str) == 0);
+
+ free(str);
+ return ret;
}
EAPI Evas_Object *
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
edje_object_part_text_insert(wd->ent, "elm.text", entry);
+ // start for cbhm
+#ifdef HAVE_ELEMENTARY_X
+ if (cnpwidgetdata == obj)
+ ecore_x_selection_secondary_set(elm_win_xwindow_get(obj), "",1);
+#endif
+ // end for cbhm
wd->changed = EINA_TRUE;
_sizing_eval(obj);
}
if (!wd) return;
if (wd->context_menu == !disabled) return;
wd->context_menu = !disabled;
+
+ if (!_elm_config->desktop_entry) // TIZEN ONLY : commit ?
+ edje_object_part_text_copy_paste_disabled_set(wd->ent, "elm.text", disabled);
}
EAPI Eina_Bool
}
EAPI void
-elm_entry_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data)
+elm_entry_item_provider_append(Evas_Object *obj, Elm_Entry_Item_Provider_Cb func, void *data)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
}
EAPI void
-elm_entry_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data)
+elm_entry_item_provider_prepend(Evas_Object *obj, Elm_Entry_Item_Provider_Cb func, void *data)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
}
EAPI void
-elm_entry_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data)
+elm_entry_item_provider_remove(Evas_Object *obj, Elm_Entry_Item_Provider_Cb func, void *data)
{
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
}
EAPI void
-elm_entry_text_filter_append(Evas_Object *obj, Elm_Entry_Filter_Cb func, void *data)
-{
- Widget_Data *wd;
- Elm_Entry_Markup_Filter *tf;
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- wd = elm_widget_data_get(obj);
-
- EINA_SAFETY_ON_NULL_RETURN(func);
-
- tf = _filter_new(func, data);
- if (!tf) return;
-
- wd->text_filters = eina_list_append(wd->text_filters, tf);
-}
-
-EAPI void
-elm_entry_text_filter_prepend(Evas_Object *obj, Elm_Entry_Filter_Cb func, void *data)
-{
- Widget_Data *wd;
- Elm_Entry_Markup_Filter *tf;
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- wd = elm_widget_data_get(obj);
-
- EINA_SAFETY_ON_NULL_RETURN(func);
-
- tf = _filter_new(func, data);
- if (!tf) return;
-
- wd->text_filters = eina_list_prepend(wd->text_filters, tf);
-}
-
-EAPI void
-elm_entry_text_filter_remove(Evas_Object *obj, Elm_Entry_Filter_Cb func, void *data)
-{
- Widget_Data *wd;
- Eina_List *l;
- Elm_Entry_Markup_Filter *tf;
- ELM_CHECK_WIDTYPE(obj, widtype);
-
- wd = elm_widget_data_get(obj);
-
- EINA_SAFETY_ON_NULL_RETURN(func);
-
- EINA_LIST_FOREACH(wd->text_filters, l, tf)
- {
- if ((tf->func == func) && ((!data) || (tf->data == data)))
- {
- wd->text_filters = eina_list_remove_list(wd->text_filters, l);
- _filter_free(tf);
- return;
- }
- }
-}
-
-EAPI void
elm_entry_markup_filter_append(Evas_Object *obj, Elm_Entry_Filter_Cb func, void *data)
{
Widget_Data *wd;
if (lim->max_char_count > 0)
{
len = evas_string_char_len_get(current);
- if (len >= lim->max_char_count)
+ newlen = evas_string_char_len_get(utfstr);
+ if ((len >= lim->max_char_count) && (newlen > 0))
{
evas_object_smart_callback_call(entry, "maxlength,reached", NULL);
free(*text);
free(utfstr);
return;
}
- newlen = evas_string_char_len_get(utfstr);
if ((len + newlen) > lim->max_char_count)
_add_chars_till_limit(entry, text, (lim->max_char_count - len), LENGTH_UNIT_CHAR);
}
else if (lim->max_byte_count > 0)
{
len = strlen(current);
- if (len >= lim->max_byte_count)
+ newlen = strlen(utfstr);
+ if ((len >= lim->max_byte_count) && (newlen > 0))
{
evas_object_smart_callback_call(entry, "maxlength,reached", NULL);
free(*text);
free(utfstr);
return;
}
- newlen = strlen(utfstr);
if ((len + newlen) > lim->max_byte_count)
_add_chars_till_limit(entry, text, (lim->max_byte_count - len), LENGTH_UNIT_BYTE);
}
*insert = 0;
}
-EAPI void
+EAPI Eina_Bool
elm_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format)
{
- ELM_CHECK_WIDTYPE(obj, widtype);
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
+ if (!wd) return EINA_FALSE;
if (wd->delay_write)
{
ecore_timer_del(wd->delay_write);
if (wd->autosave) _save(obj);
eina_stringshare_replace(&wd->file, file);
wd->format = format;
- _load(obj);
+ return _load(obj);
}
EAPI void
return wd->autosave;
}
-EAPI void
+EINA_DEPRECATED EAPI void
elm_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly)
{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Elm_Cnp_Mode cnp_mode = ELM_CNP_MODE_MARKUP;
+ if (textonly)
+ cnp_mode = ELM_CNP_MODE_NO_IMAGE;
+ elm_entry_cnp_mode_set(obj, cnp_mode);
+}
+
+EINA_DEPRECATED EAPI Eina_Bool
+elm_entry_cnp_textonly_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ return elm_entry_cnp_mode_get(obj) != ELM_CNP_MODE_MARKUP;
+}
+
+EAPI void
+elm_entry_cnp_mode_set(Evas_Object *obj, Elm_Cnp_Mode cnp_mode)
+{
Elm_Sel_Format format = ELM_SEL_FORMAT_MARKUP;
ELM_CHECK_WIDTYPE(obj, widtype);
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- textonly = !!textonly;
- if (wd->textonly == textonly) return;
- wd->textonly = !!textonly;
- if (!textonly) format |= ELM_SEL_FORMAT_IMAGE;
+ if (wd->cnp_mode == cnp_mode) return;
+ wd->cnp_mode = cnp_mode;
+ if (wd->cnp_mode == ELM_CNP_MODE_PLAINTEXT)
+ format = ELM_SEL_FORMAT_TEXT;
+ else if (cnp_mode == ELM_CNP_MODE_MARKUP) format |= ELM_SEL_FORMAT_IMAGE;
#ifdef HAVE_ELEMENTARY_X
elm_drop_target_add(obj, format, _drag_drop_cb, NULL);
#endif
}
-EAPI Eina_Bool
-elm_entry_cnp_textonly_get(const Evas_Object *obj)
+EAPI Elm_Cnp_Mode
+elm_entry_cnp_mode_get(const Evas_Object *obj)
{
- ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ ELM_CHECK_WIDTYPE(obj, widtype) ELM_CNP_MODE_MARKUP;
Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return EINA_FALSE;
- return wd->textonly;
+ if (!wd) return ELM_CNP_MODE_MARKUP;
+ return wd->cnp_mode;
}
EAPI void
}
EAPI void
-elm_entry_icon_set(Evas_Object *obj, Evas_Object *icon)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- EINA_SAFETY_ON_NULL_RETURN(icon);
- _content_set_hook(obj, NULL, icon);
-}
-
-EAPI Evas_Object *
-elm_entry_icon_get(const Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- return _content_get_hook(obj, NULL);
-}
-
-EAPI Evas_Object *
-elm_entry_icon_unset(Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- return _content_unset_hook(obj, NULL);
-}
-
-EAPI void
elm_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting)
{
ELM_CHECK_WIDTYPE(obj, widtype);
}
EAPI void
-elm_entry_end_set(Evas_Object *obj, Evas_Object *end)
-{
- ELM_CHECK_WIDTYPE(obj, widtype);
- EINA_SAFETY_ON_NULL_RETURN(end);
- _content_set_hook(obj, "end", end);
-}
-
-EAPI Evas_Object *
-elm_entry_end_get(const Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- return _content_get_hook(obj, "end");
-}
-
-EAPI Evas_Object *
-elm_entry_end_unset(Evas_Object *obj)
-{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- return _content_unset_hook(obj, "end");
-}
-
-EAPI void
elm_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting)
{
ELM_CHECK_WIDTYPE(obj, widtype);
return wd->input_panel_return_key_disabled;
}
+EAPI void
+elm_entry_input_panel_return_key_autoenabled_set(Evas_Object *obj, Eina_Bool enabled)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+
+ wd->autoreturnkey = enabled;
+ _check_enable_return_key(obj);
+}
+
+EAPI void*
+elm_entry_imf_context_get(Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+
+ return edje_object_part_text_imf_context_get(wd->ent, "elm.text");
+}
+
+/* START - ANCHOR HOVER */
+static void
+_parent_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+ wd->anchor_hover.hover_parent = NULL;
+}
+
+static void
+_anchor_hover_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ Widget_Data *wd = elm_widget_data_get(data);
+ if (!wd) return;
+ if (wd->anchor_hover.pop) evas_object_del(wd->anchor_hover.pop);
+ wd->anchor_hover.pop = NULL;
+ evas_object_event_callback_del_full(wd->anchor_hover.hover, EVAS_CALLBACK_DEL,
+ _anchor_hover_del, obj);
+}
+
+EAPI void
+elm_entry_anchor_hover_parent_set(Evas_Object *obj, Evas_Object *parent)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->anchor_hover.hover_parent)
+ evas_object_event_callback_del_full(wd->anchor_hover.hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
+ wd->anchor_hover.hover_parent = parent;
+ if (wd->anchor_hover.hover_parent)
+ evas_object_event_callback_add(wd->anchor_hover.hover_parent, EVAS_CALLBACK_DEL, _parent_del, obj);
+}
+
+EAPI Evas_Object *
+elm_entry_anchor_hover_parent_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+ return wd->anchor_hover.hover_parent;
+}
+
+EAPI void
+elm_entry_anchor_hover_style_set(Evas_Object *obj, const char *style)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ eina_stringshare_replace(&wd->anchor_hover.hover_style, style);
+}
+
+EAPI const char *
+elm_entry_anchor_hover_style_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return NULL;
+ return wd->anchor_hover.hover_style;
+}
+
+EAPI void
+elm_entry_anchor_hover_end(Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->anchor_hover.hover) evas_object_del(wd->anchor_hover.hover);
+ if (wd->anchor_hover.pop) evas_object_del(wd->anchor_hover.pop);
+ wd->anchor_hover.hover = NULL;
+ wd->anchor_hover.pop = NULL;
+}
+
+
+static void
+_anchor_hover_clicked(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+ elm_entry_anchor_hover_end(data);
+}
+
+static void
+_entry_hover_anchor_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+ Widget_Data *wd = elm_widget_data_get(obj);
+ Elm_Entry_Anchor_Info *info = event_info;
+ Evas_Object *hover_parent;
+ Elm_Entry_Anchor_Hover_Info ei;
+ Evas_Coord x, w, y, h, px, py;
+ if (!wd) return;
+
+ ei.anchor_info = event_info;
+
+ wd->anchor_hover.pop = elm_icon_add(obj);
+ evas_object_move(wd->anchor_hover.pop, info->x, info->y);
+ evas_object_resize(wd->anchor_hover.pop, info->w, info->h);
+
+ wd->anchor_hover.hover = elm_hover_add(obj);
+ evas_object_event_callback_add(wd->anchor_hover.hover, EVAS_CALLBACK_DEL,
+ _anchor_hover_del, obj);
+ elm_widget_mirrored_set(wd->anchor_hover.hover, elm_widget_mirrored_get(obj));
+ if (wd->anchor_hover.hover_style)
+ elm_object_style_set(wd->anchor_hover.hover, wd->anchor_hover.hover_style);
+
+ hover_parent = wd->anchor_hover.hover_parent;
+ if (!hover_parent) hover_parent = obj;
+ elm_hover_parent_set(wd->anchor_hover.hover, hover_parent);
+ elm_hover_target_set(wd->anchor_hover.hover, wd->anchor_hover.pop);
+ ei.hover = wd->anchor_hover.hover;
+
+ evas_object_geometry_get(hover_parent, &x, &y, &w, &h);
+ ei.hover_parent.x = x;
+ ei.hover_parent.y = y;
+ ei.hover_parent.w = w;
+ ei.hover_parent.h = h;
+ px = info->x + (info->w / 2);
+ py = info->y + (info->h / 2);
+ ei.hover_left = 1;
+ if (px < (x + (w / 3))) ei.hover_left = 0;
+ ei.hover_right = 1;
+ if (px > (x + ((w * 2) / 3))) ei.hover_right = 0;
+ ei.hover_top = 1;
+ if (py < (y + (h / 3))) ei.hover_top = 0;
+ ei.hover_bottom = 1;
+ if (py > (y + ((h * 2) / 3))) ei.hover_bottom = 0;
+
+ if (elm_widget_mirrored_get(wd->anchor_hover.hover))
+ { /* Swap right and left because they switch sides in RTL */
+ Eina_Bool tmp = ei.hover_left;
+ ei.hover_left = ei.hover_right;
+ ei.hover_right = tmp;
+ }
+
+ evas_object_smart_callback_call(data, SIG_ANCHOR_HOVER_OPENED, &ei);
+ evas_object_smart_callback_add(wd->anchor_hover.hover, "clicked", _anchor_hover_clicked, data);
+
+ /* FIXME: Should just check if there's any callback registered to the smart
+ * events instead.
+ * This is used to determine if anyone cares about the hover or not. */
+ if (!elm_object_part_content_get(wd->anchor_hover.hover, "middle") &&
+ !elm_object_part_content_get(wd->anchor_hover.hover, "left") &&
+ !elm_object_part_content_get(wd->anchor_hover.hover, "right") &&
+ !elm_object_part_content_get(wd->anchor_hover.hover, "top") &&
+ !elm_object_part_content_get(wd->anchor_hover.hover, "bottom"))
+ {
+ evas_object_del(wd->anchor_hover.hover);
+ wd->anchor_hover.hover = NULL;
+ }
+ else
+ evas_object_show(wd->anchor_hover.hover);
+}
+/* END - ANCHOR HOVER */
+
+EAPI void
+elm_entry_magnifier_disabled_set(Evas_Object *obj, Eina_Bool disabled)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (wd->magnifier_enabled == !disabled) return;
+ wd->magnifier_enabled = !disabled;
+}
+
+EAPI Eina_Bool
+elm_entry_magnifier_disabled_get(const Evas_Object *obj)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return EINA_FALSE;
+ return !wd->magnifier_enabled;
+}
+
+EAPI void
+elm_entry_magnifier_type_set(Evas_Object *obj, int type)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+
+ wd->mgf_type = type;
+ _magnifier_create(obj);
+}