fix entry shift selection extend with mouse.

SVN revision: 74338
This commit is contained in:
Carsten Haitzler 2012-07-24 03:52:14 +00:00
parent 5410726016
commit 29452cf797
2 changed files with 106 additions and 58 deletions

View File

@ -531,3 +531,9 @@
2012-07-14 Cedric Bail
* Fix Edje_Multisense shutdown.
2012-07-24 Carsten Haitzler (The Rasterman)
* Fix edje entry to extend selection to char pos/word or line
when holding shift + mouse click.

View File

@ -1651,8 +1651,9 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
Entry *en;
Evas_Coord x, y, w, h;
// Eina_Bool multiline;
Evas_Textblock_Cursor *tc;
Evas_Textblock_Cursor *tc = NULL;
Eina_Bool dosel = EINA_FALSE;
Eina_Bool shift;
if (!rp) return;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
en = rp->entry_data;
@ -1673,6 +1674,7 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
}
#endif
shift = evas_key_modifier_is_set(ev->modifiers, "Shift");
en->select_mod_start = EINA_FALSE;
en->select_mod_end = EINA_FALSE;
if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_DEFAULT)
@ -1684,7 +1686,22 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
if (ev->button == 2) dosel = EINA_FALSE;
if (dosel)
{
evas_object_geometry_get(rp->object, &x, &y, &w, &h);
cx = ev->canvas.x - x;
cy = ev->canvas.y - y;
if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK)
{
if (shift)
{
tc = evas_object_textblock_cursor_new(rp->object);
evas_textblock_cursor_copy(en->cursor, tc);
if (evas_textblock_cursor_compare(en->cursor, en->sel_start) < 0)
evas_textblock_cursor_line_char_first(en->cursor);
else
evas_textblock_cursor_line_char_last(en->cursor);
_sel_extend(en->cursor, rp->object, en);
}
else
{
en->have_selection = EINA_FALSE;
en->selecting = EINA_FALSE;
@ -1695,10 +1712,25 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
_sel_start(en->cursor, rp->object, en);
evas_textblock_cursor_line_char_last(en->cursor);
_sel_extend(en->cursor, rp->object, en);
}
goto end;
}
else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
{
if (shift)
{
tc = evas_object_textblock_cursor_new(rp->object);
evas_textblock_cursor_copy(en->cursor, tc);
if (evas_textblock_cursor_compare(en->cursor, en->sel_start) < 0)
evas_textblock_cursor_word_start(en->cursor);
else
{
evas_textblock_cursor_word_end(en->cursor);
evas_textblock_cursor_char_next(en->cursor);
}
_sel_extend(en->cursor, rp->object, en);
}
else
{
en->have_selection = EINA_FALSE;
en->selecting = EINA_FALSE;
@ -1710,7 +1742,7 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
evas_textblock_cursor_word_end(en->cursor);
evas_textblock_cursor_char_next(en->cursor);
_sel_extend(en->cursor, rp->object, en);
}
goto end;
}
}
@ -1760,6 +1792,10 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
{
if ((en->have_selection) &&
(rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT))
{
if (shift)
_sel_extend(en->cursor, rp->object, en);
else
{
Eina_List *first, *last;
FLOAT_T sc;
@ -1803,6 +1839,11 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
}
}
}
}
else
{
if ((en->have_selection) && (shift))
_sel_extend(en->cursor, rp->object, en);
else
{
en->selecting = EINA_TRUE;
@ -1813,6 +1854,7 @@ _edje_part_mouse_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUS
}
}
}
}
end:
if (evas_textblock_cursor_compare(tc, en->cursor))
{