streamline compose code - less cnp

SVN revision: 75397
This commit is contained in:
Carsten Haitzler 2012-08-18 01:30:05 +00:00
parent 0576da08a1
commit da816d1bd6
1 changed files with 23 additions and 29 deletions

View File

@ -820,13 +820,22 @@ _is_modifier(const char *key)
return EINA_FALSE;
}
static void
_compose_seq_reset(Termio *sd)
{
char *str;
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
}
void
_smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event)
{
Evas_Event_Key_Down *ev = event;
Termio *sd;
Ecore_Compose_State state;
char *compres = NULL, *str;
char *compres = NULL;
sd = evas_object_smart_data_get(data);
if (!sd) return;
@ -852,6 +861,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
(!evas_key_modifier_is_set(ev->modifiers, "Control")) &&
(!strcmp(ev->keyname, "Home")))
{
_compose_seq_reset(sd);
evas_object_smart_callback_call(data, "cmdbox", NULL);
goto end;
}
@ -864,8 +874,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
if (by < 1) by = 1;
if (!strcmp(ev->keyname, "Prior"))
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
sd->scroll += by;
if (sd->scroll > sd->pty->backscroll_num)
sd->scroll = sd->pty->backscroll_num;
@ -874,8 +883,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
}
else if (!strcmp(ev->keyname, "Next"))
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
sd->scroll -= by;
if (sd->scroll < 0) sd->scroll = 0;
_smart_update_queue(data, sd);
@ -883,8 +891,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
}
else if (!strcmp(ev->keyname, "Insert"))
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
if (evas_key_modifier_is_set(ev->modifiers, "Control"))
_paste_selection(data, ELM_SEL_TYPE_PRIMARY);
else
@ -895,8 +902,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
{
Config *config = termio_config_get(data);
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
if (config) _font_size_set(data, config->font.size + 1);
goto end;
}
@ -904,8 +910,7 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
{
Config *config = termio_config_get(data);
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
if (config) _font_size_set(data, config->font.size - 1);
goto end;
}
@ -913,15 +918,13 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
{
Config *config = termio_config_get(data);
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
if (config) _font_size_set(data, 10);
goto end;
}
else if (!strcmp(ev->keyname, "KP_Divide"))
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
_take_selection(data, ELM_SEL_TYPE_CLIPBOARD);
goto end;
}
@ -943,15 +946,12 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
(ev->timestamp == sd->last_keyup)) return;
if (!sd->composing)
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
_compose_seq_reset(sd);
sd->seq = eina_list_append(sd->seq, eina_stringshare_add(ev->key));
state = ecore_compose_get(sd->seq, &compres);
if (state == ECORE_COMPOSE_MIDDLE) sd->composing = EINA_TRUE;
else sd->composing = EINA_FALSE;
if (!sd->composing)
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
}
if (!sd->composing) _compose_seq_reset(sd);
else goto end;
}
else
@ -959,15 +959,10 @@ _smart_cb_key_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
if (_is_modifier(ev->key)) goto end;
sd->seq = eina_list_append(sd->seq, eina_stringshare_add(ev->key));
state = ecore_compose_get(sd->seq, &compres);
if (state == ECORE_COMPOSE_NONE)
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
}
if (state == ECORE_COMPOSE_NONE) _compose_seq_reset(sd);
else if (state == ECORE_COMPOSE_DONE)
{
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
sd->composing = EINA_FALSE;
_compose_seq_reset(sd);
if (compres)
{
termpty_write(sd->pty, compres, strlen(compres));
@ -1988,7 +1983,6 @@ imf_done:
static void
_smart_del(Evas_Object *obj)
{
char *str;
Evas_Object *o;
Termio *sd = evas_object_smart_data_get(obj);
@ -2012,7 +2006,7 @@ _smart_del(Evas_Object *obj)
if (sd->pty) termpty_free(sd->pty);
if (sd->link.string) free(sd->link.string);
EINA_LIST_FREE(sd->link.objs, o) evas_object_del(o);
EINA_LIST_FREE(sd->seq, str) eina_stringshare_del(str);
_compose_seq_reset(sd);
sd->cur.obj = NULL;
sd->event = NULL;
sd->cur.selo_top = NULL;