diff -up ./src/lib/elm_entry.c.backup ./src/lib/elm_entry.c
--- ./src/lib/elm_entry.c.backup	2012-07-26 23:28:23.359141016 +0900
+++ ./src/lib/elm_entry.c	2012-07-26 23:27:52.987141533 +0900
@@ -89,6 +89,7 @@ struct _Widget_Data
    Evas_Object *mgf_smart;
    float mgf_scale;
    Eina_Bool long_pressed : 1;
+   Eina_Bool cancel_requested : 1;
 };
 
 struct _Elm_Entry_Context_Menu_Item
@@ -2046,6 +2047,7 @@ _signal_selection_changed(void *data, Ev
    Widget_Data *wd = elm_widget_data_get(data);
    if (!wd) return;
    wd->have_selection = EINA_TRUE;
+   wd->cancel_requested = EINA_FALSE;
    evas_object_smart_callback_call(data, SIG_SELECTION_CHANGED, NULL);
    _store_selection(ELM_SEL_TYPE_PRIMARY, data);
 }
@@ -2292,6 +2294,7 @@ _signal_mouse_down(void *data, Evas_Obje
 {
    Widget_Data *wd = elm_widget_data_get(data);
    if (!wd) return;
+   wd->cancel_requested = EINA_TRUE;
    evas_object_smart_callback_call(data, SIG_PRESS, NULL);
 }
 
@@ -2300,6 +2303,8 @@ _signal_mouse_clicked(void *data, Evas_O
 {
    Widget_Data *wd = elm_widget_data_get(data);
    if (!wd) return;
+   if ((!_elm_config->desktop_entry) && (wd->cancel_requested))
+     _cancel(data, NULL, NULL);
    evas_object_smart_callback_call(data, SIG_CLICKED, NULL);
 }
 
@@ -2308,6 +2313,7 @@ _signal_mouse_double(void *data, Evas_Ob
 {
    Widget_Data *wd = elm_widget_data_get(data);
    if (!wd) return;
+   wd->cancel_requested = EINA_FALSE;
    evas_object_smart_callback_call(data, SIG_CLICKED_DOUBLE, NULL);
 }
 
