From f737d284d3899479cbf86f7c52ffc70efde22665 Mon Sep 17 00:00:00 2001 From: "taeyoon0.lee" Date: Tue, 23 May 2017 18:20:00 +0900 Subject: [PATCH] [3.0] Added handler for ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE - Adaptor will be paused/resumed if ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE is changed Change-Id: I7ad874d85cfe3eef26b7225462fcba89f7defec9 --- adaptors/ecore/wayland/window-impl-ecore-wl.cpp | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/adaptors/ecore/wayland/window-impl-ecore-wl.cpp b/adaptors/ecore/wayland/window-impl-ecore-wl.cpp index 576e348..96abe81 100644 --- a/adaptors/ecore/wayland/window-impl-ecore-wl.cpp +++ b/adaptors/ecore/wayland/window-impl-ecore-wl.cpp @@ -64,6 +64,7 @@ struct Window::EventHandler : mWindow( window ), mWindowPropertyHandler( NULL ), mWindowIconifyStateHandler( NULL ), + mWindowVisibilityStateHandler( NULL ), mEcoreWindow( 0 ) { // store ecore window handle @@ -78,6 +79,7 @@ struct Window::EventHandler if( mWindow->mEcoreEventHander ) { mWindowIconifyStateHandler = ecore_event_handler_add( ECORE_WL_EVENT_WINDOW_ICONIFY_STATE_CHANGE, EcoreEventWindowIconifyStateChanged, this ); + mWindowVisibilityStateHandler = ecore_event_handler_add( ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE, EcoreEventWindowVisibilityChanged, this ); } #endif @@ -92,10 +94,16 @@ struct Window::EventHandler { ecore_event_handler_del( mWindowPropertyHandler ); } + if ( mWindowIconifyStateHandler ) { ecore_event_handler_del( mWindowIconifyStateHandler ); } + + if ( mWindowVisibilityStateHandler ) + { + ecore_event_handler_del( mWindowVisibilityStateHandler ); + } } // Static methods @@ -135,12 +143,43 @@ struct Window::EventHandler return handled; } + + /// Called when the window visibility is changed. + static Eina_Bool EcoreEventWindowVisibilityChanged( void* data, int type, void* event ) + { + Ecore_Wl_Event_Window_Visibility_Change* visibilityChangedEvent( (Ecore_Wl_Event_Window_Visibility_Change*)event ); + EventHandler* handler( (EventHandler*)data ); + Eina_Bool handled( ECORE_CALLBACK_PASS_ON ); + + if ( handler && handler->mWindow ) + { + WindowVisibilityObserver* observer( handler->mWindow->mAdaptor ); + if ( observer && ( visibilityChangedEvent->win == (unsigned int) ecore_wl_window_id_get( handler->mEcoreWindow ) ) ) + { + if( visibilityChangedEvent->fully_obscured == 1 ) + { + observer->OnWindowHidden(); + DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) full obscured\n", handler->mEcoreWindow ); + } + else + { + observer->OnWindowShown(); + DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Shown\n", handler->mEcoreWindow ); + } + handled = ECORE_CALLBACK_DONE; + } + } + + return handled; + } + #endif // Data Window* mWindow; Ecore_Event_Handler* mWindowPropertyHandler; Ecore_Event_Handler* mWindowIconifyStateHandler; + Ecore_Event_Handler* mWindowVisibilityStateHandler; Ecore_Wl_Window* mEcoreWindow; }; -- 2.7.4