discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=30ef7b217a9d6b4b4cfe1835d2a833b597e7351a
commit 30ef7b217a9d6b4b4cfe1835d2a833b597e7351a Author: Mike Blumenkrantz <zm...@samsung.com> Date: Wed Jan 15 16:38:04 2014 -0500 add e_deskmirror_mirror_copy --- src/bin/e_comp_object.c | 1 + src/bin/e_deskmirror.c | 69 ++++++++++++++++++++++++++++++++++++++++++++----- src/bin/e_deskmirror.h | 1 + 3 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index 99942e6..02c9fae 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -3141,6 +3141,7 @@ e_comp_object_util_mirror_add(Evas_Object *obj) evas_object_image_smooth_scale_set(o, e_comp_config_get()->smooth_windows); cw->obj_mirror = eina_list_append(cw->obj_mirror, o); evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _e_comp_object_cb_mirror_del, cw); + evas_object_data_set(o, "E_Client", cw->ec); evas_object_image_alpha_set(o, evas_object_image_alpha_get(cw->obj)); evas_object_image_size_set(o, w, h); diff --git a/src/bin/e_deskmirror.c b/src/bin/e_deskmirror.c index 4665656..a9d2290 100644 --- a/src/bin/e_deskmirror.c +++ b/src/bin/e_deskmirror.c @@ -269,10 +269,9 @@ _mirror_client_smart_add(Evas_Object *obj) static void _mirror_client_signal_cb(void *data, Evas_Object *obj EINA_UNUSED, const char *emission, const char *src) { - Mirror_Border *mb = data; - edje_object_signal_emit(mb->frame, emission, src); - edje_object_message_signal_process(mb->frame); - edje_object_calc_force(mb->frame); + edje_object_signal_emit(data, emission, src); + edje_object_message_signal_process(data); + edje_object_calc_force(data); } static void @@ -280,7 +279,7 @@ _mirror_client_smart_del(Evas_Object *obj) { Mirror_Border *mb = evas_object_smart_data_get(obj); if (mb->m->comp_object && mb->m->ec) - e_comp_object_signal_callback_del_full(mb->m->ec->frame, "*", "*", _mirror_client_signal_cb, mb); + e_comp_object_signal_callback_del_full(mb->m->ec->frame, "*", "*", _mirror_client_signal_cb, mb->frame); evas_object_del(mb->frame); evas_object_del(mb->mirror); free(mb); @@ -445,7 +444,7 @@ _mirror_client_new(Mirror *m) edje_object_signal_emit(mb->frame, "e,state,shadow,off", "e"); if (m->comp_object) { - e_comp_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, mb); + e_comp_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, mb->frame); evas_object_event_callback_add(m->comp_object, EVAS_CALLBACK_DEL, _e_deskmirror_mirror_del_cb, m); } if (mb->m->ec->focused) @@ -735,6 +734,64 @@ e_deskmirror_mirror_list(Evas_Object *deskmirror) return l; } +EAPI Evas_Object * +e_deskmirror_mirror_copy(Evas_Object *obj) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL); + + if (!e_util_strcmp(evas_object_type_get(obj), "mirror_border")) + { + Evas_Object *o, *oo; + Edje_Message_Float msg; + char buf[1024]; + Mirror_Border *mb; + + mb = evas_object_smart_data_get(obj); + o = edje_object_add(evas_object_evas_get(obj)); + snprintf(buf, sizeof(buf), "e/deskmirror/frame/%s", mb->m->ec->border.name); + e_theme_edje_object_set(o, "base/theme/borders", buf); + if (e_util_client_shadow_state_get(mb->m->ec)) + edje_object_signal_emit(o, "e,state,shadow,on", "e"); + else + edje_object_signal_emit(o, "e,state,shadow,off", "e"); + if (mb->m->comp_object) + e_comp_object_signal_callback_add(mb->m->comp_object, "*", "*", _mirror_client_signal_cb, o); + if (mb->m->ec->focused) + edje_object_signal_emit(o, "e,state,focused", "e"); + if (mb->m->ec->shaded) + edje_object_signal_emit(o, "e,state,shaded", "e"); + if (mb->m->ec->maximized) + edje_object_signal_emit(o, "e,action,maximize", "e"); + if (mb->m->ec->sticky) + edje_object_signal_emit(o, "e,state,sticky", "e"); + if (mb->m->ec->iconic) + edje_object_signal_emit(o, "e,action,iconify", "e"); + msg.val = mb->m->sd->h / mb->m->sd->desk->zone->h; + edje_object_message_send(o, EDJE_MESSAGE_FLOAT, 0, &msg); + + oo = e_comp_object_util_mirror_add(mb->m->comp_object); + edje_object_part_swallow(o, "e.swallow.client", oo); + edje_object_part_text_set(o, "e.text.title", e_client_name_get(mb->m->ec)); + e_comp_object_util_del_list_append(o, oo); + return o; + } + else if (!e_util_strcmp(evas_object_type_get(obj), "image")) + { + if (!e_util_strcmp(evas_object_name_get(obj), "m->mirror")) + { + E_Client *ec; + + ec = evas_object_data_get(obj, "E_Client"); + if (!ec) return NULL; + return e_comp_object_util_mirror_add(ec->frame); + } + else + return e_comp_object_util_mirror_add(obj); + } + CRI("NOT A DESKMIRROR CLIENT"); + return NULL; +} + EAPI void e_deskmirror_coord_canvas_to_virtual(Evas_Object *obj, Evas_Coord cx, Evas_Coord cy, Evas_Coord *vx, Evas_Coord *vy) { diff --git a/src/bin/e_deskmirror.h b/src/bin/e_deskmirror.h index 0617494..a3db64d 100644 --- a/src/bin/e_deskmirror.h +++ b/src/bin/e_deskmirror.h @@ -4,6 +4,7 @@ EAPI Evas_Object *e_deskmirror_add(E_Desk *desk, Eina_Bool pager, Eina_Bool taskbar); EAPI Evas_Object *e_deskmirror_mirror_find(Evas_Object *deskmirror, Evas_Object *comp_object); EAPI Eina_List *e_deskmirror_mirror_list(Evas_Object *deskmirror); +EAPI Evas_Object *e_deskmirror_mirror_copy(Evas_Object *obj); EAPI void e_deskmirror_coord_canvas_to_virtual(Evas_Object *obj, Evas_Coord cx, Evas_Coord cy, Evas_Coord *vx, Evas_Coord *vy); EAPI void e_deskmirror_coord_virtual_to_canvas(Evas_Object *obj, Evas_Coord vx, Evas_Coord vy, Evas_Coord *cx, Evas_Coord *cy); EAPI E_Desk *e_deskmirror_desk_get(Evas_Object *obj); --