Index: data/themes/Makefile.am
===================================================================
--- data/themes/Makefile.am	(revision 73407)
+++ data/themes/Makefile.am	(working copy)
@@ -308,6 +308,7 @@ icon_arrow_up_left.png \
 icon_arrow_up_right.png \
 thumb_shadow.png \
 group_index.png \
+magnifier.png \
 mp_forward.png \
 mp_info.png \
 mp_next.png \
Index: data/themes/widgets/entry.edc
===================================================================
--- data/themes/widgets/entry.edc	(revision 73407)
+++ data/themes/widgets/entry.edc	(working copy)
@@ -1394,3 +1394,48 @@ group { name: "elm/entry/anchor/default";
    }
 }
 
+
+#define MAGNIFIER_SCALE 1.2
+#define MAGNIFIER_SIZE_WIDTH 210
+#define MAGNIFIER_SIZE_HEIGHT 100
+
+group { name: "elm/entry/magnifier/default";
+   data.item: "scale" MAGNIFIER_SCALE;
+   images {
+      image: "magnifier.png" COMP;
+   }
+   parts {
+      part { name: "bg";
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: MAGNIFIER_SIZE_WIDTH MAGNIFIER_SIZE_HEIGHT;
+            align: 0.5 1.0;
+            image {
+               normal: "magnifier.png";
+            }
+            image.middle: SOLID;
+            fill.smooth: 0;
+         }
+      }
+      part { name: "swallow";
+         type: SWALLOW;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.0 0.0;
+            rel1 {
+               to: "bg";
+               offset: 11 11;
+            }
+            rel2 {
+               to: "bg";
+               offset: -19 -17;
+            }
+         }
+      }
+   }
+}
+
Index: src/lib/elm_entry.h
===================================================================
--- src/lib/elm_entry.h	(revision 73407)
+++ src/lib/elm_entry.h	(working copy)
@@ -1772,5 +1772,26 @@ EAPI const char                 *elm_entry_anchor_
 EAPI void                        elm_entry_anchor_hover_end(Evas_Object *obj);
 
 /**
+ * This disables the entry's magnifier feature.
+ *
+ * @param obj The entry object
+ * @param disabled If true, the magnifier is disabled
+ *
+ * @ingroup Entry
+ */
+EAPI void               elm_entry_magnifier_disabled_set(Evas_Object *obj, Eina_Bool disabled);
+
+/**
+ * This returns whether the entry's magnifier feature is disabled.
+ *
+ * @param obj The entry object
+ * @return If true, the magnifier is disabled
+ *
+ * @ingroup Entry
+ */
+EAPI Eina_Bool          elm_entry_magnifier_disabled_get(const Evas_Object *obj);
+
+
+/**
  * @}
  */
Index: src/lib/elm_entry.c
===================================================================
--- src/lib/elm_entry.c	(revision 73407)
+++ src/lib/elm_entry.c	(working copy)
@@ -83,6 +83,12 @@ struct _Widget_Data
    Eina_Bool autoreturnkey : 1;
    Eina_Bool havetext : 1;
    Elm_Cnp_Mode cnp_mode : 2;
+   Evas_Object *mgf_proxy;
+   Evas_Object *mgf_clip;
+   Evas_Object *mgf_bg;
+   float mgf_scale;
+   Eina_Bool long_pressed : 1;
+   Eina_Bool magnifier_enabled : 1;
 };
 
 struct _Elm_Entry_Context_Menu_Item
@@ -142,6 +148,10 @@ static void _signal_entry_cut_notify(void *data, E
 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);
+static void _magnifier_create(void *data);
+static void _magnifier_show(void *data);
+static void _magnifier_hide(void *data);
+static void _magnifier_move(void *data, Evas_Coord px, Evas_Coord py);
 
 static const char SIG_CHANGED[] = "changed";
 static const char SIG_CHANGED_USER[] = "changed,user";
@@ -516,6 +526,9 @@ _del_hook(Evas_Object *obj)
         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)
      {
@@ -1411,13 +1424,134 @@ _menu_press(Evas_Object *obj)
      }
 }
 
+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);
+
+   if (wd->scroll)
+     elm_smart_scroller_freeze_set(wd->scroller, EINA_TRUE);
+}
+
+static void
+_magnifier_move(void *data, Evas_Coord px, Evas_Coord py)
+{
+   Widget_Data *wd = elm_widget_data_get(data);
+   if (!wd) return;
+
+   Evas_Coord x, y, w, h;
+   Evas_Coord mx, my, mw, mh;
+   Evas_Coord rx, ry, ox = 0, oy = 0;
+   Evas_Object *obj_bg = NULL;
+
+   if (wd->scroll)
+     {
+        evas_object_geometry_get(wd->scroller, &x, &y, &w, &h);
+        elm_smart_scroller_child_pos_get(wd->scroller, &ox, &oy);
+     }
+   else
+     evas_object_geometry_get(data, &x, &y, &w, &h);
+
+   rx = px - x + ox;
+   ry = py - y + oy;
+
+   obj_bg = edje_object_part_object_get(wd->mgf_bg, "bg");
+   evas_object_geometry_get(obj_bg, &mx, &my, &mw, &mh);
+   ox = oy = 0;
+
+   if (py - mh < y) oy = -1 * (py - mh - y);
+   if (py > (y + h)) oy = -1 * (py - (y + h));
+   if ((px - (mw / 2)) < x) ox = -1 * (px - (mw / 2) - x);
+   if ((px + (mw / 2)) > (x + w)) ox = -1 * (px + (mw / 2) - (x + w));
+
+   evas_object_move(wd->mgf_bg, px + ox, py + oy);
+   evas_object_move(wd->mgf_proxy, (1 - wd->mgf_scale) * rx + x + ox, (1 - wd->mgf_scale) * ry + y + oy - mh/2);
+}
+
+static void
+_magnifier_create(void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(data);
+   Evas_Coord x, y, w, h, mw, mh;
+   Evas_Object *src_obj = NULL;
+   const char* key_data = NULL;
+
+   if (!wd) return;
+
+   if (wd->mgf_proxy)
+     {
+        evas_object_image_source_unset(wd->mgf_proxy);
+        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);
+
+   src_obj = (wd->scroll) ? wd->scroller : data;
+
+   evas_object_geometry_get(src_obj, &x, &y, &w, &h);
+
+   if ((w <= 0) || (h <= 0))
+     return;
+
+   wd->mgf_bg = edje_object_add(evas_object_evas_get(data));
+   _elm_theme_object_set(data, wd->mgf_bg, "entry", "magnifier", "default");
+
+   wd->mgf_clip = evas_object_rectangle_add(evas_object_evas_get(data));
+   edje_object_part_swallow(wd->mgf_bg, "swallow", wd->mgf_clip);
+
+   key_data = edje_object_data_get(wd->mgf_bg, "scale");
+   if (key_data) wd->mgf_scale = atof(key_data);
+   if (wd->mgf_scale <= 0) return;
+
+   wd->mgf_proxy = evas_object_image_add(evas_object_evas_get(src_obj));
+   evas_object_image_source_set(wd->mgf_proxy, src_obj);
+
+   mw = (Evas_Coord)((float)w * wd->mgf_scale);
+   mh = (Evas_Coord)((float)h * wd->mgf_scale);
+
+   evas_object_resize(wd->mgf_proxy, mw, mh);
+   evas_object_image_fill_set(wd->mgf_proxy, 0, 0, mw, mh);
+   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 Eina_Bool
 _long_press(void *data)
 {
    Widget_Data *wd = elm_widget_data_get(data);
    if (!wd) return ECORE_CALLBACK_CANCEL;
-   if (!_elm_config->desktop_entry)
+   if (wd->magnifier_enabled)
+     {
+        _magnifier_create(data);
+        _magnifier_move(data, wd->downx, wd->downy);
+        _magnifier_show(data);
+     }
+   else if (!_elm_config->desktop_entry)
      _menu_press(data);
+   wd->long_pressed = EINA_TRUE;
    wd->longpress_timer = NULL;
    evas_object_smart_callback_call(data, SIG_LONGPRESSED, NULL);
    return ECORE_CALLBACK_CANCEL;
@@ -1433,6 +1567,7 @@ _mouse_down(void *data, Evas *evas __UNUSED__, Eva
    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);
@@ -1449,6 +1584,11 @@ _mouse_up(void *data, Evas *evas __UNUSED__, Evas_
    if (wd->disabled) return;
    if (ev->button == 1)
      {
+        if (wd->magnifier_enabled)
+          {
+             _magnifier_hide(data);
+             if (wd->long_pressed) _menu_press(data);
+          }
         if (wd->longpress_timer)
           {
              ecore_timer_del(wd->longpress_timer);
@@ -1469,6 +1609,15 @@ _mouse_move(void *data, Evas *evas __UNUSED__, Eva
    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_move(data, ev->cur.canvas.x, ev->cur.canvas.y);
+             _magnifier_show(data);
+          }
+     }
    if (!wd->selmode)
      {
         if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
@@ -2511,6 +2660,8 @@ elm_entry_add(Evas_Object *parent)
    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
+     wd->magnifier_enabled = EINA_TRUE;
    elm_widget_resize_object_set(obj, wd->ent);
    _sizing_eval(obj);
 
@@ -3973,3 +4124,22 @@ _entry_hover_anchor_clicked(void *data, Evas_Objec
      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;
+}
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 73407)
+++ ChangeLog	(working copy)
@@ -284,4 +284,8 @@
 	* Add layout access enable/disable api:
           * elm_layout_edje_object_can_access_set/get()
 
+2012-07-06  Myungjae Lee
 
+	* Entry : Magnifier feature and next 2 APIs were added
+	* elm_entry_magnifier_disabled_set()
+	* elm_entry_magnifier_disabled_get()
