more work on inlined edje objects - allow multiple chid's to be active
to feed back multiple signals/events from differentinline objects.
This commit is contained in:
parent
07f4b23b16
commit
377511d7f8
121
src/bin/termio.c
121
src/bin/termio.c
|
@ -76,7 +76,7 @@ struct _Termio
|
||||||
Config *config;
|
Config *config;
|
||||||
Ecore_IMF_Context *imf;
|
Ecore_IMF_Context *imf;
|
||||||
const char *sel_str;
|
const char *sel_str;
|
||||||
const char *cur_chid;
|
Eina_List *cur_chids;
|
||||||
Ecore_Job *sel_reset_job;
|
Ecore_Job *sel_reset_job;
|
||||||
double set_sel_at;
|
double set_sel_at;
|
||||||
Elm_Sel_Type sel_type;
|
Elm_Sel_Type sel_type;
|
||||||
|
@ -623,16 +623,22 @@ _smart_media_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *info __
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_block_edje_signal_cb(void *data, Evas_Object *obj, const char *sig, const char *src)
|
_block_edje_signal_cb(void *data, Evas_Object *obj __UNUSED__, const char *sig, const char *src)
|
||||||
{
|
{
|
||||||
Termblock *blk = data;
|
Termblock *blk = data;
|
||||||
Termio *sd = evas_object_smart_data_get(blk->pty->obj);
|
Termio *sd = evas_object_smart_data_get(blk->pty->obj);
|
||||||
char *buf = NULL;
|
char *buf = NULL, *chid = NULL;
|
||||||
int buflen = 0;
|
int buflen = 0;
|
||||||
|
Eina_List *l;
|
||||||
|
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
if ((!blk->chid) || (!sd->cur_chid)) return;
|
if ((!blk->chid) || (!sd->cur_chids)) return;
|
||||||
if (!(!strcmp(blk->chid, sd->cur_chid))) return;
|
EINA_LIST_FOREACH(sd->cur_chids, l, chid)
|
||||||
|
{
|
||||||
|
if (!(!strcmp(blk->chid, chid))) break;
|
||||||
|
chid = NULL;
|
||||||
|
}
|
||||||
|
if (!chid) return;
|
||||||
if ((!strcmp(sig, "drag")) ||
|
if ((!strcmp(sig, "drag")) ||
|
||||||
(!strcmp(sig, "drag,start")) ||
|
(!strcmp(sig, "drag,start")) ||
|
||||||
(!strcmp(sig, "drag,stop")) ||
|
(!strcmp(sig, "drag,stop")) ||
|
||||||
|
@ -645,28 +651,36 @@ _block_edje_signal_cb(void *data, Evas_Object *obj, const char *sig, const char
|
||||||
edje_object_part_drag_value_get(blk->obj, src, &f1, &f2);
|
edje_object_part_drag_value_get(blk->obj, src, &f1, &f2);
|
||||||
v1 = (int)(f1 * 1000.0);
|
v1 = (int)(f1 * 1000.0);
|
||||||
v2 = (int)(f2 * 1000.0);
|
v2 = (int)(f2 * 1000.0);
|
||||||
buf = alloca(strlen(src) + 256);
|
buf = alloca(strlen(src) + strlen(blk->chid) + 256);
|
||||||
buflen = sprintf(buf, "%c}%s;%s\n%i\n%i", 0x1b, sig, src, v1, v2);
|
buflen = sprintf(buf, "%c}%s;%s\n%s\n%i\n%i", 0x1b,
|
||||||
|
sig, blk->chid, src, v1, v2);
|
||||||
termpty_write(sd->pty, buf, buflen + 1);
|
termpty_write(sd->pty, buf, buflen + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buf = alloca(strlen(sig) + strlen(src) + 128);
|
buf = alloca(strlen(sig) + strlen(src) + strlen(blk->chid) + 128);
|
||||||
buflen = sprintf(buf, "%c}signal;%s\n%s", 0x1b, sig, src);
|
buflen = sprintf(buf, "%c}signal;%s\n%s\n%s", 0x1b,
|
||||||
|
blk->chid, sig, src);
|
||||||
termpty_write(sd->pty, buf, buflen + 1);
|
termpty_write(sd->pty, buf, buflen + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_block_edje_message_cb(void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg)
|
_block_edje_message_cb(void *data, Evas_Object *obj __UNUSED__, Edje_Message_Type type, int id, void *msg)
|
||||||
{
|
{
|
||||||
Termblock *blk = data;
|
Termblock *blk = data;
|
||||||
Termio *sd = evas_object_smart_data_get(blk->pty->obj);
|
Termio *sd = evas_object_smart_data_get(blk->pty->obj);
|
||||||
|
char *chid = NULL;
|
||||||
|
Eina_List *l;
|
||||||
|
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
if ((!blk->chid) || (!sd->cur_chid)) return;
|
if ((!blk->chid) || (!sd->cur_chids)) return;
|
||||||
if (!(!strcmp(blk->chid, sd->cur_chid))) return;
|
EINA_LIST_FOREACH(sd->cur_chids, l, chid)
|
||||||
|
{
|
||||||
|
if (!(!strcmp(blk->chid, chid))) break;
|
||||||
|
chid = NULL;
|
||||||
|
}
|
||||||
|
if (!chid) return;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
// XXX: handle
|
// XXX: handle
|
||||||
|
@ -3245,6 +3259,7 @@ _smart_del(Evas_Object *obj)
|
||||||
{
|
{
|
||||||
Evas_Object *o;
|
Evas_Object *o;
|
||||||
Termio *sd = evas_object_smart_data_get(obj);
|
Termio *sd = evas_object_smart_data_get(obj);
|
||||||
|
char *chid;
|
||||||
|
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
terms = eina_list_remove(terms, obj);
|
terms = eina_list_remove(terms, obj);
|
||||||
|
@ -3286,8 +3301,7 @@ _smart_del(Evas_Object *obj)
|
||||||
_compose_seq_reset(sd);
|
_compose_seq_reset(sd);
|
||||||
if (sd->sel_str) eina_stringshare_del(sd->sel_str);
|
if (sd->sel_str) eina_stringshare_del(sd->sel_str);
|
||||||
if (sd->sel_reset_job) ecore_job_del(sd->sel_reset_job);
|
if (sd->sel_reset_job) ecore_job_del(sd->sel_reset_job);
|
||||||
if (sd->cur_chid) eina_stringshare_del(sd->cur_chid);
|
EINA_LIST_FREE(sd->cur_chids, chid) eina_stringshare_del(chid);
|
||||||
sd->cur_chid = NULL;
|
|
||||||
sd->sel_str = NULL;
|
sd->sel_str = NULL;
|
||||||
sd->sel_reset_job = NULL;
|
sd->sel_reset_job = NULL;
|
||||||
sd->link.down.dndobj = NULL;
|
sd->link.down.dndobj = NULL;
|
||||||
|
@ -3606,6 +3620,51 @@ _smart_pty_command(void *data)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (sd->pty->cur_cmd[1] == 'C')
|
||||||
|
{
|
||||||
|
Termblock *blk = NULL;
|
||||||
|
const char *p, *p0, *p1;
|
||||||
|
char *pp;
|
||||||
|
Eina_List *strs = NULL;
|
||||||
|
|
||||||
|
p = &(sd->pty->cur_cmd[2]);
|
||||||
|
// parse from p until end of string - one newline
|
||||||
|
// per list item in strs
|
||||||
|
p0 = p1 = p;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
// end of str param
|
||||||
|
if ((*p1 == '\n') || (*p1 == '\r') || (!*p1))
|
||||||
|
{
|
||||||
|
// if string is non-empty...
|
||||||
|
if ((p1 - p0) >= 1)
|
||||||
|
{
|
||||||
|
// allocate, fill and add to list
|
||||||
|
pp = malloc(p1 - p0 + 1);
|
||||||
|
if (pp)
|
||||||
|
{
|
||||||
|
strncpy(pp, p0, p1 - p0);
|
||||||
|
pp[p1 - p0] = 0;
|
||||||
|
strs = eina_list_append(strs, pp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// end of string buffer
|
||||||
|
if (!*p1) break;
|
||||||
|
p1++; // skip \n or \r
|
||||||
|
p0 = p1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
p1++;
|
||||||
|
}
|
||||||
|
if (strs)
|
||||||
|
{
|
||||||
|
char *chid = strs->data;
|
||||||
|
blk = termpty_block_chid_get(sd->pty, chid);
|
||||||
|
if (blk)
|
||||||
|
_block_edje_cmds(sd->pty, blk, strs->next, EINA_FALSE);
|
||||||
|
}
|
||||||
|
EINA_LIST_FREE(strs, pp) free(pp);
|
||||||
|
}
|
||||||
else if (sd->pty->cur_cmd[1] == 'b')
|
else if (sd->pty->cur_cmd[1] == 'b')
|
||||||
{
|
{
|
||||||
sd->pty->block.on = EINA_TRUE;
|
sd->pty->block.on = EINA_TRUE;
|
||||||
|
@ -3628,18 +3687,36 @@ _smart_pty_command(void *data)
|
||||||
}
|
}
|
||||||
else if (sd->pty->cur_cmd[1] == 'j')
|
else if (sd->pty->cur_cmd[1] == 'j')
|
||||||
{
|
{
|
||||||
|
const char *chid = &(sd->pty->cur_cmd[3]);
|
||||||
|
|
||||||
if (sd->pty->cur_cmd[2])
|
if (sd->pty->cur_cmd[2])
|
||||||
{
|
{
|
||||||
if (sd->cur_chid) eina_stringshare_del(sd->cur_chid);
|
if (sd->pty->cur_cmd[2] == '+')
|
||||||
sd->cur_chid = eina_stringshare_add(&(sd->pty->cur_cmd[2]));
|
{
|
||||||
|
sd->cur_chids = eina_list_append
|
||||||
|
(sd->cur_chids, eina_stringshare_add(chid));
|
||||||
|
}
|
||||||
|
else if (sd->pty->cur_cmd[2] == '-')
|
||||||
|
{
|
||||||
|
Eina_List *l;
|
||||||
|
char *chid2;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH(sd->cur_chids, l, chid2)
|
||||||
|
{
|
||||||
|
if (!(!strcmp(chid, chid2)))
|
||||||
|
{
|
||||||
|
sd->cur_chids =
|
||||||
|
eina_list_remove_list(sd->cur_chids, l);
|
||||||
|
eina_stringshare_del(chid2);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sd->cur_chid)
|
EINA_LIST_FREE(sd->cur_chids, chid)
|
||||||
{
|
eina_stringshare_del(chid);
|
||||||
eina_stringshare_del(sd->cur_chid);
|
|
||||||
sd->cur_chid = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue