From b12b26d4c03e78425784dbbd075d22e613390120 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Tue, 27 Jun 2017 09:26:55 -0400 Subject: [PATCH] ecore-wl2: Add client-side event for Window Hide Small patch to add and send a client-side event for when a window gets hidden. '#divergence' @feature Signed-off-by: Chris Michael --- src/lib/ecore_wl2/Ecore_Wl2.h | 8 ++++++++ src/lib/ecore_wl2/ecore_wl2.c | 5 ++++- src/lib/ecore_wl2/ecore_wl2_window.c | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index 52a140c1e8..5dac3d10ee 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h @@ -295,6 +295,13 @@ typedef struct _Ecore_Wl2_Event_Window_Show unsigned int event_win; } Ecore_Wl2_Event_Window_Show; +typedef struct _Ecore_Wl2_Event_Window_Hide +{ + unsigned int win; + unsigned int parent_win; + unsigned int event_win; +} Ecore_Wl2_Event_Window_Hide; + typedef enum _Ecore_Wl2_Window_Type { ECORE_WL2_WINDOW_TYPE_NONE, @@ -349,6 +356,7 @@ EAPI extern int ECORE_WL2_EVENT_WINDOW_ROTATION_CHANGE_REQUEST; /** @since 1.20 EAPI extern int ECORE_WL2_EVENT_WINDOW_ROTATION_CHANGE_DONE; /** @since 1.20 */ EAPI extern int ECORE_WL2_EVENT_AUX_HINT_ALLOWED; /** @since 1.20 */ EAPI extern int ECORE_WL2_EVENT_WINDOW_SHOW; /** @since 1.20 */ +EAPI extern int ECORE_WL2_EVENT_WINDOW_HIDE; /** @since 1.20 */ /** * @file diff --git a/src/lib/ecore_wl2/ecore_wl2.c b/src/lib/ecore_wl2/ecore_wl2.c index bb3b00a1a0..767b5c1e9b 100644 --- a/src/lib/ecore_wl2/ecore_wl2.c +++ b/src/lib/ecore_wl2/ecore_wl2.c @@ -47,6 +47,7 @@ EAPI int ECORE_WL2_EVENT_WINDOW_ROTATION_CHANGE_REQUEST = 0; EAPI int ECORE_WL2_EVENT_WINDOW_ROTATION_CHANGE_DONE = 0; EAPI int ECORE_WL2_EVENT_AUX_HINT_ALLOWED = 0; EAPI int ECORE_WL2_EVENT_WINDOW_SHOW = 0; +EAPI int ECORE_WL2_EVENT_WINDOW_HIDE = 0; EAPI int _ecore_wl2_event_window_www = -1; EAPI int _ecore_wl2_event_window_www_drag = -1; @@ -124,6 +125,7 @@ ecore_wl2_init(void) ECORE_WL2_EVENT_WINDOW_ROTATION_CHANGE_DONE = ecore_event_type_new(); ECORE_WL2_EVENT_AUX_HINT_ALLOWED = ecore_event_type_new(); ECORE_WL2_EVENT_WINDOW_SHOW = ecore_event_type_new(); + ECORE_WL2_EVENT_WINDOW_HIDE = ecore_event_type_new(); } if (!no_session_recovery) no_session_recovery = !!getenv("EFL_NO_WAYLAND_SESSION_RECOVERY"); @@ -188,7 +190,8 @@ ecore_wl2_shutdown(void) ECORE_WL2_EVENT_WINDOW_ROTATION_CHANGE_REQUEST, ECORE_WL2_EVENT_WINDOW_ROTATION_CHANGE_DONE, ECORE_WL2_EVENT_AUX_HINT_ALLOWED, - ECORE_WL2_EVENT_WINDOW_SHOW); + ECORE_WL2_EVENT_WINDOW_SHOW, + ECORE_WL2_EVENT_WINDOW_HIDE); /* shutdown Ecore_Event */ ecore_event_shutdown(); diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c b/src/lib/ecore_wl2/ecore_wl2_window.c index e0e1977c98..86a3315ff0 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -541,6 +541,21 @@ _ecore_wl2_window_show_send(Ecore_Wl2_Window *window) ecore_event_add(ECORE_WL2_EVENT_WINDOW_SHOW, ev, NULL, NULL); } +static void +_ecore_wl2_window_hide_send(Ecore_Wl2_Window *window) +{ + Ecore_Wl2_Event_Window_Hide *ev; + + ev = calloc(1, sizeof(Ecore_Wl2_Event_Window_Hide)); + if (!ev) return; + + ev->win = window->id; + if (window->parent) + ev->parent_win = window->parent->id; + ev->event_win = window->id; + ecore_event_add(ECORE_WL2_EVENT_WINDOW_HIDE, ev, NULL, NULL); +} + EAPI Ecore_Wl2_Window * ecore_wl2_window_new(Ecore_Wl2_Display *display, Ecore_Wl2_Window *parent, int x, int y, int w, int h) { @@ -637,6 +652,8 @@ ecore_wl2_window_hide(Ecore_Wl2_Window *window) EINA_SAFETY_ON_NULL_RETURN(window); + _ecore_wl2_window_hide_send(window); + EINA_INLIST_FOREACH_SAFE(window->subsurfs, tmp, subsurf) _ecore_wl2_subsurf_unmap(subsurf);