parent
7397aced7e
commit
bc4014a2ba
|
@ -53,9 +53,11 @@ struct _Termio
|
||||||
int suspend;
|
int suspend;
|
||||||
Eina_List *objs;
|
Eina_List *objs;
|
||||||
struct {
|
struct {
|
||||||
|
Evas_Object *dndobj;
|
||||||
Evas_Coord x, y;
|
Evas_Coord x, y;
|
||||||
Eina_Bool down : 1;
|
Eina_Bool down : 1;
|
||||||
Eina_Bool dnd : 1;
|
Eina_Bool dnd : 1;
|
||||||
|
Eina_Bool dndobjdel : 1;
|
||||||
} down;
|
} down;
|
||||||
} link;
|
} link;
|
||||||
int zoom_fontsize_start;
|
int zoom_fontsize_start;
|
||||||
|
@ -308,13 +310,43 @@ _cb_link_up(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *e
|
||||||
|
|
||||||
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
||||||
static void
|
static void
|
||||||
_cb_link_drag_done(void *data, Evas_Object *obj)
|
_cb_link_drag_move(void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y, Elm_Xdnd_Action action)
|
||||||
|
{
|
||||||
|
const Evas_Modifier *em = NULL;
|
||||||
|
Termio *sd = evas_object_smart_data_get(data);
|
||||||
|
if (!sd) return;
|
||||||
|
|
||||||
|
printf("dnd %i %i act %i\n", x, y, action);
|
||||||
|
em = evas_key_modifier_get(evas_object_evas_get(sd->event));
|
||||||
|
if (em)
|
||||||
|
{
|
||||||
|
if (evas_key_modifier_is_set(em, "Control"))
|
||||||
|
elm_drag_action_set(obj, ELM_XDND_ACTION_COPY);
|
||||||
|
else
|
||||||
|
elm_drag_action_set(obj, ELM_XDND_ACTION_MOVE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_link_drag_accept(void *data, Evas_Object *obj __UNUSED__, Eina_Bool doaccept)
|
||||||
|
{
|
||||||
|
Termio *sd = evas_object_smart_data_get(data);
|
||||||
|
if (!sd) return;
|
||||||
|
|
||||||
|
printf("dnd accept: %i\n", doaccept);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_link_drag_done(void *data, Evas_Object *obj __UNUSED__)
|
||||||
{
|
{
|
||||||
Termio *sd = evas_object_smart_data_get(data);
|
Termio *sd = evas_object_smart_data_get(data);
|
||||||
if (!sd) return;
|
if (!sd) return;
|
||||||
|
|
||||||
printf("dnd done\n");
|
printf("dnd done\n");
|
||||||
sd->link.down.dnd = EINA_FALSE;
|
sd->link.down.dnd = EINA_FALSE;
|
||||||
|
if ((sd->link.down.dndobjdel) && (sd->link.down.dndobj))
|
||||||
|
evas_object_del(sd->link.down.dndobj);
|
||||||
|
sd->link.down.dndobj = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Evas_Object *
|
static Evas_Object *
|
||||||
|
@ -350,11 +382,25 @@ _cb_link_move(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event)
|
||||||
sd->link.down.down = EINA_FALSE;
|
sd->link.down.down = EINA_FALSE;
|
||||||
sd->link.down.dnd = EINA_TRUE;
|
sd->link.down.dnd = EINA_TRUE;
|
||||||
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
||||||
printf("dnd start %s\n", sd->link.string);
|
printf("dnd start %s %i %i\n", sd->link.string,
|
||||||
elm_drag_start(obj, ELM_SEL_FORMAT_IMAGE,
|
evas_key_modifier_is_set(ev->modifiers, "Control"),
|
||||||
sd->link.string,
|
evas_key_modifier_is_set(ev->modifiers, "Shift"));
|
||||||
|
if (evas_key_modifier_is_set(ev->modifiers, "Control"))
|
||||||
|
elm_drag_start(obj, ELM_SEL_FORMAT_IMAGE, sd->link.string,
|
||||||
|
ELM_XDND_ACTION_COPY,
|
||||||
_cb_link_icon_new, data,
|
_cb_link_icon_new, data,
|
||||||
|
_cb_link_drag_move, data,
|
||||||
|
_cb_link_drag_accept, data,
|
||||||
_cb_link_drag_done, data);
|
_cb_link_drag_done, data);
|
||||||
|
else
|
||||||
|
elm_drag_start(obj, ELM_SEL_FORMAT_IMAGE, sd->link.string,
|
||||||
|
ELM_XDND_ACTION_MOVE,
|
||||||
|
_cb_link_icon_new, data,
|
||||||
|
_cb_link_drag_move, data,
|
||||||
|
_cb_link_drag_accept, data,
|
||||||
|
_cb_link_drag_done, data);
|
||||||
|
sd->link.down.dndobj = obj;
|
||||||
|
sd->link.down.dndobjdel = EINA_FALSE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -379,7 +425,16 @@ _update_link(Evas_Object *obj, Eina_Bool same_link, Eina_Bool same_geom)
|
||||||
int y;
|
int y;
|
||||||
|
|
||||||
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
|
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
|
||||||
EINA_LIST_FREE(sd->link.objs, o) evas_object_del(o);
|
EINA_LIST_FREE(sd->link.objs, o)
|
||||||
|
{
|
||||||
|
if (sd->link.down.dndobj == o)
|
||||||
|
{
|
||||||
|
sd->link.down.dndobjdel = EINA_TRUE;
|
||||||
|
evas_object_hide(o);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
evas_object_del(o);
|
||||||
|
}
|
||||||
if ((sd->link.string) && (sd->link.suspend == 0))
|
if ((sd->link.string) && (sd->link.suspend == 0))
|
||||||
{
|
{
|
||||||
for (y = sd->link.y1; y <= sd->link.y2; y++)
|
for (y = sd->link.y1; y <= sd->link.y2; y++)
|
||||||
|
@ -2641,8 +2696,14 @@ _smart_del(Evas_Object *obj)
|
||||||
if (sd->win)
|
if (sd->win)
|
||||||
evas_object_event_callback_del_full(sd->win, EVAS_CALLBACK_DEL,
|
evas_object_event_callback_del_full(sd->win, EVAS_CALLBACK_DEL,
|
||||||
_win_obj_del, obj);
|
_win_obj_del, obj);
|
||||||
EINA_LIST_FREE(sd->link.objs, o) evas_object_del(o);
|
EINA_LIST_FREE(sd->link.objs, o)
|
||||||
|
{
|
||||||
|
if (o == sd->link.down.dndobj) sd->link.down.dndobj = NULL;
|
||||||
|
evas_object_del(o);
|
||||||
|
}
|
||||||
|
if (sd->link.down.dndobj) evas_object_del(sd->link.down.dndobj);
|
||||||
_compose_seq_reset(sd);
|
_compose_seq_reset(sd);
|
||||||
|
sd->link.down.dndobj = NULL;
|
||||||
sd->cur.obj = NULL;
|
sd->cur.obj = NULL;
|
||||||
sd->event = NULL;
|
sd->event = NULL;
|
||||||
sd->cur.selo_top = NULL;
|
sd->cur.selo_top = NULL;
|
||||||
|
@ -2900,30 +2961,32 @@ _smart_pty_command(void *data)
|
||||||
|
|
||||||
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
#if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
|
||||||
static void
|
static void
|
||||||
_smart_cb_drag_enter(void *data, Evas_Object *o)
|
_smart_cb_drag_enter(void *data __UNUSED__, Evas_Object *o __UNUSED__)
|
||||||
{
|
{
|
||||||
printf("dnd enter\n");
|
printf("dnd enter\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_smart_cb_drag_leave(void *data, Evas_Object *o)
|
_smart_cb_drag_leave(void *data __UNUSED__, Evas_Object *o __UNUSED__)
|
||||||
{
|
{
|
||||||
printf("dnd leave\n");
|
printf("dnd leave\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_smart_cb_drag_pos(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y)
|
_smart_cb_drag_pos(void *data __UNUSED__, Evas_Object *o __UNUSED__, Evas_Coord x, Evas_Coord y, Elm_Xdnd_Action action)
|
||||||
{
|
{
|
||||||
printf("dnd at %i %i\n", x, y);
|
printf("dnd at %i %i act:%i\n", x, y, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_smart_cb_drop(void *data, Evas_Object *o, Elm_Selection_Data *ev)
|
_smart_cb_drop(void *data, Evas_Object *o __UNUSED__, Elm_Selection_Data *ev)
|
||||||
{
|
{
|
||||||
Evas_Object *obj = data;
|
Evas_Object *obj = data;
|
||||||
Termio *sd = evas_object_smart_data_get(obj);
|
Termio *sd = evas_object_smart_data_get(obj);
|
||||||
if (!sd) return EINA_TRUE;
|
if (!sd) return EINA_TRUE;
|
||||||
printf("drop: '%s'\n", ev->data);
|
if (ev->action == ELM_XDND_ACTION_COPY)
|
||||||
|
evas_object_smart_callback_call(obj, "popup", ev->data);
|
||||||
|
else
|
||||||
termpty_write(sd->pty, ev->data, strlen(ev->data));
|
termpty_write(sd->pty, ev->data, strlen(ev->data));
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue