devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2f7f232582d19ed3786abb71b0f9a3924164c70f
commit 2f7f232582d19ed3786abb71b0f9a3924164c70f Author: Chris Michael <cp.mich...@samsung.com> Date: Tue Jun 27 09:46:55 2017 -0400 ecore-wl2: Add client-side event for Window Deactivate This patch adds and sends a client-side event for when a window gets deactivated. '#divergence' @feature Signed-off-by: Chris Michael <cp.mich...@samsung.com> --- src/lib/ecore_wl2/Ecore_Wl2.h | 8 ++++++++ src/lib/ecore_wl2/ecore_wl2.c | 5 ++++- src/lib/ecore_wl2/ecore_wl2_window.c | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_wl2/Ecore_Wl2.h b/src/lib/ecore_wl2/Ecore_Wl2.h index ccc48140bc..c191ec50ab 100644 --- a/src/lib/ecore_wl2/Ecore_Wl2.h +++ b/src/lib/ecore_wl2/Ecore_Wl2.h @@ -309,6 +309,13 @@ typedef struct _Ecore_Wl2_Event_Window_Activate unsigned int event_win; } Ecore_Wl2_Event_Window_Activate; +typedef struct _Ecore_Wl2_Event_Window_Deactivate +{ + unsigned int win; + unsigned int parent_win; + unsigned int event_win; +} Ecore_Wl2_Event_Window_Deactivate; + typedef enum _Ecore_Wl2_Window_Type { ECORE_WL2_WINDOW_TYPE_NONE, @@ -365,6 +372,7 @@ 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 */ EAPI extern int ECORE_WL2_EVENT_WINDOW_ACTIVATE; /** @since 1.20 */ +EAPI extern int ECORE_WL2_EVENT_WINDOW_DEACTIVATE; /** @since 1.20 */ /** * @file diff --git a/src/lib/ecore_wl2/ecore_wl2.c b/src/lib/ecore_wl2/ecore_wl2.c index 4cecffab60..a4dd62eb80 100644 --- a/src/lib/ecore_wl2/ecore_wl2.c +++ b/src/lib/ecore_wl2/ecore_wl2.c @@ -49,6 +49,7 @@ 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_ACTIVATE = 0; +EAPI int ECORE_WL2_EVENT_WINDOW_DEACTIVATE = 0; EAPI int _ecore_wl2_event_window_www = -1; EAPI int _ecore_wl2_event_window_www_drag = -1; @@ -128,6 +129,7 @@ ecore_wl2_init(void) ECORE_WL2_EVENT_WINDOW_SHOW = ecore_event_type_new(); ECORE_WL2_EVENT_WINDOW_HIDE = ecore_event_type_new(); ECORE_WL2_EVENT_WINDOW_ACTIVATE = ecore_event_type_new(); + ECORE_WL2_EVENT_WINDOW_DEACTIVATE = ecore_event_type_new(); } if (!no_session_recovery) no_session_recovery = !!getenv("EFL_NO_WAYLAND_SESSION_RECOVERY"); @@ -194,7 +196,8 @@ ecore_wl2_shutdown(void) ECORE_WL2_EVENT_AUX_HINT_ALLOWED, ECORE_WL2_EVENT_WINDOW_SHOW, ECORE_WL2_EVENT_WINDOW_HIDE, - ECORE_WL2_EVENT_WINDOW_ACTIVATE); + ECORE_WL2_EVENT_WINDOW_ACTIVATE, + ECORE_WL2_EVENT_WINDOW_DEACTIVATE); /* 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 d6180c79b3..4117e606f1 100644 --- a/src/lib/ecore_wl2/ecore_wl2_window.c +++ b/src/lib/ecore_wl2/ecore_wl2_window.c @@ -69,6 +69,21 @@ _ecore_wl2_window_activate_send(Ecore_Wl2_Window *window) } static void +_ecore_wl2_window_deactivate_send(Ecore_Wl2_Window *window) +{ + Ecore_Wl2_Event_Window_Deactivate *ev; + + ev = calloc(1, sizeof(Ecore_Wl2_Event_Window_Deactivate)); + 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_DEACTIVATE, ev, NULL, NULL); +} + +static void _xdg_popup_cb_done(void *data, struct xdg_popup *xdg_popup EINA_UNUSED) { Ecore_Wl2_Window *win; @@ -136,6 +151,8 @@ _xdg_surface_cb_configure(void *data, struct xdg_surface *xdg_surface EINA_UNUSE if (win->focused) _ecore_wl2_window_activate_send(win); + else + _ecore_wl2_window_deactivate_send(win); } static void @@ -229,6 +246,8 @@ _zxdg_toplevel_cb_configure(void *data, struct zxdg_toplevel_v6 *zxdg_toplevel E if (win->focused) _ecore_wl2_window_activate_send(win); + else + _ecore_wl2_window_deactivate_send(win); } static void --