From: Junkyeong Kim Date: Thu, 25 Jul 2024 06:10:10 +0000 (+0900) Subject: Apply e_view X-Git-Tag: accepted/tizen/unified/20240727.112756~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F46%2F315146%2F1;p=platform%2Fupstream%2Fenlightenment.git Apply e_view Change-Id: Idd1e8014c98c557ac4a707f03307fd6d5f080308 --- diff --git a/src/bin/compmgr/e_alpha_mask_rect.c b/src/bin/compmgr/e_alpha_mask_rect.c index 67c709d..6f9fdfc 100644 --- a/src/bin/compmgr/e_alpha_mask_rect.c +++ b/src/bin/compmgr/e_alpha_mask_rect.c @@ -6,16 +6,23 @@ #include "e_comp_wl_subsurface_intern.h" #include "e_comp_object_intern.h" #include "e_map_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" +#include "e_view_rect.h" struct _E_Alpha_Mask_Rect { - Evas_Object *eo; + E_View_Rect *view; E_Map *map; E_Client *ec; E_Comp_Wl_Hook *subsurface_create_hook; struct wl_listener destroy; struct wl_listener transform_change; + struct wl_listener show; + struct wl_listener hide; + struct wl_listener reposition; + struct wl_listener resize; }; static void _e_alpha_mask_rect_destroy(E_Alpha_Mask_Rect *rect); @@ -36,7 +43,7 @@ _e_alpha_mask_rect_map_apply(E_Alpha_Mask_Rect *rect) e_map_util_points_populate_from_object_full(rect->map, rect->ec->frame, 0); - evas_object_geometry_get(rect->eo, NULL, NULL, &w, &h); + e_view_rect_size_get(rect->view, &w, &h); e_map_point_image_uv_set(rect->map, 0, 0, 0); e_map_point_image_uv_set(rect->map, 1, w, 0); e_map_point_image_uv_set(rect->map, 2, w, h); @@ -61,48 +68,48 @@ _e_alpha_mask_rect_map_apply(E_Alpha_Mask_Rect *rect) e_map_point_image_uv_set(new_map, 2, w, h); e_map_point_image_uv_set(new_map, 3, 0, h); - e_comp_object_map_set(rect->eo, new_map); - e_comp_object_map_enable_set(rect->eo, EINA_TRUE); + e_view_map_set(e_view_rect_view_get(rect->view), new_map); + e_view_map_enable_set(e_view_rect_view_get(rect->view), true); e_map_free(new_map); } else { - e_comp_object_map_set(rect->eo, rect->map); - e_comp_object_map_enable_set(rect->eo, EINA_TRUE); + e_view_map_set(e_view_rect_view_get(rect->view), rect->map); + e_view_map_enable_set(e_view_rect_view_get(rect->view), true); } if (map) e_map_free(map); } static void -_e_alpha_mask_rect_cb_frame_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event EINA_UNUSED) +_e_alpha_mask_rect_cb_view_client_show(struct wl_listener *listener, void *data) { - E_Alpha_Mask_Rect *rect = data; + E_Alpha_Mask_Rect *rect = wl_container_of(listener, rect, show); - evas_object_show(rect->eo); + e_view_show(e_view_rect_view_get(rect->view)); } static void -_e_alpha_mask_rect_cb_frame_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event EINA_UNUSED) +_e_alpha_mask_rect_cb_view_client_hide(struct wl_listener *listener, void *data) { - E_Alpha_Mask_Rect *rect = data; + E_Alpha_Mask_Rect *rect = wl_container_of(listener, rect, hide); - evas_object_hide(rect->eo); + e_view_hide(e_view_rect_view_get(rect->view)); } static void -_e_alpha_mask_rect_cb_frame_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event EINA_UNUSED) +_e_alpha_mask_rect_cb_view_client_reposition(struct wl_listener *listener, void *data) { - E_Alpha_Mask_Rect *rect = data; + E_Alpha_Mask_Rect *rect = wl_container_of(listener, rect, reposition); - evas_object_move(rect->eo, rect->ec->x, rect->ec->y); + e_view_position_set(e_view_rect_view_get(rect->view), rect->ec->x, rect->ec->y); _e_alpha_mask_rect_map_apply(rect); } static void -_e_alpha_mask_rect_cb_frame_resize(void *data, Evas *evas EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event EINA_UNUSED) +_e_alpha_mask_rect_cb_view_client_resize(struct wl_listener *listener, void *data) { - E_Alpha_Mask_Rect *rect = data; + E_Alpha_Mask_Rect *rect = wl_container_of(listener, rect, resize); _e_alpha_mask_rect_map_apply(rect); } @@ -154,14 +161,14 @@ _e_alpha_mask_rect_destroy(E_Alpha_Mask_Rect *rect) e_comp_wl_hook_del(rect->subsurface_create_hook); evas_object_smart_callback_del(rect->ec->frame, "client_resize", _e_alpha_mask_rect_cb_client_resize); - evas_object_event_callback_del(rect->ec->frame, EVAS_CALLBACK_SHOW, _e_alpha_mask_rect_cb_frame_show); - evas_object_event_callback_del(rect->ec->frame, EVAS_CALLBACK_HIDE, _e_alpha_mask_rect_cb_frame_hide); - evas_object_event_callback_del(rect->ec->frame, EVAS_CALLBACK_MOVE, _e_alpha_mask_rect_cb_frame_move); - evas_object_event_callback_del(rect->ec->frame, EVAS_CALLBACK_RESIZE, _e_alpha_mask_rect_cb_frame_resize); - evas_object_del(rect->eo); - e_map_free(rect->map); + wl_list_remove(&rect->show.link); + wl_list_remove(&rect->hide.link); + wl_list_remove(&rect->reposition.link); + wl_list_remove(&rect->resize.link); wl_list_remove(&rect->transform_change.link); wl_list_remove(&rect->destroy.link); + e_view_destroy(e_view_rect_view_get(rect->view)); + e_map_free(rect->map); free(rect); } @@ -169,14 +176,19 @@ EINTERN E_Alpha_Mask_Rect * e_alpha_mask_rect_create(E_Client *ec) { E_Alpha_Mask_Rect *rect; - short layer; + E_View_Client *view_client; + E_View_Tree *parent; + E_View *view; + const int color[4] = {0, 0, 0, 0}; rect = E_NEW(E_Alpha_Mask_Rect, 1); if (!rect) return NULL; - rect->eo = evas_object_rectangle_add(e_comp->evas); - if (!rect->eo) + view_client = e_client_view_get(ec); + parent = e_view_parent_get(e_view_client_view_get(view_client)); + rect->view = e_view_rect_create(parent, 1, 1, color); + if (!rect->view) { free(rect); return NULL; @@ -186,26 +198,19 @@ e_alpha_mask_rect_create(E_Client *ec) if (!rect->map) { ERR("Failed to new e_map ec:%p", ec); - evas_object_del(rect->eo); + e_view_destroy(e_view_rect_view_get(rect->view)); free(rect); return NULL; } + view = e_view_rect_view_get(rect->view); + /* This object doesn't care about mouse event. And It's also * to avoid events of mouse on the E_Client. */ - evas_object_pass_events_set(rect->eo, EINA_TRUE); - - layer = evas_object_layer_get(ec->frame); - evas_object_layer_set(rect->eo, layer); - evas_object_render_op_set(rect->eo, EVAS_RENDER_COPY); - - /* It's more reasonable to use the transparent color instead of black because - * we can show the alpha value of the 24 depth topmost window. - */ - evas_object_color_set(rect->eo, 0x00, 0x00, 0x00, 0x00); - evas_object_move(rect->eo, ec->x, ec->y); - evas_object_resize(rect->eo, 1, 1); - evas_object_name_set(rect->eo, "below_bg_rectangle"); + e_view_pass_events_set(view, true); + e_view_render_op_set(view, E_VIEW_RENDER_COPY); + e_view_position_set(view, ec->x, ec->y); + e_view_name_set(view, "below_bg_rectangle"); rect->ec = ec; @@ -217,28 +222,35 @@ e_alpha_mask_rect_create(E_Client *ec) _e_alpha_mask_rect_map_apply(rect); - if (evas_object_visible_get(ec->frame)) - evas_object_show(rect->eo); + if (e_view_visible_get(e_view_client_view_get(e_client_view_get(ec)))) + e_view_show(e_view_rect_view_get(rect->view)); + + rect->show.notify = _e_alpha_mask_rect_cb_view_client_show; + e_view_show_listener_add(e_view_client_view_get(view_client), &rect->show); + rect->hide.notify = _e_alpha_mask_rect_cb_view_client_hide; + e_view_hide_listener_add(e_view_client_view_get(view_client), &rect->hide); + rect->reposition.notify = _e_alpha_mask_rect_cb_view_client_reposition; + e_view_reposition_listener_add(e_view_client_view_get(view_client), &rect->reposition); + rect->resize.notify = _e_alpha_mask_rect_cb_view_client_resize; + e_view_client_resize_listener_add(view_client, &rect->resize); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _e_alpha_mask_rect_cb_frame_show, rect); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, _e_alpha_mask_rect_cb_frame_hide, rect); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, _e_alpha_mask_rect_cb_frame_move, rect); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESIZE, _e_alpha_mask_rect_cb_frame_resize, rect); + // TODO : view evas_object_smart_callback_add(ec->frame, "client_resize", _e_alpha_mask_rect_cb_client_resize, rect); rect->subsurface_create_hook = e_comp_wl_hook_add(E_COMP_WL_HOOK_SUBSURFACE_CREATE, _e_alpha_mask_rect_cb_subsurface_create, rect); /* set alpha only if SW path */ - e_comp_object_alpha_set(ec->frame, EINA_TRUE); + e_view_client_alpha_set(view_client, true); /* force update for changing alpha value. if the native surface has been already * set before, changing alpha value can't be applied to egl image. */ + // TODO : view e_comp_object_native_surface_set(ec->frame, EINA_FALSE); e_pixmap_image_refresh(ec->pixmap); - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(view_client, 0, 0, ec->w, ec->h); + e_view_client_dirty(view_client); + e_view_client_render(view_client); e_comp_wl_subsurface_restack(ec); e_alpha_mask_rect_restack(rect); @@ -275,23 +287,31 @@ e_alpha_mask_rect_try_from_ec(E_Client *ec) EINTERN void e_alpha_mask_rect_restack(E_Alpha_Mask_Rect *rect) { - E_Client *bottom = rect->ec; + E_View_Client *view_client; + E_View_Tree *parent; + E_Client *tmp, *bottom; + view_client = e_client_view_get(rect->ec); + parent = e_view_parent_get(e_view_client_view_get(view_client)); + e_view_reparent(e_view_rect_view_get(rect->view), parent); + + bottom = rect->ec; while (bottom) { - short layer = evas_object_layer_get(bottom->frame); - - if (evas_object_layer_get(rect->eo) != layer) - evas_object_layer_set(rect->eo, layer); + tmp = eina_list_nth(bottom->comp_data->sub.below_list, 0); + if (!tmp) + break; - evas_object_stack_below(rect->eo, bottom->frame); - bottom = eina_list_nth(bottom->comp_data->sub.below_list, 0); + bottom = tmp; } + + view_client = e_client_view_get(bottom); + e_view_place_below(e_view_rect_view_get(rect->view), e_view_client_view_get(view_client)); } -EINTERN Evas_Object * -e_alpha_mask_rect_evas_object_get(E_Alpha_Mask_Rect *rect) +EINTERN E_View * +e_alpha_mask_rect_view_get(E_Alpha_Mask_Rect *rect) { EINA_SAFETY_ON_NULL_RETURN_VAL(rect, NULL); - return rect->eo; + return e_view_rect_view_get(rect->view); } diff --git a/src/bin/compmgr/e_alpha_mask_rect_intern.h b/src/bin/compmgr/e_alpha_mask_rect_intern.h index fd9c98b..e146e98 100644 --- a/src/bin/compmgr/e_alpha_mask_rect_intern.h +++ b/src/bin/compmgr/e_alpha_mask_rect_intern.h @@ -3,6 +3,7 @@ #include #include "e_client.h" +#include "e_view.h" struct _E_Alpha_Mask_Rect; typedef struct _E_Alpha_Mask_Rect E_Alpha_Mask_Rect; @@ -10,7 +11,7 @@ typedef struct _E_Alpha_Mask_Rect E_Alpha_Mask_Rect; E_Alpha_Mask_Rect *e_alpha_mask_rect_create(E_Client *ec); void e_alpha_mask_rect_destroy(E_Alpha_Mask_Rect *rect); E_Alpha_Mask_Rect *e_alpha_mask_rect_try_from_ec(E_Client *ec); -Evas_Object *e_alpha_mask_rect_evas_object_get(E_Alpha_Mask_Rect *rect); +E_View *e_alpha_mask_rect_view_get(E_Alpha_Mask_Rect *rect); void e_alpha_mask_rect_restack(E_Alpha_Mask_Rect *rect); #endif diff --git a/src/bin/compmgr/e_comp_canvas.c b/src/bin/compmgr/e_comp_canvas.c index 6b926df..38968cb 100644 --- a/src/bin/compmgr/e_comp_canvas.c +++ b/src/bin/compmgr/e_comp_canvas.c @@ -3,25 +3,18 @@ #include "e_comp_intern.h" #include "e_output_intern.h" #include "e_client_intern.h" +#include "e_view_edje_intern.h" #include "e_zone_intern.h" #include "e_theme_intern.h" #include "e_config_intern.h" #include "e_tizen_screen_manager_intern.h" #include "e_display_intern.h" -#include "e_utils_intern.h" +#include "e_view_intern.h" static Eina_List *handlers; static Eina_Bool _ev_freeze = EINA_FALSE; static void -_e_comp_canvas_cb_del() -{ - E_FREE_LIST(handlers, ecore_event_handler_del); -} - -/////////////////////////////////// - -static void _e_comp_canvas_render_post(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED) { E_Client *ec; @@ -40,38 +33,6 @@ _e_comp_canvas_render_post(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *ev } } -/////////////////////////////////// - -static void -_e_comp_canvas_cb_mouse_in(void *d EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - /* Do nothing */ - ; -} - -static void -_e_comp_canvas_cb_mouse_down(void *d EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - /* Do nothing */ - ; -} - -static void -_e_comp_canvas_cb_mouse_up(void *d EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - /* Do nothing */ - ; -} - -static void -_e_comp_canvas_cb_mouse_wheel(void *d EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - /* Do nothing */ - ; -} - -//////////////////////////////////// - static Eina_Bool _e_comp_cb_zone_change() { @@ -123,49 +84,43 @@ _e_comp_cb_compositor_enabled() EINTERN Eina_Bool e_comp_canvas_init(int w, int h) { - Evas_Object *o; + E_View_Rect *rect; + E_View *view; + E_View_Tree *layer_tree; Eina_List *screens; - unsigned int r, g, b, a; - Evas_Render_Op opmode; + E_View_Render_Op opmode = E_VIEW_RENDER_BLEND; + int color[4] = {0, 0, 0, 255}; E_Zone *zone; E_Tizen_Screen *tizen_screen; TRACE_DS_BEGIN(COMP_CANVAS:INIT); e_comp->evas = ecore_evas_get(e_comp->ee); + e_comp->canvas = e_canvas_create(e_comp->evas); e_comp->w = w; e_comp->h = h; - r = g = b = 0; - a = 255; - opmode = EVAS_RENDER_BLEND; - if (e_config) { - r = e_config->comp_canvas_bg.r; - g = e_config->comp_canvas_bg.g; - b = e_config->comp_canvas_bg.b; - a = e_config->comp_canvas_bg.a; - opmode = e_config->comp_canvas_bg.opmode; + color[0] = e_config->comp_canvas_bg.r; + color[1] = e_config->comp_canvas_bg.g; + color[2] = e_config->comp_canvas_bg.b; + color[3] = e_config->comp_canvas_bg.a; + + if (e_config->comp_canvas_bg.opmode == EVAS_RENDER_COPY) + opmode = E_VIEW_RENDER_COPY; } - o = evas_object_rectangle_add(e_comp->evas); - e_comp->bg_blank_object = o; - evas_object_layer_set(o, E_LAYER_BOTTOM); - evas_object_move(o, 0, 0); - evas_object_resize(o, e_comp->w, e_comp->h); - evas_object_color_set(o, r, g, b, a); + layer_tree = e_canvas_layer_view_tree_get(e_comp->canvas, E_CANVAS_LAYER_BOTTOM); + rect = e_view_rect_create(layer_tree, e_comp->w, e_comp->h, color); + e_comp->bg_blank_view = view = e_view_rect_view_get(rect); + e_view_position_set(view, 0, 0); - if (opmode != evas_object_render_op_get(o)) - evas_object_render_op_set(o, opmode); + if (opmode != e_view_render_op_get(view)) + e_view_render_op_set(view, opmode); - evas_object_name_set(o, "comp->bg_blank_object"); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_down, NULL); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_up, NULL); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_in, NULL); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_WHEEL, (Evas_Object_Event_Cb)_e_comp_canvas_cb_mouse_wheel, NULL); - evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _e_comp_canvas_cb_del, NULL); - evas_object_show(o); + e_view_name_set(view, "comp->bg_blank_view"); + e_view_show(view); ecore_evas_name_class_set(e_comp->ee, "E", "Comp_EE"); ecore_evas_show(e_comp->ee); @@ -207,14 +162,26 @@ e_comp_canvas_init(int w, int h) return EINA_TRUE; } +E_API E_Canvas * +e_comp_canvas_get(void) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp, NULL); + + return e_comp->canvas; +} + EINTERN void e_comp_canvas_clear(void) { + E_FREE_LIST(handlers, ecore_event_handler_del); + + e_view_destroy(e_comp->bg_blank_view); + e_canvas_destroy(e_comp->canvas); evas_event_freeze(e_comp->evas); edje_freeze(); - E_FREE_FUNC(e_comp->fps_fg, evas_object_del); - E_FREE_FUNC(e_comp->fps_bg, evas_object_del); + E_FREE_FUNC(e_comp->fps_fg, e_view_destroy); + E_FREE_FUNC(e_comp->fps_bg, e_view_destroy); E_FREE_FUNC(e_comp->autoclose.rect, evas_object_del); E_FREE_FUNC(e_comp->pointer, e_object_del); } @@ -277,7 +244,9 @@ e_comp_zone_id_get(int id) EINTERN void e_comp_canvas_zone_update(E_Zone *zone) { - Evas_Object *o; + E_View_Tree *layer_tree; + E_View_Edje *view_edje; + E_View *view; const char *const over_styles[] = { "e/comp/screen/overlay/default", @@ -292,34 +261,34 @@ e_comp_canvas_zone_update(E_Zone *zone) if (zone->over && zone->base) { - e_theme_edje_object_set(zone->base, "base/theme/comp", - under_styles[conf->disable_screen_effects]); - e_theme_edje_object_set(zone->over, "base/theme/comp", - over_styles[conf->disable_screen_effects]); + e_theme_edje_view_set(e_view_edje_from_view(zone->base), "base/theme/comp", + under_styles[conf->disable_screen_effects]); + e_theme_edje_view_set(e_view_edje_from_view(zone->over), "base/theme/comp", + over_styles[conf->disable_screen_effects]); return; } - E_FREE_FUNC(zone->base, evas_object_del); - E_FREE_FUNC(zone->over, evas_object_del); - zone->base = o = edje_object_add(e_comp->evas); - evas_object_repeat_events_set(o, 1); - evas_object_name_set(zone->base, "zone->base"); - e_theme_edje_object_set(o, "base/theme/comp", under_styles[conf->disable_screen_effects]); - evas_object_move(o, zone->x, zone->y); - evas_object_resize(o, zone->w, zone->h); - evas_object_layer_set(o, E_LAYER_BG); - evas_object_show(o); - - zone->over = o = edje_object_add(e_comp->evas); - //edje_object_signal_callback_add(o, "e,state,screensaver,active", "e", _e_comp_canvas_screensaver_active, NULL); - evas_object_layer_set(o, E_LAYER_MAX); - evas_object_raise(o); - evas_object_name_set(zone->over, "zone->over"); - evas_object_pass_events_set(o, 1); - e_theme_edje_object_set(o, "base/theme/comp", over_styles[conf->disable_screen_effects]); - evas_object_move(o, zone->x, zone->y); - evas_object_resize(o, zone->w, zone->h); - evas_object_raise(o); - evas_object_show(o); + E_FREE_FUNC(zone->base, e_view_destroy); + E_FREE_FUNC(zone->over, e_view_destroy); + layer_tree = e_canvas_layer_view_tree_get(e_comp->canvas, E_CANVAS_LAYER_BG); + view_edje = e_view_edje_create(layer_tree); + zone->base = view = e_view_edje_view_get(view_edje); + e_view_repeat_events_set(view, true); + e_view_name_set(view, "zone->base"); + e_theme_edje_view_set(view_edje, "base/theme/comp", under_styles[conf->disable_screen_effects]); + e_view_position_set(view, zone->x, zone->y); + e_view_edje_size_set(view_edje, zone->w, zone->h); + e_view_show(view); + + layer_tree = e_canvas_layer_view_tree_get(e_comp->canvas, E_CANVAS_LAYER_MAX); + view_edje = e_view_edje_create(layer_tree); + zone->over = view = e_view_edje_view_get(view_edje); + e_view_name_set(view, "zone->over"); + e_view_pass_events_set(view, true); + e_theme_edje_view_set(view_edje, "base/theme/comp", over_styles[conf->disable_screen_effects]); + e_view_position_set(view, zone->x, zone->y); + e_view_edje_size_set(view_edje, zone->w, zone->h); + e_view_raise_to_top(view); + e_view_show(view); } EINTERN void @@ -395,8 +364,8 @@ e_comp_canvas_update(void) EINA_LIST_FOREACH(e_comp->zones, l, zone) { - E_FREE_FUNC(zone->base, evas_object_del); - E_FREE_FUNC(zone->over, evas_object_del); + E_FREE_FUNC(zone->base, e_view_destroy); + E_FREE_FUNC(zone->over, e_view_destroy); e_comp_canvas_zone_update(zone); } @@ -501,7 +470,30 @@ e_comp_canvas_layer_map(E_Layer layer) E_API unsigned int e_comp_canvas_client_layer_map(E_Layer layer) { - return e_util_client_layer_map(layer); + switch (layer) + { + case E_LAYER_CLIENT_DESKTOP: return 0; + case E_LAYER_CLIENT_BELOW: return 1; + case E_LAYER_CLIENT_NORMAL: return 2; + case E_LAYER_CLIENT_ABOVE: return 3; + case E_LAYER_CLIENT_EDGE: return 4; + case E_LAYER_CLIENT_FULLSCREEN: return 5; + case E_LAYER_CLIENT_EDGE_FULLSCREEN: return 6; + case E_LAYER_CLIENT_POPUP: return 7; + case E_LAYER_CLIENT_TOP: return 8; + case E_LAYER_CLIENT_PRIO: return 9; + case E_LAYER_CLIENT_NOTIFICATION_LOW: return 10; + case E_LAYER_CLIENT_NOTIFICATION_NORMAL: return 11; + case E_LAYER_CLIENT_NOTIFICATION_HIGH: return 12; + case E_LAYER_CLIENT_NOTIFICATION_TOP: return 13; + case E_LAYER_CLIENT_ALERT_LOW: return 14; + case E_LAYER_CLIENT_ALERT: return 15; + case E_LAYER_CLIENT_ALERT_HIGH: return 16; + case E_LAYER_CLIENT_DRAG: return 17; + case E_LAYER_CLIENT_CURSOR: return 18; + default: break; + } + return 9999; } EINTERN E_Layer diff --git a/src/bin/core/e_client.c b/src/bin/core/e_client.c index 95b477b..d6b247b 100644 --- a/src/bin/core/e_client.c +++ b/src/bin/core/e_client.c @@ -4,6 +4,7 @@ #include "e_bindings_intern.h" #include "e_uuid_store_intern.h" #include "e_utils_intern.h" +#include "e_comp_canvas_intern.h" #include "e_comp_wl_intern.h" #include "e_comp_wl_subsurface_intern.h" #include "e_comp_intern.h" @@ -19,6 +20,8 @@ #include "e_zone_intern.h" #include "e_config_intern.h" #include "e_input_thread_client_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #define PRI(ec) ((E_Client_Private *)e_object_data_get(E_OBJECT(ec))) @@ -118,6 +121,8 @@ struct _E_Client_Private E_Aot_Type aot_type; E_Client *modal; + + E_View_Client *view_client; }; static int _e_client_hooks_delete = 0; @@ -686,7 +691,8 @@ _e_client_transform_resize_handle(E_Client *ec) new_y += (new_h - org_h); /* step 5: set geometry to new value */ - evas_object_geometry_set(ec->frame, new_x, new_y, new_w, new_h); + e_view_position_set(e_view_client_view_get(PRI(ec)->view_client), new_x, new_y); + e_view_client_size_set(PRI(ec)->view_client, new_w, new_h); } void @@ -1090,6 +1096,7 @@ _e_client_free(E_Client *ec) eina_stringshare_replace(&ec->icccm.window_role, NULL); e_client_netwm_name_set(ec, NULL); + e_view_destroy(e_view_client_view_get(PRI(ec)->view_client)); E_FREE_FUNC(ec->frame, evas_object_del); E_OBJECT(ec)->references--; @@ -1148,7 +1155,7 @@ _e_client_del(E_Client *ec) if (!stopping) { e_client_comp_hidden_set(ec, 1); - evas_object_pass_events_set(ec->frame, 1); + e_view_pass_events_set(e_view_client_view_get(PRI(ec)->view_client), true); } E_FREE_FUNC(ec->ping_poller, ecore_poller_del); @@ -1638,7 +1645,8 @@ e_client_resize_handle(E_Client *ec) if (e_config->interactive_resize) { - evas_object_geometry_set(ec->frame, new_x, new_y, new_w, new_h); + e_view_position_set(e_view_client_view_get(PRI(ec)->view_client), new_x, new_y); + e_view_client_size_set(PRI(ec)->view_client, new_w, new_h); } else { @@ -1813,14 +1821,14 @@ _e_client_position_inside_input_rect(E_Client *ec, int tx, int ty) } static Eina_Bool -_e_client_under_pointer_helper_ignore_client(E_Desk *desk, E_Client *client) +_e_client_under_pointer_helper_ignore_client(E_Desk *desk, E_Client *ec) { /* If a border was specified which should be excluded from the list * (because it will be closed shortly for example), skip */ - if (e_client_util_ignored_get(client) || (!e_desk_has_ec(desk, client))) return EINA_TRUE; - if (!evas_object_visible_get(client->frame)) return EINA_TRUE; - if (e_policy_client_is_cursor(client)) return EINA_TRUE; - if (e_comp_wl->drag_client == client) return EINA_TRUE; + if (e_client_util_ignored_get(ec) || (!e_desk_has_ec(desk, ec))) return EINA_TRUE; + if (!e_view_client_visible_get(PRI(ec)->view_client)) return EINA_TRUE; + if (e_policy_client_is_cursor(ec)) return EINA_TRUE; + if (e_comp_wl->drag_client == ec) return EINA_TRUE; return EINA_FALSE; } @@ -1966,7 +1974,7 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN _e_client_event_simple(ec, E_EVENT_CLIENT_MOVE); - evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL); + e_view_position_get(e_view_client_view_get(PRI(ec)->view_client), &x, &y); if ((e_config->transient.move) && (ec->transients)) { Eina_List *list = eina_list_clone(ec->transients); @@ -1976,9 +1984,9 @@ _e_client_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN { if (child->vkbd.vkbd) continue; - evas_object_move(child->frame, - child->x + x - ec->pre_cb.x, - child->y + y - ec->pre_cb.y); + e_view_position_set(e_view_client_view_get(PRI(child)->view_client), + child->x + x - ec->pre_cb.x, + child->y + y - ec->pre_cb.y); } } if (ec->moving || (ecmove == ec)) @@ -2013,7 +2021,7 @@ _e_client_cb_evas_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_ _e_client_event_simple(ec, E_EVENT_CLIENT_RESIZE); - evas_object_geometry_get(ec->frame, &x, &y, &w, &h); + e_view_client_geometry_get(PRI(ec)->view_client, &x, &y, &w, &h); if ((e_config->transient.resize) && (ec->transients)) { Eina_List *list = eina_list_clone(ec->transients); @@ -2031,7 +2039,7 @@ _e_client_cb_evas_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_ nh = (child->h * h) / ec->pre_cb.h; nx += ((nw - child->w) / 2); ny += ((nh - child->h) / 2); - evas_object_move(child->frame, nx, ny); + e_view_position_set(e_view_client_view_get(PRI(child)->view_client), nx, ny); } } } @@ -2187,7 +2195,7 @@ _e_client_eval(E_Client *ec) if (ec->changes.size) { ec->changes.size = 0; - evas_object_resize(ec->frame, ec->w, ec->h); + e_view_client_size_set(PRI(ec)->view_client, ec->w, ec->h); prop |= E_CLIENT_PROPERTY_SIZE; } @@ -2195,7 +2203,7 @@ _e_client_eval(E_Client *ec) { ec->changes.tz_position = 0; ec->changes.pos = 0; - evas_object_move(ec->frame, ec->x, ec->y); + e_view_position_set(e_view_client_view_get(PRI(ec)->view_client), ec->x, ec->y); prop |= E_CLIENT_PROPERTY_POS; } @@ -2243,8 +2251,8 @@ _e_client_eval(E_Client *ec) } } - evas_object_show(ec->frame); - if (evas_object_visible_get(ec->frame)) + e_view_client_show(PRI(ec)->view_client); + if (e_view_client_visible_get(PRI(ec)->view_client)) { ec->changes.visible = 0; _e_client_event_show(ec); @@ -2623,7 +2631,7 @@ _e_client_transform_core_check_change(E_Client *ec) if (!ec) return EINA_FALSE; if (ec->frame) - evas_object_geometry_get(ec->frame, 0, 0, &w, &h); + e_view_client_geometry_get(PRI(ec)->view_client, NULL, NULL, &w, &h); // check client position or size change if (ec->x != ec->transform_core.backup.client_x || @@ -3068,13 +3076,13 @@ e_client_idler_before(Eina_Bool *check_focus) (!ec->changes.pos) && (!ec->changes.size)) { - evas_object_show(ec->frame); - ec->changes.visible = !evas_object_visible_get(ec->frame); + e_view_client_show(PRI(ec)->view_client); + ec->changes.visible = !e_view_client_visible_get(PRI(ec)->view_client); } } else { - evas_object_hide(ec->frame); + e_view_client_hide(PRI(ec)->view_client); ec->changes.visible = 0; } } @@ -3096,8 +3104,8 @@ e_client_idler_before(Eina_Bool *check_focus) if ((ec->changes.visible) && (ec->visible) && (!ec->changed)) { - evas_object_show(ec->frame); - ec->changes.visible = !evas_object_visible_get(ec->frame); + e_view_client_show(PRI(ec)->view_client); + ec->changes.visible = !e_view_client_visible_get(PRI(ec)->view_client); ec->changed = ec->changes.visible; e_comp_visibility_calculation_set(EINA_TRUE); } @@ -3230,6 +3238,19 @@ _e_client_input_thread_clone_new(E_Client *ec) e_input_backend_thread_safe_call(_e_input_thread_client_new, &ec_new_data, sizeof(E_Input_Thread_Request_EClient_Data)); } +static void +_e_client_view_init(E_Client *ec) +{ + E_Client_Private *priv = PRI(ec); + E_View_Tree *tree; + + tree = e_canvas_layer_view_tree_get(e_comp->canvas, E_CANVAS_LAYER_CLIENT_NORMAL); + if (!tree) + return; + + priv->view_client = e_view_client_create(ec, tree); +} + E_API E_Client * e_client_new(E_Pixmap *cp, int first_map, int internal) { @@ -3350,6 +3371,7 @@ e_client_new(E_Pixmap *cp, int first_map, int internal) e_comp_object_client_add(ec); if (ec->frame) { + _e_client_view_init(ec); evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _e_client_cb_evas_show, ec); evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, _e_client_cb_evas_hide, ec); evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, _e_client_cb_evas_move, ec); @@ -3640,7 +3662,8 @@ e_client_res_change_geometry_restore(E_Client *ec) x = zx + zw - w; if ((y + h) > (zy + zh)) y = zy + zh - h; - evas_object_geometry_set(ec->frame, x, y, w, h); + e_view_position_set(e_view_client_view_get(PRI(ec)->view_client), x, y); + e_view_client_size_set(PRI(ec)->view_client, w, h); } memcpy(&ec->pre_res_change, &pre_res_change, sizeof(pre_res_change)); } @@ -3715,7 +3738,7 @@ e_client_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h) { if (ec->frame) { - evas_object_geometry_get(ec->frame, &gx, &gy, &gw, &gh); + e_view_client_geometry_get(PRI(ec)->view_client, &gx, &gy, &gw, &gh); if (gw == 0 && gh == 0) { /* In this case, there is no image buffer in e_comp_object, thus it @@ -4438,7 +4461,7 @@ e_client_act_move_keyboard(E_Client *ec) wl_signal_emit(&PRI(ec)->events.move_update, NULL); if (!_e_client_hook_call(E_CLIENT_HOOK_MOVE_UPDATE, ec)) return; - evas_object_freeze_events_set(ec->frame, 1); + e_view_freeze_events_set(e_view_client_view_get(PRI(ec)->view_client), true); if (!action_handler_mouse) action_handler_mouse = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _e_client_move_mouse_down, NULL); @@ -4459,7 +4482,7 @@ e_client_act_resize_keyboard(E_Client *ec) _e_client_action_init(ec); _e_client_action_resize_timeout_add(); - evas_object_freeze_events_set(ec->frame, 1); + e_view_freeze_events_set(e_view_client_view_get(PRI(ec)->view_client), true); if (!action_handler_mouse) action_handler_mouse = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _e_client_resize_mouse_down, NULL); @@ -5547,6 +5570,15 @@ e_client_base_output_resolution_desk_useful_geometry_get(E_Client *ec, int *x, i return EINA_TRUE; } +E_API E_View_Client * +e_client_view_get(E_Client *ec) +{ + E_OBJECT_CHECK_RETURN(ec, NULL); + EINA_SAFETY_ON_NULL_RETURN_VAL(PRI(ec)->view_client, NULL); + + return PRI(ec)->view_client; +} + /* change the base_output_resolution of the bind_ec by checking the base_output_resolution of provider_ec's appinfo */ EINTERN Eina_Bool e_client_base_output_resolution_rsm_update(E_Client *bind_ec, E_Client *provider_ec) @@ -5694,7 +5726,7 @@ E_API void e_client_frame_focus_set(E_Client *ec, Eina_Bool focus) { if (!ec) return; - evas_object_focus_set(ec->frame, focus); + e_view_client_focus_set(PRI(ec)->view_client, focus); } EINTERN void @@ -5704,7 +5736,8 @@ e_client_frame_geometry_set(E_Client *ec, int x, int y, int w, int h) if (ec->internal || ec->input_only) { - evas_object_geometry_set(ec->frame, x, y, w, h); + e_view_position_set(e_view_client_view_get(PRI(ec)->view_client), x, y); + e_view_client_size_set(PRI(ec)->view_client, w, h); } else { @@ -5714,27 +5747,32 @@ e_client_frame_geometry_set(E_Client *ec, int x, int y, int w, int h) ec->move_after_resize = EINA_TRUE; e_client_pos_set(ec, x, y); - evas_object_resize(ec->frame, w, h); + e_view_client_size_set(PRI(ec)->view_client, w, h); } else - evas_object_geometry_set(ec->frame, x, y, w, h); + { + e_view_position_set(e_view_client_view_get(PRI(ec)->view_client), x, y); + e_view_client_size_set(PRI(ec)->view_client, w, h); + } } } E_API void e_client_util_move_without_frame(E_Client *ec, int x, int y) { + int w, h; if (!ec) return; - e_comp_object_frame_xy_adjust(ec->frame, x, y, &x, &y); - evas_object_move(ec->frame, x, y); + e_view_client_geometry_get(e_client_view_get(ec), NULL, NULL, &w, &h); + e_view_client_frame_xy_adjust(e_client_view_get(ec), x, y, &x, &y); + e_view_client_geometry_set(e_client_view_get(ec), x, y, w, h); } E_API void e_client_util_resize_without_frame(E_Client *ec, int w, int h) { if (!ec) return; - e_comp_object_frame_wh_adjust(ec->frame, w, h, &w, &h); - evas_object_resize(ec->frame, w, h); + e_view_client_frame_wh_adjust(e_client_view_get(ec), w, h, &w, &h); + e_view_client_size_set(e_client_view_get(ec), w, h); e_client_stay_within_canvas_margin(ec); } @@ -5881,10 +5919,16 @@ e_client_layer_set(E_Client *ec, E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, EINA_FALSE); if (!ec->frame) return EINA_FALSE; - if (e_util_client_layer_map(layer) == 9999) + if (e_comp_canvas_client_layer_map(layer) == 9999) return EINA_FALSE; //invalid layer is not allowed - evas_object_layer_set(ec->frame, layer); + if (ec->layer != layer) + { + int w, h; + e_view_client_geometry_get(PRI(ec)->view_client, NULL, NULL, &w, &h); + e_view_client_geometry_set(PRI(ec)->view_client, ec->x, ec->y, w, h); + } + e_view_client_layer_set(PRI(ec)->view_client, e_canvas_util_e_layer_map(layer)); if (ec->layer != layer) { /* check exceptional case */ @@ -5922,7 +5966,7 @@ e_client_layer_get(E_Client *ec) E_OBJECT_TYPE_CHECK_RETURN(ec, E_CLIENT_TYPE, E_LAYER_BOTTOM); if (!ec->frame) return E_LAYER_BOTTOM; - layer = evas_object_layer_get(ec->frame); + layer = e_view_layer_index_get(e_view_client_view_get(PRI(ec)->view_client)); if (ec->layer != layer) { /* client could be on temperory layer while pending or block, @@ -5934,7 +5978,7 @@ e_client_layer_get(E_Client *ec) ELOGF("LAYER", "layer dismatch ec->layer %d | evas obj layer %d ", ec, ec->layer, layer); - if (e_util_client_layer_map(layer) == 9999) + if (e_comp_canvas_client_layer_map(layer) == 9999) return E_LAYER_BOTTOM; //not on E_LAYER_CLIENT } @@ -5987,7 +6031,7 @@ e_client_raise(E_Client *ec) if (ec->parent && e_client_is_belong_to_parent(ec)) _raise_belong_to_parent(ec); else - evas_object_raise(ec->frame); + e_view_raise_to_top(e_view_client_view_get(PRI(ec)->view_client)); wl_signal_emit(&PRI(ec)->events.raise, NULL); } @@ -6096,7 +6140,7 @@ e_client_lower(E_Client *ec) if (ec->parent && e_client_is_belong_to_parent(ec)) _lower_belong_to_parent(ec); else - evas_object_lower(ec->frame); + e_view_lower_to_bottom(e_view_client_view_get(PRI(ec)->view_client)); wl_signal_emit(&PRI(ec)->events.lower, NULL); } @@ -6104,12 +6148,20 @@ e_client_lower(E_Client *ec) E_API void e_client_stack_above(E_Client *ec, E_Client *above) { + E_View *ec_view, *above_view; + if (!ec) return; if (!ec->frame) return; if (!above) return; if (!above->frame) return; - evas_object_stack_above(ec->frame, above->frame); + ec_view = e_view_client_view_get(PRI(ec)->view_client); + above_view = e_view_client_view_get(PRI(above)->view_client); + + if (e_view_parent_get(ec_view) != e_view_parent_get(above_view)) + e_view_reparent(ec_view, e_canvas_layer_view_tree_get(e_comp_canvas_get(), e_canvas_layer_find(e_comp_canvas_get(), above_view))); + + e_view_place_above(ec_view , above_view); wl_signal_emit(&PRI(ec)->events.stack_above, NULL); } @@ -6117,12 +6169,20 @@ e_client_stack_above(E_Client *ec, E_Client *above) E_API void e_client_stack_below(E_Client *ec, E_Client *below) { + E_View *ec_view, *below_view; + if (!ec) return; if (!ec->frame) return; if (!below) return; if (!below->frame) return; - evas_object_stack_below(ec->frame, below->frame); + ec_view = e_view_client_view_get(PRI(ec)->view_client); + below_view = e_view_client_view_get(PRI(below)->view_client); + + if (e_view_parent_get(ec_view) != e_view_parent_get(below_view)) + e_view_reparent(ec_view, e_canvas_layer_view_tree_get(e_comp_canvas_get(), e_canvas_layer_find(e_comp_canvas_get(), below_view))); + + e_view_place_below(ec_view, below_view); wl_signal_emit(&PRI(ec)->events.stack_below, NULL); } @@ -6150,8 +6210,8 @@ e_client_show_pending_unset(E_Client *ec) ec->show_pending.running = EINA_FALSE; if (ec->frame) { - ELOGF("E_CLIENT", "evas_object_show by unset show_pending", ec); - evas_object_show(ec->frame); + ELOGF("E_CLIENT", "e_view_client_show by unset show_pending", ec); + e_view_client_show(PRI(ec)->view_client); //e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); EC_CHANGED(ec); } @@ -6262,7 +6322,7 @@ e_client_map_enable_set(E_Client *ec, Eina_Bool enable) EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(ec->frame, EINA_FALSE); - evas_object_map_enable_set(ec->frame, enable); + e_view_map_enable_set(e_view_client_view_get(PRI(ec)->view_client), enable); return EINA_TRUE; } @@ -7143,7 +7203,7 @@ e_client_show(E_Client *ec) ec, ec->internal, (ec == e_comp_wl->drag_client)); ec->visible = EINA_TRUE; ec->ignored = 0; - evas_object_show(ec->frame); + e_view_client_show(PRI(ec)->view_client); ec->comp_data->mapped = 1; } } @@ -7186,7 +7246,7 @@ e_client_hide(E_Client *ec) ELOGF("E_CLIENT", "Unmap. internal:%d, sub:%p, drag:%d", ec, ec->internal, ec->comp_data->sub.data, (ec == e_comp_wl->drag_client)); ec->visible = EINA_FALSE; - evas_object_hide(ec->frame); + e_view_client_hide(PRI(ec)->view_client); ec->comp_data->mapped = 0; } } diff --git a/src/bin/core/e_desk.c b/src/bin/core/e_desk.c index 7aa58cb..02b2b99 100644 --- a/src/bin/core/e_desk.c +++ b/src/bin/core/e_desk.c @@ -4,12 +4,13 @@ #include "e_utils_intern.h" #include "e_comp_wl_subsurface_intern.h" #include "e_output_intern.h" -#include "e_comp_object_intern.h" #include "e_zone_intern.h" #include "e_config_intern.h" #include "e_policy_wl_intern.h" #include "e_policy_intern.h" #include "e_display_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #ifdef E_DISPLAY #else #include "e_comp_screen_intern.h" @@ -291,7 +292,7 @@ e_desk_client_top_visible_get(E_Desk *desk) E_OBJECT_TYPE_CHECK_RETURN(desk, E_DESK_TYPE, NULL); E_CLIENT_REVERSE_FOREACH(ec) - if (e_desk_has_ec(desk, ec) && evas_object_visible_get(ec->frame)) return ec; + if (e_desk_has_ec(desk, ec) && e_view_client_visible_get(e_client_view_get(ec))) return ec; return NULL; } @@ -666,7 +667,7 @@ e_desks_count(void) static void _e_desk_client_data_del(E_Desk *desk, E_Client *ec) { - evas_object_data_del(ec->frame, DESK_EC_DATA_KEY); + e_view_data_del(e_view_client_view_get(e_client_view_get(ec)), DESK_EC_DATA_KEY); } static void @@ -674,7 +675,7 @@ _e_desk_client_data_set(E_Desk *desk, E_Client *ec) { E_Desk *data; - data = evas_object_data_get(ec->frame, DESK_EC_DATA_KEY); + data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), DESK_EC_DATA_KEY); if (data) { if (data == desk) @@ -683,10 +684,10 @@ _e_desk_client_data_set(E_Desk *desk, E_Client *ec) return; } - evas_object_data_del(ec->frame, DESK_EC_DATA_KEY); + _e_desk_client_data_del(desk, ec); } - evas_object_data_set(ec->frame, DESK_EC_DATA_KEY, desk); + e_view_data_set(e_view_client_view_get(e_client_view_get(ec)), DESK_EC_DATA_KEY, desk); } static void @@ -696,20 +697,20 @@ _e_desk_client_set(E_Desk *desk, E_Client *ec) if (!ec->new_client) { - if (ec->frame) + if (e_client_view_get(ec)) { - e_comp_object_effect_unclip(ec->frame); - e_comp_object_effect_set(ec->frame, NULL); + e_view_client_effect_unclip(e_client_view_get(ec)); + e_view_client_effect_set(e_client_view_get(ec), NULL); } if (desk->visible || ec->sticky) { if ((!ec->hidden) && (!ec->iconic)) - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); } else { ec->hidden = 1; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); } } @@ -1548,13 +1549,13 @@ _e_desk_event_desk_geometry_change_free(void *data EINA_UNUSED, void *event) static Eina_Bool _e_desk_transition_setup(E_Client *ec, int dx, int dy, int state) { - e_comp_object_effect_set(ec->frame, "none"); + e_view_client_effect_set(e_client_view_get(ec), "none"); return EINA_FALSE; } static void -_e_desk_show_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) +_e_desk_show_end(void *data, E_View_Client *client, const char *emission, const char *source) { E_Client *ec = data; E_Zone *ec_zone; @@ -1566,15 +1567,16 @@ _e_desk_show_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission ec_desk->animate_count--; e_client_comp_hidden_set(ec, 0); - e_comp_object_effect_unclip(ec->frame); + e_view_client_effect_unclip(e_client_view_get(ec)); ec->hidden = 0; - if (!ec->visible) evas_object_show(ec->frame); + if (!ec->visible) + e_view_client_show(e_client_view_get(ec)); if (ec_desk != e_desk_current_get(ec_zone)) return; } static void -_e_desk_hide_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) +_e_desk_hide_end(void *data, E_View_Client *client, const char *emission, const char *source) { E_Client *ec = data; E_Desk *ec_desk; @@ -1583,7 +1585,7 @@ _e_desk_hide_end(void *data, Evas_Object *obj EINA_UNUSED, const char *emission if (ec_desk) ec_desk->animate_count--; ec->hidden = 1; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); } static void @@ -1603,21 +1605,21 @@ _e_desk_show_begin(E_Desk *desk, int dx, int dy) if (ec->moving) { e_desk_client_add(desk, ec); - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); continue; } if ((!e_desk_has_ec(desk, ec)) || (ec->sticky)) continue; if ((!starting) && (!ec->new_client) && _e_desk_transition_setup(ec, dx, dy, 1)) { - e_comp_object_effect_stop(ec->frame, _e_desk_hide_end); - e_comp_object_effect_start(ec->frame, _e_desk_show_end, ec); + e_view_client_effect_stop(e_client_view_get(ec), _e_desk_hide_end); + e_view_client_effect_start(e_client_view_get(ec), _e_desk_show_end, ec); desk->animate_count++; } else ec->hidden = 0; e_client_comp_hidden_set(ec, ec->hidden); - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); } } @@ -1640,16 +1642,16 @@ _e_desk_hide_begin(E_Desk *desk, int dx, int dy) if ((!e_desk_has_ec(desk, ec)) || (ec->sticky)) continue; if ((!starting) && (!ec->new_client) && _e_desk_transition_setup(ec, -dx, -dy, 0)) { - e_comp_object_effect_stop(ec->frame, _e_desk_show_end); - e_comp_object_effect_start(ec->frame, _e_desk_hide_end, ec); + e_view_client_effect_stop(e_client_view_get(ec), _e_desk_show_end); + e_view_client_effect_start(e_client_view_get(ec), _e_desk_hide_end, ec); desk->animate_count++; } else { ec->hidden = 1; - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); ec->changes.visible = 0; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); } e_client_comp_hidden_set(ec, EINA_TRUE); } @@ -1913,12 +1915,12 @@ _e_desk_client_zoom(E_Client *ec, double zoomx, double zoomy, Evas_Coord cx, Eva _e_desk_client_deskzoom_set(ec, zoomx, zoomy, cx, cy); - if (evas_object_visible_get(ec->frame)) + if (e_view_client_visible_get(e_client_view_get(ec))) { // force update - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); } } @@ -2199,7 +2201,7 @@ e_desk_has_ec(E_Desk *desk, E_Client *ec) EINA_SAFETY_ON_NULL_RETURN_VAL(desk, EINA_FALSE); - data = evas_object_data_get(ec->frame, DESK_EC_DATA_KEY); + data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), DESK_EC_DATA_KEY); if (data == desk) return EINA_TRUE; return EINA_FALSE; diff --git a/src/bin/core/e_desk_area.c b/src/bin/core/e_desk_area.c index 4f067db..7ff473b 100644 --- a/src/bin/core/e_desk_area.c +++ b/src/bin/core/e_desk_area.c @@ -14,6 +14,8 @@ #include "e_utils_intern.h" #include "e_comp_intern.h" #include "e_comp_wl_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include "e_input_thread_client_intern.h" #include @@ -127,7 +129,7 @@ EVAS_SMART_SUBCLASS_NEW(E_DESK_AREA_SMART_OBJ_TYPE, _e_desk_area, static void _e_desk_area_client_data_del(E_Desk_Area *eda, E_Client *ec) { - evas_object_data_del(ec->frame, DESK_AREA_EC_DATA_KEY); + e_view_data_del(e_view_client_view_get(e_client_view_get(ec)), DESK_AREA_EC_DATA_KEY); } static void @@ -135,7 +137,7 @@ _e_desk_area_client_data_set(E_Desk_Area *eda, E_Client *ec) { E_Desk_Area *data; - data = evas_object_data_get(ec->frame, DESK_AREA_EC_DATA_KEY); + data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), DESK_AREA_EC_DATA_KEY); if (data) { if (data == eda) @@ -144,10 +146,10 @@ _e_desk_area_client_data_set(E_Desk_Area *eda, E_Client *ec) return; } - evas_object_data_del(ec->frame, DESK_AREA_EC_DATA_KEY); + _e_desk_area_client_data_del(eda, ec); } - evas_object_data_set(ec->frame, DESK_AREA_EC_DATA_KEY, eda); + e_view_data_set(e_view_client_view_get(e_client_view_get(ec)), DESK_AREA_EC_DATA_KEY, eda); } static void @@ -157,7 +159,7 @@ _e_desk_area_configure_send(E_Client *ec, Eina_Bool edges, Eina_Bool send_size) if (send_size) { - if (e_comp_object_frame_exists(ec->frame)) + if (e_view_client_frame_exists(e_client_view_get(ec))) w = ec->client.w, h = ec->client.h; else w = ec->w, h = ec->h; @@ -819,7 +821,7 @@ _desk_area_cb_client_get_above(struct wl_listener *listener, void *data) } if (ec->layer == E_LAYER_CLIENT_CURSOR) return; - if (e_util_client_layer_map(ec->layer) == 9999) return; + if (e_comp_canvas_client_layer_map(ec->layer) == 9999) return; g_rec_mutex_lock(&e_comp->ec_list_mutex); @@ -900,7 +902,7 @@ _desk_area_cb_client_get_below(struct wl_listener *listener, void *data) } if (ec_layer == E_LAYER_CLIENT_DESKTOP) return; - if (e_util_client_layer_map(ec_layer) == 9999) return; + if (e_comp_canvas_client_layer_map(ec_layer) == 9999) return; /* go down the layers until we find one */ x = e_comp_canvas_layer_map(ec_layer); @@ -962,7 +964,7 @@ _desk_area_cb_client_get_visible_above(struct wl_listener *listener, void *data) } if (ec->layer == E_LAYER_CLIENT_CURSOR) return; - if (e_util_client_layer_map(ec->layer) == 9999) return; + if (e_comp_canvas_client_layer_map(ec->layer) == 9999) return; g_rec_mutex_lock(&e_comp->ec_list_mutex); @@ -1135,7 +1137,7 @@ _desk_area_cb_client_fullscreen(struct wl_listener *listener, void *data) if (!e_client_util_ignored_get(ec)) e_client_frame_update(ec); - e_comp_object_fullscreen(ec->frame); + e_view_client_fullscreen(e_client_view_get(ec)); if (ec->comp_data->shell.configure_send) _e_desk_area_configure_send(ec, 0, 1); @@ -1163,7 +1165,7 @@ _desk_area_cb_client_unfullscreen(struct wl_listener *listener, void *data) if (!e_client_util_ignored_get(ec)) e_client_frame_update(ec); - e_comp_object_unfullscreen(ec->frame); + e_view_client_unfullscreen(e_client_view_get(ec)); if (ec->comp_data->shell.configure_send) _e_desk_area_configure_send(ec, 0, 0); @@ -1239,7 +1241,7 @@ _desk_area_cb_client_iconify(struct wl_listener *listener, void *data) if (ec->fullscreen) eda->fullscreen_clients = eina_list_remove(eda->fullscreen_clients, ec); e_client_comp_hidden_set(ec, 1); - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); e_client_iconify_event_send(ec); @@ -1302,7 +1304,7 @@ _desk_area_cb_client_uniconify(struct wl_listener *listener, void *data) if (ec->internal) { ELOGF("EDA", "UNICONIFY|internal object force show. eda:%p", ec, eda); - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); } if (ec->pixmap) @@ -1315,9 +1317,9 @@ _desk_area_cb_client_uniconify(struct wl_listener *listener, void *data) { if (cdata && cdata->mapped) { - ELOGF("EDA", "UNICONIFY|object show. eda:%p frame_visible:%d", - ec, eda, evas_object_visible_get(ec->frame)); - evas_object_show(ec->frame); + ELOGF("EDA", "UNICONIFY|object show. eda:%p frame_visible:%d(%d)", + ec, eda, evas_object_visible_get(ec->frame), e_view_client_visible_get(e_client_view_get(ec))); + e_view_client_show(e_client_view_get(ec)); } else { @@ -1332,9 +1334,9 @@ _desk_area_cb_client_uniconify(struct wl_listener *listener, void *data) { if (cdata && cdata->mapped) { - ELOGF("EDA", "UNICONIFY|object show. no use buffer flush. eda:%p frame_visible:%d", - ec, eda, evas_object_visible_get(ec->frame)); - evas_object_show(ec->frame); + ELOGF("EDA", "UNICONIFY|object show. no use buffer flush. eda:%p frame_visible:%d(%d)", + ec, eda, evas_object_visible_get(ec->frame), e_view_client_visible_get(e_client_view_get(ec))); + e_view_client_show(e_client_view_get(ec)); } } } @@ -1393,7 +1395,7 @@ _desk_area_cb_client_stick(struct wl_listener *listener, void *data) EINA_LIST_FREE(list, child) { child->sticky = 1; - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); } } } @@ -1520,7 +1522,7 @@ _e_desk_area_ec_maximize(E_Desk_Area *eda, E_Client *ec, E_Maximize max) zh = y2 - yy1; } - e_comp_object_maximize(ec->frame); + e_view_client_maximize(e_client_view_get(ec)); switch (max & E_MAXIMIZE_DIRECTION) { @@ -1779,8 +1781,8 @@ _desk_area_cb_client_kill_request(struct wl_listener *listener, void *data) e_client_comp_hidden_set(ec, EINA_TRUE); } - evas_object_pass_events_set(ec->frame, EINA_TRUE); - if (ec->visible) evas_object_hide(ec->frame); + e_view_pass_events_set(e_view_client_view_get(e_client_view_get(ec)), true); + if (ec->visible) e_view_client_hide(e_client_view_get(ec)); if (!ec->internal) e_object_del(E_OBJECT(ec)); e_comp_wl_focus_check(); @@ -1822,25 +1824,25 @@ _desk_area_cb_client_redirect(struct wl_listener *listener, void *data) */ w = ec->w, h = ec->h; - e_comp_object_frame_wh_unadjust(ec->frame, w, h, &pw, &ph); + e_view_client_frame_wh_unadjust(e_client_view_get(ec), w, h, &pw, &ph); - e_comp_object_frame_recalc(ec->frame); + e_view_client_frame_recalc(e_client_view_get(ec)); if (!ec->fullscreen) - e_comp_object_frame_wh_adjust(ec->frame, ec->client.w, ec->client.h, &w, &h); + e_view_client_frame_wh_adjust(e_client_view_get(ec), ec->client.w, ec->client.h, &w, &h); if (ec->fullscreen) { - evas_object_resize(ec->frame, eda->w, eda->h); + e_view_client_size_set(e_client_view_get(ec), eda->w, eda->h); } else if (ec->new_client) { if ((ec->w < 1) || (ec->h < 1)) return; - e_comp_object_frame_wh_adjust(ec->frame, pw, ph, &w, &h); - evas_object_resize(ec->frame, w, h); + e_view_client_frame_wh_adjust(e_client_view_get(ec), pw, ph, &w, &h); + e_view_client_size_set(e_client_view_get(ec), w, h); } else if ((w != ec->w) || (h != ec->h)) - evas_object_resize(ec->frame, w, h); + e_view_client_size_set(e_client_view_get(ec), w, h); } static void @@ -1954,6 +1956,7 @@ _desk_area_cb_client_stay_within_margin(struct wl_listener *listener, void *data E_Desk_Area *eda; E_Client *ec; int new_x, new_y; + int w, h; eda_client = wl_container_of(listener, eda_client, client_stay_within_margin); eda = eda_client->eda; @@ -1969,7 +1972,10 @@ _desk_area_cb_client_stay_within_margin(struct wl_listener *listener, void *data _e_client_stay_within_canvas_margin(ec, ec->x, ec->y, &new_x, &new_y); if ((ec->x != new_x) || (ec->y != new_y)) - evas_object_move(ec->frame, new_x, new_y); + { + e_view_client_geometry_get(e_client_view_get(ec), NULL, NULL, &w, &h); + e_view_client_geometry_set(e_client_view_get(ec), new_x, new_y, w, h); + } } } @@ -2030,7 +2036,7 @@ _e_client_stay_within_canvas(E_Client *ec, int x, int y, int *new_x, int *new_y) static void _e_client_move_handle(E_Client *ec) { - int x, y; + int x, y, w, h; if ((ec->moveinfo.down.button >= 1) && (ec->moveinfo.down.button <= 3)) { @@ -2053,7 +2059,8 @@ _e_client_move_handle(E_Client *ec) if (ec->floating) _e_client_stay_within_canvas_margin(ec, x, y, &x, &y); - evas_object_move(ec->frame, x, y); + e_view_client_geometry_get(e_client_view_get(ec), NULL, NULL, &w, &h); + e_view_client_geometry_set(e_client_view_get(ec), x, y, w, h); if (e_client_transform_core_enable_get(ec)) { @@ -2280,7 +2287,7 @@ _desk_area_cb_comp_object_set_layer(struct wl_listener *listener, void *data) layer_set: if (cw->layer == l) return; - if (e_util_client_layer_map(layer) == 9999) + if (e_comp_canvas_client_layer_map(layer) == 9999) return; //invalid layer for clients not doing comp effects if (cw->ec->fullscreen) { @@ -2417,8 +2424,8 @@ _desk_area_cb_comp_object_resize(struct wl_listener *listener, void *data) w = ec->mouse.last_down[ec->moveinfo.down.button - 1].w; h = ec->mouse.last_down[ec->moveinfo.down.button - 1].h; - if (e_comp_object_frame_exists(ec->frame)) - e_comp_object_frame_wh_unadjust(ec->frame, w, h, &w, &h); + if (e_view_client_frame_exists(e_client_view_get(ec))) + e_view_client_frame_wh_unadjust(e_client_view_get(ec), w, h, &w, &h); switch (ec->resize_mode) { @@ -2481,7 +2488,7 @@ _desk_area_cb_comp_object_color_set(struct wl_listener *listener, void *data) eda_client = wl_container_of(listener, eda_client, comp_object_color_set); ec = eda_client->ec; - evas_object_color_get(ec->frame, NULL, NULL, NULL, &a); + e_view_client_color_get(e_client_view_get(ec), NULL, NULL, NULL, &a); if (ec->netwm.opacity == a) return; ec->netwm.opacity = a; @@ -2618,7 +2625,7 @@ e_desk_area_raise(E_Desk_Area *eda) { EINA_LIST_REVERSE_FOREACH_SAFE(eda->ec_lists[i], l, ll, ec) { - evas_object_raise(ec->frame); + e_view_raise_to_top(e_view_client_view_get(e_client_view_get(ec))); } } } @@ -2638,7 +2645,7 @@ e_desk_area_lower(E_Desk_Area *eda) //EINA_LIST_FOREACH(eda->ec_lists[i], l, ec) EINA_LIST_FOREACH_SAFE(eda->ec_lists[i], l, ll, ec) { - evas_object_lower(ec->frame); + e_view_lower_to_bottom(e_view_client_view_get(e_client_view_get(ec))); } } } @@ -2940,7 +2947,7 @@ e_desk_area_has_ec(E_Desk_Area *eda, E_Client *ec) EINA_SAFETY_ON_NULL_RETURN_VAL(eda, EINA_FALSE); - data = evas_object_data_get(ec->frame, DESK_AREA_EC_DATA_KEY); + data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), DESK_AREA_EC_DATA_KEY); if (data == eda) return EINA_TRUE; return EINA_FALSE; diff --git a/src/bin/core/e_intern.h b/src/bin/core/e_intern.h index 4d6fd29..456bd23 100644 --- a/src/bin/core/e_intern.h +++ b/src/bin/core/e_intern.h @@ -20,7 +20,6 @@ #include #include -//soolim #define E_DISPLAY #define CHECKING_PRIMARY_ZPOS diff --git a/src/bin/core/e_pixmap.c b/src/bin/core/e_pixmap.c index 68b69ff..e4283fe 100644 --- a/src/bin/core/e_pixmap.c +++ b/src/bin/core/e_pixmap.c @@ -1,6 +1,8 @@ #include "e_pixmap_intern.h" #include "e_comp_wl_buffer_intern.h" #include "e_comp_object_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #ifndef EGL_TEXTURE_RGBA # define EGL_TEXTURE_RGBA 0x305E @@ -611,7 +613,7 @@ e_pixmap_image_refresh(E_Pixmap *cp) return EINA_FALSE; } - if (e_comp_object_render_update_lock_get(ec->frame)) + if (e_view_client_render_update_lock_get(e_client_view_get(ec))) { ELOGF("PIXMAP", "Render update locked, cp:%p", NULL, cp); return EINA_FALSE; @@ -676,7 +678,7 @@ e_pixmap_image_refresh(E_Pixmap *cp) * managed and be pending if previous buffer is not rendered yet. */ /* set size of image object to new buffer size */ e_pixmap_size_get(cp, &bw, &bh); - e_comp_object_size_update(ec->frame, bw, bh); + e_view_client_size_update(e_client_view_get(ec), bw, bh); } else if (buffer->type == E_COMP_WL_BUFFER_TYPE_TBM) { @@ -693,7 +695,7 @@ e_pixmap_image_refresh(E_Pixmap *cp) * managed and be pending if previous buffer is not rendered yet. */ /* set size of image object to new buffer size */ e_pixmap_size_get(cp, &bw, &bh); - e_comp_object_size_update(ec->frame, bw, bh); + e_view_client_size_update(e_client_view_get(ec), bw, bh); /* buffer has no client resources */ return EINA_TRUE; diff --git a/src/bin/core/e_view_edje.c b/src/bin/core/e_view_edje.c index f5c17fc..729ae15 100644 --- a/src/bin/core/e_view_edje.c +++ b/src/bin/core/e_view_edje.c @@ -386,10 +386,239 @@ e_view_edje_geometry_set(E_View_Edje *edje, int x, int y, int w, int h) e_view_position_set(&edje->view, x, y); } +static void +_e_view_edje_util_show(void *data EINA_UNUSED, Evas_Object *obj) +{ + Eina_Bool ref = EINA_TRUE; + if (evas_object_visible_get(obj)) + { + void *d; + + d = evas_object_data_del(obj, "comp_hiding"); + if (d) + /* currently trying to hide */ + ref = EINA_FALSE; + else + /* already visible */ + return; + } + + evas_object_show(obj); + if (ref) + { + evas_object_ref(obj); + evas_object_data_set(obj, "comp_ref", (void*)1); + } + edje_object_signal_emit(obj, "e,state,visible", "e"); + evas_object_data_set(obj, "comp_showing", (void*)1); + if (e_comp_util_object_is_above_nocomp(obj)) + { + evas_object_data_set(obj, "comp_override", (void*)1); + e_comp_override_add(); + } +} + +static void +_e_view_edje_util_hide(void *data EINA_UNUSED, Evas_Object *obj) +{ + if (!evas_object_visible_get(obj)) return; + /* already hiding */ + if (evas_object_data_get(obj, "comp_hiding")) return; + if (!evas_object_data_del(obj, "comp_showing")) + { + evas_object_ref(obj); + evas_object_data_set(obj, "comp_ref", (void*)1); + } + edje_object_signal_emit(obj, "e,state,hidden", "e"); + evas_object_data_set(obj, "comp_hiding", (void*)1); + + if (evas_object_data_del(obj, "comp_override")) + e_comp_override_timed_pop(); +} + +static void +_e_view_edje_util_done_defer(void *data, E_View_Edje *edje, const char *emission, const char *source) +{ + E_View *edje_view; + + EINA_SAFETY_ON_NULL_RETURN(edje); + + edje_view = e_view_edje_view_get(edje); + if (!e_util_strcmp(emission, "e,action,hide,done")) + { + if (!e_view_data_del(edje_view, "comp_hiding")) return; + + evas_object_intercept_hide_callback_del(edje_view->eo, _e_view_edje_util_hide); + e_view_hide(edje_view); + evas_object_intercept_hide_callback_add(edje_view->eo, _e_view_edje_util_hide, data); + } + else + e_view_data_del(edje_view, "comp_showing"); + if (e_view_data_del(edje_view, "comp_ref")) + evas_object_unref(edje_view->eo); +} + +static void +_e_view_edje_util_del(struct wl_listener *listener, void *data) +{ + E_View_Edje *edje; + E_View *edje_view; + Eina_List *l; + Eina_Bool comp_object; + + edje = wl_container_of(listener, edje, destroy); + edje_view = e_view_edje_view_get(edje); + + comp_object = !!e_view_data_get(edje_view, "comp_object"); + if (comp_object) + { + E_View *view; + + view = e_view_edje_part_swallow_get(edje, "e.swallow.content"); + if (view) + { + e_view_edje_part_unswallow(edje, view); + e_view_destroy(view); + } + + e_comp_render_queue(); + } + l = e_view_data_get(edje_view, "comp_object-to_del"); + E_FREE_LIST(l, evas_object_del); +} + +static void +_e_view_edje_util_restack(struct wl_listener *listener, void *data) +{ + E_View_Edje *edje; + E_View *edje_view; + + edje = wl_container_of(listener, edje, restack); + edje_view = e_view_edje_view_get(edje); + + if (e_comp_util_object_is_above_nocomp(edje_view->eo) && + (!e_view_data_get(edje_view, "comp_override"))) + { + e_view_data_set(edje_view, "comp_override", (void*)1); + e_comp_override_add(); + } +} + +static void +_e_view_edje_event_free(void *d EINA_UNUSED, void *event) +{ + E_Event_Comp_Object *ev = event; + E_Client *ec; + + ec = evas_object_data_get(ev->comp_object, "E_Client"); + if (ec) + { + UNREFD(ec, 1); + e_object_unref(E_OBJECT(ec)); + } + evas_object_unref(ev->comp_object); + free(ev); +} + +static void +_e_view_edje_event_add(E_View_Edje *edje) +{ + E_Event_Comp_Object *ev; + E_View *edje_view; + E_Client *ec; + + if (stopping) return; + ev = E_NEW(E_Event_Comp_Object, 1); + EINA_SAFETY_ON_NULL_RETURN(ev); + + edje_view = e_view_edje_view_get(edje); + evas_object_ref(edje_view->eo); + ec = e_view_data_get(edje_view, "E_Client"); + if (ec) + { + REFD(ec, 1); + e_object_ref(E_OBJECT(ec)); + } + ecore_event_add(E_EVENT_COMP_OBJECT_ADD, ev, _e_view_edje_event_free, NULL); +} + + E_API E_View_Edje * e_view_edje_util_add(E_View *view) { - return NULL; + E_View_Edje *edje; + E_View *edje_view; + const char *name; + E_Comp_Config *conf = e_comp_config_get(); + Eina_Bool skip = EINA_FALSE; + char buf[1024]; + int ok = 0; + int x, y, w, h; + Eina_Bool vis; + + EINA_SAFETY_ON_NULL_RETURN_VAL(view, NULL); + + name = e_view_name_get(view); + vis = e_view_visible_get(view); + edje = e_view_edje_create(e_view_parent_get(view)); + EINA_SAFETY_ON_NULL_RETURN_VAL(edje, NULL); + + edje_view = e_view_edje_view_get(edje); + e_view_data_set(edje_view, "comp_object", (void*)1); + if (name) + skip = (!strncmp(name, "noshadow", 8)); + if (skip) + e_view_data_set(edje_view, "comp_object_skip", (void*)1); + + if (conf->shadow_style) + { + snprintf(buf, sizeof(buf), "e/comp/frame/%s", conf->shadow_style); + ok = e_theme_edje_view_set(edje, NULL, buf); + } + if (!ok) + e_theme_edje_view_set(edje, NULL, "e/comp/frame/default"); + if ((view->type == E_VIEW_TYPE_EDJE) || (!e_view_edje_data_get(edje, "noshadow"))) + e_view_edje_signal_emit(edje, "e,state,shadow,on", "e"); + else + e_view_edje_signal_emit(edje, "e,state,shadow,off", "e"); + + if (view->type == E_VIEW_TYPE_CLIENT) + e_view_client_geometry_get((E_View_Client *)view, &x, &y, &w, &h); + else if (view->type == E_VIEW_TYPE_EDJE) + e_view_edje_geometry_get((E_View_Edje *)view, &x, &y, &w, &h); + else + { + e_view_position_get(view, &x, &y); + if (view->type == E_VIEW_TYPE_RECT) + e_view_rect_size_get((E_View_Rect *)view, &w, &h); + else //E_VIEW_TYPE_IMAGE + e_view_image_size_get((E_View_Image *)view, &w, &h); + } + + e_view_edje_geometry_set(edje, x, y, w, h); + e_view_pass_events_set(edje_view, e_view_pass_events_get(view)); + + e_view_edje_signal_callback_add(edje, "e,action,*,done", "e", _e_view_edje_util_done_defer, NULL); + + evas_object_intercept_show_callback_add(edje_view->eo, _e_view_edje_util_show, NULL); + evas_object_intercept_hide_callback_add(edje_view->eo, _e_view_edje_util_hide, NULL); + + edje->destroy.notify = _e_view_edje_util_del; + e_view_event_listener_add(edje_view, E_VIEW_DESTROY, &edje->destroy); + + edje->restack.notify = _e_view_edje_util_restack; + e_view_event_listener_add(edje_view, E_VIEW_RESTACK, &edje->restack); + + e_view_edje_signal_emit(edje, "e,state,hidden", "e"); + + e_view_edje_part_swallow(edje, "e.swallow.content", view); + + _e_view_edje_event_add(edje); + + if (vis) + e_view_show(edje_view); + + return edje; } E_API bool diff --git a/src/bin/core/e_zone.c b/src/bin/core/e_zone.c index 7deaa25..23915e6 100644 --- a/src/bin/core/e_zone.c +++ b/src/bin/core/e_zone.c @@ -19,6 +19,8 @@ #include "e_comp_canvas_intern.h" #include "e_comp_input_intern.h" #include "e_input_thread_client_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #define ZONE_EC_DATA_KEY "E_Zone_Client" @@ -202,7 +204,7 @@ _e_zone_client_apply_auto_placement(E_Zone *zone, E_Client *ec) else new_y = zy; - e_comp_object_frame_geometry_get(ec->frame, NULL, NULL, &t, NULL); + e_view_client_frame_geometry_get(e_client_view_get(ec), NULL, NULL, &t, NULL); parent_ec = ec->parent; if (parent_ec) @@ -332,8 +334,8 @@ _zone_cb_client_eval_post_new_client(struct wl_listener *listener, void *data) if (ec->re_manage) { int x = ec->x, y = ec->y; - if (ec->x) e_comp_object_frame_xy_adjust(ec->frame, ec->x, 0, &ec->x, NULL); - if (ec->y) e_comp_object_frame_xy_adjust(ec->frame, 0, ec->y, NULL, &ec->y); + if (ec->x) e_view_client_frame_xy_adjust(e_client_view_get(ec), ec->x, 0, &ec->x, NULL); + if (ec->y) e_view_client_frame_xy_adjust(e_client_view_get(ec), 0, ec->y, NULL, &ec->y); if ((x != ec->x) || (y != ec->y)) ec->changes.pos = 1; ec->placed = 1; ec->pre_cb.x = ec->x; ec->pre_cb.y = ec->y; @@ -449,7 +451,7 @@ _e_zone_client_data_set(E_Zone *zone, E_Client *ec) { E_Zone *data; - data = evas_object_data_get(ec->frame, ZONE_EC_DATA_KEY); + data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY); if (data) { if (data == zone) @@ -458,10 +460,10 @@ _e_zone_client_data_set(E_Zone *zone, E_Client *ec) return; } - evas_object_data_del(ec->frame, ZONE_EC_DATA_KEY); + e_view_data_del(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY); } - evas_object_data_set(ec->frame, ZONE_EC_DATA_KEY, zone); + e_view_data_set(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY, zone); } static void @@ -626,7 +628,7 @@ e_zone_reconfigure_clients(E_Zone *zone, int dx, int dy, int dw, int dh) if (!e_zone_has_ec(zone, ec)) continue; if ((dx != 0) || (dy != 0)) - evas_object_move(ec->frame, ec->x + dx, ec->y + dy); + e_view_position_set(e_view_client_view_get(e_client_view_get(ec)), ec->x + dx, ec->y + dy); // we shrank the zone - adjust windows more if ((dw < 0) || (dh < 0)) { @@ -1288,8 +1290,8 @@ _e_zone_free(E_Zone *zone) evas_object_del(zone->bg_event_object); evas_object_del(zone->bg_clip_object); - evas_object_del(zone->base); - evas_object_del(zone->over); + e_view_destroy(zone->base); + e_view_destroy(zone->over); /* free desks */ for (x = 0; x < zone->desk_x_count; x++) @@ -1715,7 +1717,7 @@ _e_zone_client_set(E_Zone *zone, E_Client *ec) if (y < zone->y) y = zone->y; if (y >= zone->y + zone->h) y = zone->y + zone->h - ec->h; } - evas_object_move(ec->frame, x, y); + e_view_position_set(e_view_client_view_get(e_client_view_get(ec)), x, y); } ec->zone = zone; // FIXME: This line must be deleted. @@ -1784,7 +1786,7 @@ e_zone_has_ec(E_Zone *zone, E_Client *ec) EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE); - data = evas_object_data_get(ec->frame, ZONE_EC_DATA_KEY); + data = e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), ZONE_EC_DATA_KEY); if (data == zone) return EINA_TRUE; return EINA_FALSE; @@ -1867,7 +1869,7 @@ e_zone_visibility_calculate(E_Zone *zone) if (e_object_is_del(E_OBJECT(ec))) continue; if (e_client_util_ignored_get(ec)) continue; if (!e_zone_has_ec(zone, ec)) continue; - if (!ec->frame) continue; + if (!e_client_view_get(ec)) continue; if (ec->visibility.skip) continue; if (ec->is_cursor) continue; cdata = e_client_cdata_get(ec); @@ -1889,8 +1891,8 @@ e_zone_visibility_calculate(E_Zone *zone) if (!e_config->calc_vis_without_effect) { - if ((e_comp_object_is_animating(ec->frame)) || - (evas_object_data_get(ec->frame, "effect_running"))) + if ((e_view_client_is_animating(e_client_view_get(ec))) || + (e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), "effect_running"))) { effect_running = EINA_TRUE; if (ec->launching) @@ -1906,7 +1908,7 @@ e_zone_visibility_calculate(E_Zone *zone) ec_vis = ec_opaque = skip_rot_pending_show = is_vis_on_skip = EINA_FALSE; skip_by_pending_show = 0; calc_region = EINA_TRUE; - ec_frame_visible = evas_object_visible_get(ec->frame); + ec_frame_visible = e_view_client_visible_get(e_client_view_get(ec)); iconified_by_client = e_client_is_iconified_by_client(ec); if (!ec->visible) diff --git a/src/bin/debug/e_info_server.c b/src/bin/debug/e_info_server.c index addf334..42a3371 100644 --- a/src/bin/debug/e_info_server.c +++ b/src/bin/debug/e_info_server.c @@ -40,6 +40,7 @@ #include "e_alpha_mask_rect_intern.h" #include "e_display_intern.h" #include "e_video_shell_intern.h" +#include "e_view.h" #include #include @@ -3064,7 +3065,7 @@ _e_info_server_cb_subsurface(const Eldbus_Service_Interface *iface EINA_UNUSED, int x = 0, y = 0, w = 0, h = 0; unsigned int transform = 0, visible = 0, alpha = 0, ignore = 0, maskobj = 0, video = 0, stand = 0; E_Alpha_Mask_Rect *mask_rect; - Ecore_Window mask_rect_object = 0; + Ecore_Window mask_rect_view = 0; const char *name = NULL; E_Comp_Wl_Buffer *buffer; E_Map *map; @@ -3115,7 +3116,7 @@ _e_info_server_cb_subsurface(const Eldbus_Service_Interface *iface EINA_UNUSED, ignore = e_client_util_ignored_get(ec); mask_rect = e_alpha_mask_rect_try_from_ec(ec); if (mask_rect) - mask_rect_object = (Ecore_Window)e_alpha_mask_rect_evas_object_get(mask_rect); + mask_rect_view = (Ecore_Window)e_alpha_mask_rect_view_get(mask_rect); maskobj = e_comp_object_mask_has(ec->frame); video = (ec->comp_data->video_client || e_client_video_hw_composition_check(ec)) ? 1 : 0; name = e_client_util_name_get(ec); @@ -3127,7 +3128,7 @@ _e_info_server_cb_subsurface(const Eldbus_Service_Interface *iface EINA_UNUSED, eldbus_message_iter_arguments_append (struct_of_ec, SIGNATURE_SUBSURFACE, - win, parent, buf_id, x, y, w, h, transform, visible, alpha, ignore, maskobj, video, stand, mask_rect_object, name); + win, parent, buf_id, x, y, w, h, transform, visible, alpha, ignore, maskobj, video, stand, mask_rect_view, name); eldbus_message_iter_container_close(array_of_ec, struct_of_ec); } @@ -3685,10 +3686,10 @@ _e_info_server_cb_bgcolor_set(const Eldbus_Service_Interface *iface EINA_UNUSED, return reply; } - evas_object_color_get(e_comp->bg_blank_object, &pa, &pr, &pg, &pb); - evas_object_color_set(e_comp->bg_blank_object, r, g, b, a); + e_view_color_get(e_comp->bg_blank_view, &pa, &pr, &pg, &pb); + e_view_color_set(e_comp->bg_blank_view, r, g, b, a); - INF("The background color of bg_blank_object has been changed."); + INF("The background color of bg_blank_view has been changed."); INF("(A, R, G, B) : %d, %d, %d, %d -> %d, %d, %d, %d", pa, pr, pg, pb, a, r, g, b); return reply; diff --git a/src/bin/displaymgr/e_hwc.c b/src/bin/displaymgr/e_hwc.c index b6466d5..3f0b8cb 100644 --- a/src/bin/displaymgr/e_hwc.c +++ b/src/bin/displaymgr/e_hwc.c @@ -7,6 +7,8 @@ #include "e_error_intern.h" #include "e_hwc_window_queue_intern.h" #include "e_display_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -726,30 +728,35 @@ e_hwc_deactive_get(E_Hwc *hwc) EINTERN Eina_Bool e_hwc_client_is_above_hwc(E_Client *ec, E_Client *hwc_ec) { - Evas_Object *o; - int layer, hwc_layer; + E_View *view, *view_hwc, *view_tmp; + E_Canvas_Layer layer, layer_hwc; EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_ec, EINA_FALSE); if (ec == hwc_ec) return EINA_FALSE; - if (!evas_object_visible_get(ec->frame)) return EINA_FALSE; + if (!e_view_client_visible_get(e_client_view_get(ec))) return EINA_FALSE; - layer = evas_object_layer_get(ec->frame); - hwc_layer = evas_object_layer_get(hwc_ec->frame); + view = e_view_client_view_get(e_client_view_get(ec)); + view_hwc = e_view_client_view_get(e_client_view_get(hwc_ec)); + + layer = e_canvas_layer_find(e_comp->canvas, view); + layer_hwc = e_canvas_layer_find(e_comp->canvas, view_hwc); /* compare layer */ - if (hwc_layer > layer) return EINA_FALSE; - if (layer > hwc_layer) return EINA_TRUE; + if (layer_hwc > layer) return EINA_FALSE; + if (layer > layer_hwc) return EINA_TRUE; - o = evas_object_above_get(hwc_ec->frame); - if (evas_object_layer_get(o) == hwc_layer) + view_tmp = e_view_above_get(view); + if (e_canvas_layer_find(e_comp->canvas, view_tmp) == layer_hwc) { - do { - if (o == ec->frame) - return EINA_TRUE; - o = evas_object_above_get(o); - } while (o && (evas_object_layer_get(o) == hwc_layer)); + do + { + if (view_tmp == view) + return EINA_TRUE; + view_tmp = e_view_above_get(view_tmp); + } + while (view_tmp && (e_canvas_layer_find(e_comp->canvas, view_tmp) == layer_hwc)); } else return EINA_TRUE; diff --git a/src/bin/displaymgr/e_hwc_planes.c b/src/bin/displaymgr/e_hwc_planes.c index 0f337c4..b29b6a0 100644 --- a/src/bin/displaymgr/e_hwc_planes.c +++ b/src/bin/displaymgr/e_hwc_planes.c @@ -6,8 +6,10 @@ #include "e_hwc_intern.h" #include "e_policy_private_data.h" #include "e_client_intern.h" -#include "e_comp_object_intern.h" #include "e_utils_intern.h" +#include "e_comp_canvas.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include @@ -35,7 +37,7 @@ _e_hwc_planes_ec_check(E_Client *ec) if (ec->comp_override > 0) return EINA_FALSE; - if (e_comp_object_is_animating(ec->frame)) return EINA_FALSE; + if (e_view_client_is_animating(e_client_view_get(ec))) return EINA_FALSE; if ((!cdata) || (!cdata->buffer_ref.buffer) || @@ -92,7 +94,7 @@ _e_hwc_planes_ec_check(E_Client *ec) return EINA_FALSE; } - if (e_comp_object_image_filter_get(ec->frame) != E_COMP_IMAGE_FILTER_NONE) + if (e_view_client_image_filter_get(e_client_view_get(ec)) != E_COMP_IMAGE_FILTER_NONE) return EINA_FALSE; return EINA_TRUE; @@ -414,6 +416,7 @@ _e_hwc_planes_prepare(E_Hwc *hwc, E_Zone *zone) int n_vis = 0, n_ec = 0, n_cur = 0, n_skip = 0; Eina_List *hwc_ok_clist = NULL, *vis_clist = NULL; E_Output *output = hwc->output; + E_View *view; _e_hwc_planes_prepare_init(hwc); @@ -425,15 +428,16 @@ _e_hwc_planes_prepare(E_Hwc *hwc, E_Zone *zone) // check clients not able to use hwc EINA_LIST_FOREACH(vis_clist, vl, ec) { + view = e_view_client_view_get(e_client_view_get(ec)); // if there is a ec which is lower than quickpanel and quickpanel is opened. - if (E_POLICY_QUICKPANEL_LAYER >= evas_object_layer_get(ec->frame)) + if (E_CANVAS_LAYER_CLIENT_ALERT >= e_canvas_layer_find(e_comp_canvas_get(), view)) { // check whether quickpanel is open than break if (e_qps_visible_get()) goto done; } // if ec->frame is not for client buffer (e.g. launchscreen) - if (e_comp_object_content_type_get(ec->frame) != E_COMP_OBJECT_CONTENT_TYPE_INT_IMAGE) + if (e_view_client_content_type_get(e_client_view_get(ec)) != E_COMP_OBJECT_CONTENT_TYPE_INT_IMAGE) goto done; // if there is UI subfrace, it means need to composite @@ -891,7 +895,7 @@ e_hwc_planes_presentation_update(E_Hwc *hwc, E_Client *ec) return EINA_FALSE; } - e_comp_object_hwc_update_set(ec->frame, EINA_TRUE); + e_view_client_hwc_update_set(e_client_view_get(ec), EINA_TRUE); } else { diff --git a/src/bin/displaymgr/e_hwc_window.c b/src/bin/displaymgr/e_hwc_window.c index 1ca8d19..f8a7a4f 100644 --- a/src/bin/displaymgr/e_hwc_window.c +++ b/src/bin/displaymgr/e_hwc_window.c @@ -14,9 +14,10 @@ #include "e_policy_visibility_intern.h" #include "e_client_video_intern.h" #include "e_client_intern.h" -#include "e_comp_object_intern.h" #include "e_utils_intern.h" #include "e_blur_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -620,11 +621,12 @@ _e_hwc_window_free(E_Hwc_Window *hwc_window) } static void -_e_hwc_window_obj_cb_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_view_cb_show(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, show_listener); + if (!hwc_window) return; hwc_window->evas_visible = EINA_TRUE; @@ -632,11 +634,12 @@ _e_hwc_window_obj_cb_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj E } static void -_e_hwc_window_obj_cb_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_view_cb_hide(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, hide_listener); + if (!hwc_window) return; hwc_window->evas_visible = EINA_FALSE; @@ -644,11 +647,12 @@ _e_hwc_window_obj_cb_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj E } static void -_e_hwc_window_obj_cb_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_view_cb_move(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, move_listener); + if (!hwc_window) return; e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_GEOMETRY); @@ -665,11 +669,12 @@ _e_hwc_window_obj_cb_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj E } static void -_e_hwc_window_obj_cb_resize(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_view_cb_resize(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, resize_listener); + if (!hwc_window) return; e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_GEOMETRY); @@ -686,11 +691,12 @@ _e_hwc_window_obj_cb_resize(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj } static void -_e_hwc_window_obj_cb_restack(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_view_cb_restack(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, restack_listener); + if (!hwc_window) return; e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE); } @@ -707,21 +713,11 @@ _e_hwc_window_del(E_Hwc_Window *hwc_window) ec = hwc_window->ec; EINA_SAFETY_ON_NULL_RETURN(ec); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_SHOW, - _e_hwc_window_obj_cb_show, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_HIDE, - _e_hwc_window_obj_cb_hide, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_MOVE, - _e_hwc_window_obj_cb_move, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_RESIZE, - _e_hwc_window_obj_cb_resize, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_RESTACK, - _e_hwc_window_obj_cb_restack, - hwc_window); + wl_list_remove(&hwc_window->show_listener.link); + wl_list_remove(&hwc_window->hide_listener.link); + wl_list_remove(&hwc_window->move_listener.link); + wl_list_remove(&hwc_window->resize_listener.link); + wl_list_remove(&hwc_window->restack_listener.link); ec->hwc_window = NULL; hwc_window->ec = NULL; @@ -794,7 +790,7 @@ _e_hwc_window_cb_image_filter_set(struct wl_listener *listener, void *data) hwc_window = container_of(listener, E_Hwc_Window, image_filter_set_listener); if (!hwc_window->ec) return; - if (e_comp_object_image_filter_get(hwc_window->ec->frame) != E_COMP_IMAGE_FILTER_NONE) + if (e_view_client_image_filter_get(e_client_view_get(hwc_window->ec)) != E_COMP_IMAGE_FILTER_NONE) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_IMAGE_FILTER); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_IMAGE_FILTER); @@ -808,7 +804,7 @@ _e_hwc_window_cb_render_op_set(struct wl_listener *listener, void *data) hwc_window = container_of(listener, E_Hwc_Window, render_op_set_listener); if (!hwc_window->ec) return; - if (e_comp_object_render_op_get(hwc_window->ec->frame) != EVAS_RENDER_BLEND) + if (e_view_client_render_op_get(e_client_view_get(hwc_window->ec)) != E_VIEW_RENDER_BLEND) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_EQUATION); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_EQUATION); @@ -822,7 +818,7 @@ _e_hwc_window_cb_content_type_set(struct wl_listener *listener, void *data) hwc_window = container_of(listener, E_Hwc_Window, content_type_set_listener); if (!hwc_window->ec) return; - if (e_comp_object_content_type_get(hwc_window->ec->frame) != E_COMP_OBJECT_CONTENT_TYPE_INT_IMAGE) + if (e_view_client_content_type_get(e_client_view_get(hwc_window->ec)) != E_COMP_OBJECT_CONTENT_TYPE_INT_IMAGE) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_CONTENT_IMAGE); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_CONTENT_IMAGE); @@ -837,9 +833,9 @@ _e_hwc_window_cb_color_set(struct wl_listener *listener, void *data) hwc_window = container_of(listener, E_Hwc_Window, color_set_listener); if (!hwc_window->ec) return; - e_comp_object_color_get(hwc_window->ec->frame, NULL, NULL, NULL, &alpha); + e_view_client_color_get(e_client_view_get(hwc_window->ec), NULL, NULL, NULL, &alpha); - if ((alpha != 255) && e_comp_object_redirected_get(hwc_window->ec->frame)) + if ((alpha != 255) && e_view_client_redirected_get(e_client_view_get(hwc_window->ec))) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_ALPHA); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_ALPHA); @@ -967,24 +963,24 @@ _e_hwc_window_restriction_init(E_Hwc_Window *hwc_window) if (!hwc_window->ec) return; - if (e_comp_object_image_filter_get(hwc_window->ec->frame) != E_COMP_IMAGE_FILTER_NONE) + if (e_view_client_image_filter_get(e_client_view_get(hwc_window->ec)) != E_COMP_IMAGE_FILTER_NONE) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_IMAGE_FILTER); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_IMAGE_FILTER); - if (e_comp_object_render_op_get(hwc_window->ec->frame) != EVAS_RENDER_BLEND) + if (e_view_client_render_op_get(e_client_view_get(hwc_window->ec)) != E_VIEW_RENDER_BLEND) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_EQUATION); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_EQUATION); - e_comp_object_color_get(hwc_window->ec->frame, NULL, NULL, NULL, &alpha); + e_view_client_color_get(e_client_view_get(hwc_window->ec), NULL, NULL, NULL, &alpha); - if ((alpha != 255) && e_comp_object_redirected_get(hwc_window->ec->frame)) + if ((alpha != 255) && e_view_client_redirected_get(e_client_view_get(hwc_window->ec))) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_ALPHA); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_BLEND_ALPHA); - if (e_comp_object_render_update_lock_get(hwc_window->ec->frame)) + if (e_view_client_render_update_lock_get(e_client_view_get(hwc_window->ec))) e_hwc_window_restriction_set(hwc_window, E_HWC_WINDOW_RESTRICTION_RENDER_UPDATE_LOCK); else e_hwc_window_restriction_unset(hwc_window, E_HWC_WINDOW_RESTRICTION_RENDER_UPDATE_LOCK); @@ -1018,6 +1014,7 @@ static E_Hwc_Window * _e_hwc_window_new(E_Hwc *hwc, E_Client *ec, E_Hwc_Window_State state) { E_Hwc_Window *hwc_window; + E_View *view; tdm_hwc *thwc;; tdm_error error; @@ -1063,37 +1060,33 @@ _e_hwc_window_new(E_Hwc *hwc, E_Client *ec, E_Hwc_Window_State state) e_hwc_presentation_callback_list_init(&hwc_window->presentation_callbacks); hwc_window->image_filter_set_listener.notify = _e_hwc_window_cb_image_filter_set; - e_comp_object_image_filter_set_listener_add(ec->frame, &hwc_window->image_filter_set_listener); + e_view_client_image_filter_set_listener_add(e_client_view_get(ec), &hwc_window->image_filter_set_listener); hwc_window->render_op_set_listener.notify = _e_hwc_window_cb_render_op_set; - e_comp_object_render_op_set_listener_add(ec->frame, &hwc_window->render_op_set_listener); + e_view_client_render_op_set_listener_add(e_client_view_get(ec), &hwc_window->render_op_set_listener); hwc_window->content_type_set_listener.notify = _e_hwc_window_cb_content_type_set; - e_comp_object_content_type_set_listener_add(ec->frame, &hwc_window->content_type_set_listener); + e_view_client_content_type_set_listener_add(e_client_view_get(ec), &hwc_window->content_type_set_listener); hwc_window->color_set_listener.notify = _e_hwc_window_cb_color_set; - e_comp_object_color_set_listener_add(ec->frame, &hwc_window->color_set_listener); + e_view_client_color_set_listener_add(e_client_view_get(ec), &hwc_window->color_set_listener); hwc_window->color_visible_set_listener.notify = _e_hwc_window_cb_color_visible_set; - e_comp_object_color_visible_set_listener_add(ec->frame, &hwc_window->color_visible_set_listener); - - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_SHOW, - _e_hwc_window_obj_cb_show, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_HIDE, - _e_hwc_window_obj_cb_hide, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_MOVE, - _e_hwc_window_obj_cb_move, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_RESIZE, - _e_hwc_window_obj_cb_resize, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_RESTACK, - _e_hwc_window_obj_cb_restack, - hwc_window); - - if (evas_object_visible_get(ec->frame)) + e_view_client_color_visible_set_listener_add(e_client_view_get(ec), &hwc_window->color_visible_set_listener); + + view = e_view_client_view_get(e_client_view_get(ec)); + hwc_window->show_listener.notify = _e_hwc_window_view_cb_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &hwc_window->show_listener); + hwc_window->hide_listener.notify = _e_hwc_window_view_cb_hide; + e_view_event_listener_add(view, E_VIEW_HIDE, &hwc_window->hide_listener); + hwc_window->move_listener.notify = _e_hwc_window_view_cb_move; + e_view_event_listener_add(view, E_VIEW_MOVE, &hwc_window->move_listener); + hwc_window->resize_listener.notify = _e_hwc_window_view_cb_resize; + e_view_event_listener_add(view, E_VIEW_RESIZE, &hwc_window->resize_listener); + hwc_window->restack_listener.notify = _e_hwc_window_view_cb_restack; + e_view_event_listener_add(view, E_VIEW_RESTACK, &hwc_window->restack_listener); + + if (e_view_client_visible_get(e_client_view_get(ec))) e_hwc_window_changed_set(hwc_window, E_HWC_WINS_CHANGED_WIN_VISIBLE); EHWINF("is created on eout:%p, video:%d cursor:%d", @@ -2656,7 +2649,7 @@ _e_hwc_window_client_recover(E_Hwc_Window *hwc_window, Eina_Bool *clear_attach) comp_wl_buffer = _e_hwc_window_comp_wl_buffer_get(hwc_window); if ((!comp_wl_buffer) && - (!evas_object_visible_get(ec->frame)) && + (!e_view_client_visible_get(e_client_view_get(ec))) && (ec->exp_iconify.buffer_flush) && (e_policy_visibility_client_is_iconic(ec))) return EINA_FALSE; @@ -2724,15 +2717,15 @@ _e_hwc_window_rendered_window_set(E_Hwc_Window *hwc_window, Eina_Bool set) if (hwc_window->ec->redirected) { - e_comp_object_redirected_set(ec->frame, EINA_TRUE); + e_view_client_redirected_set(e_client_view_get(ec), true); e_pixmap_image_refresh(ec->pixmap); - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); if (!ret) - e_comp_object_render_update_del(ec->frame); + e_view_client_render_update_del(e_client_view_get(ec)); e_hwc_windows_present_sync(hwc_window->hwc); @@ -2747,7 +2740,7 @@ _e_hwc_window_rendered_window_set(E_Hwc_Window *hwc_window, Eina_Bool set) { if (hwc_window->ec->redirected) { - e_comp_object_redirected_set(ec->frame, EINA_FALSE); + e_view_client_redirected_set(e_client_view_get(ec), false); e_hwc_windows_present_sync(hwc_window->hwc); @@ -3369,14 +3362,16 @@ _e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window) E_Map *map = NULL, *new_map = NULL; int w, h; Eina_Bool enable; + E_View *view; - EINA_SAFETY_ON_NULL_RETURN(hwc_window->below_transparent_obj); + EINA_SAFETY_ON_NULL_RETURN(hwc_window->below_transparent_view); - evas_object_geometry_get(hwc_window->below_transparent_obj, NULL, NULL, &w, &h); + e_view_rect_size_get(hwc_window->below_transparent_view, &w, &h); + view = e_view_rect_view_get(hwc_window->below_transparent_view); enable = e_client_transform_core_enable_get(hwc_window->ec); if (enable) - map = e_comp_object_map_get(hwc_window->ec->frame); + map = e_view_client_map_get(e_client_view_get(hwc_window->ec)); if ((enable) && (map)) { @@ -3397,7 +3392,7 @@ _e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window) return; } - e_map_util_points_populate_from_object_full(new_map, hwc_window->ec->frame, 0); + e_map_util_points_populate_from_view_full(new_map, view, 0); e_map_util_points_color_set(new_map, 255, 255, 255, 255); } @@ -3406,8 +3401,8 @@ _e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window) e_map_point_image_uv_set(new_map, 2, w, h); e_map_point_image_uv_set(new_map, 3, 0, h); - e_comp_object_map_set(hwc_window->below_transparent_obj, new_map); - e_comp_object_map_enable_set(hwc_window->below_transparent_obj, EINA_TRUE); + e_view_map_set(view, new_map); + e_view_map_enable_set(view, true); if (map) e_map_free(map); @@ -3415,62 +3410,78 @@ _e_hwc_window_below_transparent_obj_map_apply(E_Hwc_Window *hwc_window) } static void -_e_hwc_window_below_transparent_obj_cb_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_below_transparent_view_cb_show(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; + E_View *view; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, transparent_show_listener); + if (!hwc_window) return; - evas_object_show(hwc_window->below_transparent_obj); + view = e_view_rect_view_get(hwc_window->below_transparent_view); + e_view_show(view); } static void -_e_hwc_window_below_transparent_obj_cb_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_below_transparent_view_cb_hide(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; + E_View *view; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, transparent_hide_listener); + if (!hwc_window) return; - evas_object_hide(hwc_window->below_transparent_obj); + view = e_view_rect_view_get(hwc_window->below_transparent_view); + e_view_hide(view); } static void -_e_hwc_window_below_transparent_obj_cb_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_below_transparent_view_cb_move(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; + E_View *view; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, transparent_move_listener); + if (!hwc_window) return; - evas_object_move(hwc_window->below_transparent_obj, hwc_window->ec->x, hwc_window->ec->y); + view = e_view_rect_view_get(hwc_window->below_transparent_view); + e_view_position_set(view, hwc_window->ec->x, hwc_window->ec->y); _e_hwc_window_below_transparent_obj_map_apply(hwc_window); } static void -_e_hwc_window_below_transparent_obj_cb_resize(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_below_transparent_view_cb_resize(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, transparent_resize_listener); + if (!hwc_window) return; _e_hwc_window_below_transparent_obj_map_apply(hwc_window); } static void -_e_hwc_window_below_transparent_obj_cb_restack(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_hwc_window_below_transparent_view_cb_restack(struct wl_listener *listener, void *data) { E_Hwc_Window *hwc_window; + E_View *view, *ec_view; - if (!(hwc_window = data)) return; + hwc_window = wl_container_of(listener, hwc_window, transparent_restack_listener); + if (!hwc_window) return; - evas_object_layer_set(hwc_window->below_transparent_obj, evas_object_layer_get(hwc_window->ec->frame)); - evas_object_stack_below(hwc_window->below_transparent_obj, hwc_window->ec->frame); + view = e_view_rect_view_get(hwc_window->below_transparent_view); + ec_view = e_view_client_view_get(e_client_view_get(hwc_window->ec)); + e_view_reparent(view, e_view_parent_get(ec_view)); + e_view_place_below(view, ec_view); } EINTERN void e_hwc_window_below_transparent_obj_set(E_Hwc_Window *hwc_window, Eina_Bool set) { - Evas_Object *below_transparent_obj; + E_View_Rect *below_transparent_view; + const int color[4] = {0, 0, 0, 0}; + E_View *view, *ec_view; EINA_SAFETY_ON_NULL_RETURN(hwc_window); @@ -3478,70 +3489,56 @@ e_hwc_window_below_transparent_obj_set(E_Hwc_Window *hwc_window, Eina_Bool set) { EINA_SAFETY_ON_NULL_RETURN(hwc_window->ec); - if (hwc_window->below_transparent_obj) return; + if (hwc_window->below_transparent_view) return; - below_transparent_obj = evas_object_rectangle_add(e_comp->evas); - EINA_SAFETY_ON_NULL_RETURN(below_transparent_obj); + ec_view = e_view_client_view_get(e_client_view_get(hwc_window->ec)); + below_transparent_view = e_view_rect_create(e_view_parent_get(ec_view), 1, 1, color); + EINA_SAFETY_ON_NULL_RETURN(below_transparent_view); - evas_object_pass_events_set(below_transparent_obj, EINA_TRUE); + view = e_view_rect_view_get(below_transparent_view); - evas_object_layer_set(below_transparent_obj, evas_object_layer_get(hwc_window->ec->frame)); - evas_object_stack_below(below_transparent_obj, hwc_window->ec->frame); - evas_object_render_op_set(below_transparent_obj, EVAS_RENDER_COPY); + e_view_pass_events_set(view, true); + e_view_place_below(view, ec_view); + e_view_render_op_set(view, E_VIEW_RENDER_COPY); - evas_object_color_set(below_transparent_obj, 0, 0, 0, 0); - evas_object_move(below_transparent_obj, hwc_window->ec->x, hwc_window->ec->y); - evas_object_resize(below_transparent_obj, 1, 1); - evas_object_name_set(below_transparent_obj, "hwc_below_transparent_obj"); + e_view_position_set(view, hwc_window->ec->x, hwc_window->ec->y); + e_view_name_set(view, "hwc_below_transparent_obj"); - hwc_window->below_transparent_obj = below_transparent_obj; + hwc_window->below_transparent_view = below_transparent_view; _e_hwc_window_below_transparent_obj_map_apply(hwc_window); - if (evas_object_visible_get(hwc_window->ec->frame)) - evas_object_show(hwc_window->below_transparent_obj); - - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_SHOW, - _e_hwc_window_below_transparent_obj_cb_show, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_HIDE, - _e_hwc_window_below_transparent_obj_cb_hide, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_MOVE, - _e_hwc_window_below_transparent_obj_cb_move, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_RESIZE, - _e_hwc_window_below_transparent_obj_cb_resize, - hwc_window); - evas_object_event_callback_add(hwc_window->ec->frame, EVAS_CALLBACK_RESTACK, - _e_hwc_window_below_transparent_obj_cb_restack, - hwc_window); + if (e_view_visible_get(ec_view)) + e_view_show(view); + + hwc_window->transparent_show_listener.notify = _e_hwc_window_below_transparent_view_cb_show; + e_view_event_listener_add(ec_view, E_VIEW_SHOW, &hwc_window->transparent_show_listener); + hwc_window->transparent_hide_listener.notify = _e_hwc_window_below_transparent_view_cb_hide; + e_view_event_listener_add(ec_view, E_VIEW_HIDE, &hwc_window->transparent_hide_listener); + hwc_window->transparent_move_listener.notify = _e_hwc_window_below_transparent_view_cb_move; + e_view_event_listener_add(ec_view, E_VIEW_MOVE, &hwc_window->transparent_move_listener); + hwc_window->transparent_resize_listener.notify = _e_hwc_window_below_transparent_view_cb_resize; + e_view_event_listener_add(ec_view, E_VIEW_RESIZE, &hwc_window->transparent_resize_listener); + hwc_window->transparent_restack_listener.notify = _e_hwc_window_below_transparent_view_cb_restack; + e_view_event_listener_add(ec_view, E_VIEW_RESTACK, &hwc_window->transparent_restack_listener); EHWINF("Set below_transparent_obj", hwc_window->ec, hwc_window->hwc, hwc_window); } else { - if (!hwc_window->below_transparent_obj) return; + if (!hwc_window->below_transparent_view) return; - E_FREE_FUNC(hwc_window->below_transparent_obj, evas_object_del); + view = e_view_rect_view_get(hwc_window->below_transparent_view); + e_view_destroy(view); + hwc_window->below_transparent_view = NULL; if (hwc_window->ec) { - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_SHOW, - _e_hwc_window_below_transparent_obj_cb_show, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_HIDE, - _e_hwc_window_below_transparent_obj_cb_hide, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_MOVE, - _e_hwc_window_below_transparent_obj_cb_move, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_RESIZE, - _e_hwc_window_below_transparent_obj_cb_resize, - hwc_window); - evas_object_event_callback_del_full(hwc_window->ec->frame, EVAS_CALLBACK_RESTACK, - _e_hwc_window_below_transparent_obj_cb_restack, - hwc_window); + wl_list_remove(&hwc_window->transparent_show_listener.link); + wl_list_remove(&hwc_window->transparent_hide_listener.link); + wl_list_remove(&hwc_window->transparent_move_listener.link); + wl_list_remove(&hwc_window->transparent_resize_listener.link); + wl_list_remove(&hwc_window->transparent_restack_listener.link); } EHWINF("Unset below_transparent_obj", hwc_window->ec, hwc_window->hwc, hwc_window); @@ -3644,6 +3641,7 @@ e_hwc_window_client_geometry_visible_get(E_Hwc_Window *hwc_window) int ee_w, ee_h; int x1, x2, y1, y2; E_Map *map; + E_View *view; EINA_SAFETY_ON_NULL_RETURN_VAL(hwc_window, EINA_FALSE); @@ -3653,7 +3651,8 @@ e_hwc_window_client_geometry_visible_get(E_Hwc_Window *hwc_window) ecore_evas_geometry_get(e_comp->ee, NULL, NULL, &ee_w, &ee_h); e_client_geometry_get(ec, &x, &y, &w, &h); - if ((ec->is_cursor) && (evas_object_map_enable_get(ec->frame))) + view = e_view_client_view_get(e_client_view_get(ec)); + if ((ec->is_cursor) && (e_view_map_enable_get(view))) { map = e_client_map_get(ec); if (map) diff --git a/src/bin/displaymgr/e_hwc_window_queue.c b/src/bin/displaymgr/e_hwc_window_queue.c index 8091b2f..8985186 100644 --- a/src/bin/displaymgr/e_hwc_window_queue.c +++ b/src/bin/displaymgr/e_hwc_window_queue.c @@ -8,6 +8,7 @@ #include "e_hwc_intern.h" #include "e_policy_visibility_intern.h" #include "e_client_intern.h" +#include "e_view_client_intern.h" # include # include @@ -1358,7 +1359,7 @@ _e_hwc_window_queue_copy_thread_run_end_cb(void *data, Ecore_Thread *thread) if (!(ec = copy_thread_data->hwc_window->ec)) goto end; if (!e_client_cdata_get(ec)) goto end; - if ((!evas_object_visible_get(ec->frame)) && + if ((!e_view_client_visible_get(e_client_view_get(ec))) && (ec->exp_iconify.buffer_flush) && (e_policy_visibility_client_is_iconic(ec))) goto end; @@ -1377,9 +1378,9 @@ _e_hwc_window_queue_copy_thread_run_end_cb(void *data, Ecore_Thread *thread) e_comp_wl_surface_attach(ec, copy_comp_buffer); e_pixmap_image_refresh(ec->pixmap); - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); if (!comp_buffer) e_comp_wl_surface_attach(ec, NULL); @@ -1578,7 +1579,7 @@ _e_hwc_window_queue_prepare_unset(E_Hwc_Window_Queue *queue) if (!hwc_window->ec) return; - if ((!evas_object_visible_get(hwc_window->ec->frame)) && + if ((!e_view_client_visible_get(e_client_view_get(hwc_window->ec))) && (hwc_window->ec->exp_iconify.buffer_flush) && (e_policy_visibility_client_is_iconic(hwc_window->ec))) return; diff --git a/src/bin/displaymgr/e_hwc_windows.c b/src/bin/displaymgr/e_hwc_windows.c index d4a38b9..7205d42 100644 --- a/src/bin/displaymgr/e_hwc_windows.c +++ b/src/bin/displaymgr/e_hwc_windows.c @@ -11,12 +11,13 @@ #include "e_egl_sync_intern.h" #include "e_client_video_intern.h" #include "e_client_intern.h" -#include "e_comp_object_intern.h" #include "e_utils_intern.h" #include "services/e_service_quickpanel_intern.h" #include "e_policy_private_data.h" #include "e_policy_intern.h" #include "e_display_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" # include # include @@ -987,7 +988,7 @@ _e_hwc_windows_visible_windows_list_get(E_Hwc *hwc) e_client_geometry_get(ec, &x, &y, &w, &h); - if ((!effect_client) && (!e_comp_object_color_visible_get(ec->frame))) + if ((!effect_client) && (!e_view_client_color_visible_get(e_client_view_get(ec)))) { e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_NONE, EINA_TRUE); @@ -3763,6 +3764,7 @@ _e_hwc_windows_window_debug_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug Eina_Bool vis_skip = EINA_FALSE; E_Hwc_Window_Update_Data *update; int pending_idx; + E_View *view; eldbus_message_iter_arguments_append(iter, "as", &line_array); @@ -3821,7 +3823,8 @@ _e_hwc_windows_window_debug_info_get(Eldbus_Message_Iter *iter, E_Hwc_Wins_Debug if (hwc_window->ec) { - if ((hwc_window->ec->hwc_visible_skip) || (evas_object_data_get(hwc_window->ec->frame, "comp_skip"))) + view = e_view_client_view_get(e_client_view_get(hwc_window->ec)); + if ((hwc_window->ec->hwc_visible_skip) || (e_view_data_get(view, "comp_skip"))) vis_skip = EINA_TRUE; } diff --git a/src/bin/displaymgr/e_output.c b/src/bin/displaymgr/e_output.c index b5f1a2d..c48f413 100644 --- a/src/bin/displaymgr/e_output.c +++ b/src/bin/displaymgr/e_output.c @@ -15,6 +15,7 @@ #include "e_zone_intern.h" #include "e_video_debug_intern.h" #include "e_display_intern.h" +#include "e_view_client_intern.h" #include @@ -202,8 +203,8 @@ _e_output_top_visible_ec_get() if (ec->iconic) continue; if (ec->visible == 0) continue; if (!(e_client_visibility_get(ec) == 0 || e_client_visibility_get(ec) == 1)) continue; - if (!ec->frame) continue; - if (!evas_object_visible_get(ec->frame)) continue; + if (!e_client_view_get(ec)) continue; + if (!e_view_client_visible_get(e_client_view_get(ec))) continue; if (e_comp_wl_subsurface_check(ec)) continue; return ec; @@ -482,7 +483,7 @@ _e_output_animating_check() { if (ec->visible && !ec->input_only) { - if (e_comp_object_is_animating(ec->frame)) + if (e_view_client_is_animating(e_client_view_get(ec))) return EINA_TRUE; } } @@ -501,7 +502,7 @@ _e_output_render_update(E_Output *output) E_CLIENT_FOREACH(ec) { if (ec->visible && !ec->input_only) - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); } e_output_render(output); @@ -658,10 +659,10 @@ _e_output_visible_client_check(E_Output *output) { if (e_object_is_del(E_OBJECT(ec))) continue; if (e_client_util_ignored_get(ec)) continue; - if (!ec->frame) continue; + if (!e_client_view_get(ec)) continue; if (ec->is_cursor) continue; if (!ec->visible) continue; - if (!evas_object_visible_get(ec->frame)) continue; + if (!e_view_client_visible_get(e_client_view_get(ec))) continue; if (e_comp_wl_subsurface_check(ec)) continue; cdata = e_client_cdata_get(ec); if (cdata && !cdata->mapped) continue; diff --git a/src/bin/displaymgr/e_plane.c b/src/bin/displaymgr/e_plane.c index 585fd93..9f02699 100644 --- a/src/bin/displaymgr/e_plane.c +++ b/src/bin/displaymgr/e_plane.c @@ -5,8 +5,8 @@ #include "e_output_intern.h" #include "e_comp_wl_video_buffer_intern.h" #include "e_client_intern.h" -#include "e_comp_object_intern.h" #include "e_utils_intern.h" +#include "e_view_client_intern.h" #include # include @@ -444,7 +444,7 @@ _e_plane_surface_cancel_acquire(E_Plane *plane, tbm_surface_h tsurface) ERR("fail to e_plane_renderer_surface_queue_cancel_acquire"); } - if (ec) e_comp_object_hwc_update_set(ec->frame, EINA_TRUE); + if (ec) e_view_client_hwc_update_set(e_client_view_get(ec), true); return; } @@ -464,9 +464,9 @@ _e_plane_surface_from_client_acquire_reserved(E_Plane *plane) if (!e_plane_renderer_surface_queue_clear(renderer)) ERR("fail to e_plane_renderer_surface_queue_clear"); - if (e_comp_object_hwc_update_exists(ec->frame)) + if (e_view_client_hwc_update_exists(e_client_view_get(ec))) { - e_comp_object_hwc_update_set(ec->frame, EINA_FALSE); + e_view_client_hwc_update_set(e_client_view_get(ec), false); if (plane_trace_debug) ELOGF("E_PLANE", "Display Plane(%p) zpos(%d) Client ec(%p, %s)", @@ -504,13 +504,13 @@ _e_plane_surface_from_client_acquire(E_Plane *plane) if (!buffer) return NULL; - if (!e_comp_object_hwc_update_exists(ec->frame)) return NULL; + if (!e_view_client_hwc_update_exists(e_client_view_get(ec))) return NULL; if (plane_trace_debug) ELOGF("E_PLANE", "Display Plane(%p) zpos(%d) Client ec(%p, %s)", ec, plane, plane->zpos, ec, e_client_util_name_get(ec)); - e_comp_object_hwc_update_set(ec->frame, EINA_FALSE); + e_view_client_hwc_update_set(e_client_view_get(ec), false); if (plane->is_fb) { @@ -554,13 +554,13 @@ _e_plane_cursor_surface_acquire(E_Plane *plane) buffer = cdata->buffer_ref.buffer; if (!buffer) return NULL; - if (!e_comp_object_hwc_update_exists(ec->frame)) return NULL; + if (!e_view_client_hwc_update_exists(e_client_view_get(ec))) return NULL; if (plane_trace_debug) ELOGF("E_PLANE", "Display Cursor Plane(%p) zpos(%d) ec(%p)", ec, plane, plane->zpos, ec); - e_comp_object_hwc_update_set(ec->frame, EINA_FALSE); + e_view_client_hwc_update_set(e_client_view_get(ec), false); if (!e_plane_renderer_cursor_surface_refresh(renderer, ec)) { @@ -848,7 +848,7 @@ _e_plane_unset_candidate_set(E_Plane *plane, Eina_Bool sync) EINA_SAFETY_ON_NULL_RETURN(renderer); - visible = evas_object_visible_get(plane->ec->frame); + visible = e_view_client_visible_get(e_client_view_get(plane->ec)); plane->unset_counter = e_plane_renderer_render_count_get(fb_target->renderer); @@ -2898,7 +2898,7 @@ e_plane_ec_set(E_Plane *plane, E_Client *ec) _e_plane_set_counter_set(plane, ec); - e_comp_object_hwc_update_set(ec->frame, EINA_TRUE); + e_view_client_hwc_update_set(e_client_view_get(ec), true); if (plane->ec_redirected) { @@ -2933,7 +2933,7 @@ e_plane_ec_set(E_Plane *plane, E_Client *ec) * the plane at the e_output_commit. */ if (!plane->is_fb && plane->ec && plane->set_counter && - evas_object_visible_get(plane->ec->frame)) + e_view_client_visible_get(e_client_view_get(plane->ec))) { if (!plane->unset_ec_pending) { diff --git a/src/bin/displaymgr/video/e_video_hwc.c b/src/bin/displaymgr/video/e_video_hwc.c index 9754116..828ffb6 100644 --- a/src/bin/displaymgr/video/e_video_hwc.c +++ b/src/bin/displaymgr/video/e_video_hwc.c @@ -11,6 +11,7 @@ #include "e_video_debug_intern.h" #include "e_client_intern.h" #include "e_compositor_intern.h" +#include "e_view_client_intern.h" #include @@ -28,6 +29,12 @@ E_Video_Hwc *evh; \ evh = container_of(iface, E_Video_Hwc, iface) +typedef struct +{ + int x; + int y; +} E_Video_Point; + static Eina_Bool _e_video_hwc_render(E_Video_Hwc *evh, const char *func); static void _e_video_hwc_buffer_show(E_Video_Hwc *evh, E_Comp_Wl_Video_Buf *vbuf, unsigned int transform); static void _e_video_hwc_buffer_commit(E_Video_Hwc *evh, E_Comp_Wl_Video_Buf *vbuf); @@ -59,6 +66,7 @@ static Eina_Bool _e_video_hwc_client_visible_get(E_Client *ec) { E_Client *offscreen_parent; + E_View_Client* view_client; if (!e_pixmap_resource_get(ec->pixmap)) { @@ -77,13 +85,12 @@ _e_video_hwc_client_visible_get(E_Client *ec) return EINA_FALSE; } - if (!evas_object_visible_get(ec->frame)) - { - VDB("evas obj invisible", ec); - return EINA_FALSE; - } + view_client = e_client_view_get(ec); + if (view_client && e_view_client_visible_get(view_client)) + return EINA_TRUE; - return EINA_TRUE; + VDB("view invisible", ec); + return EINA_FALSE; } /* Video Buffer implementation */ @@ -808,14 +815,14 @@ _screen_rect_get(E_Zone *zone, enum wl_output_transform transform) } static void -_point_translate(Evas_Point *point, int x_axis, int y_axis) +_point_translate(E_Video_Point *point, int x_axis, int y_axis) { point->x -= x_axis; point->y -= y_axis; } static void -_rect_to_points(Eina_Rectangle *rect, Evas_Point points[2]) +_rect_to_points(Eina_Rectangle *rect, E_Video_Point points[2]) { points[0].x = rect->x; points[0].y = rect->y; @@ -824,7 +831,7 @@ _rect_to_points(Eina_Rectangle *rect, Evas_Point points[2]) } static void -_points_to_rect(Evas_Point points[2], Eina_Rectangle *rect) +_points_to_rect(E_Video_Point points[2], Eina_Rectangle *rect) { rect->x = MIN(points[0].x, points[1].x); rect->y = MIN(points[0].y, points[1].y); @@ -895,7 +902,7 @@ _e_video_hwc_viewport_crop_by_screen(E_Video_Hwc_Geometry *in_out, E_Zone *zone, { Eina_Rectangle *output_rect, *buffer_rect; Eina_Rectangle cropped_output_rect, screen_rect; - Evas_Point points[2]; + E_Video_Point points[2]; buffer_rect = &in_out->input_r; output_rect = &in_out->tdm.output_r; @@ -1083,7 +1090,7 @@ normal: (r)->h = MAX(vs[0].y, vs[2].y) - (r)->y static Eina_Bool -_e_video_hwc_coords_to_rectangle_convert(Evas_Point p[4], Eina_Rectangle *rect, uint *transform) +_e_video_hwc_coords_to_rectangle_convert(E_Video_Point p[4], Eina_Rectangle *rect, uint *transform) { Eina_Rectangle boundary = {0,}; Eina_Bool ret = EINA_FALSE; @@ -1155,13 +1162,13 @@ static Eina_Bool _e_video_hwc_geometry_map_apply(E_Client *ec, E_Video_Hwc_Geometry *out) { E_Map *m; - Evas_Point p[4]; + E_Video_Point p[4]; Eina_Rectangle output_r; uint transform; int i; EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(ec->frame, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(e_client_view_get(ec), EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(out, EINA_FALSE); m = e_client_map_get(ec); @@ -1184,8 +1191,8 @@ _e_video_hwc_geometry_map_apply(E_Client *ec, E_Video_Hwc_Geometry *out) return EINA_FALSE; } - /* NOTE Merge transform value from evas_map with E_Comp_Wl_Buffer_Viewport's one. - * Since buffer.transform isn't applied using evas_map, + /* NOTE Merge transform value from E_Comp_Wl_Buffer_Viewport's one. + * Since buffer.transform isn't applied, * it has to be taken into account here to apply buffer.transform * and rotation of e_client_transform together. */ transform = @@ -1270,23 +1277,25 @@ _e_video_hwc_render_queue(E_Video_Hwc *evh) } static void -_e_video_hwc_cb_evas_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_video_hwc_cb_resize(struct wl_listener *listener, void *data) { - E_Video_Hwc *evh = data; + E_Video_Hwc *evh = wl_container_of(listener, evh, resize_listener); + E_View_Client* view_client = e_client_view_get(evh->ec); /* Since video content will be displayed on the overlay plane, * it's reasonable to keep the size of composite object to 1x1. * Otherwise, it will cause memory usage to be increased unnecessarily. */ - evas_object_resize(evh->ec->frame, 1, 1); + if (view_client) + e_view_client_size_set(view_client, 1, 1); evh->render.map = EINA_TRUE; _e_video_hwc_render_queue(evh); } static void -_e_video_hwc_cb_evas_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_video_hwc_cb_move(struct wl_listener *listener, void *data) { - E_Video_Hwc *evh = data; + E_Video_Hwc *evh = wl_container_of(listener, evh, move_listener); evh->render.map = EINA_TRUE; _e_video_hwc_render_queue(evh); @@ -1470,8 +1479,8 @@ _e_video_hwc_geometry_output_rect_get(E_Client *ec, Eina_Rectangle *out) out->w = (out->w + 1) & ~1; out->h = ec->comp_data->height_from_viewport; - e_comp_object_frame_xy_unadjust(ec->frame, out->x, out->y, &out->x, &out->y); - e_comp_object_frame_wh_unadjust(ec->frame, out->w, out->h, &out->w, &out->h); + e_view_client_frame_xy_unadjust(e_client_view_get(ec), out->x, out->y, &out->x, &out->y); + e_view_client_frame_wh_unadjust(e_client_view_get(ec), out->w, out->h, &out->w, &out->h); } /* convert from logical screen to physical output */ @@ -1745,12 +1754,12 @@ _e_video_hwc_cb_client_buffer_change(void *data, int type, void *event) } static void -_e_video_hwc_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_video_hwc_cb_show(struct wl_listener *listener, void *data) { E_Video_Hwc *evh; E_Client *ec; - evh = data; + evh = wl_container_of(listener, evh, show_listener); ec = evh->ec; if (evh->need_force_render) @@ -1784,6 +1793,7 @@ _e_video_hwc_cb_surface_viewport(struct wl_listener *listener, void *data) static void _e_video_hwc_client_event_init(E_Video_Hwc *evh) { + E_View_Client* view_client; /* In order to try to redraw video whenever viewport changes. */ evh->surface_viewport_listener.notify = _e_video_hwc_cb_surface_viewport; if (evh->ec->comp_data) @@ -1792,12 +1802,18 @@ _e_video_hwc_client_event_init(E_Video_Hwc *evh) &evh->surface_viewport_listener); } - evas_object_event_callback_add(evh->ec->frame, EVAS_CALLBACK_SHOW, - _e_video_hwc_cb_evas_show, evh); - evas_object_event_callback_add(evh->ec->frame, EVAS_CALLBACK_RESIZE, - _e_video_hwc_cb_evas_resize, evh); - evas_object_event_callback_add(evh->ec->frame, EVAS_CALLBACK_MOVE, - _e_video_hwc_cb_evas_move, evh); + view_client = e_client_view_get(evh->ec); + if (view_client) + { + E_View* view = e_view_client_view_get(view_client); + evh->show_listener.notify = _e_video_hwc_cb_show; + evh->resize_listener.notify = _e_video_hwc_cb_resize; + evh->move_listener.notify = _e_video_hwc_cb_move; + + e_view_event_listener_add(view, E_VIEW_SHOW, &evh->show_listener); + e_view_event_listener_add(view, E_VIEW_RESIZE, &evh->resize_listener); + e_view_event_listener_add(view, E_VIEW_MOVE, &evh->move_listener); + } E_LIST_HANDLER_APPEND(evh->ec_event_handler, E_EVENT_CLIENT_SHOW, _e_video_hwc_cb_client_show, evh); @@ -1808,16 +1824,23 @@ _e_video_hwc_client_event_init(E_Video_Hwc *evh) static void _e_video_hwc_client_event_deinit(E_Video_Hwc *evh) { + E_View_Client* view_client; /* links for listener have to be removed only in case comp_data is valid. */ if (evh->ec->comp_data) wl_list_remove(&evh->surface_viewport_listener.link); - evas_object_event_callback_del_full(evh->ec->frame, EVAS_CALLBACK_SHOW, - _e_video_hwc_cb_evas_show, evh); - evas_object_event_callback_del_full(evh->ec->frame, EVAS_CALLBACK_RESIZE, - _e_video_hwc_cb_evas_resize, evh); - evas_object_event_callback_del_full(evh->ec->frame, EVAS_CALLBACK_MOVE, - _e_video_hwc_cb_evas_move, evh); + view_client = e_client_view_get(evh->ec); + if (view_client) + { + E_View* view = e_view_client_view_get(view_client); + e_view_event_listener_del(view, E_VIEW_SHOW, &evh->show_listener); + e_view_event_listener_del(view, E_VIEW_RESIZE, &evh->resize_listener); + e_view_event_listener_del(view, E_VIEW_MOVE, &evh->move_listener); + + evh->show_listener.notify = NULL; + evh->resize_listener.notify = NULL; + evh->move_listener.notify = NULL; + } E_FREE_LIST(evh->ec_event_handler, ecore_event_handler_del); } @@ -1852,8 +1875,8 @@ _e_video_hwc_iface_destroy(E_Video_Comp_Iface *iface) /* destroy converter second */ E_FREE_FUNC(evh->pp, _e_video_hwc_pp_destroy); - if (e_comp_object_mask_has(evh->ec->frame)) - e_comp_object_mask_set(evh->ec->frame, EINA_FALSE); + if (e_view_client_mask_has(e_client_view_get(evh->ec))) + e_view_client_mask_set(e_client_view_get(evh->ec), EINA_FALSE); _e_video_hwc_client_event_deinit(evh); @@ -1939,6 +1962,7 @@ _e_video_hwc_create(E_Client *ec) E_Hwc_Policy hwc_policy; E_Output *output; E_Zone *zone; + E_View_Client* view_client; zone = e_comp_zone_find_by_ec(ec); EINA_SAFETY_ON_NULL_RETURN_VAL(zone, NULL); @@ -1970,7 +1994,9 @@ _e_video_hwc_create(E_Client *ec) /* Since video content will be displayed on the overlay plane, * it's reasonable to keep the size of composite object to 1x1. * Otherwise, it will cause memory usage to be increased unnecessarily. */ - evas_object_resize(ec->frame, 1, 1); + view_client = e_client_view_get(ec); + if (view_client) + e_view_client_size_set(view_client, 1, 1); evh->hwc_policy = hwc_policy; evh->e_output = output; @@ -2069,17 +2095,17 @@ e_video_hwc_client_mask_update(E_Video_Hwc *evh) if (punch) { - if (!e_comp_object_mask_has(evh->ec->frame)) + if (!e_view_client_mask_has(e_client_view_get(evh->ec))) { - e_comp_object_mask_set(evh->ec->frame, EINA_TRUE); + e_view_client_mask_set(e_client_view_get(evh->ec), true); VIN("punched", evh->ec); } } else { - if (e_comp_object_mask_has(evh->ec->frame)) + if (e_view_client_mask_has(e_client_view_get(evh->ec))) { - e_comp_object_mask_set(evh->ec->frame, EINA_FALSE); + e_view_client_mask_set(e_client_view_get(evh->ec), false); VIN("Un-punched", evh->ec); } } diff --git a/src/bin/displaymgr/video/e_video_hwc_intern.h b/src/bin/displaymgr/video/e_video_hwc_intern.h index 482b41e..bcef610 100644 --- a/src/bin/displaymgr/video/e_video_hwc_intern.h +++ b/src/bin/displaymgr/video/e_video_hwc_intern.h @@ -113,6 +113,9 @@ struct _E_Video_Hwc Eina_Bool need_force_render; Eina_Bool deleted; + struct wl_listener show_listener; + struct wl_listener resize_listener; + struct wl_listener move_listener; }; /* For HWC interface */ diff --git a/src/bin/displaymgr/video/e_video_hwc_planes.c b/src/bin/displaymgr/video/e_video_hwc_planes.c index a5060ee..5e1c9d1 100644 --- a/src/bin/displaymgr/video/e_video_hwc_planes.c +++ b/src/bin/displaymgr/video/e_video_hwc_planes.c @@ -4,6 +4,7 @@ #include "e_comp_wl_subsurface_intern.h" #include "e_comp_wl_video_buffer_intern.h" #include "e_video_debug_intern.h" +#include "e_view_client_intern.h" #include #include @@ -36,6 +37,7 @@ struct _E_Video_Hwc_Planes Eina_Bool commit; Eina_Bool vblank; } wait_flag; + struct wl_listener hide_listener; }; typedef struct _Tdm_Prop_Value @@ -642,16 +644,16 @@ _e_video_hwc_planes_tdm_layer_unset(E_Video_Hwc_Planes *evhp) } static void -_e_video_hwc_planes_cb_evas_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_video_hwc_planes_cb_hide(struct wl_listener *listener, void *data) { - E_Video_Hwc_Planes *evhp = data; + E_Video_Hwc_Planes *evhp = wl_container_of(listener, evhp, hide_listener); /* if stand_alone is true, not hide */ if ((e_comp_wl_subsurface_check(evhp->base.ec)) && (e_comp_wl_subsurface_stand_alone_mode_get(evhp->base.ec))) return; - VIN("evas hide", evhp->base.ec); + VIN("e_client hide", evhp->base.ec); if (evhp->tdm.layer) { VIN("unset layer: hide", evhp->base.ec); @@ -739,12 +741,13 @@ _e_video_hwc_planes_destroy(E_Video_Hwc_Planes *evhp) static void _e_video_hwc_planes_ec_event_deinit(E_Video_Hwc_Planes *evhp) { - E_Client *ec; + E_View_Client* view_client = e_client_view_get(evhp->base.ec); - ec = evhp->base.ec; - - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_HIDE, - _e_video_hwc_planes_cb_evas_hide, evhp); + if (view_client) + { + e_view_event_listener_del(e_view_client_view_get(view_client), E_VIEW_HIDE, &evhp->hide_listener); + evhp->hide_listener.notify = NULL; + } } const char * @@ -827,8 +830,13 @@ _e_video_hwc_planes_property_save(E_Video_Hwc_Planes *evhp, unsigned int id, con static void _e_video_hwc_planes_ec_event_init(E_Video_Hwc_Planes *evhp, E_Client *ec) { - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, - _e_video_hwc_planes_cb_evas_hide, evhp); + E_View_Client* view_client = e_client_view_get(ec); + + if (view_client) + { + evhp->hide_listener.notify = _e_video_hwc_planes_cb_hide; + e_view_event_listener_add(e_view_client_view_get(view_client), E_VIEW_HIDE, &evhp->hide_listener); + } } static void diff --git a/src/bin/e_comp_screen.c b/src/bin/e_comp_screen.c index a1a41e1..82a7806 100644 --- a/src/bin/e_comp_screen.c +++ b/src/bin/e_comp_screen.c @@ -194,7 +194,7 @@ _e_comp_screen_cb_input_device_add(void *data, int type, void *event) { if (comp->wl_comp_data->ptr.num_devices == 0) { - e_pointer_object_set(comp->pointer, NULL, 0, 0); + e_pointer_view_set(comp->pointer, NULL, 0, 0); e_comp_wl_input_pointer_enabled_set(EINA_TRUE); } comp->wl_comp_data->ptr.num_devices++; @@ -265,7 +265,7 @@ _e_comp_screen_cb_input_device_del(void *data, int type, void *event) if (comp->wl_comp_data->ptr.num_devices == 0) { e_comp_wl_input_pointer_enabled_set(EINA_FALSE); - e_pointer_object_set(comp->pointer, NULL, 0, 0); + e_pointer_view_set(comp->pointer, NULL, 0, 0); e_pointer_hide(e_comp->pointer); _e_comp_screen_pointer_renew(); diff --git a/src/bin/server/e_blender.c b/src/bin/server/e_blender.c index d841083..89b3e6c 100644 --- a/src/bin/server/e_blender.c +++ b/src/bin/server/e_blender.c @@ -1,6 +1,8 @@ #include "e_blender_intern.h" #include "e_client_intern.h" #include "e_comp_object_intern.h" +#include "e_view_client_intern.h" +#include "e_view_intern.h" #include @@ -35,12 +37,20 @@ static void _e_blend_ec_set(E_Blend *blend, E_Client *ec); static void _e_blend_free(E_Blend *blend) { + E_Client *ec; + E_View_Client *view_client; + ELOGF("E_BLENDER", "E_Blend:%p Free", blend->ec, blend); - if (blend->ec) + ec = blend->ec; + if (ec) { - e_comp_object_render_op_set(blend->ec->frame, EVAS_RENDER_BLEND); - evas_object_color_set(blend->ec->frame, 255, 255, 255, 255); + view_client = e_client_view_get(ec); + if (view_client) + { + e_view_client_render_op_set(view_client, E_VIEW_RENDER_BLEND); + e_view_color_set(e_view_client_view_get(view_client), 255, 255, 255, 255); + } } _e_blend_ec_set(blend, NULL); @@ -52,30 +62,40 @@ static void _e_blend_cb_ds_tizen_blend_commit(struct wl_listener *listener, void *data) { E_Blend *blend; + E_Client *ec; + E_View_Client *view_client; + E_View *view; struct ds_tizen_blend_state *state; int a, r, g, b; blend = container_of(listener, E_Blend, commit_listener); if (!blend->ec) return; + ec = blend->ec; + view_client = e_client_view_get(ec); + if (!view_client) return; + + view = e_view_client_view_get(view_client); + if (!view) return; + state = ds_tizen_blend_get_state(blend->tizen_blend); if (!state) return; blend->alpha = state->alpha; blend->equation = state->equation; - if (!blend->ec->argb) return; + if (!ec->argb) return; a = r = g = b = 255; a = (int)((blend->alpha / (double)0xffffffff) * a); - evas_color_argb_premul(a, &r, &g, &b); + evas_color_argb_premul(a, &r, &g, &b); //TODO: FIXME: fix this with view - evas_object_color_set(blend->ec->frame, r, g, b, a); + e_view_color_set(view, r, g, b, a); if (blend->equation == DS_TIZEN_BLEND_EQUATION_PREMULTIPLIED) - e_comp_object_render_op_set(blend->ec->frame, EVAS_RENDER_BLEND); + e_view_client_render_op_set(view_client, E_VIEW_RENDER_BLEND); else if (blend->equation == DS_TIZEN_BLEND_EQUATION_NONE) - e_comp_object_render_op_set(blend->ec->frame, EVAS_RENDER_COPY); + e_view_client_render_op_set(view_client, E_VIEW_RENDER_COPY); } static void diff --git a/src/bin/server/e_blur.c b/src/bin/server/e_blur.c index 1eb02f7..6e1cc61 100644 --- a/src/bin/server/e_blur.c +++ b/src/bin/server/e_blur.c @@ -1,5 +1,10 @@ #include "e.h" #include "e_blur_intern.h" +#include "e_comp_canvas_intern.h" +#include "e_view_intern.h" +#include "e_view_image.h" +#include "e_view_client_intern.h" + #include #include @@ -21,6 +26,12 @@ struct _E_Blur struct wl_listener commit_listener; struct wl_listener destroy_listener; + struct wl_listener view_show_listener; + struct wl_listener view_hide_listener; + struct wl_listener view_resize_listener; + struct wl_listener view_move_listener; + struct wl_listener view_restack_listener; + E_Client *ec; E_Object_Delfn *ec_delfn; @@ -34,7 +45,7 @@ struct _E_Blur_Object { int x, y, w, h; - Evas_Object *obj; + E_View_Image *view_image; }; static int _e_blur_hooks_delete = 0; @@ -49,6 +60,7 @@ static Eina_Inlist *_e_blur_hooks[] = static E_Blur_Manager *_blur_manager = NULL; static void _e_blur_ec_set(E_Blur *blur, E_Client *ec); +static void _e_blur_ec_unset(E_Blur *blur); static void _e_blur_hooks_clean(void) @@ -87,23 +99,29 @@ static E_Blur_Object * _e_blur_object_create(int x, int y, int w, int h) { E_Blur_Object *blur_obj; - Evas_Object *obj; + E_Canvas *canvas; + E_View_Tree *tree; + E_View_Image *view_image; + E_View *view; blur_obj = E_NEW(E_Blur_Object, 1); EINA_SAFETY_ON_FALSE_RETURN_VAL(blur_obj, NULL); + canvas = e_comp_canvas_get(); + tree = e_canvas_layer_view_tree_get(canvas, E_CANVAS_LAYER_BOTTOM); + view_image = e_view_image_filled_create(tree); + EINA_SAFETY_ON_NULL_GOTO(view_image, fail); + + e_view_image_snapshot_set(view_image, EINA_TRUE); + + view = e_view_image_view_get(view_image); + e_view_name_set(view, "blur_obj"); + blur_obj->x = x; blur_obj->y = y; blur_obj->w = w; blur_obj->h = h; - - obj = evas_object_image_filled_add(e_comp->evas); - EINA_SAFETY_ON_NULL_GOTO(obj, fail); - - evas_object_image_snapshot_set(obj, EINA_TRUE); - evas_object_name_set(obj, "blur_obj"); - - blur_obj->obj = obj; + blur_obj->view_image = view_image; return blur_obj; @@ -116,7 +134,11 @@ fail: static void _e_blur_object_destroy(E_Blur_Object *blur_obj) { - evas_object_del(blur_obj->obj); + E_View *view; + + view = e_view_image_view_get(blur_obj->view_image); + e_view_destroy(view); + free(blur_obj); } @@ -127,7 +149,7 @@ _e_blur_free(E_Blur *blur) ELOGF("E_BLUR", "E_Blur:%p Free", blur->ec, blur); - _e_blur_ec_set(blur, NULL); + _e_blur_ec_unset(blur); if (eina_list_count(blur->blur_objs)) { @@ -144,20 +166,23 @@ _e_blur_free(E_Blur *blur) static void _e_blur_object_geometry_set(E_Blur_Object *blur_obj, E_Client *ec) { + E_View_Client *view_client; + int ec_x, ec_y, ec_w, ec_h; - int evas_x, evas_y, evas_w, evas_h; + int view_x, view_y, view_w, view_h; double scale_w, scale_h; - evas_object_geometry_get(ec->frame, &evas_x, &evas_y, &evas_w, &evas_h); + view_client = e_client_view_get(ec); + e_view_client_geometry_get(view_client, &view_x, &view_y, &view_w, &view_h); if (e_client_transform_core_enable_get(ec)) { e_client_geometry_get(ec, &ec_x, &ec_y, &ec_w, &ec_h); - scale_w = (double)ec_w / (double)evas_w; - scale_h = (double)ec_h / (double)evas_h; + scale_w = (double)ec_w / (double)view_w; + scale_h = (double)ec_h / (double)view_h; - evas_object_geometry_set(blur_obj->obj, + e_view_image_geometry_set(blur_obj->view_image, ec_x + blur_obj->x, ec_y + blur_obj->y, (int)((double)blur_obj->w * scale_w), @@ -165,9 +190,9 @@ _e_blur_object_geometry_set(E_Blur_Object *blur_obj, E_Client *ec) } else { - evas_object_geometry_set(blur_obj->obj, - evas_x + blur_obj->x, - evas_y + blur_obj->y, + e_view_image_geometry_set(blur_obj->view_image, + view_x + blur_obj->x, + view_y + blur_obj->y, blur_obj->w, blur_obj->h); } @@ -184,6 +209,9 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data) Eina_List *l; struct ds_tizen_blur_state *state; Eina_Bool region_changed = EINA_FALSE, radius_changed = EINA_FALSE; + E_View *image_view, *client_view; + E_Canvas_Layer layer; + E_View_Tree *view_tree; blur = container_of(listener, E_Blur, commit_listener); if (!blur->ec) return; @@ -225,12 +253,18 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data) _e_blur_object_geometry_set(blur_obj, blur->ec); - efl_gfx_filter_program_set(blur_obj->obj, program, "image_filter"); - evas_object_layer_set(blur_obj->obj, blur->ec->layer); - evas_object_stack_below(blur_obj->obj, blur->ec->frame); + e_view_image_gfx_filter_program_set(blur_obj->view_image, program,"image_filter"); + + image_view = e_view_image_view_get(blur_obj->view_image); + client_view = e_view_client_view_get(e_client_view_get(blur->ec)); + layer = e_canvas_layer_find(e_comp_canvas_get(), client_view); + view_tree = e_canvas_layer_view_tree_get(e_comp_canvas_get(), layer); + + e_view_reparent(image_view, view_tree); + e_view_place_below(image_view, client_view); - if (evas_object_visible_get(blur->ec->frame)) - evas_object_show(blur_obj->obj); + if (e_view_client_visible_get(e_client_view_get(blur->ec))) + e_view_show(image_view); blur->blur_objs = eina_list_append(blur->blur_objs, blur_obj); @@ -246,7 +280,7 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data) { EINA_LIST_FOREACH(blur->blur_objs, l, blur_obj) { - efl_gfx_filter_program_set(blur_obj->obj, program, "image_filter"); + e_view_image_gfx_filter_program_set(blur_obj->view_image, program, "image_filter"); ELOGF("E_BLUR", "E_Blur:%p set blur_obj:%p radius:%d", blur->ec, blur, blur_obj, blur->radius); @@ -268,68 +302,87 @@ _e_blur_cb_ds_tizen_blur_commit(struct wl_listener *listener, void *data) } static void -_e_blur_evas_cb_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_blur_cb_view_show(struct wl_listener *listener, void *data) { E_Blur *blur; - Eina_List *l; E_Blur_Object *blur_obj; + E_View *view; + Eina_List *l; - if (!(blur = data)) return; + blur = container_of(listener, E_Blur, view_show_listener); EINA_LIST_FOREACH(blur->blur_objs, l, blur_obj) - evas_object_show(blur_obj->obj); + { + view = e_view_image_view_get(blur_obj->view_image); + e_view_show(view); + } } static void -_e_blur_evas_cb_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_e_blur_cb_view_hide(struct wl_listener *listener, void *data) { E_Blur *blur; - Eina_List *l; E_Blur_Object *blur_obj; + E_View *view; + Eina_List *l; - if (!(blur = data)) return; + blur = container_of(listener, E_Blur, view_hide_listener); EINA_LIST_FOREACH(blur->blur_objs, l, blur_obj) - evas_object_hide(blur_obj->obj); + { + view = e_view_image_view_get(blur_obj->view_image); + e_view_hide(view); + } } static void -_e_blur_evas_cb_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_blur_cb_view_resize(struct wl_listener *listener, void *data) { E_Blur *blur; - Eina_List *l; E_Blur_Object *blur_obj; + Eina_List *l; - if (!(blur = data)) return; + blur = container_of(listener, E_Blur, view_resize_listener); EINA_LIST_FOREACH(blur->blur_objs, l, blur_obj) _e_blur_object_geometry_set(blur_obj, blur->ec); } static void -_e_blur_evas_cb_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_blur_cb_view_move(struct wl_listener *listener, void *data) { E_Blur *blur; - Eina_List *l; E_Blur_Object *blur_obj; + Eina_List *l; - if (!(blur = data)) return; + blur = container_of(listener, E_Blur, view_move_listener); EINA_LIST_FOREACH(blur->blur_objs, l, blur_obj) _e_blur_object_geometry_set(blur_obj, blur->ec); } static void -_e_blur_evas_cb_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_blur_cb_view_restack(struct wl_listener *listener, void *data) { E_Blur *blur; - Eina_List *l; E_Blur_Object *blur_obj; + E_View *view, *client_view; + E_View_Client *view_client; + Eina_List *l; + + blur = container_of(listener, E_Blur, view_hide_listener); + if (!blur->ec) return; + + view_client = e_client_view_get(blur->ec); + if (!view_client) return; - if (!(blur = data)) return; + client_view = e_view_client_view_get(view_client); EINA_LIST_FOREACH(blur->blur_objs, l, blur_obj) - evas_object_stack_below(blur_obj->obj, obj); + { + view = e_view_image_view_get(blur_obj->view_image); + e_view_place_below(view, client_view); + } } static void @@ -338,54 +391,60 @@ _e_blur_cb_ec_free(void *data, void *obj) E_Blur *blur = data; blur->ec_delfn = NULL; - _e_blur_ec_set(blur, NULL); + _e_blur_ec_unset(blur); } static void _e_blur_ec_set(E_Blur *blur, E_Client *ec) { + E_View_Client *view_client; + E_View *view; + if (blur->ec == ec) return; - if (blur->ec) - { - evas_object_event_callback_del(blur->ec->frame, EVAS_CALLBACK_SHOW, - _e_blur_evas_cb_show); - evas_object_event_callback_del(blur->ec->frame, EVAS_CALLBACK_HIDE, - _e_blur_evas_cb_hide); - evas_object_event_callback_del(blur->ec->frame, EVAS_CALLBACK_RESIZE, - _e_blur_evas_cb_resize); - evas_object_event_callback_del(blur->ec->frame, EVAS_CALLBACK_MOVE, - _e_blur_evas_cb_move); - evas_object_event_callback_del(blur->ec->frame, EVAS_CALLBACK_RESTACK, - _e_blur_evas_cb_restack); - - if (blur->ec_delfn) - { - e_object_delfn_del(E_OBJECT(blur->ec), blur->ec_delfn); - blur->ec_delfn = NULL; - } + view_client = e_client_view_get(blur->ec); + view = e_view_client_view_get(view_client); - blur->ec = NULL; - } + blur->view_show_listener.notify = _e_blur_cb_view_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &blur->view_show_listener); - if (ec) - { - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, - _e_blur_evas_cb_show, blur); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, - _e_blur_evas_cb_hide, blur); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESIZE, - _e_blur_evas_cb_resize, blur); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, - _e_blur_evas_cb_move, blur); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESTACK, - _e_blur_evas_cb_restack, blur); - - blur->ec_delfn = e_object_delfn_add(E_OBJECT(ec), - _e_blur_cb_ec_free, - blur); - blur->ec = ec; - } + blur->view_hide_listener.notify = _e_blur_cb_view_hide; + e_view_event_listener_add(view, E_VIEW_HIDE, &blur->view_hide_listener); + + blur->view_resize_listener.notify = _e_blur_cb_view_resize; + e_view_event_listener_add(view, E_VIEW_RESIZE, &blur->view_resize_listener); + + blur->view_move_listener.notify = _e_blur_cb_view_move; + e_view_event_listener_add(view, E_VIEW_MOVE, &blur->view_move_listener); + + blur->view_restack_listener.notify = _e_blur_cb_view_restack; + e_view_event_listener_add(view, E_VIEW_RESTACK, &blur->view_restack_listener); + + blur->ec_delfn = e_object_delfn_add(E_OBJECT(ec), + _e_blur_cb_ec_free, + blur); + blur->ec = ec; +} + +static void +_e_blur_ec_unset(E_Blur *blur) +{ + + if (!blur->ec) return; + + blur->ec = NULL; + + if (blur->ec_delfn) + { + e_object_delfn_del(E_OBJECT(blur->ec), blur->ec_delfn); + blur->ec_delfn = NULL; + } + + wl_list_remove(&blur->view_restack_listener.link); + wl_list_remove(&blur->view_move_listener.link); + wl_list_remove(&blur->view_resize_listener.link); + wl_list_remove(&blur->view_hide_listener.link); + wl_list_remove(&blur->view_show_listener.link); } static void diff --git a/src/bin/server/e_comp_wl.c b/src/bin/server/e_comp_wl.c index 041d7fc..cb6cb7b 100644 --- a/src/bin/server/e_comp_wl.c +++ b/src/bin/server/e_comp_wl.c @@ -41,6 +41,7 @@ #include "e_blur_intern.h" #include "e_input_thread_client_intern.h" #include "e_display_intern.h" +#include "e_view_client_intern.h" #include #include @@ -262,7 +263,7 @@ _e_comp_wl_configure_send(E_Client *ec, Eina_Bool edges, Eina_Bool send_size) if (send_size) { - if (e_comp_object_frame_exists(ec->frame)) + if (e_view_client_frame_exists(e_client_view_get(ec))) w = ec->client.w, h = ec->client.h; else w = ec->w, h = ec->h; @@ -558,7 +559,7 @@ e_comp_wl_map_apply(E_Client *ec) if (!ec || !ec->comp_data || e_object_is_del(E_OBJECT(ec))) return; - e_comp_object_map_update(ec->frame); + e_view_client_map_update(e_client_view_get(ec)); cdata = ec->comp_data; vp = &cdata->scaler.buffer_viewport; @@ -590,7 +591,7 @@ e_comp_wl_map_apply(E_Client *ec) } } - evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, NULL, NULL); if (x != dx || y != dy) e_subsurface_view_position_set(subsurface, dx, dy); } @@ -599,9 +600,9 @@ e_comp_wl_map_apply(E_Client *ec) dx = ec->x; dy = ec->y; - evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, NULL, NULL); if (x != dx || y != dy) - evas_object_move(ec->frame, dx, dy); + e_view_position_set(e_view_client_view_get(e_client_view_get(ec)), dx, dy); } if (!cdata->viewport_transform) @@ -721,11 +722,11 @@ _e_comp_wl_evas_cb_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EIN { if ((ec->hidden) || (ec->iconic)) { - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); // e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); } else - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); } topmost = e_comp_wl_topmost_parent_get(ec); @@ -1046,9 +1047,9 @@ _e_comp_wl_cursor_reload(E_Client *ec) uint32_t serial; int cx, cy, px, py; - if (e_comp->pointer && e_comp->pointer->o_ptr && - !evas_object_visible_get(e_comp->pointer->o_ptr)) - e_pointer_object_set(e_comp->pointer, NULL, 0, 0); + if (e_comp->pointer && e_comp->pointer->view_client && + !e_view_client_visible_get(e_comp->pointer->view_client)) + e_pointer_view_set(e_comp->pointer, NULL, 0, 0); if (!ec) return; if (e_object_is_del(E_OBJECT(ec))) return; @@ -2483,20 +2484,20 @@ _e_comp_wl_surface_state_size_update(E_Client *ec, E_Comp_Wl_Surface_State *stat ec->changes.buf_size = EINA_TRUE; } - if (e_comp_object_frame_exists(ec->frame)) return; + if (e_view_client_frame_exists(e_client_view_get(ec))) return; window = &ec->comp_data->shell.window; if ((!ec->borderless) && /* FIXME temporarily added this check code * to prevent updating E_Client's size by frame */ (window->x || window->y || window->w || window->h)) { - e_comp_object_frame_geometry_set(ec->frame, + e_view_client_frame_geometry_set(e_client_view_get(ec), -window->x, (window->x + window->w) - state->bw, -window->y, (window->y + window->h) - state->bh); } else - e_comp_object_frame_geometry_set(ec->frame, 0, 0, 0, 0); + e_view_client_frame_geometry_set(e_client_view_get(ec), 0, 0, 0, 0); } static void @@ -2684,7 +2685,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) /* update the position */ if (ec->changes.pos) { - e_comp_object_frame_xy_unadjust(ec->frame, + e_view_client_frame_xy_unadjust(e_client_view_get(ec), ec->x, ec->y, &x, &y); } @@ -2704,7 +2705,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) ec->client.w = state->bw; ec->client.h = state->bh; - e_comp_object_frame_wh_adjust(ec->frame, + e_view_client_frame_wh_adjust(e_client_view_get(ec), ec->client.w, ec->client.h, &nw, &nh); e_client_size_set(ec, nw, nh); @@ -2810,7 +2811,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) buffer = e_pixmap_resource_get(ec->pixmap); /* put state damages into surface */ - if (ec->frame) + if (e_client_view_get(ec)) { /* FIXME: workaround for bad wayland egl driver which doesn't send damage request */ if (!eina_list_count(state->damages) && !eina_list_count(state->buffer_damages)) @@ -2819,7 +2820,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) ((cdata->buffer_ref.buffer->type == E_COMP_WL_BUFFER_TYPE_NATIVE) || (cdata->buffer_ref.buffer->type == E_COMP_WL_BUFFER_TYPE_TBM))) { - e_comp_object_damage(ec->frame, + e_view_client_damage(e_client_view_get(ec), 0, 0, cdata->buffer_ref.buffer->w, cdata->buffer_ref.buffer->h); @@ -2855,7 +2856,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) if (state->buffer_viewport.changed || !e_comp->wl_comp_data->available_hw_accel.underlay || !buffer || buffer->type != E_COMP_WL_BUFFER_TYPE_VIDEO) - e_comp_object_damage(ec->frame, dmg->x, dmg->y, dmg->w, dmg->h); + e_view_client_damage(e_client_view_get(ec), dmg->x, dmg->y, dmg->w, dmg->h); eina_rectangle_free(dmg); } @@ -2903,14 +2904,14 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) Eina_Rectangle *rect; Eina_Iterator *itr; - e_comp_object_input_objs_del(ec->frame); + e_view_client_input_objs_del(e_client_view_get(ec)); itr = eina_tiler_iterator_new(src); EINA_ITERATOR_FOREACH(itr, rect) { ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d, ec(%dx%d), state(%dx%d)", ec, rect->x, rect->y, rect->w, rect->h, ec->w, ec->h, state->bw, state->bh); - e_comp_object_input_area_set(ec->frame, + e_view_client_input_area_set(e_client_view_get(ec), rect->x, rect->y, rect->w, rect->h); } @@ -2919,7 +2920,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) eina_tiler_free(src); } else - e_comp_object_input_area_set(ec->frame, 0, 0, ec->w, ec->h); + e_view_client_input_area_set(e_client_view_get(ec), 0, 0, ec->w, ec->h); eina_tiler_free(tmp); @@ -2957,11 +2958,11 @@ _e_comp_wl_surface_render_stop(E_Client *ec) ec->dead = 1; /* check if internal animation is running */ - if (e_comp_object_is_animating(ec->frame)) return; + if (e_view_client_is_animating(e_client_view_get(ec))) return; /* check if external animation is running */ - if (evas_object_data_get(ec->frame, "effect_running")) return; + if (e_view_data_get(e_view_client_view_get(e_client_view_get(ec)), "effect_running")) return; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); } EINTERN void @@ -3720,7 +3721,7 @@ e_comp_wl_surface_commit(E_Client *ec) int x = 0, y = 0; _e_comp_wl_surface_state_commit(ec, &ec->comp_data->pending); - if (!e_comp_object_damage_exists(ec->frame)) + if (!e_view_client_damage_exists(e_client_view_get(ec))) { if ((ec->comp_data->video_client) || (!e_client_video_hw_composition_check(ec))) @@ -3748,7 +3749,7 @@ e_comp_wl_surface_commit(E_Client *ec) x = e_comp->pointer->hot.x; y = e_comp->pointer->hot.y; } - e_pointer_object_set(e_comp->pointer, ec->frame, x, y); + e_pointer_view_set(e_comp->pointer, e_client_view_get(ec), x, y); } } return EINA_TRUE; @@ -5128,7 +5129,7 @@ e_comp_wl_cursor_hide(E_Client *ec) Eina_List *l; uint32_t serial; - e_pointer_object_set(e_comp->pointer, NULL, 0, 0); + e_pointer_view_set(e_comp->pointer, NULL, 0, 0); if (e_comp_wl->ptr.hide_tmr) { @@ -5423,7 +5424,7 @@ e_comp_wl_commit_sync_configure(E_Client *ec) int x, y, w, h; } config; - if (!ec || !ec->frame) goto ret; + if (!ec || !e_client_view_get(ec)) goto ret; if (e_object_is_del(E_OBJECT(ec))) goto ret; bw = bh = 0; @@ -5883,8 +5884,8 @@ _e_comp_wl_surface_output_viewport_get(E_Client *ec, Eina_Rectangle *out) out->w = (out->w + 1) & ~1; out->h = ec->comp_data->height_from_viewport; - e_comp_object_frame_xy_unadjust(ec->frame, out->x, out->y, &out->x, &out->y); - e_comp_object_frame_wh_unadjust(ec->frame, out->w, out->h, &out->w, &out->h); + e_view_client_frame_xy_unadjust(e_client_view_get(ec), out->x, out->y, &out->x, &out->y); + e_view_client_frame_wh_unadjust(e_client_view_get(ec), out->w, out->h, &out->w, &out->h); } EINTERN Eina_Bool @@ -6056,7 +6057,7 @@ e_comp_wl_client_surface_pending_opaque_region_set(E_Client *ec, Eina_Tiler *reg ELOGF("COMP", "Set argb:%d", ec, ec->argb); EC_CHANGED(ec); _e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_ALPHA_CHANGE, ec); - e_comp_object_alpha_set(ec->frame, EINA_FALSE); + e_view_client_alpha_set(e_client_view_get(ec), EINA_FALSE); } } } @@ -6068,7 +6069,7 @@ e_comp_wl_client_surface_pending_opaque_region_set(E_Client *ec, Eina_Tiler *reg ELOGF("COMP", "Set argb:%d", ec, ec->argb); EC_CHANGED(ec); _e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_ALPHA_CHANGE, ec); - e_comp_object_alpha_set(ec->frame, EINA_TRUE); + e_view_client_alpha_set(e_client_view_get(ec), EINA_TRUE); } } } @@ -6084,8 +6085,8 @@ e_comp_wl_client_surface_pending_input_region_set(E_Client *ec, Eina_Tiler *regi if (eina_tiler_empty(region)) { ELOGF("COMP", " |unset input rect", NULL); - e_comp_object_input_objs_del(ec->frame); - e_comp_object_input_area_set(ec->frame, -1, -1, 1, 1); + e_view_client_input_objs_del(e_client_view_get(ec)); + e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1); } else eina_tiler_union(ec->comp_data->pending.input, region); diff --git a/src/bin/server/e_comp_wl_data.c b/src/bin/server/e_comp_wl_data.c index c408108..3a66724 100644 --- a/src/bin/server/e_comp_wl_data.c +++ b/src/bin/server/e_comp_wl_data.c @@ -4,6 +4,9 @@ #include "e_comp_wl_intern.h" #include "e_dnd_intern.h" #include "e_comp_input_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" +#include "e_view_edje_intern.h" #include #include @@ -358,6 +361,9 @@ _e_comp_wl_data_offer_cb_resource_destroy(struct wl_resource *resource) if (!(offer = wl_resource_get_user_data(resource))) return; + if (offer->drag_enter) + wl_list_remove(&offer->ec_destroy_listener.link); + if (offer->source) { wl_list_remove(&offer->source_destroy_listener.link); @@ -875,13 +881,12 @@ _e_comp_wl_data_device_selection_set(void *data EINA_UNUSED, E_Comp_Wl_Data_Sour static void _e_comp_wl_data_device_drag_finished(E_Drag *drag, E_Dnd_Drop_Type type) { - Evas_Object *o; + E_View *view = e_view_edje_part_swallow_get(drag->comp_edje, "e.swallow.content"); - o = edje_object_part_swallow_get(drag->comp_object, "e.swallow.content"); - if (eina_streq(evas_object_type_get(o), "e_comp_object")) - edje_object_part_unswallow(drag->comp_object, o); - evas_object_hide(o); - evas_object_pass_events_set(o, 1); + if (eina_streq(evas_object_type_get(view->eo), "e_comp_object")) //TO DO : use view for type get + e_view_edje_part_unswallow(drag->comp_edje, view); + e_view_hide(view); + e_view_pass_events_set(view, 1); if (e_comp_wl->drag != drag) return; @@ -998,7 +1003,7 @@ _e_comp_wl_data_device_cb_drag_start(struct wl_client *client, struct wl_resourc e_comp_wl->drag->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); if (drag_icon_ec) { - e_drag_object_set(e_comp_wl->drag, drag_icon_ec->frame); + e_drag_view_set(e_comp_wl->drag, e_view_client_view_get(e_client_view_get(drag_icon_ec))); e_drag_reference_point_set(e_comp_wl->drag, drag_icon_ec->x, drag_icon_ec->y); e_drag_resize(e_comp_wl->drag, drag_icon_ec->w, drag_icon_ec->h); } @@ -1292,7 +1297,7 @@ _e_comp_wl_clipboard_create(void) } static void -_e_comp_wl_data_device_target_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_wl_data_device_target_del(struct wl_listener *listener, void *data) { E_Client *ec = data; @@ -1307,6 +1312,7 @@ e_comp_wl_data_device_send_enter(E_Client *ec) uint32_t serial; int x, y; E_Comp_Config *comp_conf; + E_Comp_Wl_Data_Offer *offer; struct wl_resource *surface = e_comp_wl_client_surface_get(ec); if (!surface) return; @@ -1343,7 +1349,10 @@ e_comp_wl_data_device_send_enter(E_Client *ec) } e_comp_wl->selection.target = ec; - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_DEL, _e_comp_wl_data_device_target_del, ec); + offer = wl_resource_get_user_data(offer_res); + offer->ec_destroy_listener.notify = _e_comp_wl_data_device_target_del; + e_view_event_listener_add(e_view_client_view_get(e_client_view_get(ec)), E_VIEW_DESTROY, &offer->ec_destroy_listener); + offer->drag_enter = EINA_TRUE; if (e_client_transform_core_enable_get(ec)) { @@ -1375,7 +1384,6 @@ e_comp_wl_data_device_send_leave(E_Client *ec) E_Comp_Config *comp_conf; struct wl_resource *res; - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_DEL, _e_comp_wl_data_device_target_del, ec); if (e_comp_wl->selection.target == ec) e_comp_wl->selection.target = NULL; struct wl_resource *surface = e_comp_wl_client_surface_get(ec); diff --git a/src/bin/server/e_comp_wl_data_intern.h b/src/bin/server/e_comp_wl_data_intern.h index 539dc5f..ac70cc4 100644 --- a/src/bin/server/e_comp_wl_data_intern.h +++ b/src/bin/server/e_comp_wl_data_intern.h @@ -54,6 +54,9 @@ struct _E_Comp_Wl_Data_Offer Eina_Bool in_ask; Ecore_Thread *th; + + Eina_Bool drag_enter; + struct wl_listener ec_destroy_listener; //listener for destroy of ec }; struct _E_Comp_Wl_Clipboard_Source diff --git a/src/bin/server/e_comp_wl_input.c b/src/bin/server/e_comp_wl_input.c index 349d2a8..71aba47 100644 --- a/src/bin/server/e_comp_wl_input.c +++ b/src/bin/server/e_comp_wl_input.c @@ -124,7 +124,7 @@ _e_comp_wl_input_pointer_map(struct wl_resource *resource) if (!e_comp_wl->ptr.ec->pointer_enter_sent) return; if ((ptr = e_comp->pointer)) - e_pointer_object_set(ptr, ec->frame, ptr->hot.x, ptr->hot.y); + e_pointer_view_set(ptr, e_client_view_get(ec), ptr->hot.x, ptr->hot.y); } static void @@ -193,7 +193,7 @@ _e_comp_wl_input_pointer_cb_cursor_set(struct wl_client *client, struct wl_resou return; } - e_pointer_object_set(e_comp->pointer, NULL, x, y); + e_pointer_view_set(e_comp->pointer, NULL, x, y); ec->has_cursor_unset = EINA_TRUE; ELOGF("COMP", "Cursor Set. has_cursor_unset:TRUE", ec); return; @@ -217,11 +217,11 @@ _e_comp_wl_input_pointer_cb_cursor_set(struct wl_client *client, struct wl_resou } e_client_icccm_title_set(ec, "Cursor"); e_client_window_role_set(ec, "wl_pointer-cursor"); - evas_object_pass_events_set(ec->frame, 1); + e_view_pass_events_set(e_view_client_view_get(e_client_view_get(ec)), 1); /* wl_pointer-cursor surface is always alpha window */ ec->argb = EINA_TRUE; ELOGF("COMP", "Cursor Set. argb:%d", ec, ec->argb); - e_comp_object_alpha_set(ec->frame, EINA_TRUE); + e_view_client_alpha_set(e_client_view_get(ec), EINA_TRUE); EC_CHANGED(ec); /* Set fuctions to prevent unwanted handling by shell */ @@ -250,7 +250,7 @@ _e_comp_wl_input_pointer_cb_cursor_set(struct wl_client *client, struct wl_resou #if 0 /* ignore cursor changes during resize/move I guess */ if (e_client_action_get()) return; - e_pointer_object_set(e_comp->pointer, ec->frame, x, y); + e_pointer_view_set(e_comp->pointer, e_client_view_get(ec), x, y); #endif if (e_comp->pointer) { diff --git a/src/bin/server/e_comp_wl_rsm.c b/src/bin/server/e_comp_wl_rsm.c index 6db21a0..1ea3c83 100644 --- a/src/bin/server/e_comp_wl_rsm.c +++ b/src/bin/server/e_comp_wl_rsm.c @@ -11,6 +11,8 @@ #include "e_zone_intern.h" #include "e_utils_intern.h" #include "e_security_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -324,7 +326,7 @@ _remote_provider_onscreen_parent_calculate(E_Comp_Wl_Remote_Provider *provider) if (!_ec->remote_surface.consumer) continue; if (e_object_is_del(E_OBJECT(_ec))) continue; if (e_client_util_ignored_get(_ec)) continue; - if (!_ec->frame) continue; + if (!e_client_view_get(_ec)) continue; if (!_ec->visible) continue; if (_ec->visibility.skip) continue; if ((e_client_visibility_get(_ec) != E_VISIBILITY_UNOBSCURED) && @@ -378,7 +380,7 @@ _remote_provider_offscreen_set(E_Comp_Wl_Remote_Provider* provider, Eina_Bool se else { ec->visible = EINA_FALSE; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); ec->comp_data->mapped = 0; } @@ -854,10 +856,10 @@ _remote_surface_prebind_send(E_Comp_Wl_Remote_Surface *remote_surface) consumer_ec = remote_surface->ec; //object visibility of bind_ec - if (!evas_object_visible_get(bind_ec->frame)) return; + if (!e_view_client_visible_get(e_client_view_get(bind_ec))) return; //check wether effect of consumer_ec is running - if ((consumer_ec) && (evas_object_data_get(consumer_ec->frame, "effect_running"))) + if ((consumer_ec) && (e_view_data_get(e_view_client_view_get(e_client_view_get(consumer_ec)), "effect_running"))) { RSMINF("Sending \"prebind\" is pending until EFFECT_END bind_ec(%p)", remote_surface->ec, @@ -927,7 +929,7 @@ _remote_surface_bind_client(E_Comp_Wl_Remote_Surface *remote_surface, E_Client * remote_surface->bind_ec->comp_data->pending.new_attach = EINA_TRUE; e_comp_wl_surface_attach(remote_surface->bind_ec, NULL); - e_comp_object_render_update_del(remote_surface->bind_ec->frame); + e_view_client_render_update_del(e_client_view_get(remote_surface->bind_ec)); eina_hash_del(_rsm->bind_surface_hash, &remote_surface->bind_ec, remote_surface); remote_surface->need_prebind = EINA_FALSE; @@ -3126,9 +3128,9 @@ _e_comp_wl_remote_surface_subsurface_commit(E_Comp_Wl_Remote_Provider *parent_pr onscreen_parent = parent_provider->onscreen_parent; if (!onscreen_parent) return EINA_TRUE; - if (!evas_object_visible_get(ec->frame)) return EINA_TRUE; + if (!e_view_client_visible_get(e_client_view_get(ec))) return EINA_TRUE; - evas_object_geometry_get(ec->frame, &fx, &fy, &fw, &fh); + e_view_client_geometry_get(e_client_view_get(ec), &fx, &fy, &fw, &fh); e_comp_wl_subsurface_position_get(ec, &sx, &sy); diff --git a/src/bin/server/e_comp_wl_shell.c b/src/bin/server/e_comp_wl_shell.c index 7d7d4f3..1d1ee32 100644 --- a/src/bin/server/e_comp_wl_shell.c +++ b/src/bin/server/e_comp_wl_shell.c @@ -11,6 +11,8 @@ #include "e_comp_object_intern.h" #include "e_desk_intern.h" #include "e_config_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -311,7 +313,7 @@ e_shell_e_client_interactive_move(E_Client *ec, default: ev.button = e_comp_wl->ptr.button; break; } - e_comp_object_frame_xy_unadjust(ec->frame, + e_view_client_frame_xy_unadjust(e_client_view_get(ec), wl_fixed_to_int(e_comp_wl->ptr.x), wl_fixed_to_int(e_comp_wl->ptr.y), &ev.canvas.x, @@ -362,7 +364,7 @@ e_shell_e_client_interactive_resize(E_Client *ec, default: ev.button = e_comp_wl->ptr.button; break; } - e_comp_object_frame_xy_unadjust(ec->frame, + e_view_client_frame_xy_unadjust(e_client_view_get(ec), wl_fixed_to_int(e_comp_wl->ptr.x), wl_fixed_to_int(e_comp_wl->ptr.y), &ev.canvas.x, @@ -738,12 +740,12 @@ _e_shell_client_map_common_pre(E_Client *ec) if (!ec) return; - e_comp_object_signal_emit(ec->frame, "e,state,map", "e"); + e_view_client_signal_emit(e_client_view_get(ec), "e,state,map", "e"); if (ec->use_splash) { ELOGF("LAUNCH", "SHOW real win after splash effect", ec); - e_comp_object_signal_emit(ec->frame, "e,action,launch_real,done", "e"); + e_view_client_signal_emit(e_client_view_get(ec), "e,action,launch_real,done", "e"); } ec->use_splash = EINA_FALSE; @@ -756,7 +758,7 @@ _e_shell_client_map_common_pre(E_Client *ec) /* map this surface if needed */ ec->visible = EINA_TRUE; - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); ec->comp_data->mapped = EINA_TRUE; } @@ -804,7 +806,7 @@ _e_shell_client_map_common_post(E_Client *ec) EC_CHANGED(ec); - e_comp_object_signal_emit(ec->frame, "e,action,map,done", "e"); + e_view_client_signal_emit(e_client_view_get(ec), "e,action,map,done", "e"); } static void @@ -1348,9 +1350,9 @@ _e_xdg_shell_surface_map_cb_timer(void *data) _e_shell_client_map_common_pre(ec); /* force update */ - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); e_comp_wl_surface_commit(ec); @@ -1386,7 +1388,7 @@ e_shell_e_client_map(E_Client *ec) ch = ec->h; e_pixmap_size_get(ec->pixmap, &pw, &ph); - evas_object_geometry_get(ec->frame, NULL, NULL, &cw, &ch); + e_view_client_geometry_get(e_client_view_get(ec), NULL, NULL, &cw, &ch); if (cw == 0 && ch == 0) { cw = ec->w; @@ -1463,13 +1465,13 @@ e_shell_e_client_unmap(E_Client *ec) if (ec->comp_data->mapped) { - e_comp_object_signal_emit(ec->frame, "e,state,unmap", "e"); + e_view_client_signal_emit(e_client_view_get(ec), "e,state,unmap", "e"); /* need to save its last buffer to image file */ e_comp_wl_remote_surface_image_save(ec); ec->visible = EINA_FALSE; - evas_object_hide(ec->frame); + e_view_hide(e_view_client_view_get(e_client_view_get(ec))); ec->comp_data->mapped = EINA_FALSE; ec->visibility.last_sent_type = E_VISIBILITY_UNKNOWN; diff --git a/src/bin/server/e_comp_wl_subsurface.c b/src/bin/server/e_comp_wl_subsurface.c index f0eed38..2af4707 100644 --- a/src/bin/server/e_comp_wl_subsurface.c +++ b/src/bin/server/e_comp_wl_subsurface.c @@ -6,9 +6,18 @@ #include "e_client_intern.h" #include "e_comp_object_intern.h" #include "e_alpha_mask_rect_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include +typedef struct +{ + E_Client *ec; + struct wl_listener destroy; + struct wl_listener view_restack; +} View_Client_Restack_Data; + static Eina_List *hooks = NULL; static Eina_List *handlers = NULL; @@ -155,7 +164,7 @@ _e_comp_wl_subsurface_show(E_Client *ec) if (e_pixmap_resource_get(subc->pixmap) && !subc->comp_data->mapped) { subc->visible = EINA_TRUE; - evas_object_show(subc->frame); + e_view_show(e_view_client_view_get(e_client_view_get(subc))); subc->comp_data->mapped = 1; } _e_comp_wl_subsurface_show(subc); @@ -168,7 +177,7 @@ _e_comp_wl_subsurface_show(E_Client *ec) if (e_pixmap_resource_get(subc->pixmap) && !subc->comp_data->mapped) { subc->visible = EINA_TRUE; - evas_object_show(subc->frame); + e_view_show(e_view_client_view_get(e_client_view_get(subc))); subc->comp_data->mapped = 1; } _e_comp_wl_subsurface_show(subc); @@ -190,7 +199,7 @@ _e_comp_wl_subsurface_hide(E_Client *ec) if (subc->comp_data->mapped) { subc->visible = EINA_FALSE; - evas_object_hide(subc->frame); + e_view_hide(e_view_client_view_get(e_client_view_get(subc))); subc->comp_data->mapped = 0; } _e_comp_wl_subsurface_hide(subc); @@ -206,7 +215,7 @@ _e_comp_wl_subsurface_hide(E_Client *ec) if (subc->comp_data->mapped) { subc->visible = EINA_FALSE; - evas_object_hide(subc->frame); + e_view_hide(e_view_client_view_get(e_client_view_get(subc))); subc->comp_data->mapped = 0; } _e_comp_wl_subsurface_hide(subc); @@ -229,9 +238,9 @@ _e_comp_wl_subsurface_invisible_parent_get(E_Client *ec) if (e_object_is_del(E_OBJECT(parent)) || !parent->comp_data) return NULL; if (!parent->comp_data->sub.data) - return (!evas_object_visible_get(parent->frame)) ? parent : NULL; + return (!e_view_visible_get(e_view_client_view_get(e_client_view_get(parent)))) ? parent : NULL; - if (!evas_object_visible_get(parent->frame)) + if (!e_view_visible_get(e_view_client_view_get(e_client_view_get(parent)))) { if (e_pixmap_resource_get(parent->pixmap)) return parent; @@ -371,7 +380,7 @@ _e_comp_wl_subsurface_commit_from_cache(E_Client *ec) e_comp_wl_surface_state_commit(ec, &sdata->cached); - if (!e_comp_object_damage_exists(ec->frame)) + if (!e_view_client_damage_exists(e_client_view_get(ec))) { if ((ec->comp_data->video_client) || (!e_client_video_hw_composition_check(ec))) @@ -441,12 +450,26 @@ _e_comp_wl_subsurface_below_topmost_get(E_Client *ec) } static void -_e_comp_wl_subsurface_cb_comp_object_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_view_client_restack_cb_destroy(struct wl_listener *listener, void *data) { + View_Client_Restack_Data *restack_data; + + restack_data = wl_container_of(listener, restack_data, destroy); + + wl_list_remove(&restack_data->destroy.link); + wl_list_remove(&restack_data->view_restack.link); + free(restack_data); +} + +static void +_view_client_restack_cb_restack(struct wl_listener *listener, void *data) +{ + View_Client_Restack_Data *restack_data; E_Client *ec, *above, *below; - ec = data; - if ((!ec) || (!ec->comp_data)) + restack_data = wl_container_of(listener, restack_data, destroy); + ec = restack_data->ec; + if (!ec->comp_data) return; if (e_object_is_del(E_OBJECT(ec))) @@ -470,6 +493,8 @@ static Eina_Bool _e_comp_wl_subsurface_cb_comp_object_add(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Comp_Object *ev) { E_Client *ec; + View_Client_Restack_Data *restack_data; + E_View_Client *view_client; ec = e_comp_object_client_get(ev->comp_object); if (!ec) @@ -489,7 +514,18 @@ _e_comp_wl_subsurface_cb_comp_object_add(void *data EINA_UNUSED, int type EINA_U * of evas smart member object mechanism. */ _e_comp_wl_subsurface_stack_update(ec); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESTACK, _e_comp_wl_subsurface_cb_comp_object_restack, ec); + restack_data = malloc(sizeof(*restack_data)); + if (!restack_data) + goto end; + + restack_data->ec = ec; + + restack_data->destroy.notify = _view_client_restack_cb_destroy; + e_client_destroy_listener_add(ec, &restack_data->destroy); + + view_client = e_client_view_get(ec); + restack_data->view_restack.notify = _view_client_restack_cb_restack; + e_view_event_listener_add(e_view_client_view_get(view_client), E_VIEW_RESTACK, &restack_data->view_restack); end: return ECORE_CALLBACK_RENEW; diff --git a/src/bin/server/e_comp_wl_video.c b/src/bin/server/e_comp_wl_video.c index 5409003..de25e3c 100644 --- a/src/bin/server/e_comp_wl_video.c +++ b/src/bin/server/e_comp_wl_video.c @@ -6,6 +6,8 @@ #include "e_comp_wl_viewport_intern.h" #include "e_utils_intern.h" #include "e_client_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include @@ -209,6 +211,7 @@ _e_comp_wl_video_object_ec_cb_visibility_change(void *data, int type, void *even E_Video_Object *vo; E_Client *ec; E_Event_Client *ev; + E_View_Client* view_client; ev = event; vo = data; @@ -216,15 +219,19 @@ _e_comp_wl_video_object_ec_cb_visibility_change(void *data, int type, void *even return ECORE_CALLBACK_PASS_ON; ec = ev->ec; - switch (e_client_visibility_get(ec)) + view_client = e_client_view_get(ec); + if (view_client) { - case E_VISIBILITY_FULLY_OBSCURED: - evas_object_hide(ec->frame); - break; - default: - case E_VISIBILITY_UNOBSCURED: - evas_object_show(ec->frame); - break; + switch (e_client_visibility_get(ec)) + { + case E_VISIBILITY_FULLY_OBSCURED: + e_view_client_hide(view_client); + break; + default: + case E_VISIBILITY_UNOBSCURED: + e_view_client_show(view_client); + break; + } } return ECORE_CALLBACK_PASS_ON; diff --git a/src/bin/server/e_comp_wl_viewport.c b/src/bin/server/e_comp_wl_viewport.c index 4dba73f..0496cac 100644 --- a/src/bin/server/e_comp_wl_viewport.c +++ b/src/bin/server/e_comp_wl_viewport.c @@ -6,6 +6,7 @@ #include "e_comp_canvas_intern.h" #include "e_info_server_input_intern.h" #include "e_info_server_intern.h" +#include "e_view_client_intern.h" #include #include @@ -101,6 +102,9 @@ typedef struct _E_Viewport E_Comp_Wl_Hook *subsurf_hook_create; E_Comp_Wl_Hook *subsurf_hook_commit_to_cache; + + struct wl_listener parent_show; + struct wl_listener parent_resize; } E_Viewport; static E_Viewport* _e_comp_wl_viewport_get_viewport(struct wl_resource *resource); @@ -739,7 +743,8 @@ _e_comp_wl_viewport_cb_query_parent_size(struct wl_client *client, struct wl_resource *resource) { E_Viewport *viewport; - Evas_Coord w = 0, h = 0; + E_View_Client *view_client; + int w = 0, h = 0; viewport = _e_comp_wl_viewport_get_viewport(resource); if (!viewport) return; @@ -748,9 +753,10 @@ _e_comp_wl_viewport_cb_query_parent_size(struct wl_client *client, if (viewport->epc) { - evas_object_geometry_get(viewport->epc->frame, - &viewport->parent_size.x, &viewport->parent_size.y, - &viewport->parent_size.w, &viewport->parent_size.h); + view_client = e_client_view_get(viewport->epc); + e_view_client_geometry_get(view_client, + &viewport->parent_size.x, &viewport->parent_size.y, + &viewport->parent_size.w, &viewport->parent_size.h); w = viewport->parent_size.w; h = viewport->parent_size.h; @@ -1886,10 +1892,11 @@ e_comp_wl_viewport_shutdown(void) } static void -_e_comp_wl_viewport_cb_parent_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_wl_viewport_cb_parent_show(struct wl_listener *listener, void *data) { - E_Viewport *viewport = data; + E_Viewport *viewport; + viewport = wl_container_of(listener, viewport, parent_show); if (e_object_is_del(E_OBJECT(viewport->ec))) return; PIN("Parent show: update viewport"); @@ -1897,11 +1904,13 @@ _e_comp_wl_viewport_cb_parent_show(void *data, Evas *e EINA_UNUSED, Evas_Object } static void -_e_comp_wl_viewport_cb_parent_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_comp_wl_viewport_cb_parent_resize(struct wl_listener *listener, void *data) { - E_Viewport *viewport = data; - Evas_Coord old_w, old_h; + E_Viewport *viewport; + E_View_Client *view_client; + int old_w, old_h; + viewport = wl_container_of(listener, viewport, parent_resize); if (e_object_is_del(E_OBJECT(viewport->epc))) return; if (viewport->query_parent_size) @@ -1909,11 +1918,12 @@ _e_comp_wl_viewport_cb_parent_resize(void *data, Evas *e EINA_UNUSED, Evas_Objec old_w = viewport->parent_size.w; old_h = viewport->parent_size.h; - evas_object_geometry_get(viewport->epc->frame, - &viewport->parent_size.x, - &viewport->parent_size.y, - &viewport->parent_size.w, - &viewport->parent_size.h); + view_client = e_client_view_get(viewport->epc); + e_view_client_geometry_get(view_client, + &viewport->parent_size.x, + &viewport->parent_size.y, + &viewport->parent_size.w, + &viewport->parent_size.h); if ((old_w != viewport->parent_size.w) || (old_h != viewport->parent_size.h)) @@ -1928,6 +1938,8 @@ _e_comp_wl_viewport_cb_parent_resize(void *data, Evas *e EINA_UNUSED, Evas_Objec static void _e_comp_wl_viewport_parent_set(E_Viewport *viewport, E_Client *epc) { + E_View_Client *view_client; + if (viewport->epc == epc) return; PIN("parent_set: new_parent(%p)", epc); @@ -1939,14 +1951,11 @@ _e_comp_wl_viewport_parent_set(E_Viewport *viewport, E_Client *epc) viewport->epc = epc; - EINA_SAFETY_ON_NULL_RETURN(epc->frame); - - evas_object_event_callback_add(epc->frame, EVAS_CALLBACK_SHOW, - _e_comp_wl_viewport_cb_parent_show, - viewport); - evas_object_event_callback_add(epc->frame, EVAS_CALLBACK_RESIZE, - _e_comp_wl_viewport_cb_parent_resize, - viewport); + view_client = e_client_view_get(epc); + viewport->parent_show.notify = _e_comp_wl_viewport_cb_parent_show; + e_view_client_show_listener_add(view_client, &viewport->parent_show); + viewport->parent_resize.notify = _e_comp_wl_viewport_cb_parent_resize; + e_view_client_resize_listener_add(view_client, &viewport->parent_resize); } static void @@ -1956,16 +1965,7 @@ _e_comp_wl_viewport_parent_unset(E_Viewport *viewport) PIN("parent_unset"); - EINA_SAFETY_ON_NULL_GOTO(viewport->epc->frame, end); - - evas_object_event_callback_del_full(viewport->epc->frame, - EVAS_CALLBACK_SHOW, - _e_comp_wl_viewport_cb_parent_show, - viewport); - evas_object_event_callback_del_full(viewport->epc->frame, - EVAS_CALLBACK_RESIZE, - _e_comp_wl_viewport_cb_parent_resize, - viewport); -end: + wl_list_remove(&viewport->parent_show.link); + wl_list_remove(&viewport->parent_resize.link); viewport->epc = NULL; } diff --git a/src/bin/server/e_compositor.c b/src/bin/server/e_compositor.c index aeb98a3..66fb454 100644 --- a/src/bin/server/e_compositor.c +++ b/src/bin/server/e_compositor.c @@ -9,6 +9,7 @@ #include "e_presentation_time_intern.h" #include "e_client_video_intern.h" #include "e_client_intern.h" +#include "e_view_client_intern.h" #include #include @@ -1957,11 +1958,13 @@ EINTERN void e_subsurface_view_position_set(E_Subsurface *subsurface, int x, int y) { E_Subsurface_View *view = &subsurface->view; + E_View_Client *view_client; if (!view->ec) return; - evas_object_move(view->ec->frame, x, y); + view_client = e_client_view_get(view->ec); + e_view_position_set(e_view_client_view_get(view_client), x, y); e_client_transform_core_update(view->ec); } diff --git a/src/bin/server/e_foreign_shell.c b/src/bin/server/e_foreign_shell.c index 7d95703..49067b6 100644 --- a/src/bin/server/e_foreign_shell.c +++ b/src/bin/server/e_foreign_shell.c @@ -2,6 +2,8 @@ #include "e_comp_wl_intern.h" #include "e_comp_wl_subsurface_intern.h" #include "e_pixmap_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include @@ -53,6 +55,8 @@ struct _E_Exported_Shell } comp_hook; Eina_Bool has_cache_data; + + struct wl_listener move_listener; }; struct _E_Foreign_Shell @@ -72,6 +76,8 @@ struct _E_Foreign_Shell int x, y, w, h; int32_t transform; } state; + + struct wl_listener restack_listener; }; static const char *e_foreign_shell_role_name = "wtz_foreign_shell"; @@ -451,12 +457,12 @@ _e_exported_shell_destroy(E_Exported_Shell *es) } static void -_e_exported_shell_cb_eo_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED) +_e_exported_shell_cb_move(struct wl_listener *listener, void *data) { E_Exported_Shell *es; - es = data; - evas_object_geometry_get(es->ec->frame, &es->x, &es->y, NULL, NULL); + es = wl_container_of(listener, es, move_listener); + e_view_client_geometry_get(e_client_view_get(es->ec), &es->x, &es->y, NULL, NULL); if (es->foreign) { @@ -553,9 +559,8 @@ _e_exported_shell_ec_link(E_Exported_Shell *es, E_Client *ec) /* It's to update transform whenever position of comp object changes by * sub-surface. Otherwise, final viewport by transform wouldn't represent * changed position. */ - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, - _e_exported_shell_cb_eo_move, - es); + es->move_listener.notify = _e_exported_shell_cb_move; + e_view_event_listener_add(e_view_client_view_get(e_client_view_get(ec)), E_VIEW_MOVE, &es->move_listener); /* FIXME workaround * Use apply_viewport_signal due to the absence of commit signal for now. */ @@ -581,8 +586,7 @@ _e_exported_shell_ec_unlink(E_Exported_Shell *es) { e_client_transform_core_remove(es->ec, es->transform); - evas_object_event_callback_del(es->ec->frame, EVAS_CALLBACK_MOVE, - _e_exported_shell_cb_eo_move); + e_view_event_listener_del(e_view_client_view_get(e_client_view_get(es->ec)), E_VIEW_MOVE, &es->move_listener); wl_list_remove(&es->surface_commit_listener.link); @@ -599,20 +603,20 @@ _e_exported_shell_visible_set(E_Exported_Shell *es, Eina_Bool visible) if (visible) { - if (!evas_object_visible_get(es->ec->frame)) + if (!e_view_client_visible_get(e_client_view_get(es->ec))) { es->ec->comp_data->mapped = 1; es->ec->visible = EINA_TRUE; - evas_object_show(es->ec->frame); + e_view_client_show(e_client_view_get(es->ec)); } } else { - if (evas_object_visible_get(es->ec->frame)) + if (e_view_client_visible_get(e_client_view_get(es->ec))) { es->ec->comp_data->mapped = 0; es->ec->visible = EINA_FALSE; - evas_object_hide(es->ec->frame); + e_view_client_hide(e_client_view_get(es->ec)); } } @@ -631,14 +635,14 @@ _e_exported_shell_destination_set(E_Exported_Shell *es, int w, int h) es->ec->client.w = w; es->ec->client.h = h; e_client_size_set(es->ec, w, h); - evas_object_resize(es->ec->frame, w, h); + e_view_client_size_set(e_client_view_get(es->ec), w, h); vp = &es->ec->comp_data->scaler.buffer_viewport; vp->surface.width = w; vp->surface.height = h; vp->changed = EINA_TRUE; - evas_object_geometry_get(es->ec->frame, &x, &y, NULL, NULL); + e_view_client_geometry_get(e_client_view_get(es->ec), &x, &y, NULL, NULL); e_util_transform_viewport_set(es->transform, x, y, w, h); e_client_transform_core_update(es->ec); @@ -883,15 +887,16 @@ _e_foreign_shell_place_under_exported(E_Foreign_Shell *fs) layer = e_client_layer_get(fs->exported->ec); e_client_layer_set(fs->ec, layer); - evas_object_stack_below(fs->ec->frame, fs->exported->ec->frame); + e_view_place_below(e_view_client_view_get(e_client_view_get(fs->ec)), + e_view_client_view_get(e_client_view_get(fs->exported->ec))); } static void -_e_foreign_shell_cb_exported_object_restack(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_foreign_shell_cb_exported_restack(struct wl_listener *listener, void *data) { E_Foreign_Shell *fs; - fs = data; + fs = wl_container_of(listener, fs, restack_listener); _e_foreign_shell_place_under_exported(fs); } @@ -899,19 +904,16 @@ _e_foreign_shell_cb_exported_object_restack(void *data, Evas *e EINA_UNUSED, Eva static void _e_foreign_shell_exported_restack_handler_add(E_Foreign_Shell *fs) { - evas_object_event_callback_add(fs->exported->ec->frame, - EVAS_CALLBACK_RESTACK, - _e_foreign_shell_cb_exported_object_restack, - fs); + fs->restack_listener.notify = _e_foreign_shell_cb_exported_restack; + e_view_event_listener_add(e_view_client_view_get(e_client_view_get(fs->exported->ec)), + E_VIEW_RESTACK, &fs->restack_listener); } static void _e_foreign_shell_exported_restack_handler_remove(E_Foreign_Shell *fs) { - evas_object_event_callback_del_full(fs->exported->ec->frame, - EVAS_CALLBACK_RESTACK, - _e_foreign_shell_cb_exported_object_restack, - fs); + e_view_event_listener_del(e_view_client_view_get(e_client_view_get(fs->exported->ec)), + E_VIEW_RESTACK, &fs->restack_listener); } static void @@ -962,14 +964,14 @@ _e_foreign_shell_visible_set(E_Foreign_Shell *fs, Eina_Bool visible) { fs->ec->comp_data->mapped = 1; fs->ec->visible = EINA_TRUE; - evas_object_show(fs->ec->frame); + e_view_client_show(e_client_view_get(fs->ec)); } } else if (fs->ec->comp_data->mapped) { fs->ec->comp_data->mapped = 0; fs->ec->visible = EINA_FALSE; - evas_object_hide(fs->ec->frame); + e_view_client_hide(e_client_view_get(fs->ec)); } } @@ -987,7 +989,7 @@ _e_foreign_shell_viewport_update(E_Foreign_Shell *fs) fs->ec->client.w = w; fs->ec->client.h = h; e_client_size_set(fs->ec, w, h); - evas_object_resize(fs->ec->frame, w, h); + e_view_client_size_set(e_client_view_get(fs->ec), w, h); vp = &fs->ec->comp_data->scaler.buffer_viewport; vp->surface.width = w; diff --git a/src/bin/server/e_policy_wl.c b/src/bin/server/e_policy_wl.c index 7878efc..f3c36aa 100644 --- a/src/bin/server/e_policy_wl.c +++ b/src/bin/server/e_policy_wl.c @@ -33,6 +33,8 @@ #include "e_hwc_window_intern.h" #include "e_input_backend_intern.h" #include "e_input_thread_client_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -1347,7 +1349,7 @@ _tzpos_iface_cb_set(struct wl_client *client EINA_UNUSED, struct wl_resource *re ec = e_pixmap_client_get(psurf->cp); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); if (e_policy_client_is_keyboard(ec)) { @@ -1488,7 +1490,7 @@ E_API void e_policy_wl_activate(E_Client *ec) { EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "REAL ACTIVATE", ec); @@ -1525,7 +1527,7 @@ _tzpol_iface_cb_activate(struct wl_client *client EINA_UNUSED, struct wl_resourc ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "ACTIVATE", ec); @@ -1602,11 +1604,11 @@ _tzpol_iface_cb_activate_below_by_res_id(struct wl_client *client EINA_UNUSED, s ec = e_pixmap_find_client_by_res_id(res_id); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); below_ec = e_pixmap_find_client_by_res_id(below_res_id); EINA_SAFETY_ON_NULL_RETURN(below_ec); - EINA_SAFETY_ON_NULL_RETURN(below_ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(below_ec)); ELOGF("TZPOL", "ACTIVATE_BELOW|win:0x%08zx(res_id:%d)|below_win:0x%08zx(res_id:%d)", @@ -1671,11 +1673,11 @@ _tzpol_iface_cb_activate_above_by_res_id(struct wl_client *client EINA_UNUSED, s ec = e_pixmap_find_client_by_res_id(res_id); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); above_ec = e_pixmap_find_client_by_res_id(above_res_id); EINA_SAFETY_ON_NULL_RETURN(above_ec); - EINA_SAFETY_ON_NULL_RETURN(above_ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(above_ec)); ELOGF("TZPOL", "ACTIVATE_ABOVE|win:0x%08zx(res_id:%d)|above_win:0x%08zx(res_id:%d)", @@ -1739,7 +1741,7 @@ _tzpol_iface_cb_raise(struct wl_client *client EINA_UNUSED, struct wl_resource * ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "RAISE", ec); @@ -1776,7 +1778,7 @@ _tzpol_iface_cb_lower(struct wl_client *client EINA_UNUSED, struct wl_resource * ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "LOWER", ec); @@ -1806,7 +1808,7 @@ _tzpol_iface_cb_lower_by_res_id(struct wl_client *client EINA_UNUSED, struct wl_ ec = e_pixmap_find_client_by_res_id(res_id); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "LOWER by res id:%d", ec, res_id); @@ -1873,7 +1875,7 @@ _tzpol_iface_cb_role_set(struct wl_client *client EINA_UNUSED, struct wl_resourc ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "ROLE SET (role:%s)", ec, role); e_client_window_role_set(ec, role); @@ -2393,7 +2395,7 @@ E_API void e_policy_wl_iconify(E_Client *ec) { EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "Set ICONIFY BY CLIENT", ec); @@ -2415,7 +2417,7 @@ EINTERN void e_policy_wl_uniconify(E_Client *ec) { EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); if (e_policy_visibility_client_uniconify(ec, 1)) return; @@ -2570,7 +2572,9 @@ _e_policy_wl_aux_hint_apply(E_Client *ec) ec->changable_layer[E_CHANGABLE_LAYER_TYPE_ABOVE_NOTIFICATION].saved) { // restore original layer - if (original_layer != evas_object_layer_get(ec->frame)) + E_View *view = e_view_client_view_get(e_client_view_get(ec)); + E_Layer ec_layer = e_canvas_util_layer_map(e_view_layer_index_get(view)); + if (original_layer != ec_layer) { Eina_Bool pend = EINA_FALSE; pend = e_policy_visibility_client_layer_lower(ec, original_layer); @@ -2915,7 +2919,7 @@ _e_policy_wl_background_state_apply(E_Client *ec, Eina_Bool state) if (state) { ec->bg_state = EINA_TRUE; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); e_pixmap_image_clear(ec->pixmap, 1); } else @@ -2927,8 +2931,8 @@ _e_policy_wl_background_state_apply(E_Client *ec, Eina_Bool state) cdata = e_client_cdata_get(ec); if (cdata && cdata->mapped) { - evas_object_show(ec->frame); - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); + e_view_client_show(e_client_view_get(ec)); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); } } } @@ -3083,7 +3087,7 @@ _e_policy_wl_floating_mode_apply(E_Client *ec, Eina_Bool floating) ec->floating = floating; ec->lock_client_location = EINA_FALSE; - if (ec->frame) + if (e_client_view_get(ec)) { if (floating) { @@ -3137,7 +3141,7 @@ _tzpol_iface_cb_stack_mode_set(struct wl_client *client EINA_UNUSED, struct wl_r ELOGF("TZPOL", "STACK Mode Set. mode:%d", ec, mode); - if (ec->frame) + if (e_client_view_get(ec)) { if (mode == TIZEN_POLICY_STACK_MODE_ABOVE) { @@ -3562,7 +3566,7 @@ _tzpol_iface_cb_show(struct wl_client *client EINA_UNUSED, struct wl_resource *r ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "Prepare SHOW (wait for buffer attach)", ec); e_client_hide_by_request_set(ec, EINA_FALSE); @@ -3585,7 +3589,7 @@ _tzpol_iface_cb_hide(struct wl_client *client EINA_UNUSED, struct wl_resource *r ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "Prepare HIDE (wait for NULL buffer attach)", ec); e_client_hide_by_request_set(ec, EINA_TRUE); @@ -3641,7 +3645,7 @@ _tzpol_iface_cb_set_maximize_direction(struct wl_client *client EINA_UNUSED, str ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "Set Maximize_direction. direction:%d", ec, direction); @@ -3677,7 +3681,7 @@ static void _e_policy_set_pin_mode(E_Client *ec, Eina_Bool pinned) { EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "Set Pin mode to %d", ec, pinned); e_client_pinned_set(ec, pinned); @@ -3748,7 +3752,7 @@ static void _e_policy_set_modal(E_Client *ec, Eina_Bool modal) { EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); ELOGF("TZPOL", "Set modal to %d", ec, modal); e_client_modal_state_set(ec, modal); @@ -5316,7 +5320,7 @@ _e_tzsh_indicator_find_topvisible_client(E_Zone *zone) if (e_object_is_del(E_OBJECT(ec))) continue; if (e_client_util_ignored_get(ec)) continue; if (!e_zone_has_ec(zone, ec)) continue; - if (!ec->frame) continue; + if (!e_client_view_get(ec)) continue; if (!ec->visible) continue; if (ec->visibility.skip) continue; @@ -6816,7 +6820,7 @@ _launch_splash_off(E_Policy_Wl_Tzlaunch_Splash *tzlaunch_splash) if (ec->visible) { ec->visible = EINA_FALSE; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); ec->ignored = EINA_TRUE; } @@ -6834,7 +6838,7 @@ _launch_splash_off(E_Policy_Wl_Tzlaunch_Splash *tzlaunch_splash) // if Launchscreen is replaced to cursor, than hide e_comp_object_content_unset(ec->frame); ec->visible = EINA_FALSE; - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); ec->ignored = EINA_TRUE; } else if (!tzlaunch_splash->replaced) @@ -6848,9 +6852,9 @@ _launch_splash_off(E_Policy_Wl_Tzlaunch_Splash *tzlaunch_splash) if (ec->first_mapped) { ELOGF("LAUNCH", "SHOW real win by replaced splash ec", ec); - e_comp_object_signal_emit(ec->frame, "e,action,launch_real,done", "e"); + e_view_client_signal_emit(e_client_view_get(ec), "e,action,launch_real,done", "e"); } - e_comp_object_signal_emit(ec->frame, "e,action,launch,done", "e"); + e_view_client_signal_emit(e_client_view_get(ec), "e,action,launch,done", "e"); } } @@ -6890,7 +6894,7 @@ _launchscreen_splash_setup(E_Policy_Wl_Tzlaunch_Splash *splash, Eina_Bool intercepted = EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(splash->ec, EINA_FALSE); - EINA_SAFETY_ON_NULL_RETURN_VAL(splash->ec->frame, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(e_client_view_get(splash->ec), EINA_FALSE); ec = splash->ec; ec->effect_type = _e_policy_wl_tzlaunch_effect_type_get(effect_type); @@ -7105,7 +7109,7 @@ _tzlaunch_splash_iface_cb_owner(struct wl_client *client EINA_UNUSED, struct wl_ new_ec = pre_ec; e_client_geometry_get(new_ec, NULL, NULL, &tw, &th); if (tw <= 1 || th <= 1) - evas_object_resize(new_ec->frame, e_comp->w, e_comp->h); + e_view_client_size_set(e_client_view_get(new_ec), e_comp->w, e_comp->h); break; } eina_list_free(clients); @@ -7135,7 +7139,7 @@ _tzlaunch_splash_iface_cb_owner(struct wl_client *client EINA_UNUSED, struct wl_ e_service_launcher_callee_register(new_ec, tzlaunch_splash->appid, tzlaunch_splash->path, SPLASH_GROUP_NAME); } - evas_object_show(new_ec->frame); + e_view_client_show(e_client_view_get(new_ec)); e_client_raise(new_ec); tzlaunch_splash->ec = new_ec; @@ -7178,7 +7182,7 @@ _tzlaunch_splash_iface_cb_owner(struct wl_client *client EINA_UNUSED, struct wl_ e_service_launcher_callee_register(old_ec, tzlaunch_splash->appid, tzlaunch_splash->path, SPLASH_GROUP_NAME); } - evas_object_show(old_ec->frame); + e_view_client_show(e_client_view_get(old_ec)); e_client_raise(old_ec); } @@ -8053,7 +8057,7 @@ _tz_indicator_cb_state_set(struct wl_client *client EINA_UNUSED, struct wl_resou ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); if (state == TIZEN_INDICATOR_STATE_ON) ind_state = E_INDICATOR_STATE_ON; @@ -8077,7 +8081,7 @@ _tz_indicator_cb_opacity_mode_set(struct wl_client *client EINA_UNUSED, struct w ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); switch (mode) { @@ -8121,7 +8125,7 @@ _tz_indicator_cb_visible_type_set(struct wl_client *client EINA_UNUSED, struct w ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); if (vtype == TIZEN_INDICATOR_VISIBLE_TYPE_SHOWN) vis_type = E_INDICATOR_VISIBLE_TYPE_SHOWN; @@ -8295,7 +8299,7 @@ _tz_clipboard_cb_show(struct wl_client *client EINA_UNUSED, struct wl_resource * ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); _e_policy_wl_tz_clipboard_set_client(res_tz_clipboard, ec); e_service_cbhm_parent_set(ec, EINA_TRUE); @@ -8309,7 +8313,7 @@ _tz_clipboard_cb_hide(struct wl_client *client EINA_UNUSED, struct wl_resource * ec = e_client_from_surface_resource(surf); EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); e_service_cbhm_parent_set(ec, EINA_FALSE); e_service_cbhm_hide(); diff --git a/src/bin/server/e_video_shell.c b/src/bin/server/e_video_shell.c index d27bf35..8dbf5eb 100644 --- a/src/bin/server/e_video_shell.c +++ b/src/bin/server/e_video_shell.c @@ -9,6 +9,8 @@ #include "e_comp_object_intern.h" #include "e_desk_intern.h" #include "e_comp_wl_subsurface_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -851,7 +853,7 @@ _source_unmap(E_Video_Viewport_Source *source) e_surface_unmap(source->surface->surface); // FIXME: Need to be done by another module handling view - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); } static void @@ -1032,7 +1034,7 @@ _source_viewport_apply(E_Video_Viewport_Source *source) e_comp_wl_map_size_cal_from_viewport(ec); // FIXME: This code is copied from e_comp_wl_map_apply() - e_comp_object_map_update(ec->frame); + e_view_client_map_update(e_client_view_get(ec)); if (e_comp_wl_subsurface_check(ec)) { @@ -1058,7 +1060,7 @@ _source_viewport_apply(E_Video_Viewport_Source *source) } } - evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, NULL, NULL); if (x != dx || y != dy) e_subsurface_view_position_set(subsurface, dx, dy); } @@ -1067,9 +1069,9 @@ _source_viewport_apply(E_Video_Viewport_Source *source) dx = ec->x; dy = ec->y; - evas_object_geometry_get(ec->frame, &x, &y, NULL, NULL); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, NULL, NULL); if (x != dx || y != dy) - evas_object_move(ec->frame, dx, dy); + e_view_position_set(e_view_client_view_get(e_client_view_get(ec)), dx, dy); } cdata = ec->comp_data; diff --git a/src/bin/utils/e_map.c b/src/bin/utils/e_map.c index 8f3c725..eba50b8 100644 --- a/src/bin/utils/e_map.c +++ b/src/bin/utils/e_map.c @@ -1,4 +1,6 @@ +#include #include "e_map_intern.h" +#include "e_view_intern.h" #define E_MAP_INDEX_IN_RANGE(MAP, X) ((X >= 0) && (X < MAP->count)) @@ -287,6 +289,29 @@ e_map_util_points_populate_from_object_full(E_Map *em, Evas_Object *obj, int z) return EINA_TRUE; } + +E_API Eina_Bool +e_map_util_points_populate_from_view(E_Map *em, E_View *view) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(view, EINA_FALSE); + + evas_map_util_points_populate_from_object(em->map, view->eo); + + return EINA_TRUE; +} + +E_API Eina_Bool +e_map_util_points_populate_from_view_full(E_Map *em, E_View *view, int z) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(view, EINA_FALSE); + + evas_map_util_points_populate_from_object_full(em->map, view->eo, z); + + return EINA_TRUE; +} + E_API Eina_Bool e_map_util_object_move_sync_set(E_Map *em, Eina_Bool enabled) { diff --git a/src/bin/utils/e_theme.c b/src/bin/utils/e_theme.c index 72d3185..3c099d3 100644 --- a/src/bin/utils/e_theme.c +++ b/src/bin/utils/e_theme.c @@ -25,3 +25,9 @@ e_theme_edje_file_get(const char *category EINA_UNUSED, const char *group) { return e_config->comp_shadow_file; } + +EINTERN int +e_theme_edje_view_set(E_View_Edje *view, const char *category EINA_UNUSED, const char *group) +{ + return e_view_edje_file_set(view, e_config->comp_shadow_file, group); +} diff --git a/src/bin/utils/e_theme_intern.h b/src/bin/utils/e_theme_intern.h index f986530..06aafe3 100644 --- a/src/bin/utils/e_theme_intern.h +++ b/src/bin/utils/e_theme_intern.h @@ -3,10 +3,12 @@ #include "e_intern.h" #include "e_theme.h" +#include "e_view_edje_intern.h" EINTERN int e_theme_init(void); EINTERN int e_theme_shutdown(void); EINTERN const char *e_theme_edje_file_get(const char *category, const char *group); +EINTERN int e_theme_edje_view_set(E_View_Edje *view, const char *category, const char *group); #endif diff --git a/src/bin/utils/e_util_transform.c b/src/bin/utils/e_util_transform.c index 0409361..46445a1 100644 --- a/src/bin/utils/e_util_transform.c +++ b/src/bin/utils/e_util_transform.c @@ -1,4 +1,5 @@ #include "e_util_transform_intern.h" +#include "e_view_client_intern.h" #define E_UTIL_TRANSFORM_IS_ZERO(p) ((p) > -1e-6 && (p) < 1e-6) #define E_UTIL_TRANSFORM_ROUND(x) ((x) >= 0 ? (int)((x) + 0.5) : (int)((x) - 0.5)) @@ -528,9 +529,9 @@ e_util_transform_rect_client_rect_get(E_Util_Transform_Rect *rect, E_Client *ec) if (!rect || !ec) return; - if ((ec->w == 0) && (ec->h == 0) && (ec->frame)) + if ((ec->w == 0) && (ec->h == 0) && e_client_view_get(ec)) { - evas_object_geometry_get(ec->frame, NULL, NULL, &w, &h); + e_view_client_geometry_get(e_client_view_get(ec), NULL, NULL, &w, &h); e_util_transform_rect_init(rect, ec->x, ec->y, w, h); } else @@ -936,8 +937,8 @@ e_util_transform_matrix_inv_rect_coords_get(E_Util_Transform *transform, E_Util_ if (!out_x || !out_y) return; if ((w <= 0) || (h <= 0)) return; - /* get rectangle's points from vertices. becase transform matrix is different with Evas_Map - * Evas_Map calculate using transformed rectangle's points, so to remove different these, + /* get rectangle's points from vertices. becase transform matrix is different with E_Map + * E_Map calculate using transformed rectangle's points, so to remove different these, * calculate points using rectangle's points */ e_util_transform_vertices_pos_get(vetices, 0, &dx1, &dy1, NULL, NULL); @@ -962,8 +963,8 @@ e_util_transform_matrix_inv_rect_coords_get(E_Util_Transform *transform, E_Util_ result_x = *out_x = E_UTIL_TRANSFORM_ROUND(dresult_x); result_y = *out_y = E_UTIL_TRANSFORM_ROUND(dresult_y); - /* this logic is added because Evas_Map doesn't do round. - * so check whether transformed result from Evas_Map is roundable. + /* this logic is added because E_Map doesn't do round. + * so check whether transformed result from E_Map is roundable. * If the first digit after decimal point of result is greater than 5(roundable), * add 1 to the inverted result. */ diff --git a/src/bin/windowmgr/e_dnd.c b/src/bin/windowmgr/e_dnd.c index 147cf3e..9ef3f5f 100644 --- a/src/bin/windowmgr/e_dnd.c +++ b/src/bin/windowmgr/e_dnd.c @@ -4,6 +4,10 @@ #include "e_grabinput_intern.h" #include "e_comp_intern.h" #include "e_comp_wl_input.h" +#include "e_comp_canvas_intern.h" +#include "e_view_client_intern.h" +#include "e_view_edje_intern.h" +#include "e_view_rect.h" struct _E_Drag_Hook { @@ -108,6 +112,9 @@ _e_drag_hook_call(E_Drag_Hook_Point hookpoint, E_Drag *drag) static int _e_drag_finalize(E_Drag *drag, int x, int y) { + E_View_Rect *rect; + const int color[4] = {0, 0, 0, 0}; + if (_drag_win) return 0; _drag_win = e_comp->ee_win; if (!e_comp_grab_input(1, 1)) @@ -117,18 +124,19 @@ _e_drag_finalize(E_Drag *drag, int x, int y) } drag->input_grab = EINA_TRUE; - if (!drag->object) + if (!drag->view) { - e_drag_object_set(drag, evas_object_rectangle_add(drag->evas)); - evas_object_color_set(drag->object, 0, 0, 0, 0); + rect = e_view_rect_create(e_canvas_layer_view_tree_get(e_comp_canvas_get(), E_CANVAS_LAYER_CLIENT_DRAG), + 1, 1, color); + e_drag_view_set(drag, e_view_rect_view_get(rect)); } drag->angle = e_comp->pointer->rotation; e_drag_move(drag, x, y); e_drag_resize(drag, drag->w, drag->h); drag->visible = 1; - evas_object_show(drag->comp_object); - evas_object_show(drag->object); + e_view_show(e_view_edje_view_get(drag->comp_edje)); + e_view_show(drag->view); _drag_current = drag; return 1; @@ -182,27 +190,25 @@ e_drag_new(int x, int y, E_Drag_Finished_Cb finished_cb) drag->w = 24; drag->h = 24; - drag->evas = e_comp->evas; - drag->cb.finished = finished_cb; return drag; } EINTERN void -e_drag_object_set(E_Drag *drag, Evas_Object *object) +e_drag_view_set(E_Drag *drag, E_View *view) { - EINA_SAFETY_ON_NULL_RETURN(object); - EINA_SAFETY_ON_TRUE_RETURN(!!drag->object); + EINA_SAFETY_ON_NULL_RETURN(view); + EINA_SAFETY_ON_TRUE_RETURN(!!drag->view); if (drag->visible) - evas_object_show(object); + e_view_show(view); else - evas_object_hide(object); - drag->object = object; - drag->comp_object = e_comp_object_util_add(object); - evas_object_layer_set(drag->comp_object, E_LAYER_CLIENT_DRAG); - evas_object_name_set(drag->comp_object, "E Drag"); - evas_object_pass_events_set(drag->comp_object, 1); + e_view_hide(view); + drag->view = view; + e_view_reparent(view, e_canvas_layer_view_tree_get(e_comp_canvas_get(), E_CANVAS_LAYER_CLIENT_DRAG)); + drag->comp_edje = e_view_edje_util_add(view); + e_view_name_set(e_view_edje_view_get(drag->comp_edje), "E Drag"); + e_view_pass_events_set(e_view_edje_view_get(drag->comp_edje), 1); } EINTERN void @@ -218,15 +224,15 @@ EINTERN void e_drag_move(E_Drag *drag, int x, int y) { int cur_x, cur_y; - evas_object_geometry_get(drag->comp_object, &cur_x, &cur_y, NULL, NULL); + e_view_edje_geometry_get(drag->comp_edje, &cur_x, &cur_y, NULL, NULL); if ((cur_x == x + drag->dx) && (cur_y == y + drag->dy)) return; drag->x = x; drag->y = y; if (_drag_current == drag) { - evas_object_move(drag->comp_object, x + drag->dx, y + drag->dy); - _e_drag_map_apply(drag); + e_view_position_set(e_view_edje_view_get(drag->comp_edje), x + drag->dx, y + drag->dy); + _e_drag_map_apply(drag); } } @@ -239,7 +245,7 @@ e_drag_resize(E_Drag *drag, int w, int h) drag->w = w; if (_drag_current == drag) { - evas_object_resize(drag->comp_object, w, h); + e_view_edje_size_set(drag->comp_edje, w, h); _e_drag_map_apply(drag); } } @@ -266,7 +272,7 @@ e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type) static void _e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type) { - evas_object_hide(drag->comp_object); + e_view_hide(e_view_edje_view_get(drag->comp_edje)); _e_drag_hook_call(E_DRAG_HOOK_DRAG_END, drag); @@ -313,8 +319,12 @@ _e_drag_free(E_Drag *drag) _drag_current = NULL; } - evas_object_hide(drag->comp_object); - E_FREE_FUNC(drag->comp_object, evas_object_del); + if (drag->comp_edje) + { + e_view_hide(e_view_edje_view_get(drag->comp_edje)); + e_view_destroy(e_view_edje_view_get(drag->comp_edje)); + drag->comp_edje = NULL; + } free(drag); if (input_grab) e_comp_ungrab_input(1, 1); @@ -327,6 +337,7 @@ _e_drag_map_apply(E_Drag *drag) int angle, drag_client_w, drag_client_h; E_Map *map = NULL, *new_map = NULL; Eina_Bool need_map_enable; + E_View *view; angle = drag->angle; @@ -335,7 +346,8 @@ _e_drag_map_apply(E_Drag *drag) else if (angle == 270) angle = 90; - need_map_enable = evas_object_map_enable_get(e_comp_wl->drag_client->frame) || (angle != 0); + view = e_view_client_view_get(e_client_view_get(e_comp_wl->drag_client)); + need_map_enable = e_view_map_enable_get(view) || (angle != 0); if (!need_map_enable) return; map = e_client_map_get(e_comp_wl->drag_client); @@ -350,8 +362,8 @@ _e_drag_map_apply(E_Drag *drag) e_map_util_points_populate_from_geometry(new_map, drag->x, drag->y, drag_client_w, drag_client_h, 0); e_map_util_rotate(new_map, angle, drag->x, drag->y); e_map_util_object_move_sync_set(new_map, EINA_TRUE); - e_comp_object_map_set(drag->comp_object, new_map); - e_comp_object_map_enable_set(drag->comp_object, EINA_TRUE); + e_view_edje_map_set(drag->comp_edje, new_map); + e_view_edje_map_enable_set(drag->comp_edje, true); fin: if (map) e_map_free(map); diff --git a/src/bin/windowmgr/e_dnd_intern.h b/src/bin/windowmgr/e_dnd_intern.h index f085727..6d2b3e0 100644 --- a/src/bin/windowmgr/e_dnd_intern.h +++ b/src/bin/windowmgr/e_dnd_intern.h @@ -3,6 +3,8 @@ #include "e_intern.h" #include "e_dnd.h" +#include "e_view_intern.h" +#include "e_view_edje_intern.h" #define E_DRAG_TYPE 0xE0b0100f @@ -33,9 +35,8 @@ struct _E_Drag E_Drag_Finished_Cb finished; } cb; - Evas *evas; - Evas_Object *comp_object; - Evas_Object *object; + E_View *view; + E_View_Edje *comp_edje; int x, y, w, h; int dx, dy; @@ -52,8 +53,7 @@ EINTERN int e_dnd_shutdown(void); EINTERN E_Drag *e_drag_current_get(void); /* x and y are the top left coords of the object that is to be dragged */ EINTERN E_Drag *e_drag_new(int x, int y, E_Drag_Finished_Cb finished_cb); -EINTERN Evas *e_drag_evas_get(const E_Drag *drag); -EINTERN void e_drag_object_set(E_Drag *drag, Evas_Object *object); +EINTERN void e_drag_view_set(E_Drag *drag, E_View *view); EINTERN void e_drag_reference_point_set(E_Drag *drag, int x, int y); EINTERN void e_drag_move(E_Drag *drag, int x, int y); EINTERN void e_drag_resize(E_Drag *drag, int w, int h); diff --git a/src/bin/windowmgr/e_focus_policy_history.c b/src/bin/windowmgr/e_focus_policy_history.c index a38d681..60af3a3 100644 --- a/src/bin/windowmgr/e_focus_policy_history.c +++ b/src/bin/windowmgr/e_focus_policy_history.c @@ -1,11 +1,11 @@ #include "e_focus_policy_iface.h" #include "e_zone_intern.h" #include "e_client_intern.h" -#include "e_comp_object_intern.h" #include "e_comp_intern.h" #include "e_policy_visibility_intern.h" #include "e_desk_intern.h" #include "e_config_intern.h" +#include "e_view_client_intern.h" typedef struct _E_Focus_Policy_History_Impl E_Focus_Policy_History; typedef struct _E_Focus_Policy_History_Client E_Focus_Policy_History_Client; @@ -200,7 +200,7 @@ _e_focus_policy_history_candidate_focus_get(E_Focus_Policy_History *history_poli if (!(ec->icccm.accepts_focus || ec->icccm.take_focus)) continue; if (ec->lock_focus_in || ec->lock_focus_out) continue; - if (!evas_object_visible_get(ec->frame)) continue; + if (!e_view_client_visible_get(e_client_view_get(ec))) continue; if (ec->iconic) continue; if (ec->bg_state) continue; @@ -246,7 +246,7 @@ _e_focus_policy_history_focus_can_take_by_vis_obscured(E_Focus_Policy_History *h if (e_client_check_really_iconified(ec)) return EINA_FALSE; - if (!evas_object_visible_get(ec->frame) && + if (!e_view_client_visible_get(e_client_view_get(ec)) && !eina_list_data_find(history_policy->defer_focus_stack, ec)) return EINA_FALSE; break; @@ -1004,7 +1004,7 @@ _focus_policy_history_cb_zone_client_add(struct wl_listener *listener, void *dat E_Focus_Policy_History *history_policy; E_Focus_Policy_History_Client *history_client; E_Client *ec; - Evas_Object *obj; + E_View_Client *view_client; history_policy = wl_container_of(listener, history_policy, zone_client_add); @@ -1013,8 +1013,8 @@ _focus_policy_history_cb_zone_client_add(struct wl_listener *listener, void *dat E_FOCUS_HISTORY_TRACE(history_policy, ec); - obj = ec->frame; - EINA_SAFETY_ON_NULL_RETURN(obj); + view_client = e_client_view_get(ec); + EINA_SAFETY_ON_NULL_RETURN(view_client); history_client = E_NEW(E_Focus_Policy_History_Client, 1); EINA_SAFETY_ON_NULL_RETURN(history_client); @@ -1052,11 +1052,11 @@ _focus_policy_history_cb_zone_client_add(struct wl_listener *listener, void *dat // e_comp_object listeners history_client->comp_object_lower_done.notify = _focus_policy_history_cb_comp_object_lower_done; - e_comp_object_lower_done_listener_add(obj, &history_client->comp_object_lower_done); + e_view_client_lower_done_listener_add(view_client, &history_client->comp_object_lower_done); history_client->comp_object_show.notify = _focus_policy_history_cb_comp_object_show; - e_comp_object_show_listener_add(obj, &history_client->comp_object_show); + e_view_client_show_listener_add(view_client, &history_client->comp_object_show); history_client->comp_object_hide.notify = _focus_policy_history_cb_comp_object_hide; - e_comp_object_hide_listener_add(obj, &history_client->comp_object_hide); + e_view_client_hide_listener_add(view_client, &history_client->comp_object_hide); ELOGF("FOCUS_HISTORY", "zone_client_add | ", ec); } diff --git a/src/bin/windowmgr/e_focus_policy_topmost.c b/src/bin/windowmgr/e_focus_policy_topmost.c index 4fdcf15..24b938f 100644 --- a/src/bin/windowmgr/e_focus_policy_topmost.c +++ b/src/bin/windowmgr/e_focus_policy_topmost.c @@ -3,6 +3,7 @@ #include "e_client_intern.h" #include "e_desk_intern.h" #include "e_config_intern.h" +#include "e_view_client_intern.h" typedef struct _E_Focus_Policy_Topmost_Impl E_Focus_Policy_Topmost; typedef struct _E_Focus_Policy_Topmost_Client E_Focus_Policy_Topmost_Client; @@ -103,7 +104,7 @@ _e_focus_policy_topmost_focus_can_take(E_Client *ec) above_ec = e_client_check_fully_contain_by_above(ec, EINA_FALSE); if (above_ec) { - if (!evas_object_visible_get(above_ec->frame)) + if (!e_view_client_visible_get(e_client_view_get(above_ec))) return EINA_TRUE; child_ec = e_client_check_obscured_by_children_group(ec); diff --git a/src/bin/windowmgr/e_magnifier.c b/src/bin/windowmgr/e_magnifier.c index be479fb..f50715b 100644 --- a/src/bin/windowmgr/e_magnifier.c +++ b/src/bin/windowmgr/e_magnifier.c @@ -1,4 +1,6 @@ #include "e_magnifier_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #define E_MAGNIFIER_SMART_DATA_GET(obj, ptr) \ E_Magnifier_Smart_Data *ptr = evas_object_smart_data_get(obj); @@ -8,6 +10,7 @@ if (!ptr) return typedef struct _E_Magnifier_Smart_Data E_Magnifier_Smart_Data; +typedef struct _E_Magnifier_Listener E_Magnifier_Listener; struct _E_Magnifier_Smart_Data { @@ -35,6 +38,15 @@ struct _E_Magnifier_Smart_Data Eina_Bool enabled; }; +struct _E_Magnifier_Listener +{ + E_Client *ec; + + // view listener + struct wl_listener move_listener; + struct wl_listener resize_listener; +}; + EVAS_SMART_SUBCLASS_NEW(E_MAGNIFIER_SMART_OBJ_TYPE, _e_magnifier, Evas_Smart_Class, Evas_Smart_Class, evas_object_smart_clipped_class_get, NULL); @@ -51,6 +63,7 @@ static void _e_magnifier_owner_set(E_Client *ec); static void _e_magnifier_owner_unset(E_Client *ec); static Evas_Object *_e_magnifier_mgr = NULL; +static E_Magnifier_Listener *_e_magnifier_listener = NULL; static Eina_Bool _e_magnifier_smart_init(void) @@ -84,7 +97,7 @@ _e_magnifier_proxy_ec_new(E_Client *ec) Eina_Bool ret; if (!ec) return EINA_FALSE; - if (!ec->frame) return EINA_FALSE; + if (!e_client_view_get(ec)) return EINA_FALSE; if (ec->is_magnifier) return EINA_FALSE; if (ec->magnifier_proxy) { @@ -149,7 +162,7 @@ _e_magnifier_proxy_ec_all_add(void) if (e_client_util_ignored_get(ec)) continue; desk2 = e_zone_desk_find_by_ec(zone, ec); if (desk2 != desk) continue; - if (!ec->frame) continue; + if (!e_client_view_get(ec)) continue; if (ec->is_magnifier) continue; ret = _e_magnifier_proxy_ec_new(ec); @@ -654,18 +667,13 @@ _e_magnifier_zoom_obj_geometry_convert_set(int angle, int x, int y, int w, int h _e_magnifier_apply_zoom(_e_magnifier_mgr); } - - static void -_e_magnifier_cb_owner_move_resize(void *data EINA_UNUSED, - Evas *e EINA_UNUSED, - Evas_Object *obj, - void *event_info EINA_UNUSED) +_e_magnifier_cb_owner_move_resize(E_Client *ec) { int x, y, w, h; int nx, ny, nw, nh; - evas_object_geometry_get(obj, &x, &y, &w, &h); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, &w, &h); E_MAGNIFIER_SMART_DATA_GET_OR_RETURN(_e_magnifier_mgr, sd); @@ -684,6 +692,35 @@ _e_magnifier_cb_owner_move_resize(void *data EINA_UNUSED, _e_magnifier_apply_zoom(_e_magnifier_mgr); } +static void +_e_magnifier_cb_owner_move(struct wl_listener *listener, void *data) +{ + E_Magnifier_Listener *magnifier_listener; + E_Client *ec; + + magnifier_listener = wl_container_of(listener, magnifier_listener, move_listener); + if (EINA_UNLIKELY(!magnifier_listener)) + return; + + ec = magnifier_listener->ec; + + _e_magnifier_cb_owner_move_resize(ec); +} + +static void +_e_magnifier_cb_owner_resize(struct wl_listener *listener, void *data) +{ + E_Magnifier_Listener *magnifier_listener; + E_Client *ec; + + magnifier_listener = wl_container_of(listener, magnifier_listener, resize_listener); + if (EINA_UNLIKELY(!magnifier_listener)) + return; + + ec = magnifier_listener->ec; + + _e_magnifier_cb_owner_move_resize(ec); +} EINTERN int e_magnifier_init(void) @@ -873,14 +910,27 @@ e_magnifier_smart_member_del(Evas_Object *obj) static void _e_magnifier_owner_set(E_Client *ec) { + E_View *view; + if (!ec) return; + _e_magnifier_listener = E_NEW(E_Magnifier_Listener, 1); + if (!_e_magnifier_listener) + { + ELOGF("MAGNIFIER", "Fail to alloc listener..", ec); + return; + } + ec->is_magnifier = EINA_TRUE; ec->exp_iconify.deiconify_update = EINA_FALSE; e_client_layer_set(ec, E_LAYER_CLIENT_ALERT_HIGH); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, _e_magnifier_cb_owner_move_resize, NULL); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESIZE, _e_magnifier_cb_owner_move_resize, NULL); + _e_magnifier_listener->ec = ec; + view = e_view_client_view_get(e_client_view_get(ec)); + _e_magnifier_listener->move_listener.notify = _e_magnifier_cb_owner_move; + e_view_event_listener_add(view, E_VIEW_MOVE, &_e_magnifier_listener->move_listener); + _e_magnifier_listener->resize_listener.notify = _e_magnifier_cb_owner_resize; + e_view_event_listener_add(view, E_VIEW_RESIZE, &_e_magnifier_listener->resize_listener); } static void @@ -890,8 +940,13 @@ _e_magnifier_owner_unset(E_Client *ec) ec->is_magnifier = EINA_FALSE; - evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOVE, _e_magnifier_cb_owner_move_resize); - evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_RESIZE, _e_magnifier_cb_owner_move_resize); + if (_e_magnifier_listener) + { + wl_list_remove(&_e_magnifier_listener->move_listener.link); + wl_list_remove(&_e_magnifier_listener->resize_listener.link); + E_FREE(_e_magnifier_listener); + _e_magnifier_listener = NULL; + } } static Eina_Bool diff --git a/src/bin/windowmgr/e_place.c b/src/bin/windowmgr/e_place.c index aecf06c..98e6ceb 100644 --- a/src/bin/windowmgr/e_place.c +++ b/src/bin/windowmgr/e_place.c @@ -1,6 +1,8 @@ #include "e_place_intern.h" #include "e_input_device_intern.h" #include "e_desk_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" EINTERN void e_place_zone_region_smart_cleanup(E_Zone *zone) @@ -44,10 +46,11 @@ e_place_zone_region_smart_cleanup(E_Zone *zone) EINA_LIST_FREE(clients, ec) { int new_x, new_y; + E_View *view = e_view_client_view_get(e_client_view_get(ec)); e_place_zone_region_smart(zone, clients, ec->x, ec->y, ec->w, ec->h, &new_x, &new_y); - evas_object_move(ec->frame, new_x, new_y); + e_view_position_set(view, new_x, new_y); } } diff --git a/src/bin/windowmgr/e_pointer.c b/src/bin/windowmgr/e_pointer.c index 773fe20..278c0dc 100644 --- a/src/bin/windowmgr/e_pointer.c +++ b/src/bin/windowmgr/e_pointer.c @@ -1,6 +1,9 @@ #include "e_pointer_intern.h" #include "e_input_device_intern.h" #include "e_client_intern.h" +#include "e_comp_canvas.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" /* local variables */ static Eina_List *_ptrs = NULL; @@ -62,15 +65,18 @@ _e_pointer_position_update(E_Pointer *ptr) E_Client *ec; double ratio = 1.0; int hot_x = 0, hot_y = 0; + E_View *view; - if (!ptr->o_ptr) return; + if (!ptr->view_client) return; + view = e_view_client_view_get(ptr->view_client); + EINA_SAFETY_ON_NULL_RETURN(view); - ec = e_comp_object_client_get(ptr->o_ptr); + ec = e_view_data_get(view, "E_Client"); EINA_SAFETY_ON_NULL_RETURN(ec); rotation = ptr->rotation; - evas_object_geometry_get(ec->frame, NULL, NULL, &cursor_w, &cursor_h); + e_view_client_geometry_get(ptr->view_client, NULL, NULL, &cursor_w, &cursor_h); _e_pointer_configured_output_resolution_ratio_get(ec, &ratio); if (ratio != 1.0) @@ -108,7 +114,7 @@ _e_pointer_position_update(E_Pointer *ptr) break; } - evas_object_move(ptr->o_ptr, nx, ny); + e_view_position_set(view, nx, ny); } static void @@ -119,11 +125,15 @@ _e_pointer_map_apply(E_Pointer *ptr) E_Client *ec; int rotation = 0; double ratio = 1.0; + E_View *view; EINA_SAFETY_ON_NULL_RETURN(ptr); - if (!ptr->o_ptr) return; + if (!ptr->view_client) return; - ec = e_comp_object_client_get(ptr->o_ptr); + view = e_view_client_view_get(ptr->view_client); + EINA_SAFETY_ON_NULL_RETURN(view); + + ec = e_view_data_get(view, "E_Client"); EINA_SAFETY_ON_NULL_RETURN(ec); _e_pointer_configured_output_resolution_ratio_get(ec, &ratio); @@ -137,12 +147,12 @@ _e_pointer_map_apply(E_Pointer *ptr) return; } - evas_object_geometry_get(ec->frame, &x, &y, &w, &h); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, &w, &h); map = e_map_new(); EINA_SAFETY_ON_NULL_RETURN(map); - e_map_util_points_populate_from_object_full(map, ec->frame, 0); + e_map_util_points_populate_from_view_full(map, view, 0); if (ratio != 1.0) { @@ -172,38 +182,50 @@ _e_pointer_map_apply(E_Pointer *ptr) } static void -_e_pointer_cb_object_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_pointer_cb_view_del(struct wl_listener *listener, void *data) { - E_Pointer *ptr = (E_Pointer *)data; + E_Pointer *ptr; + + ptr = wl_container_of(listener, ptr, destroy_listener); + if (ptr->view_client) + { + wl_list_remove(&ptr->destroy_listener.link); + ptr->view_client = NULL; + } - ptr->o_ptr = NULL; ptr->device = E_POINTER_NONE; ptr->hot.x = 0; ptr->hot.y = 0; } static void -_e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj) +_e_pointer_view_set(E_Pointer *ptr, E_View_Client *view_client) { - if (ptr->o_ptr == obj) return; + E_View *view; + + if (ptr->view_client == view_client) return; - if (ptr->o_ptr) + if (ptr->view_client) { - evas_object_event_callback_del_full(ptr->o_ptr, EVAS_CALLBACK_DEL, _e_pointer_cb_object_del, ptr); - ptr->o_ptr = NULL; + view = e_view_client_view_get(ptr->view_client); + wl_list_remove(&ptr->destroy_listener.link); + ptr->destroy_listener.notify = NULL; + ptr->view_client = NULL; } - if (obj) + if (view_client) { - evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _e_pointer_cb_object_del, ptr); - ptr->o_ptr = obj; + view = e_view_client_view_get(view_client); + ptr->destroy_listener.notify = _e_pointer_cb_view_del; + e_view_event_listener_add(view, E_VIEW_DESTROY, &ptr->destroy_listener); + ptr->view_client = view_client; } } static void _e_pointer_cb_free(E_Pointer *ptr) { - _e_pointer_object_set(ptr, NULL); + _e_pointer_view_set(ptr, NULL); _ptrs = eina_list_remove(_ptrs, ptr); @@ -296,12 +318,12 @@ e_pointer_canvas_new(Ecore_Evas *ee, Eina_Bool filled) } static Eina_Bool -_e_pointer_object_hide(E_Pointer *ptr, Evas_Object *obj) +_e_pointer_view_hide(E_Pointer *ptr, E_View_Client *view_client) { E_Client *ec; Eina_Bool res = EINA_FALSE; - ec = e_comp_object_client_get(obj); + ec = e_view_data_get(&view_client->view, "E_Client"); if ((ec) && (!e_object_is_del(E_OBJECT(ec)))) { ec->hidden = 1; @@ -312,50 +334,51 @@ _e_pointer_object_hide(E_Pointer *ptr, Evas_Object *obj) } /* hide cursor object */ - if (evas_object_visible_get(obj)) + if (e_view_client_visible_get(view_client)) { res = EINA_TRUE; - evas_object_hide(obj); - evas_damage_rectangle_add(e_comp->evas, 0, 0, e_comp->w, e_comp->h); + e_view_hide(&view_client->view); + e_canvas_damage_rectangle_add(e_comp_canvas_get(), 0, 0, e_comp->w, e_comp->h); } - _e_pointer_object_set(ptr, NULL); + _e_pointer_view_set(ptr, NULL); ptr->device = E_POINTER_NONE; return res; } static Eina_Bool -_e_pointer_object_show(E_Pointer *ptr, Evas_Object *obj) +_e_pointer_view_show(E_Pointer *ptr, E_View_Client *view_client) { E_Client *ec; Eina_Bool res = EINA_FALSE; - ec = e_comp_object_client_get(obj); + ec = e_view_data_get(&view_client->view, "E_Client"); if (ec && e_pixmap_usable_get(ec->pixmap)) { ec->hidden = 0; ec->visible = EINA_TRUE; e_client_visibility_set(ec, E_VISIBILITY_UNOBSCURED); - evas_object_geometry_set(ec->frame, ec->x, ec->y, ec->w, ec->h); + e_view_client_geometry_set(e_client_view_get(ec), ec->x, ec->y, ec->w, ec->h); + ec->comp_data->mapped = EINA_TRUE; ec->override = 0; /* do not ignore the cursor_ec to set the image object */ } /* show cursor object */ - if (!evas_object_visible_get(obj)) + if (!e_view_client_visible_get(view_client)) { res = EINA_TRUE; - evas_object_show(obj); + e_view_show(&view_client->view); } - _e_pointer_object_set(ptr, obj); + _e_pointer_view_set(ptr, view_client); return res; } EINTERN void -e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y) +e_pointer_view_set(E_Pointer *ptr, E_View_Client *view_client, int x, int y) { Eina_Bool need_call_hide = EINA_FALSE; @@ -364,16 +387,16 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y) /* don't show cursor if in hidden mode */ if ((!e_config->show_cursor) || (!e_comp_wl->ptr.enabled)) { - if (ptr->o_ptr && _e_pointer_object_hide(ptr, ptr->o_ptr)) + if (ptr->view_client && _e_pointer_view_hide(ptr, ptr->view_client)) _e_pointer_hook_call(E_POINTER_HOOK_HIDE, ptr); return; } /* hide and unset the existed ptr->o_ptr */ - if (ptr->o_ptr && (ptr->o_ptr != obj)) + if (ptr->view_client && (ptr->view_client != view_client)) { - if (_e_pointer_object_hide(ptr, ptr->o_ptr)) + if (_e_pointer_view_hide(ptr, ptr->view_client)) need_call_hide = EINA_TRUE; } @@ -382,9 +405,9 @@ e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y) ptr->hot.y = y; /* if obj is not null, set the obj to ptr->o_ptr */ - if (obj && (ptr->o_ptr != obj)) + if (view_client && (ptr->view_client != view_client)) { - if (_e_pointer_object_show(ptr, obj)) + if (_e_pointer_view_show(ptr, view_client)) { need_call_hide = EINA_FALSE; _e_pointer_hook_call(E_POINTER_HOOK_SHOW, ptr); @@ -440,20 +463,32 @@ e_pointer_mouse_move(E_Pointer *ptr, int x, int y) EINTERN void e_pointer_hide(E_Pointer *ptr) { + E_View *view; + EINA_SAFETY_ON_NULL_RETURN(ptr); - if (!ptr->o_ptr) return; - if (!evas_object_visible_get(ptr->o_ptr)) return; + if (!ptr->view_client) return; + + view = e_view_client_view_get(ptr->view_client); + if (!view) return; + if (!e_view_visible_get(view)) return; - evas_object_hide(ptr->o_ptr); + e_view_hide(view); } E_API Eina_Bool e_pointer_is_hidden(E_Pointer *ptr) { + E_View *view; + EINA_SAFETY_ON_NULL_RETURN_VAL(ptr, EINA_TRUE); if (!e_config->show_cursor) return EINA_TRUE; - if (ptr->o_ptr && evas_object_visible_get(ptr->o_ptr)) return EINA_FALSE; + + if (ptr->view_client) + { + view = e_view_client_view_get(ptr->view_client); + if (e_view_visible_get(view)) return EINA_FALSE; + } return EINA_TRUE; } @@ -479,11 +514,14 @@ e_pointer_rotation_set(E_Pointer *ptr, int rotation) EINTERN void e_pointer_position_get(E_Pointer *ptr, int *x, int *y) { + E_View *view; + EINA_SAFETY_ON_NULL_RETURN(ptr); if (!e_config->show_cursor) return; - if (!ptr->o_ptr) return; - if (!evas_object_visible_get(ptr->o_ptr)) return; + if (!ptr->view_client) return; + view = e_view_client_view_get(ptr->view_client); + if (!e_view_visible_get(view)) return; *x = ptr->x; *y = ptr->y; @@ -495,16 +533,18 @@ e_pointer_get(E_Client *ec) const Eina_List *l; E_Pointer *ptr; E_Client *ptr_ec = NULL; + E_View *view; if ((!ec) || (e_object_is_del(E_OBJECT(ec)))) return NULL; EINA_LIST_FOREACH(_ptrs, l, ptr) { - if (ptr->o_ptr) + if (ptr->view_client) { - ptr_ec = e_comp_object_client_get(ptr->o_ptr); + view = e_view_client_view_get(ptr->view_client); + ptr_ec = e_view_data_get(view, "E_Client"); if (ptr_ec == ec) - return ptr; + return ptr; } } diff --git a/src/bin/windowmgr/e_pointer_intern.h b/src/bin/windowmgr/e_pointer_intern.h index b641dc9..57dfb4c 100644 --- a/src/bin/windowmgr/e_pointer_intern.h +++ b/src/bin/windowmgr/e_pointer_intern.h @@ -3,6 +3,7 @@ #include "e_intern.h" #include "e_pointer.h" +#include "e_view_client_intern.h" #define E_POINTER_TYPE 0xE0b01013 @@ -10,7 +11,7 @@ EINTERN int e_pointer_init(void); EINTERN int e_pointer_shutdown(void); EINTERN E_Pointer *e_pointer_canvas_new(Ecore_Evas *ee, Eina_Bool filled); -EINTERN void e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y); +EINTERN void e_pointer_view_set(E_Pointer *ptr, E_View_Client *view, int x, int y); EINTERN void e_pointer_touch_move(E_Pointer *ptr, int x, int y); EINTERN E_Pointer *e_pointer_get(E_Client *ec); EINTERN void e_pointer_hide(E_Pointer *ptr); diff --git a/src/bin/windowmgr/e_policy.c b/src/bin/windowmgr/e_policy.c index 532ae1c..746638f 100644 --- a/src/bin/windowmgr/e_policy.c +++ b/src/bin/windowmgr/e_policy.c @@ -17,7 +17,8 @@ #include "e_comp_wl_tbm_intern.h" #include "e_presentation_time_intern.h" #include "e_comp_object_intern.h" - +#include "e_view_intern.h" +#include "e_view_client_intern.h" E_Policy *e_policy = NULL; Eina_Hash *hash_policy_desks = NULL; @@ -449,6 +450,7 @@ static void _e_policy_client_dialog_policy_apply(E_Policy_Client *pc) { E_Client *ec; + E_View *view; int x, y, w, h; int zx, zy, zw, zh; @@ -471,7 +473,10 @@ _e_policy_client_dialog_policy_apply(E_Policy_Client *pc) y = zy + ((zh - h) / 2); if ((x != ec->x) || (y != ec->y)) - evas_object_move(ec->frame, x, y); + { + view = e_view_client_view_get(e_client_view_get(ec)); + e_view_position_set(view, x, y); + } } static void @@ -540,7 +545,10 @@ _e_policy_cb_hook_client_del(void *d EINA_UNUSED, E_Client *ec) static void _e_policy_cb_hook_client_eval_pre_new_client(void *d EINA_UNUSED, E_Client *ec) { - short ly; + E_View *view; + E_View_Client *view_client; + E_Canvas_Layer layer; + E_Layer ly; if (e_object_is_del(E_OBJECT(ec))) return; @@ -549,15 +557,19 @@ _e_policy_cb_hook_client_eval_pre_new_client(void *d EINA_UNUSED, E_Client *ec) ec->placed = 1; ec->exp_iconify.skip_iconify = EINA_TRUE; - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); if (ec->layer < E_LAYER_CLIENT_ABOVE) e_client_layer_set(ec, E_LAYER_CLIENT_ABOVE); } + + view_client = e_client_view_get(ec); if (e_policy_client_is_noti(ec)) { - if (ec->frame) + if (view_client) { - ly = evas_object_layer_get(ec->frame); + view = e_view_client_view_get(view_client); + layer = e_view_layer_index_get(view); + ly = e_canvas_util_layer_map(layer); ELOGF("NOTI", " |ec->layer:%d object->layer:%d", ec, ec->layer, ly); if (ly != ec->layer) e_client_layer_set(ec, ec->layer); @@ -566,7 +578,7 @@ _e_policy_cb_hook_client_eval_pre_new_client(void *d EINA_UNUSED, E_Client *ec) if (e_policy_client_is_dialog(ec)) { - if (ec->frame && !ec->parent) + if (view_client && !ec->parent) { if (ec->layer != E_POLICY_DIALOG_LAYER) e_client_layer_set(ec, E_POLICY_DIALOG_LAYER); @@ -575,7 +587,7 @@ _e_policy_cb_hook_client_eval_pre_new_client(void *d EINA_UNUSED, E_Client *ec) if (e_policy_client_is_floating(ec)) { - if (ec->frame) + if (view_client) { if (ec->layer != E_LAYER_CLIENT_ABOVE) e_client_layer_set(ec, E_LAYER_CLIENT_ABOVE); @@ -584,7 +596,7 @@ _e_policy_cb_hook_client_eval_pre_new_client(void *d EINA_UNUSED, E_Client *ec) if (e_policy_client_is_toast_popup(ec)) { - if (ec->frame) + if (view_client) { if (ec->layer != E_POLICY_TOAST_POPUP_LAYER) e_client_layer_set(ec, E_POLICY_TOAST_POPUP_LAYER); @@ -758,7 +770,7 @@ _e_policy_cb_hook_client_visibility(void *d EINA_UNUSED, E_Client *ec) Eina_Bool obscured_by_alpha_opaque = EINA_FALSE; Eina_Bool find_above = EINA_FALSE; E_Client *above_ec; - Evas_Object *o; + E_View *view, *ec_view; if (e_comp_client_zone_is_displaying(ec)) { @@ -778,9 +790,10 @@ _e_policy_cb_hook_client_visibility(void *d EINA_UNUSED, E_Client *ec) return; } - for (o = evas_object_above_get(ec->frame); o; o = evas_object_above_get(o)) + ec_view = e_view_client_view_get(e_client_view_get(ec)); + for (view = e_view_above_get(ec_view); view; view = e_view_above_get(view)) { - above_ec = evas_object_data_get(o, "E_Client"); + above_ec = e_view_data_get(view, "E_Client"); if (!above_ec) continue; if (e_client_util_ignored_get(above_ec)) continue; if (!above_ec->visible) continue; @@ -791,7 +804,7 @@ _e_policy_cb_hook_client_visibility(void *d EINA_UNUSED, E_Client *ec) if (above_ec->argb) { - if (above_ec->visibility.opaque != E_ALPHA_OPAQUE_SET) + if (above_ec->visibility.opaque <= E_ALPHA_OPAQUE_SET) continue; else { @@ -847,9 +860,9 @@ _e_policy_cb_hook_client_uniconify(void *d EINA_UNUSED, E_Client *ec) if ((e_pixmap_image_data_get(ec->pixmap)) && (!e_pixmap_dirty_get(ec->pixmap))) { - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); } } } @@ -1155,6 +1168,7 @@ _e_policy_cb_client_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *e E_Event_Client *ev; E_Client *ec; E_Policy_Client *pc; + E_View *view; int zh = 0; ev = (E_Event_Client *)event; @@ -1169,10 +1183,10 @@ _e_policy_cb_client_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *e /* re-calculate window's position with changed size */ if (e_policy_client_is_volume_tv(ec)) { + view = e_view_client_view_get(e_client_view_get(ec)); e_zone_useful_geometry_get(pc->zone, NULL, NULL, NULL, &zh); - evas_object_move(ec->frame, 0, (zh / 2) - (ec->h / 2)); - - evas_object_pass_events_set(ec->frame, 1); + e_view_position_set(view, 0, (zh / 2) - (ec->h / 2)); + e_view_pass_events_set(view, 1); } /* calculate e_client visibility */ @@ -1452,7 +1466,7 @@ e_policy_client_unmap(E_Client *ec) if (send_event) e_policy_wl_iconify_state_change_send(ec, 0); - e_comp_object_effect_set(ec->frame, NULL); + e_view_client_effect_set(e_client_view_get(ec), NULL); } EINTERN Eina_Bool @@ -2281,7 +2295,7 @@ _e_policy_client_pixmap_buffer_clear(E_Policy_Client *policy_client, Eina_Bool o } /* composite object clear */ - e_comp_object_clear(ec->frame); + e_view_client_clear(e_client_view_get(ec)); /* pending frame event callback*/ if (!ec->comp_data) return; diff --git a/src/bin/windowmgr/e_policy_conformant.c b/src/bin/windowmgr/e_policy_conformant.c index 8cbd084..00eba3c 100644 --- a/src/bin/windowmgr/e_policy_conformant.c +++ b/src/bin/windowmgr/e_policy_conformant.c @@ -2,6 +2,8 @@ #include "e_comp_wl_intern.h" #include "e_config_intern.h" #include "e_comp_object_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -29,7 +31,6 @@ typedef struct E_Client_Hook *owner_del_hook; } Defer_Job; - typedef struct { Conformant_Type type; @@ -49,6 +50,13 @@ typedef struct // comp_object listeners struct wl_listener comp_object_hiding; + + //view event + struct wl_listener del_listener; + struct wl_listener show_listener; + struct wl_listener hide_listener; + struct wl_listener move_listener; + struct wl_listener resize_listener; } Conformant_Part; typedef struct @@ -280,7 +288,7 @@ _conf_defer_job_cb_owner_del(void *data, E_Client *ec) /* checks for dectecting visible state changes */ if ((!part_ec->visible) || (part_ec->iconic) || (part_ec->hidden)) - evas_object_hide(part_ec->frame); + e_view_client_hide(e_client_view_get(part_ec)); } } else if (job->type == DEFER_JOB_RESIZE) @@ -349,7 +357,7 @@ _conf_client_defer_job_do(Conformant_Client *cfc, uint32_t serial) /* checks for dectecting visible state changes */ if ((!part_ec->visible) || (part_ec->iconic) || (part_ec->hidden)) - evas_object_hide(part_ec->frame); + e_view_client_hide(e_client_view_get(part_ec)); } } else if (job->type == DEFER_JOB_RESIZE) @@ -508,14 +516,18 @@ _conf_part_owner_find(E_Client *part, Conformant_Type type) } static void -_conf_cb_part_obj_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_conf_cb_part_del(struct wl_listener *listener, void *data) { - Conformant_Type type = (Conformant_Type)data; + Conformant_Part *conf_part; + Conformant_Type type; Defer_Job *job; if (!g_conf) return; + conf_part = wl_container_of(listener, conf_part, del_listener); + type = conf_part->type; + DBG("PART %s ec(%p) Deleted", _conf_type_to_str(type), g_conf->part[type].ec); g_conf->part[type].ec = NULL; @@ -529,14 +541,18 @@ _conf_cb_part_obj_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNU } static void -_conf_cb_part_obj_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_conf_cb_part_show(struct wl_listener *listener, void *data) { - Conformant_Type type = (Conformant_Type)data; + Conformant_Part *conf_part; + Conformant_Type type; E_Client *owner = NULL; if (!g_conf) return; + conf_part = wl_container_of(listener, conf_part, show_listener); + type = conf_part->type; + DBG("PART %s win(%zx), ec(%p) Show", _conf_type_to_str(type), e_client_util_win_get(g_conf->part[type].ec), g_conf->part[type].ec); owner = _conf_part_owner_find(g_conf->part[type].ec, type); @@ -549,13 +565,17 @@ _conf_cb_part_obj_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN } static void -_conf_cb_part_obj_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_conf_cb_part_hide(struct wl_listener *listener, void *data) { - Conformant_Type type = (Conformant_Type)data; + Conformant_Part *conf_part; + Conformant_Type type; if (!g_conf) return; + conf_part = wl_container_of(listener, conf_part, hide_listener); + type = conf_part->type; + DBG("PART %s win(%zx), ec(%p) Hide", _conf_type_to_str(type), e_client_util_win_get(g_conf->part[type].ec), g_conf->part[type].ec); _conf_state_update(type, EINA_FALSE, @@ -571,54 +591,64 @@ _conf_cb_part_obj_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN } static void -_conf_part_cb_comp_object_hiding(struct wl_listener *listener, void *data) +_conf_cb_part_move(struct wl_listener *listener, void *data) { Conformant_Part *conf_part; + Conformant_Type type; - conf_part = wl_container_of(listener, conf_part, comp_object_hiding); + if (!g_conf) + return; - DBG("PART %s win(%zx), ec(%p) Hiding", - _conf_type_to_str(conf_part->type), e_client_util_win_get(conf_part->ec), conf_part->ec); + conf_part = wl_container_of(listener, conf_part, move_listener); + type = conf_part->type; - _conf_state_update(conf_part->type, - EINA_FALSE, - conf_part->state.x, - conf_part->state.y, - conf_part->state.w, - conf_part->state.h); + DBG("PART %s win(%zx), ec(%p) Move", _conf_type_to_str(type), e_client_util_win_get(g_conf->part[type].ec), g_conf->part[type].ec); - conf_part->owner = NULL; + g_conf->part[type].changed = 1; } static void -_conf_cb_part_obj_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_conf_cb_part_resize(struct wl_listener *listener, void *data) { - Conformant_Type type = (Conformant_Type)data; + Conformant_Part *conf_part; + Conformant_Type type; if (!g_conf) return; - DBG("PART %s win(%zx), ec(%p) Move", _conf_type_to_str(type), e_client_util_win_get(g_conf->part[type].ec), g_conf->part[type].ec); + conf_part = wl_container_of(listener, conf_part, resize_listener); + type = conf_part->type; + + DBG("PART %s win(%zx), ec(%p) Resize", _conf_type_to_str(type), e_client_util_win_get(g_conf->part[type].ec), g_conf->part[type].ec); g_conf->part[type].changed = 1; } static void -_conf_cb_part_obj_resize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_conf_part_cb_comp_object_hiding(struct wl_listener *listener, void *data) { - Conformant_Type type = (Conformant_Type)data; + Conformant_Part *conf_part; - if (!g_conf) - return; + conf_part = wl_container_of(listener, conf_part, comp_object_hiding); - DBG("PART %s win(%zx), ec(%p) Resize", _conf_type_to_str(type), e_client_util_win_get(g_conf->part[type].ec), g_conf->part[type].ec); + DBG("PART %s win(%zx), ec(%p) Hiding", + _conf_type_to_str(conf_part->type), e_client_util_win_get(conf_part->ec), conf_part->ec); - g_conf->part[type].changed = 1; + _conf_state_update(conf_part->type, + EINA_FALSE, + conf_part->state.x, + conf_part->state.y, + conf_part->state.w, + conf_part->state.h); + + conf_part->owner = NULL; } static void _conf_part_register(E_Client *ec, Conformant_Type type) { + E_View *view; + if (!g_conf) return; @@ -634,20 +664,31 @@ _conf_part_register(E_Client *ec, Conformant_Type type) g_conf->part[type].ec = ec; g_conf->part[type].type = type; - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_DEL, _conf_cb_part_obj_del, (void*)type); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _conf_cb_part_obj_show, (void*)type); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, _conf_cb_part_obj_hide, (void*)type); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, _conf_cb_part_obj_move, (void*)type); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESIZE, _conf_cb_part_obj_resize, (void*)type); + view = e_view_client_view_get(e_client_view_get(ec)); + g_conf->part[type].del_listener.notify = _conf_cb_part_del; + e_view_destroy_listener_add(view, &g_conf->part[type].del_listener); + + g_conf->part[type].show_listener.notify = _conf_cb_part_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &g_conf->part[type].show_listener); + + g_conf->part[type].hide_listener.notify = _conf_cb_part_hide; + e_view_event_listener_add(view, E_VIEW_HIDE, &g_conf->part[type].hide_listener); + + g_conf->part[type].move_listener.notify = _conf_cb_part_move; + e_view_event_listener_add(view, E_VIEW_MOVE, &g_conf->part[type].move_listener); + + g_conf->part[type].resize_listener.notify = _conf_cb_part_resize; + e_view_event_listener_add(view, E_VIEW_RESIZE, &g_conf->part[type].resize_listener); g_conf->part[type].comp_object_hiding.notify = _conf_part_cb_comp_object_hiding; - e_comp_object_hiding_listener_add(ec->frame, &g_conf->part[type].comp_object_hiding); + e_view_client_hide_listener_add(e_client_view_get(ec), &g_conf->part[type].comp_object_hiding); } static void _conf_part_deregister(E_Client *ec, Conformant_Type type) { Defer_Job *job; + E_View *view; if (!g_conf) return; @@ -669,11 +710,12 @@ _conf_part_deregister(E_Client *ec, Conformant_Type type) wl_list_remove(&g_conf->part[type].comp_object_hiding.link); // deregister callback - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_DEL, _conf_cb_part_obj_del, (void*)type); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_SHOW, _conf_cb_part_obj_show, (void*)type); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_HIDE, _conf_cb_part_obj_hide, (void*)type); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_MOVE, _conf_cb_part_obj_move, (void*)type); - evas_object_event_callback_del_full(ec->frame, EVAS_CALLBACK_RESIZE, _conf_cb_part_obj_resize, (void*)type); + view = e_view_client_view_get(e_client_view_get(ec)); + wl_list_remove(&g_conf->part[type].del_listener.link); + e_view_event_listener_del(view, E_VIEW_SHOW, &g_conf->part[type].show_listener); + e_view_event_listener_del(view, E_VIEW_HIDE, &g_conf->part[type].hide_listener); + e_view_event_listener_del(view, E_VIEW_MOVE, &g_conf->part[type].move_listener); + e_view_event_listener_del(view, E_VIEW_RESIZE, &g_conf->part[type].resize_listener); g_conf->part[type].type = CONFORMANT_TYPE_MAX; g_conf->part[type].ec = NULL; @@ -927,18 +969,18 @@ _conf_idle_enter(void *data) if (g_conf->part[type].ec) { E_Client *ec = g_conf->part[type].ec; + E_View *view = e_view_client_view_get(e_client_view_get(ec)); //wait for end of animation - if ((e_comp_object_is_animating(ec->frame)) || - (evas_object_data_get(ec->frame, "effect_running"))) + if (e_view_client_is_animating(e_client_view_get(ec)) || + e_view_data_get(view, "effect_running")) { DBG("Animation is running, skip and try next ec(%p)", ec); continue; } - visible = evas_object_visible_get(g_conf->part[type].ec->frame); - evas_object_geometry_get(g_conf->part[type].ec->frame, &x, &y, &w, &h); - + visible = e_view_client_visible_get(e_client_view_get(ec)); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, &w, &h); } _conf_state_update(type, visible, x, y, w, h); g_conf->part[type].changed = EINA_FALSE; diff --git a/src/bin/windowmgr/e_policy_softkey.c b/src/bin/windowmgr/e_policy_softkey.c index 028bd39..cd23839 100644 --- a/src/bin/windowmgr/e_policy_softkey.c +++ b/src/bin/windowmgr/e_policy_softkey.c @@ -4,16 +4,19 @@ #include "e_prefix_intern.h" #include "e_theme_intern.h" #include "e_config_intern.h" +#include "e_comp_canvas_intern.h" +#include "e_view_intern.h" +#include "e_view_edje_intern.h" -static void _e_policy_cb_softkey(void *data, Evas_Object *obj EINA_UNUSED, const char *emission, const char *source EINA_UNUSED); +static void _e_policy_cb_softkey(void *data, E_View_Edje *edje, const char *emission, const char *source); static void _e_policy_softkey_iconify(E_Zone *zone, Eina_Bool all); -static Evas_Object *_e_policy_softkey_icon_add(E_Zone *zone, const char *name); -static void _e_policy_softkey_icon_del(Evas_Object *comp_obj); +static E_View_Edje *_e_policy_softkey_icon_add(E_Zone *zone, const char *name); +static void _e_policy_softkey_icon_del(E_View_Edje *comp_edje); static E_Policy_Softkey_Funcs *_e_softkey_funcs = NULL; static void -_e_policy_cb_softkey(void *data, Evas_Object *obj EINA_UNUSED, const char *emission, const char *source EINA_UNUSED) +_e_policy_cb_softkey(void *data, E_View_Edje *edje, const char *emission, const char *source) { E_Zone *zone; Eina_Bool all; @@ -44,7 +47,7 @@ _e_policy_softkey_iconify(E_Zone *zone, Eina_Bool all) { if (e_client_util_ignored_get(ec)) continue; if (!e_desk_has_ec(desk, ec)) continue; - if (!evas_object_visible_get(ec->frame)) continue; + if (!e_view_client_visible_get(e_client_view_get(ec))) continue; if ((launcher) && (launcher->ec == ec)) return; @@ -62,43 +65,41 @@ _e_policy_softkey_iconify(E_Zone *zone, Eina_Bool all) } } -static Evas_Object * +static E_View_Edje * _e_policy_softkey_icon_add(E_Zone *zone, const char *name) { - Evas_Object *obj, *comp_obj; + E_View_Edje *edje, *comp_edje; char path[PATH_MAX], group[PATH_MAX]; - obj = edje_object_add(e_comp->evas); + edje = e_view_edje_create(e_canvas_layer_view_tree_get(e_comp_canvas_get(), E_CANVAS_LAYER_DESK_OBJECT_ABOVE)); + EINA_SAFETY_ON_NULL_RETURN_VAL(edje, NULL); snprintf(group, sizeof(group), "e/modules/policy-mobile/softkey/%s", name); e_prefix_data_snprintf(path, sizeof(path), "data/themes/%s", "e-policy.edj"); - if (!e_theme_edje_object_set(obj, NULL, group)) - edje_object_file_set(obj, path, group); + if (!e_theme_edje_view_set(edje, NULL, group)) + e_view_edje_file_set(edje, path, group); - edje_object_signal_callback_add(obj, "e,action,softkey,*", "e", + e_view_edje_signal_callback_add(edje, "e,action,softkey,*", "e", _e_policy_cb_softkey, zone); /* use TYPE_NONE to disable shadow for softkey object */ - comp_obj = e_comp_object_util_add(obj); - evas_object_layer_set(comp_obj, E_LAYER_DESK_OBJECT_ABOVE); + comp_edje = e_view_edje_util_add(e_view_edje_view_get(edje)); + e_view_data_set(e_view_edje_view_get(comp_edje), "policy_mobile_obj", edje); - evas_object_data_set(comp_obj, "policy_mobile_obj", obj); - - return comp_obj; + return comp_edje; } static void -_e_policy_softkey_icon_del(Evas_Object *comp_obj) +_e_policy_softkey_icon_del(E_View_Edje *comp_edje) { - Evas_Object *obj; - - obj = evas_object_data_get(comp_obj, "policy_mobile_obj"); + E_View_Edje *edje; - edje_object_signal_callback_del(obj, "e,action,softkey,*", + edje = e_view_data_get(e_view_edje_view_get(comp_edje), "policy_mobile_obj"); + e_view_edje_signal_callback_del(edje, "e,action,softkey,*", "e", _e_policy_cb_softkey); - evas_object_hide(comp_obj); - evas_object_del(comp_obj); + e_view_hide(e_view_edje_view_get(comp_edje)); + e_view_destroy(e_view_edje_view_get(comp_edje)); } EINTERN E_Policy_Softkey * @@ -154,8 +155,8 @@ e_policy_softkey_show(E_Policy_Softkey *softkey) e_policy_softkey_update(softkey); - evas_object_show(softkey->home); - evas_object_show(softkey->back); + e_view_show(e_view_edje_view_get(softkey->home)); + e_view_show(e_view_edje_view_get(softkey->back)); } EINTERN void @@ -166,8 +167,8 @@ e_policy_softkey_hide(E_Policy_Softkey *softkey) if (!softkey) return; - evas_object_hide(softkey->home); - evas_object_hide(softkey->back); + e_view_hide(e_view_edje_view_get(softkey->home)); + e_view_hide(e_view_edje_view_get(softkey->back)); } E_API void @@ -188,8 +189,8 @@ e_policy_softkey_update(E_Policy_Softkey *softkey) y = h - oh; space = ow * 4; - evas_object_geometry_set(softkey->home, x - space, y, ow, oh); - evas_object_geometry_set(softkey->back, x + space, y, ow, oh); + e_view_edje_geometry_set(softkey->home, x - space, y, ow, oh); + e_view_edje_geometry_set(softkey->back, x + space, y, ow, oh); } E_API int @@ -202,7 +203,7 @@ e_policy_softkey_visible_get(E_Policy_Softkey *softkey) if (!softkey) return 0; - visible = evas_object_visible_get(softkey->home); + visible = e_view_visible_get(e_view_edje_view_get(softkey->home)); return visible; } diff --git a/src/bin/windowmgr/e_policy_stack.c b/src/bin/windowmgr/e_policy_stack.c index 18bacc7..5f321d6 100644 --- a/src/bin/windowmgr/e_policy_stack.c +++ b/src/bin/windowmgr/e_policy_stack.c @@ -427,10 +427,10 @@ EINTERN void e_policy_stack_below(E_Client *ec, E_Client *below_ec) { EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); EINA_SAFETY_ON_NULL_RETURN(below_ec); - EINA_SAFETY_ON_NULL_RETURN(below_ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(below_ec)); e_client_stack_below(ec, below_ec); } @@ -439,10 +439,10 @@ EINTERN void e_policy_stack_above(E_Client *ec, E_Client *above_ec) { EINA_SAFETY_ON_NULL_RETURN(ec); - EINA_SAFETY_ON_NULL_RETURN(ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(ec)); EINA_SAFETY_ON_NULL_RETURN(above_ec); - EINA_SAFETY_ON_NULL_RETURN(above_ec->frame); + EINA_SAFETY_ON_NULL_RETURN(e_client_view_get(above_ec)); e_client_stack_above(ec, above_ec); } diff --git a/src/bin/windowmgr/e_policy_visibility.c b/src/bin/windowmgr/e_policy_visibility.c index f85b893..582e201 100644 --- a/src/bin/windowmgr/e_policy_visibility.c +++ b/src/bin/windowmgr/e_policy_visibility.c @@ -12,6 +12,8 @@ #include "e_client_intern.h" #include "e_comp_object_intern.h" #include "e_config_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #ifdef ENABLE_TTRACE # include @@ -238,16 +240,17 @@ static Eina_Bool _e_policy_check_above_alpha_opaque(E_Client *ec) { E_Client *above_ec; - Evas_Object *o; + E_View *view; Eina_Bool alpha_opaque = EINA_FALSE; int ex, ey, ew, eh; int ax, ay, aw, ah; e_client_geometry_get(ec, &ex, &ey, &ew, &eh); - for (o = evas_object_above_get(ec->frame); o; o = evas_object_above_get(o)) + view = e_view_client_view_get(e_client_view_get(ec)); + for (view = e_view_above_get(view); view; view = e_view_above_get(view)) { - above_ec = evas_object_data_get(o, "E_Client"); + above_ec = e_view_data_get(view, "E_Client"); if (!above_ec) continue; if (e_client_util_ignored_get(above_ec)) continue; if (above_ec->comp_data && !above_ec->comp_data->mapped) continue; @@ -409,11 +412,12 @@ static void _e_policy_client_below_uniconify(E_Client *ec) { E_Client *below_ec; - Evas_Object *o; + E_View *view; - for (o = evas_object_below_get(ec->frame); o; o = evas_object_below_get(o)) + view = e_view_client_view_get(e_client_view_get(ec)); + for (view = e_view_below_get(view); view; view = e_view_below_get(view)) { - below_ec = evas_object_data_get(o, "E_Client"); + below_ec = e_view_data_get(view, "E_Client"); if (!below_ec) continue; if (e_client_util_ignored_get(below_ec)) continue; @@ -536,7 +540,7 @@ _e_vis_update_forground_list(void) E_CLIENT_REVERSE_FOREACH(ec) { /* TODO: check if client is included to zone of mobile */ - if (!evas_object_visible_get(ec->frame)) continue; + if (!e_view_client_visible_get(e_client_view_get(ec))) continue; pol_vis->fg_clients = eina_list_append(pol_vis->fg_clients, ec); if (_e_vis_ec_activity_check(ec, EINA_TRUE, EINA_TRUE)) @@ -887,11 +891,11 @@ _e_vis_client_handle_buffer_attach(E_Vis_Client *vc) /* force update * NOTE: this update can invoke some functions related to visibility grab */ /* if comp_object is not redirected, the compositor doesn't want to update it */ - if (e_comp_object_redirected_get(ec->frame)) + if (e_view_client_redirected_get(e_client_view_get(ec))) { - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); } l = eina_list_clone(vc->wait_buf_attach_grab_list); @@ -1080,9 +1084,12 @@ _e_vis_client_grab_cancel(E_Vis_Client *vc) } static void -_e_vis_client_cb_evas_show(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_vis_client_cb_show(struct wl_listener *listener, void *data) { - OBJ_EC_GET(ec, obj); + E_Client *ec; + + ec = wl_container_of(listener, ec, visibility.show_listener); + VS_DBG(ec, "CALLBACK 'SHOW'..."); _e_vis_update_foreground_job_queue(); E_VIS_CLIENT_GET_OR_RETURN(vc, ec); @@ -1104,9 +1111,12 @@ _e_vis_client_cb_evas_show(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Obj } static void -_e_vis_client_cb_evas_hide(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_vis_client_cb_hide(struct wl_listener *listener, void *data) { - OBJ_EC_GET(ec, obj); + E_Client *ec; + + ec = wl_container_of(listener, ec, visibility.hide_listener); + VS_DBG(ec, "CALLBACK 'HIDE'..."); _e_vis_update_foreground_job_queue(); E_VIS_CLIENT_GET_OR_RETURN(vc, ec); @@ -1119,38 +1129,51 @@ _e_vis_client_cb_evas_hide(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Obj } static void -_e_vis_client_cb_evas_move(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_vis_client_cb_move(struct wl_listener *listener, void *data) { Evas_Coord x, y; Eina_Bool visible; + E_Client *ec; + E_View_Client *view_client; + + ec = wl_container_of(listener, ec, visibility.move_listener); + view_client = e_client_view_get(ec); - OBJ_EC_GET(ec, obj); - evas_object_geometry_get(obj, &x, &y, NULL, NULL); - visible = evas_object_visible_get(obj); + e_view_client_geometry_get(view_client, &x, &y, NULL, NULL); + visible = e_view_client_visible_get(view_client); VS_DBG(ec, "CALLBACK 'MOVE'... %d %d (v %d)", x, y, visible); if (visible) _e_vis_update_foreground_job_queue(); } static void -_e_vis_client_cb_evas_resize(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED) +_e_vis_client_cb_resize(struct wl_listener *listener, void *data) { Evas_Coord w, h; Eina_Bool visible; + E_Client *ec; + E_View_Client *view_client; + + ec = wl_container_of(listener, ec, visibility.resize_listener); + view_client = e_client_view_get(ec); + + e_view_client_geometry_get(view_client, NULL, NULL, &w, &h); + visible = e_view_client_visible_get(view_client); - OBJ_EC_GET(ec, obj); - evas_object_geometry_get(obj, NULL, NULL, &w, &h); - visible = evas_object_visible_get(obj); VS_DBG(ec, "CALLBACK 'RESIZE'... %d %d (v %d)", w, h, visible); if (visible) _e_vis_update_foreground_job_queue(); } static void -_e_vis_client_cb_evas_restack(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_e_vis_client_cb_restack(struct wl_listener *listener, void *data) { Eina_Bool visible; + E_Client *ec; + E_View_Client *view_client; - OBJ_EC_GET(ec, obj); - visible = evas_object_visible_get(obj); + ec = wl_container_of(listener, ec, visibility.restack_listener); + view_client = e_client_view_get(ec); + + visible = e_view_client_visible_get(view_client); VS_DBG(ec, "CALLBACK 'RESTACK'... v %d", visible); if (visible) _e_vis_update_foreground_job_queue(); } @@ -1641,7 +1664,7 @@ _e_vis_ec_activity_check(E_Client *ec, Eina_Bool check_alpha, Eina_Bool check_fu /* check deleted client */ if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE; /* check launchscreen */ - if (ec->frame) type = e_comp_object_content_type_get(ec->frame); + if (e_client_view_get(ec)) type = e_view_client_content_type_get(e_client_view_get(ec)); if ((type == E_COMP_OBJECT_CONTENT_TYPE_EXT_IMAGE) || (type == E_COMP_OBJECT_CONTENT_TYPE_EXT_EDJE)) check_mapped = 0; @@ -1674,6 +1697,7 @@ static void _e_vis_client_job_exec_by_type(E_Vis_Client *vc, E_Vis_Job_Type type) { E_Client *ec = vc->ec; + int w, h; VS_INF(ec, "Job Run: type %d", type); @@ -1700,7 +1724,7 @@ _e_vis_client_job_exec_by_type(E_Vis_Client *vc, E_Vis_Job_Type type) e_client_lower(ec); break; case E_VIS_JOB_TYPE_HIDE: - evas_object_hide(ec->frame); + e_view_client_hide(e_client_view_get(ec)); break; case E_VIS_JOB_TYPE_LAYER_LOWER: e_client_layer_set(ec, vc->layer); @@ -1713,7 +1737,7 @@ _e_vis_client_job_exec_by_type(E_Vis_Client *vc, E_Vis_Job_Type type) if ((!e_object_is_del(E_OBJECT(ec))) && (ec->visible) && (!ec->hidden) && (!ec->iconic) && (!ec->ignored)) - evas_object_show(ec->frame); + e_view_client_show(e_client_view_get(ec)); if (vc->wait_for_child) { @@ -1734,7 +1758,10 @@ _e_vis_client_job_exec_by_type(E_Vis_Client *vc, E_Vis_Job_Type type) if ((!e_object_is_del(E_OBJECT(ec))) && (ec->visible) && (!ec->hidden) && (!ec->iconic) && (!ec->ignored)) - evas_object_move(ec->frame, ec->x, ec->y); + { + e_view_client_geometry_get(e_client_view_get(ec), NULL, NULL, &w, &h); + e_view_client_geometry_set(e_client_view_get(ec), ec->x, ec->y, w, h); + } break; default: @@ -1747,6 +1774,7 @@ static E_Pol_Vis_Type _e_vis_ec_above_visible_type(E_Client *ec, Eina_Bool check_child) { E_Client *above; + E_View *view; E_Pol_Vis_Type above_vis_type = E_POL_VIS_TYPE_ALPHA; int ex, ey, ew, eh; int ax, ay, aw, ah; @@ -1778,7 +1806,8 @@ _e_vis_ec_above_visible_type(E_Client *ec, Eina_Bool check_child) for (above = e_client_above_get(ec); above; above = e_client_above_get(above)) { if (e_client_util_ignored_get(above)) continue; - if (above->frame && evas_object_data_get(above->frame, "comp_skip")) continue; + view = e_view_client_view_get(e_client_view_get(above)); + if (e_view_data_get(view, "comp_skip")) continue; if (check_child && (above->parent == ec)) continue; if (above->first_mapped) { @@ -1911,7 +1940,6 @@ _e_vis_ec_below_activity_clients_get(E_Client *ec, Eina_List **below_list) if (!below->internal) *below_list = eina_list_prepend(*below_list, vc); - if (!(below->argb) || !(below->visibility.opaque != E_ALPHA_OPAQUE_SET)) { eina_tiler_union(above_tile, below_tile); @@ -2006,23 +2034,40 @@ _e_vis_ec_below_uniconify(E_Client *ec, E_Pol_Vis_Type above_vis_type) static void _e_vis_ec_setup(E_Client *ec) { + E_View *view; + e_object_delay_del_set(E_OBJECT(ec), _e_vis_client_delay_del); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _e_vis_client_cb_evas_show, NULL); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, _e_vis_client_cb_evas_hide, NULL); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, _e_vis_client_cb_evas_move, NULL); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESIZE, _e_vis_client_cb_evas_resize, NULL); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_RESTACK, _e_vis_client_cb_evas_restack, NULL); + + view = e_view_client_view_get(e_client_view_get(ec)); + ec->visibility.show_listener.notify = _e_vis_client_cb_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &ec->visibility.show_listener); + + ec->visibility.hide_listener.notify = _e_vis_client_cb_hide; + e_view_event_listener_add(view, E_VIEW_HIDE, &ec->visibility.hide_listener); + + ec->visibility.move_listener.notify = _e_vis_client_cb_move; + e_view_event_listener_add(view, E_VIEW_MOVE, &ec->visibility.move_listener); + + ec->visibility.resize_listener.notify = _e_vis_client_cb_resize; + e_view_event_listener_add(view, E_VIEW_RESIZE, &ec->visibility.resize_listener); + + ec->visibility.restack_listener.notify = _e_vis_client_cb_restack; + e_view_event_listener_add(view, E_VIEW_RESTACK, &ec->visibility.restack_listener); } static void _e_vis_ec_reset(E_Client *ec) { + E_View *view; + e_object_delay_del_set(E_OBJECT(ec), NULL); - evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_SHOW, _e_vis_client_cb_evas_show); - evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_HIDE, _e_vis_client_cb_evas_hide); - evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_MOVE, _e_vis_client_cb_evas_move); - evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_RESIZE, _e_vis_client_cb_evas_resize); - evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_RESTACK, _e_vis_client_cb_evas_restack); + + view = e_view_client_view_get(e_client_view_get(ec)); + e_view_event_listener_del(view, E_VIEW_SHOW, &ec->visibility.show_listener); + e_view_event_listener_del(view, E_VIEW_HIDE, &ec->visibility.hide_listener); + e_view_event_listener_del(view, E_VIEW_MOVE, &ec->visibility.move_listener); + e_view_event_listener_del(view, E_VIEW_RESIZE, &ec->visibility.resize_listener); + e_view_event_listener_del(view, E_VIEW_RESTACK, &ec->visibility.restack_listener); } static void diff --git a/src/bin/windowmgr/services/e_service_cbhm.c b/src/bin/windowmgr/services/e_service_cbhm.c index 8049206..a3d9d0e 100644 --- a/src/bin/windowmgr/services/e_service_cbhm.c +++ b/src/bin/windowmgr/services/e_service_cbhm.c @@ -1,6 +1,7 @@ #include "services/e_service_cbhm_intern.h" #include "e_policy_conformant.h" #include "e_policy_wl_intern.h" +#include "e_view_client_intern.h" typedef struct _E_Policy_Cbhm E_Policy_Cbhm; @@ -13,6 +14,8 @@ struct _E_Policy_Cbhm Eina_List *hooks; Eina_List *intercept_hooks; Eina_List *events; + + struct wl_listener show_listener; }; static E_Policy_Cbhm *_pol_cbhm = NULL; @@ -26,6 +29,14 @@ _cbhm_get() static void _cbhm_free(E_Policy_Cbhm *cbhm) { + E_View_Client *view_client = e_client_view_get(cbhm->ec); + + if (view_client) + { + e_view_event_listener_del(e_view_client_view_get(view_client), E_VIEW_SHOW, &cbhm->show_listener); + cbhm->show_listener.notify = NULL; + } + E_FREE_LIST(cbhm->events, ecore_event_handler_del); E_FREE_LIST(cbhm->hooks, e_client_hook_del); E_FREE_LIST(cbhm->intercept_hooks, e_comp_object_intercept_hook_del); @@ -33,13 +44,13 @@ _cbhm_free(E_Policy_Cbhm *cbhm) } static void -_cbhm_cb_evas_show(void *d, Evas *evas EINA_UNUSED, Evas_Object *obj, void *event) +_cbhm_cb_show(struct wl_listener *listener, void *data) { E_Policy_Cbhm *cbhm; E_Client *ec; E_Comp_Wl_Client_Data *cdata; - cbhm = d; + cbhm = wl_container_of(listener, cbhm, show_listener); if (EINA_UNLIKELY(!cbhm)) return; @@ -47,9 +58,6 @@ _cbhm_cb_evas_show(void *d, Evas *evas EINA_UNUSED, Evas_Object *obj, void *even if (EINA_UNLIKELY(!ec)) return; - if (ec->frame != obj) - return; - cdata = e_client_cdata_get(ec); if ((!cbhm->show_block) && (cdata->mapped)) cbhm->show_block = EINA_TRUE; @@ -122,16 +130,24 @@ _e_cbhm_vis_change(E_Policy_Cbhm *cbhm, Eina_Bool vis) { E_Client *ec; E_Zone *zone; + E_View_Client *view_client; Eina_Bool cur_vis = EINA_FALSE; int x, y, w, h; ec = cbhm->ec; zone = cbhm->zone; - evas_object_geometry_get(ec->frame, &x, &y, &w, &h); + view_client = e_client_view_get(ec); + if (!view_client) + { + ELOGFE("CBHM", "view client is not exist in E_Client", ec); + return; + } + + e_view_client_geometry_get(view_client, &x, &y, &w, &h); if (E_INTERSECTS(x, y, w, h, zone->x, zone->y, zone->w, zone->h)) - cur_vis = evas_object_visible_get(ec->frame); + cur_vis = e_view_client_visible_get(view_client); if (cur_vis == vis) return; @@ -149,14 +165,15 @@ _e_cbhm_vis_change(E_Policy_Cbhm *cbhm, Eina_Bool vis) } else { + E_View *view = e_view_client_view_get(view_client); ec->visible = EINA_TRUE; - evas_object_show(ec->frame); + e_view_show(view); e_client_raise(ec); } - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(view_client, 0, 0, ec->w, ec->h); + e_view_client_dirty(view_client); + e_view_client_render(view_client); } else { @@ -180,6 +197,7 @@ e_service_cbhm_client_set(E_Client *ec) { E_Policy_Cbhm *cbhm; E_Comp_Wl_Client_Data *cdata; + E_View_Client *view_client; if (EINA_UNLIKELY(!ec)) { @@ -195,7 +213,7 @@ e_service_cbhm_client_set(E_Client *ec) /* check for wayland pixmap */ if (e_pixmap_type_get(ec->pixmap) != E_PIXMAP_TYPE_WL) return; - /* if we have not setup evas callbacks for this client, do it */ + /* if we have not setup callbacks for this client, do it */ if (_pol_cbhm) { ERR("A CBHM Client already exists ec(%p)", _pol_cbhm->ec); @@ -222,7 +240,14 @@ e_service_cbhm_client_set(E_Client *ec) e_client_window_role_set(ec, "cbhm"); e_policy_conformant_part_add(ec); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _cbhm_cb_evas_show, cbhm); + view_client = e_client_view_get(ec); + if (view_client) + { + E_View *view = e_view_client_view_get(view_client); + cbhm->show_listener.notify = _cbhm_cb_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &cbhm->show_listener); + } + E_CLIENT_HOOK_APPEND(cbhm->hooks, E_CLIENT_HOOK_DEL, _cbhm_hook_client_del, cbhm); E_LIST_HANDLER_APPEND(cbhm->events, E_EVENT_CLIENT_ZONE_SET, _cbhm_cb_client_zone_set, cbhm); E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(cbhm->intercept_hooks, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER, _cbhm_intercept_hook_show, cbhm); diff --git a/src/bin/windowmgr/services/e_service_kvm.c b/src/bin/windowmgr/services/e_service_kvm.c index 3b460d4..06b32b4 100644 --- a/src/bin/windowmgr/services/e_service_kvm.c +++ b/src/bin/windowmgr/services/e_service_kvm.c @@ -3,6 +3,7 @@ #include "e_comp_wl_intern.h" #include "e_dnd_intern.h" #include "e_policy_private_data.h" +#include "e_view_client_intern.h" #include #include @@ -77,7 +78,7 @@ _kvm_hook_drag_start(void *d EINA_UNUSED, E_Drag *drag) EINA_ITERATOR_FOREACH(it, esk) { // Workaround: Feed mouse out/in to make sure that the mouse in to correct client. - // The evas event mouse in/out is not emit during dragging(mouse move with mouse button pressed). + // The event mouse in/out is not emit during dragging(mouse move with mouse button pressed). // It makes the pointer still locked after mouse out from kvm window When the drag started. source = e_comp_wl->drag_source; source_client = wl_resource_get_client(source->resource); @@ -368,6 +369,7 @@ EINTERN Eina_Bool e_service_kvm_transparent_set(E_Service_Kvm *esk, Eina_Bool set) { E_Client *ec; + E_View *view; EINA_SAFETY_ON_NULL_RETURN_VAL(esk, EINA_FALSE); @@ -376,10 +378,18 @@ e_service_kvm_transparent_set(E_Service_Kvm *esk, Eina_Bool set) ELOGF("KVM", "set KVM service(%p) client to %s", ec, esk, set? "transparent" : "opaque"); + if (!e_client_view_get(ec)) + { + ELOGF("KVM", "ERROR... view_client for ec doesn't exist.", ec); + return EINA_FALSE; + } + + view = e_view_client_view_get(e_client_view_get(ec)); + if (set) - evas_object_color_set(ec->frame, 0, 0, 0, 0); + e_view_color_set(view, 0, 0, 0, 0); else - evas_object_color_set(ec->frame, 255, 255, 255, 255); + e_view_color_set(view, 255, 255, 255, 255); return EINA_TRUE; } diff --git a/src/bin/windowmgr/services/e_service_launcher.c b/src/bin/windowmgr/services/e_service_launcher.c index cfb2126..99210a1 100644 --- a/src/bin/windowmgr/services/e_service_launcher.c +++ b/src/bin/windowmgr/services/e_service_launcher.c @@ -10,6 +10,8 @@ #include "e_comp_object_intern.h" #include "e_utils_intern.h" #include "e_appinfo_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -328,10 +330,10 @@ _launcher_post_forward(E_Service_Launcher *lc, Eina_Bool success) _launcher_launched_ec_set(lc, target_ec); //show target_ec - e_comp_object_damage(target_ec->frame, 0, 0, target_ec->w, target_ec->h); - e_comp_object_dirty(target_ec->frame); - e_comp_object_render(target_ec->frame); - evas_object_show(target_ec->frame); + e_view_client_damage(e_client_view_get(target_ec), 0, 0, target_ec->w, target_ec->h); + e_view_client_dirty(e_client_view_get(target_ec)); + e_view_client_render(e_client_view_get(target_ec)); + e_view_client_show(e_client_view_get(target_ec)); e_comp_client_override_del(target_ec); } @@ -1335,7 +1337,7 @@ _launcher_cb_launch_done(struct wl_client *client EINA_UNUSED, { E_Comp_Wl_Client_Data *target_cdata = e_client_cdata_get(target_ec); ELOGF("LAUNCH", "SHOW real win (target->frame:%p, map:%d) by launcher service (win:0x%08zx, ec:%p).", target_ec, target_ec->frame, target_cdata->mapped, e_client_util_win_get(lc->ec), lc->ec); - e_comp_object_signal_emit(target_ec->frame, "e,action,launch_real,done", "e"); + e_view_client_signal_emit(e_client_view_get(target_ec), "e,action,launch_real,done", "e"); } e_comp_object_signal_emit(target_ec->frame, "e,action,launch,done", "e"); } @@ -1405,7 +1407,7 @@ _launcher_handler_rsm_provider_client_find(E_Client *rsm_consumer_ec) /* check remote surface provider */ if (!prov_ec->remote_surface.provider) continue; if (prov_ec->visible) continue; - if (evas_object_visible_get(prov_ec->frame)) continue; + if (e_view_client_visible_get(e_client_view_get(prov_ec))) continue; prov_cdata = e_client_cdata_get(prov_ec); if (prov_cdata->mapped) continue; if (!(lc = _launcher_handler_launcher_find(prov_ec))) continue; diff --git a/src/bin/windowmgr/services/e_service_quickpanel.c b/src/bin/windowmgr/services/e_service_quickpanel.c index 4b488d4..3098bc6 100644 --- a/src/bin/windowmgr/services/e_service_quickpanel.c +++ b/src/bin/windowmgr/services/e_service_quickpanel.c @@ -8,6 +8,8 @@ #include "e_client_intern.h" #include "e_comp_object_intern.h" #include "e_layout_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #define SMART_NAME "quickpanel_object" #define INTERNAL_ENTRY \ @@ -22,7 +24,7 @@ do \ { \ qp->show_block = EINA_FALSE; \ qp->ec->visible = EINA_TRUE; \ - evas_object_show(qp->ec->frame); \ + e_view_client_show(e_client_view_get(qp->ec)); \ \ if (qp->bg_rect) \ { \ @@ -40,7 +42,7 @@ do \ { \ qp->show_block = EINA_TRUE; \ qp->ec->visible = EINA_FALSE; \ - evas_object_hide(qp->ec->frame); \ + e_view_client_hide(e_client_view_get(qp->ec)); \ \ if (qp->bg_rect) \ { \ @@ -137,6 +139,11 @@ struct _E_Policy_Quickpanel } geom; E_Client *gesture_target; + + // view listener + struct wl_listener show_listener; + struct wl_listener hide_listener; + struct wl_listener move_listener; }; struct _Mover_Data @@ -178,10 +185,6 @@ static Eina_Bool _e_qp_client_scrollable_update(E_Policy_Quickpanel *qp); static Eina_Bool _e_qp_client_scrollable_state_set(E_Client *ec, E_Quickpanel_Type type, E_Quickpanel_Client_Scroll_State state); static E_Quickpanel_Client_Scroll_State _e_qp_client_scrollable_state_get(E_Client *ec, E_Quickpanel_Type type); -static void _quickpanel_client_evas_cb_show(void *data, Evas *evas, Evas_Object *obj, void *event); -static void _quickpanel_client_evas_cb_hide(void *data, Evas *evas, Evas_Object *obj, void *event); -static void _quickpanel_client_evas_cb_move(void *data, Evas *evas, Evas_Object *obj, void *event); - static Eina_Bool _quickpanel_check_skip_client(E_Client *ec); inline static Eina_Bool @@ -258,9 +261,9 @@ _mover_intercept_show(void *data, Evas_Object *obj) ec = md->ec; /* force update */ - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); // desk-zoom-set apply map on all e_desk's smart_data(clients) // to properly pack a quickpanel window on the mover's e_layout_object @@ -375,7 +378,7 @@ _mover_smart_del(Evas_Object *obj) if (md->qp_layout_obj) evas_object_del(md->qp_layout_obj); - evas_object_color_set(ec->frame, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity); + e_view_color_set(e_view_client_view_get(e_client_view_get(ec)), ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity, ec->netwm.opacity); e_comp_client_override_del(ec); @@ -383,9 +386,9 @@ _mover_smart_del(Evas_Object *obj) * we need to force update 'E_Client' here even if update only evas_object, * because our render loop would not be started by chaning evas object, * we need to make a change on the 'E_Client'. */ - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); e_layout_unpack(ec->frame); @@ -741,7 +744,7 @@ _e_qp_srv_effect_finish_job_end(E_Policy_Quickpanel *qp) { if ((!qp->ec->focused) && (qp->ec->icccm.accepts_focus || qp->ec->icccm.take_focus) && - (evas_object_visible_get(qp->ec->frame) == EINA_TRUE)) + (e_view_client_visible_get(e_client_view_get(qp->ec)) == EINA_TRUE)) { ELOGF("QUICKPANEL", "effect finished but not focused. focus set to quickpanel", qp->ec); e_client_focus_latest_set(qp->ec); @@ -861,7 +864,7 @@ _e_qp_srv_effect_finish_job_stop(E_Policy_Quickpanel *qp) if ((qp->ec) && (!qp->ec->focused) && (qp->ec->icccm.accepts_focus || qp->ec->icccm.take_focus) && - (evas_object_visible_get(qp->ec->frame) == EINA_TRUE)) + (e_view_client_visible_get(e_client_view_get(qp->ec)) == EINA_TRUE)) { ELOGF("QUICKPANEL", "effect finished but not focused. focus set to quickpanel", qp->ec); e_client_focus_latest_set(qp->ec); @@ -1335,9 +1338,9 @@ _quickpanel_free(E_Policy_Quickpanel *qp) { ELOGF("QUICKPANEL", "Remove Client | qp %p", qp->ec, qp); - evas_object_event_callback_del(qp->ec->frame, EVAS_CALLBACK_SHOW, _quickpanel_client_evas_cb_show); - evas_object_event_callback_del(qp->ec->frame, EVAS_CALLBACK_HIDE, _quickpanel_client_evas_cb_hide); - evas_object_event_callback_del(qp->ec->frame, EVAS_CALLBACK_MOVE, _quickpanel_client_evas_cb_move); + wl_list_remove(&qp->show_listener.link); + wl_list_remove(&qp->hide_listener.link); + wl_list_remove(&qp->move_listener.link); if (qp->bg_rect) evas_object_del(qp->bg_rect); @@ -1374,27 +1377,6 @@ _quickpanel_hook_client_del(void *d, E_Client *ec) _quickpanel_free(qp); } -static void -_quickpanel_client_evas_cb_show(void *data, Evas *evas, Evas_Object *obj, void *event) -{ - E_Policy_Quickpanel *qp; - E_Client *ec; - - qp = data; - if (EINA_UNLIKELY(!qp)) - return; - - evas_object_show(qp->handler_obj); - evas_object_raise(qp->handler_obj); - evas_object_hide(qp->indi_obj); - - ec = qp->ec; - if (ec) - e_policy_client_buffer_flush_cancel(ec); - - E_FREE_FUNC(qp->buf_change_hdlr, ecore_event_handler_del); -} - static Eina_Bool _quickpanel_cb_buffer_change(void *data, int type, void *event) { @@ -1418,22 +1400,22 @@ _quickpanel_cb_buffer_change(void *data, int type, void *event) goto end; /* render forcibly */ - e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h); - e_comp_object_dirty(ec->frame); - e_comp_object_render(ec->frame); + e_view_client_damage(e_client_view_get(ec), 0, 0, ec->w, ec->h); + e_view_client_dirty(e_client_view_get(ec)); + e_view_client_render(e_client_view_get(ec)); /* make frame event */ e_pixmap_image_clear(ec->pixmap, EINA_TRUE); /* use single buffer if qp service's ec is invisible */ - evas_object_geometry_get(ec->frame, &x, &y, &w, &h); + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, &w, &h); if (E_INTERSECTS(x, y, w, h, qp->zone->x, qp->zone->y, qp->zone->w, qp->zone->h)) - vis = evas_object_visible_get(ec->frame); + vis = e_view_client_visible_get(e_client_view_get(ec)); if (!vis) e_pixmap_buffer_clear(ec->pixmap, EINA_TRUE); @@ -1443,11 +1425,32 @@ end: } static void -_quickpanel_client_evas_cb_hide(void *data, Evas *evas, Evas_Object *obj, void *event) +_quickpanel_client_view_cb_show(struct wl_listener *listener, void *data) { E_Policy_Quickpanel *qp; + E_Client *ec; - qp = data; + qp = wl_container_of(listener, qp, show_listener); + if (EINA_UNLIKELY(!qp)) + return; + + evas_object_show(qp->handler_obj); + evas_object_raise(qp->handler_obj); + evas_object_hide(qp->indi_obj); + + ec = qp->ec; + if (ec) + e_policy_client_buffer_flush_cancel(ec); + + E_FREE_FUNC(qp->buf_change_hdlr, ecore_event_handler_del); +} + +static void +_quickpanel_client_view_cb_hide(struct wl_listener *listener, void *data) +{ + E_Policy_Quickpanel *qp; + + qp = wl_container_of(listener, qp, hide_listener); if (EINA_UNLIKELY(!qp)) return; @@ -1461,18 +1464,23 @@ _quickpanel_client_evas_cb_hide(void *data, Evas *evas, Evas_Object *obj, void * } static void -_quickpanel_client_evas_cb_move(void *data, Evas *evas, Evas_Object *obj, void *event) +_quickpanel_client_view_cb_move(struct wl_listener *listener, void *data) { E_Policy_Quickpanel *qp; + E_Client *ec; int x, y, hx, hy; - qp = data; + qp = wl_container_of(listener, qp, move_listener); if (EINA_UNLIKELY(!qp)) return; e_service_region_rectangle_get(qp->handler_obj, qp->rotation, &hx, &hy, NULL, NULL); - evas_object_geometry_get(obj, &x, &y, NULL, NULL); - evas_object_move(qp->handler_obj, x + hx, y + hy); + ec = qp->ec; + if (ec) + { + e_view_client_geometry_get(e_client_view_get(ec), &x, &y, NULL, NULL); + evas_object_move(qp->handler_obj, x + hx, y + hy); + } } static void @@ -1551,7 +1559,7 @@ _quickpanel_handler_rect_add(E_Policy_Quickpanel *qp, E_Policy_Angle_Map ridx, i /* Add handler object to smart member to follow the client's stack */ evas_object_smart_member_add(obj, ec->frame); evas_object_propagate_events_set(obj, 0); - if (evas_object_visible_get(ec->frame)) + if (e_view_client_visible_get(e_client_view_get(ec))) evas_object_show(obj); qp->handler_obj = obj; @@ -1794,7 +1802,7 @@ _quickpanel_cb_rotation_done(void *data, int type, void *event) qp->rotation = e_policy_angle_map(ec->e.state.rot.ang.curr); - vis = evas_object_visible_get(ec->frame); + vis = e_view_client_visible_get(e_client_view_get(ec)); switch (qp->rotation) { case E_POLICY_ANGLE_MAP_90: @@ -1938,7 +1946,7 @@ _quickpanel_cb_client_stack(void *data, int type, void *event) DBG("Stacking Client '%s'(%p)", ev->ec->icccm.name ? ev->ec->icccm.name : "", ev->ec); - if (evas_object_visible_get(ev->ec->frame)) + if (e_view_client_visible_get(e_client_view_get(ev->ec))) _quickpanel_below_change_eval(data, event); end: return ECORE_CALLBACK_PASS_ON; @@ -2029,7 +2037,7 @@ _quickpanel_cb_desk_geometry_change(void *data, int type, void *event) _quickpanel_handler_obj_region_convert_set(qp, angle, x, y, w, h, ev->desk->geom.x, ev->desk->geom.y, ev->desk->geom.w, ev->desk->geom.h); } - evas_object_move(qp->ec->frame, ev->desk->geom.x, ev->desk->geom.y); + e_view_position_set(e_view_client_view_get(e_client_view_get(qp->ec)), ev->desk->geom.x, ev->desk->geom.y); end: return ECORE_CALLBACK_PASS_ON; @@ -2236,6 +2244,7 @@ e_service_quickpanel_client_add(E_Client *ec, E_Service_Quickpanel_Type type) E_Policy_Quickpanel *qp = NULL; E_Layer layer; E_Zone *zone; + E_View *view; BACKEND_FUNC_CALL(quickpanel_client_add, ec, type); @@ -2326,9 +2335,14 @@ e_service_quickpanel_client_add(E_Client *ec, E_Service_Quickpanel_Type type) QP_HIDE(qp); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _quickpanel_client_evas_cb_show, qp); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, _quickpanel_client_evas_cb_hide, qp); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_MOVE, _quickpanel_client_evas_cb_move, qp); + view = e_view_client_view_get(e_client_view_get(ec)); + qp->show_listener.notify = _quickpanel_client_view_cb_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &qp->show_listener); + qp->hide_listener.notify = _quickpanel_client_view_cb_hide; + e_view_event_listener_add(view, E_VIEW_HIDE, &qp->hide_listener); + qp->move_listener.notify = _quickpanel_client_view_cb_move; + e_view_event_listener_add(view, E_VIEW_MOVE, &qp->move_listener); + E_CLIENT_HOOK_APPEND(qp->hooks, E_CLIENT_HOOK_DEL, _quickpanel_hook_client_del, qp); E_LIST_HANDLER_APPEND(qp->events, E_EVENT_CLIENT_ROTATION_CHANGE_BEGIN, _quickpanel_cb_rotation_begin, qp); E_LIST_HANDLER_APPEND(qp->events, E_EVENT_CLIENT_ROTATION_CHANGE_CANCEL, _quickpanel_cb_rotation_cancel, qp); @@ -2507,8 +2521,8 @@ e_qps_visible_get(void) if (!ec) continue; if (e_object_is_del(E_OBJECT(ec))) continue; - evas_object_geometry_get(ec->frame, - &x, &y, &w, &h); + e_view_client_geometry_get(e_client_view_get(ec), + &x, &y, &w, &h); if (E_INTERSECTS(x, y, w, h, qp->zone->x, @@ -2516,7 +2530,7 @@ e_qps_visible_get(void) qp->zone->w, qp->zone->h)) { - vis = evas_object_visible_get(ec->frame); + vis = e_view_client_visible_get(e_client_view_get(ec)); if (vis) return EINA_TRUE; } } @@ -2544,10 +2558,10 @@ e_qp_visible_get(E_Client *ec, E_Quickpanel_Type type) EINA_SAFETY_ON_NULL_RETURN_VAL(qp, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(qp->ec, EINA_FALSE); - evas_object_geometry_get(qp->ec->frame, &x, &y, &w, &h); + e_view_client_geometry_get(e_client_view_get(qp->ec), &x, &y, &w, &h); if (E_INTERSECTS(x, y, w, h, qp->zone->x, qp->zone->y, qp->zone->w, qp->zone->h)) - vis = evas_object_visible_get(qp->ec->frame); + vis = e_view_client_visible_get(e_client_view_get(qp->ec)); return vis; } diff --git a/src/bin/windowmgr/services/e_service_softkey.c b/src/bin/windowmgr/services/e_service_softkey.c index 2dc1612..795bb4b 100644 --- a/src/bin/windowmgr/services/e_service_softkey.c +++ b/src/bin/windowmgr/services/e_service_softkey.c @@ -3,6 +3,8 @@ #include "services/e_service_region_intern.h" #include "e_policy_intern.h" #include "e_policy_private_data.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include @@ -13,7 +15,7 @@ do \ { \ softkey_service->show_block = EINA_FALSE; \ softkey_service->ec->visible = EINA_TRUE; \ - evas_object_show(softkey_service->ec->frame); \ + e_view_client_show(e_client_view_get(softkey_service->ec)); \ } \ } while (0) @@ -24,7 +26,7 @@ do \ { \ softkey_service->show_block = EINA_TRUE; \ softkey_service->ec->visible = EINA_FALSE; \ - evas_object_hide(softkey_service->ec->frame); \ + e_view_client_hide(e_client_view_get(softkey_service->ec)); \ } \ } while (0) @@ -191,13 +193,12 @@ end: return EINA_TRUE; } - static void -_e_service_softkey_client_evas_cb_show(void *data, Evas *evas, Evas_Object *obj, void *event) +_e_service_softkey_client_view_cb_show(struct wl_listener *listener, void *data) { E_Service_Softkey *softkey_service; - softkey_service = data; + softkey_service = wl_container_of(listener, softkey_service, show_listener); if (!softkey_service) return; ELOGF("SOFTKEY", "Show SOFTKEY SERVICE(%p)!!! HIDE handler_obj (%p)...", NULL, softkey_service, softkey_service->handler_obj); @@ -205,11 +206,11 @@ _e_service_softkey_client_evas_cb_show(void *data, Evas *evas, Evas_Object *obj, } static void -_e_service_softkey_client_evas_cb_hide(void *data, Evas *evas, Evas_Object *obj, void *event) +_e_service_softkey_client_view_cb_hide(struct wl_listener *listener, void *data) { E_Service_Softkey *softkey_service; - softkey_service = data; + softkey_service = wl_container_of(listener, softkey_service, hide_listener); if (!softkey_service) return; ELOGF("SOFTKEY", "Hide SOFTKEY SERVICE(%p)!!! SHOW handler_obj (%p)...", NULL, softkey_service, softkey_service->handler_obj); @@ -310,6 +311,7 @@ e_service_softkey_client_set(E_Client *ec) E_Service_Softkey *softkey_service; E_Zone *zone; + E_View *view; if (_e_softkey_service_funcs && _e_softkey_service_funcs->softkey_service_client_set) { @@ -365,8 +367,11 @@ e_service_softkey_client_set(E_Client *ec) E_COMP_OBJECT_INTERCEPT_HOOK_APPEND(softkey_service->intercept_hooks, E_COMP_OBJECT_INTERCEPT_HOOK_SHOW_HELPER, _softkey_intercept_hook_show, softkey_service); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, _e_service_softkey_client_evas_cb_show, softkey_service); - evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_HIDE, _e_service_softkey_client_evas_cb_hide, softkey_service); + view = e_view_client_view_get(e_client_view_get(ec)); + softkey_service->show_listener.notify = _e_service_softkey_client_view_cb_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &softkey_service->show_listener); + softkey_service->hide_listener.notify = _e_service_softkey_client_view_cb_hide; + e_view_event_listener_add(view, E_VIEW_HIDE, &softkey_service->hide_listener); E_LIST_HANDLER_APPEND(softkey_service->events, E_EVENT_CLIENT_ZONE_SET, _softkey_service_cb_client_zone_set, softkey_service); } @@ -390,8 +395,8 @@ e_service_softkey_client_unset(E_Client *ec) if (!softkey_service) return; E_FREE_LIST(softkey_service->events, ecore_event_handler_del); - evas_object_event_callback_del(softkey_service->ec->frame, EVAS_CALLBACK_SHOW, _e_service_softkey_client_evas_cb_show); - evas_object_event_callback_del(softkey_service->ec->frame, EVAS_CALLBACK_HIDE, _e_service_softkey_client_evas_cb_hide); + wl_list_remove(&softkey_service->show_listener.link); + wl_list_remove(&softkey_service->hide_listener.link); e_service_softkey_del(softkey_service); } @@ -460,7 +465,7 @@ e_service_softkey_visible_get(E_Service_Softkey *softkey_service) if (!softkey_service) return 0; if (!softkey_service->ec) return 0; - visible = evas_object_visible_get(softkey_service->ec->frame); + visible = e_view_client_visible_get(e_client_view_get(softkey_service->ec)); return visible; } diff --git a/src/bin/windowmgr/services/e_service_volume.c b/src/bin/windowmgr/services/e_service_volume.c index b002ed4..bdf97c6 100644 --- a/src/bin/windowmgr/services/e_service_volume.c +++ b/src/bin/windowmgr/services/e_service_volume.c @@ -1,6 +1,8 @@ #include "services/e_service_volume_intern.h" #include "e_policy_private_data.h" #include "e_client_intern.h" +#include "e_view_intern.h" +#include "e_view_client_intern.h" #include #include @@ -21,6 +23,16 @@ do { \ #define REGION_OBJS_SHOW() REGION_OBJS_VISIBLE_CHANGE(EINA_TRUE) #define REGION_OBJS_HIDE() REGION_OBJS_VISIBLE_CHANGE(EINA_FALSE) +typedef struct _E_Service_Volume_Listener E_Service_Volume_Listener; +struct _E_Service_Volume_Listener +{ + // view listener + struct wl_listener show_listener; + struct wl_listener hide_listener; + struct wl_listener move_listener; + struct wl_listener restack_listener; +}; + /* private data for volume */ static struct wl_resource *_volume_wl_touch = NULL; static E_Client *_volume_ec = NULL; @@ -31,6 +43,7 @@ static Eina_Bool _volume_ec_ev_init = EINA_FALSE; /* event handler */ static Ecore_Event_Handler *_rot_handler = NULL; static E_Client_Hook *_volume_del_hook = NULL; +static E_Service_Volume_Listener *_volume_listener = NULL; EINTERN E_Client * e_service_volume_client_get(void) @@ -107,21 +120,21 @@ _volume_region_obj_cb_multi_move(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, } static void -_volume_client_evas_cb_show(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_volume_client_view_cb_show(struct wl_listener *listener, void *data) { /* show region objects in current rotation */ REGION_OBJS_SHOW(); } static void -_volume_client_evas_cb_hide(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_volume_client_view_cb_hide(struct wl_listener *listener, void *data) { /* hide region objects in current rotation */ REGION_OBJS_HIDE(); } static void -_volume_client_evas_cb_move(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, Evas_Object *volume_obj, void *event EINA_UNUSED) +_volume_client_view_cb_move(struct wl_listener *listener, void *data) { Eina_List *l; Eina_Rectangle *r; @@ -134,13 +147,13 @@ _volume_client_evas_cb_move(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, Evas if (EINA_UNLIKELY(r == NULL)) continue; - evas_object_geometry_get(volume_obj, &x, &y, NULL, NULL); + e_view_client_geometry_get(e_client_view_get(_volume_ec), &x, &y, NULL, NULL); evas_object_move(region_obj, x + r->x, y + r->y); } } static void -_volume_client_evas_cb_restack(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +_volume_client_view_cb_restack(struct wl_listener *listener, void *data) { Eina_List *l; Evas_Object *region_obj; @@ -186,14 +199,15 @@ _region_objs_del(E_Policy_Angle_Map angle_map) { _volume_ec_ev_init = EINA_FALSE; - evas_object_event_callback_del(_volume_ec->frame, EVAS_CALLBACK_SHOW, - _volume_client_evas_cb_show); - evas_object_event_callback_del(_volume_ec->frame, EVAS_CALLBACK_HIDE, - _volume_client_evas_cb_hide); - evas_object_event_callback_del(_volume_ec->frame, EVAS_CALLBACK_MOVE, - _volume_client_evas_cb_move); - evas_object_event_callback_del(_volume_ec->frame, EVAS_CALLBACK_RESTACK, - _volume_client_evas_cb_restack); + if (_volume_listener) + { + wl_list_remove(&_volume_listener->show_listener.link); + wl_list_remove(&_volume_listener->hide_listener.link); + wl_list_remove(&_volume_listener->move_listener.link); + wl_list_remove(&_volume_listener->restack_listener.link); + E_FREE(_volume_listener); + _volume_listener = NULL; + } } } @@ -284,7 +298,7 @@ e_service_volume_client_set(E_Client *ec) _volume_cur_angle_map = e_policy_angle_map(ec->e.state.rot.ang.curr); /* repeat events for volume client. */ - evas_object_repeat_events_set(ec->frame, EINA_TRUE); + e_view_repeat_events_set(e_view_client_view_get(e_client_view_get(ec)), true); _rot_handler = ecore_event_handler_add(E_EVENT_CLIENT_ROTATION_CHANGE_END, @@ -383,7 +397,7 @@ _region_objs_tile_set(E_Policy_Angle_Map angle_map, Eina_Tiler *tiler) if (angle_map == _volume_cur_angle_map) { - if (evas_object_visible_get(_volume_ec->frame)) + if (e_view_client_visible_get(e_client_view_get(_volume_ec))) evas_object_show(obj); } } @@ -437,6 +451,7 @@ EINTERN Eina_Bool e_service_volume_region_set(int type, int angle, Eina_Tiler *tiler) { E_Policy_Angle_Map angle_map; + E_View *view; if (EINA_UNLIKELY(!_volume_ec)) { @@ -468,16 +483,24 @@ e_service_volume_region_set(int type, int angle, Eina_Tiler *tiler) if (!_volume_ec_ev_init) { + _volume_listener = E_NEW(E_Service_Volume_Listener, 1); + if (!_volume_listener) + { + ERR("volume listener alloc fail"); + return EINA_FALSE; + } + _volume_ec_ev_init = EINA_TRUE; - evas_object_event_callback_add(_volume_ec->frame, EVAS_CALLBACK_SHOW, - _volume_client_evas_cb_show, NULL); - evas_object_event_callback_add(_volume_ec->frame, EVAS_CALLBACK_HIDE, - _volume_client_evas_cb_hide, NULL); - evas_object_event_callback_add(_volume_ec->frame, EVAS_CALLBACK_MOVE, - _volume_client_evas_cb_move, NULL); - evas_object_event_callback_add(_volume_ec->frame, EVAS_CALLBACK_RESTACK, - _volume_client_evas_cb_restack, NULL); + view = e_view_client_view_get(e_client_view_get(_volume_ec)); + _volume_listener->show_listener.notify = _volume_client_view_cb_show; + e_view_event_listener_add(view, E_VIEW_SHOW, &_volume_listener->show_listener); + _volume_listener->hide_listener.notify = _volume_client_view_cb_hide; + e_view_event_listener_add(view, E_VIEW_HIDE, &_volume_listener->hide_listener); + _volume_listener->move_listener.notify = _volume_client_view_cb_move; + e_view_event_listener_add(view, E_VIEW_MOVE, &_volume_listener->move_listener); + _volume_listener->restack_listener.notify = _volume_client_view_cb_restack; + e_view_event_listener_add(view, E_VIEW_RESTACK, &_volume_listener->restack_listener); } return EINA_TRUE; diff --git a/src/include/e_client.h b/src/include/e_client.h index af29ac1..d9669ac 100644 --- a/src/include/e_client.h +++ b/src/include/e_client.h @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include #include @@ -706,6 +708,13 @@ struct _E_Client Eina_Bool force_obscured : 1; int last_sent_type; Eina_Bool ignore_geometry : 1; + + //view listener + struct wl_listener show_listener; + struct wl_listener hide_listener; + struct wl_listener move_listener; + struct wl_listener resize_listener; + struct wl_listener restack_listener; } visibility; struct @@ -1123,6 +1132,7 @@ E_API void e_client_base_output_resolution_transform_adjust(E_Client *ec); E_API Eina_Bool e_client_base_output_resolution_update(E_Client *ec); E_API Eina_Bool e_client_base_output_resolution_useful_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h); E_API Eina_Bool e_client_base_output_resolution_desk_useful_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h, Eina_Bool consider_obstacle_area); +E_API E_View_Client *e_client_view_get(E_Client *ec); typedef Eina_Bool (*E_Client_Surface_Tree_Foreach)(void *data, E_Client *ec); diff --git a/src/include/e_comp.h b/src/include/e_comp.h index e8ffe7a..b1e988e 100644 --- a/src/include/e_comp.h +++ b/src/include/e_comp.h @@ -11,6 +11,8 @@ #include #include #include +#include "e_canvas.h" +#include "e_view.h" #ifdef __cplusplus #include @@ -78,7 +80,8 @@ struct _E_Comp Ecore_Window ee_win; Evas *evas; - Evas_Object *bg_blank_object; + E_Canvas *canvas; + E_View *bg_blank_view; Eina_List *zones; E_Pointer *pointer; Eina_List *clients; @@ -106,8 +109,8 @@ struct _E_Comp Eina_List *post_updates; Ecore_Animator *render_animator; Ecore_Job *update_job; - Evas_Object *fps_bg; - Evas_Object *fps_fg; + E_View *fps_bg; + E_View *fps_fg; int animating; double frametimes[122]; double fps; diff --git a/src/include/e_comp_canvas.h b/src/include/e_comp_canvas.h index dad9cda..02f3cd2 100644 --- a/src/include/e_comp_canvas.h +++ b/src/include/e_comp_canvas.h @@ -2,8 +2,10 @@ #define E_COMP_CANVAS_H #include +#include E_API E_Zone *e_comp_zone_xy_get(Evas_Coord x, Evas_Coord y); +E_API E_Canvas *e_comp_canvas_get(void); E_API unsigned int e_comp_canvas_layer_map(E_Layer layer); E_API unsigned int e_comp_canvas_client_layer_map(E_Layer layer); E_API E_Layer e_comp_canvas_layer_map_to(unsigned int layer); diff --git a/src/include/e_hwc_window.h b/src/include/e_hwc_window.h index 2e7dd9c..c98b388 100644 --- a/src/include/e_hwc_window.h +++ b/src/include/e_hwc_window.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -106,7 +107,7 @@ struct _E_Hwc_Window E_Zone *zone; E_Object_Delfn *zone_delfn; - Evas_Object *below_transparent_obj; + E_View_Rect *below_transparent_view; Eina_Bool comp_override; Eina_Bool never_hwc; @@ -122,6 +123,19 @@ struct _E_Hwc_Window Eina_Bool hwc_visible; Eina_Bool changed; + + // view listener + struct wl_listener show_listener; + struct wl_listener hide_listener; + struct wl_listener move_listener; + struct wl_listener resize_listener; + struct wl_listener restack_listener; + + struct wl_listener transparent_show_listener; + struct wl_listener transparent_hide_listener; + struct wl_listener transparent_move_listener; + struct wl_listener transparent_resize_listener; + struct wl_listener transparent_restack_listener; }; struct _E_Hwc_Window_Target diff --git a/src/include/e_map.h b/src/include/e_map.h index 055a3d6..17696f1 100644 --- a/src/include/e_map.h +++ b/src/include/e_map.h @@ -42,6 +42,9 @@ E_API Eina_Bool e_map_util_zoom_with_constant_ratio(E_Map *em, double zoo E_API Eina_Bool e_map_util_zoom(E_Map *em, double zoomx, double zoomy, int cx, int cy); E_API Eina_Bool e_map_util_rotate(E_Map *em, int angle, int cx, int cy); +E_API Eina_Bool e_map_util_points_populate_from_view(E_Map *em, E_View *view); +E_API Eina_Bool e_map_util_points_populate_from_view_full(E_Map *em, E_View *view, int z); + #ifdef __cplusplus } #endif diff --git a/src/include/e_pointer.h b/src/include/e_pointer.h index 38cc734..89bd46c 100644 --- a/src/include/e_pointer.h +++ b/src/include/e_pointer.h @@ -8,6 +8,7 @@ #include #include #include +#include typedef struct _E_Pointer E_Pointer; typedef struct _E_Pointer_Hook E_Pointer_Hook; @@ -51,7 +52,8 @@ struct _E_Pointer Evas *evas; Ecore_Evas *ee; - Evas_Object *o_ptr; + E_View_Client *view_client; + struct wl_listener destroy_listener; int x, y, w, h; int rotation; diff --git a/src/include/e_policy.h b/src/include/e_policy.h index 734c76d..4614448 100644 --- a/src/include/e_policy.h +++ b/src/include/e_policy.h @@ -6,6 +6,7 @@ #include #include #include +#include typedef struct _E_Policy_Softkey E_Policy_Softkey; typedef struct _E_Policy_Softkey_Funcs E_Policy_Softkey_Funcs; @@ -99,8 +100,8 @@ struct _E_Policy_Softkey E_Zone *zone; E_Policy_Softkey_Expand expand; E_Policy_Softkey_Opacity opacity; - Evas_Object *home; - Evas_Object *back; + E_View_Edje *home; + E_View_Edje *back; void *other; }; diff --git a/src/include/e_service_softkey.h b/src/include/e_service_softkey.h index 65ebc51..ece63d4 100644 --- a/src/include/e_service_softkey.h +++ b/src/include/e_service_softkey.h @@ -19,6 +19,10 @@ struct _E_Service_Softkey Eina_Bool show_block; Eina_List *events; + + // view listener + struct wl_listener show_listener; + struct wl_listener hide_listener; }; struct _E_Service_Softkey_Funcs diff --git a/src/include/e_zone.h b/src/include/e_zone.h index 4ad9942..9b371b4 100644 --- a/src/include/e_zone.h +++ b/src/include/e_zone.h @@ -6,6 +6,7 @@ #include #include #include +#include #define E_ZONE_TYPE (int)0xE0b0100d @@ -80,8 +81,8 @@ struct _E_Zone Eina_List *handlers; /* formerly E_Comp_Zone */ - Evas_Object *base; - Evas_Object *over; + E_View *base; + E_View *over; //double bl; // backlight level //Eina_Bool bloff; // backlight is off