Index: src/lib/edje_entry.c
===================================================================
--- src/lib/edje_entry.c	(revision 74324)
+++ src/lib/edje_entry.c	(working copy)
@@ -1675,17 +1675,16 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNU
 
    en->select_mod_start = EINA_FALSE;
    en->select_mod_end = EINA_FALSE;
-   if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_DEFAULT)
+   if ((rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_DEFAULT) ||
+       (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT))
      dosel = EINA_TRUE;
-   else if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT)
-     {
-        if (en->select_allow) dosel = EINA_TRUE;
-     }
    if (ev->button == 2) dosel = EINA_FALSE;
    if (dosel)
      {
         if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK)
           {
+             if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT)
+               en->select_allow = EINA_TRUE;
              en->have_selection = EINA_FALSE;
              en->selecting = EINA_FALSE;
              _sel_clear(en->cursor, rp->object, en);
@@ -1696,10 +1695,14 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNU
              evas_textblock_cursor_line_char_last(en->cursor);
              _sel_extend(en->cursor, rp->object, en);
 
+             if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT)
+               _edje_emit(en->rp->edje, "selection,end", en->rp->part->name);
              goto end;
           }
         else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
           {
+             if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT)
+               en->select_allow = EINA_TRUE;
              en->have_selection = EINA_FALSE;
              en->selecting = EINA_FALSE;
              _sel_clear(en->cursor, rp->object, en);
@@ -1711,6 +1714,8 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNU
              evas_textblock_cursor_char_next(en->cursor);
              _sel_extend(en->cursor, rp->object, en);
 
+             if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT)
+               _edje_emit(en->rp->edje, "selection,end", en->rp->part->name);
              goto end;
           }
      }
@@ -1843,9 +1848,16 @@ _edje_part_mouse_up_cb(void *data, Evas *e __UNUSE
    if (ev->button != 1) return;
    if (!rp) return;
    if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-   if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK) return;
-   if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) return;
    en = rp->entry_data;
+   if ((ev->flags & EVAS_BUTTON_TRIPLE_CLICK) || (ev->flags & EVAS_BUTTON_DOUBLE_CLICK))
+     {
+        if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT)
+          {
+             if (en->have_selection)
+               en->had_sel = EINA_TRUE;
+          }
+        return;
+     }
    if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
        (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE))
      return;
@@ -2598,9 +2610,29 @@ void
 _edje_entry_select_allow_set(Edje_Real_Part *rp, Eina_Bool allow)
 {
    Entry *en = rp->entry_data;
+   Evas_Textblock_Cursor *tc;
    if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_DEFAULT)
      return;
    en->select_allow = allow;
+
+   if ((allow) && (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT))
+     {
+        en->have_selection = EINA_FALSE;
+        en->selecting = EINA_FALSE;
+        _sel_clear(en->cursor, rp->object, en);
+        tc = evas_object_textblock_cursor_new(rp->object);
+        evas_textblock_cursor_copy(en->cursor, tc);
+        evas_textblock_cursor_word_start(en->cursor);
+        _sel_start(en->cursor, rp->object, en);
+        evas_textblock_cursor_word_end(en->cursor);
+        evas_textblock_cursor_char_next(en->cursor);
+        _sel_extend(en->cursor, rp->object, en);
+        _edje_entry_real_part_configure(rp);
+        en->had_sel = EINA_TRUE;
+
+        evas_textblock_cursor_free(tc);
+        _edje_emit(en->rp->edje, "selection,end", en->rp->part->name);
+     }
 }
 
 Eina_Bool
