From d936f2a50dca87cb54947bae997948c8ec5a58b6 Mon Sep 17 00:00:00 2001 From: Duna Oh Date: Tue, 20 Oct 2015 14:29:15 +0900 Subject: [PATCH] e_comp_wl: add win_type to E_Comp_Wl_Client_Data Change-Id: I83dd733946982963c9773205968b3b46f3111594 Signed-off-by: Duna Oh --- src/bin/e_comp.h | 11 ++++++----- src/bin/e_comp_canvas.c | 26 +++++++++++++++----------- src/bin/e_comp_wl.c | 4 ++++ src/bin/e_comp_wl.h | 8 ++++++++ src/modules/wl_desktop_shell/e_mod_main.c | 13 +++++++++++++ 5 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h index 71bd237..e10154b 100644 --- a/src/bin/e_comp.h +++ b/src/bin/e_comp.h @@ -20,8 +20,8 @@ typedef struct _E_Comp_Demo_Style_Item E_Comp_Demo_Style_Item; # define E_COMP_TYPE (int) 0xE0b01003 -# define E_LAYER_COUNT 23 -# define E_CLIENT_LAYER_COUNT 15 +# define E_LAYER_COUNT 24 +# define E_CLIENT_LAYER_COUNT 16 typedef enum _E_Layer { @@ -40,9 +40,10 @@ typedef enum _E_Layer E_LAYER_CLIENT_TOP = 500, E_LAYER_CLIENT_DRAG = 550, E_LAYER_CLIENT_PRIO = 600, - E_LAYER_CLIENT_NOTIFICATION_LOW = 700, - E_LAYER_CLIENT_NOTIFICATION_NORMAL = 750, - E_LAYER_CLIENT_NOTIFICATION_HIGH = 800, + E_LAYER_CLIENT_NOTIFICATION_LOW = 650, + E_LAYER_CLIENT_NOTIFICATION_NORMAL = 700, + E_LAYER_CLIENT_NOTIFICATION_HIGH = 750, + E_LAYER_CLIENT_NOTIFICATION_TOP = 800, E_LAYER_CLIENT_ALERT = 850, E_LAYER_POPUP = 999, // popups E_LAYER_MENU = 5000, // menus diff --git a/src/bin/e_comp_canvas.c b/src/bin/e_comp_canvas.c index aab0f2e..2cdc8e6 100644 --- a/src/bin/e_comp_canvas.c +++ b/src/bin/e_comp_canvas.c @@ -524,11 +524,12 @@ e_comp_canvas_layer_map_to(unsigned int layer) case 15: return E_LAYER_CLIENT_NOTIFICATION_LOW; case 16: return E_LAYER_CLIENT_NOTIFICATION_NORMAL; case 17: return E_LAYER_CLIENT_NOTIFICATION_HIGH; - case 18: return E_LAYER_CLIENT_ALERT; - case 19: return E_LAYER_POPUP; - case 20: return E_LAYER_MENU; - case 21: return E_LAYER_DESKLOCK; - case 22: return E_LAYER_MAX; + case 18: return E_LAYER_CLIENT_NOTIFICATION_TOP; + case 19: return E_LAYER_CLIENT_ALERT; + case 20: return E_LAYER_POPUP; + case 21: return E_LAYER_MENU; + case 22: return E_LAYER_DESKLOCK; + case 23: return E_LAYER_MAX; default: break; } return -INT_MAX; @@ -557,11 +558,12 @@ e_comp_canvas_layer_map(E_Layer layer) case E_LAYER_CLIENT_NOTIFICATION_LOW: return 15; case E_LAYER_CLIENT_NOTIFICATION_NORMAL: return 16; case E_LAYER_CLIENT_NOTIFICATION_HIGH: return 17; - case E_LAYER_CLIENT_ALERT: return 18; - case E_LAYER_POPUP: return 19; - case E_LAYER_MENU: return 20; - case E_LAYER_DESKLOCK: return 21; - case E_LAYER_MAX: return 22; + case E_LAYER_CLIENT_NOTIFICATION_TOP: return 18; + case E_LAYER_CLIENT_ALERT: return 19; + case E_LAYER_POPUP: return 20; + case E_LAYER_MENU: return 21; + case E_LAYER_DESKLOCK: return 22; + case E_LAYER_MAX: return 23; default: break; } return 9999; @@ -586,7 +588,8 @@ e_comp_canvas_client_layer_map(E_Layer layer) case E_LAYER_CLIENT_NOTIFICATION_LOW: return 11; case E_LAYER_CLIENT_NOTIFICATION_NORMAL: return 12; case E_LAYER_CLIENT_NOTIFICATION_HIGH: return 13; - case E_LAYER_CLIENT_ALERT: return 14; + case E_LAYER_CLIENT_NOTIFICATION_TOP: return 14; + case E_LAYER_CLIENT_ALERT: return 15; default: break; } return 9999; @@ -612,6 +615,7 @@ e_comp_canvas_client_layer_map_nearest(int layer) LAYER_MAP(E_LAYER_CLIENT_NOTIFICATION_LOW); LAYER_MAP(E_LAYER_CLIENT_NOTIFICATION_NORMAL); LAYER_MAP(E_LAYER_CLIENT_NOTIFICATION_HIGH); + LAYER_MAP(E_LAYER_CLIENT_NOTIFICATION_TOP); return E_LAYER_CLIENT_ALERT; } diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 08738c5..e6bce10 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -3050,6 +3050,10 @@ _e_comp_wl_client_cb_new(void *data EINA_UNUSED, E_Client *ec) ec->comp_data->accepts_focus = p_cdata->accepts_focus; ec->comp_data->conformant = p_cdata->conformant; ec->comp_data->aux_hint.hints = p_cdata->aux_hint.hints; + ec->comp_data->win_type = p_cdata->win_type; + ec->comp_data->layer = p_cdata->layer; + ec->comp_data->fetch.win_type = p_cdata->fetch.win_type; + ec->comp_data->fetch.layer = p_cdata->fetch.layer; /* add this client to the hash */ /* eina_hash_add(clients_win_hash, &win, ec); */ diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h index f1a471e..e98ee55 100644 --- a/src/bin/e_comp_wl.h +++ b/src/bin/e_comp_wl.h @@ -373,6 +373,14 @@ struct _E_Comp_Wl_Client_Data Eina_Bool opaque_state : 1; unsigned char accepts_focus : 1; unsigned char conformant : 1; + E_Window_Type win_type; + E_Layer layer; + + struct + { + unsigned char win_type : 1; + unsigned char layer : 1; + } fetch; }; struct _E_Comp_Wl_Output diff --git a/src/modules/wl_desktop_shell/e_mod_main.c b/src/modules/wl_desktop_shell/e_mod_main.c index 2ad8b89..939f67a 100644 --- a/src/modules/wl_desktop_shell/e_mod_main.c +++ b/src/modules/wl_desktop_shell/e_mod_main.c @@ -1234,6 +1234,19 @@ _e_xdg_shell_cb_surface_get(struct wl_client *client, struct wl_resource *resour E_Comp_Client_Data *p_cdata = e_pixmap_cdata_get(ep); EINA_SAFETY_ON_NULL_RETURN(p_cdata); ec->icccm.accepts_focus = ec->icccm.take_focus = p_cdata->accepts_focus; + + if (p_cdata->fetch.win_type) + { + ec->netwm.type = p_cdata->win_type; + p_cdata->fetch.win_type = 0; + } + if (p_cdata->fetch.layer) + { + ec->layer = p_cdata->layer; + p_cdata->fetch.layer = 0; + evas_object_layer_set(ec->frame, ec->layer); + ELOG("LAYER_SET", ec->pixmap, ec); + } } static void -- 2.7.4