From 21dde3611e244acf00f5f2e16a6d322812961a09 Mon Sep 17 00:00:00 2001 From: taeyoon Date: Tue, 20 Sep 2016 20:26:10 +0900 Subject: [PATCH] Modify iconify part for wayland Change-Id: I8be44d011133e26466ea58a50e99165d1e345b68 --- adaptors/ecore/wayland/window-impl-ecore-wl.cpp | 43 ++++++++++++++++++---- .../wayland/window-render-surface-ecore-wl.cpp | 19 +--------- adaptors/ecore/wayland/window-render-surface.h | 9 +---- 3 files changed, 38 insertions(+), 33 deletions(-) diff --git a/adaptors/ecore/wayland/window-impl-ecore-wl.cpp b/adaptors/ecore/wayland/window-impl-ecore-wl.cpp index 3cc1f20..d1874fb 100644 --- a/adaptors/ecore/wayland/window-impl-ecore-wl.cpp +++ b/adaptors/ecore/wayland/window-impl-ecore-wl.cpp @@ -63,7 +63,7 @@ struct Window::EventHandler EventHandler( Window* window ) : mWindow( window ), mWindowPropertyHandler( NULL ), - mClientMessageHandler( NULL ), + mWindowIconifyStateHandler( NULL ), mEcoreWindow( 0 ) { // store ecore window handle @@ -73,6 +73,12 @@ struct Window::EventHandler mEcoreWindow = wlWindow->GetWlWindow(); } DALI_ASSERT_ALWAYS( mEcoreWindow != 0 && "There is no ecore Wl window"); + + if( mWindow->mEcoreEventHander ) + { + mWindowIconifyStateHandler = ecore_event_handler_add( ECORE_WL_EVENT_WINDOW_ICONIFY_STATE_CHANGE, EcoreEventWindowIconifyStateChanged, this ); + } + } /** @@ -84,9 +90,9 @@ struct Window::EventHandler { ecore_event_handler_del( mWindowPropertyHandler ); } - if ( mClientMessageHandler ) + if ( mWindowIconifyStateHandler ) { - ecore_event_handler_del( mClientMessageHandler ); + ecore_event_handler_del( mWindowIconifyStateHandler ); } } @@ -98,16 +104,39 @@ struct Window::EventHandler return EINA_FALSE; } - /// Called when the window properties are changed. - static Eina_Bool EcoreEventClientMessage( void* data, int type, void* event ) + /// Called when the window iconify state is changed. + static Eina_Bool EcoreEventWindowIconifyStateChanged( void* data, int type, void* event ) { - return EINA_FALSE; + Ecore_Wl_Event_Window_Iconify_State_Change* iconifyChangedEvent( (Ecore_Wl_Event_Window_Iconify_State_Change*)event ); + EventHandler* handler( (EventHandler*)data ); + Eina_Bool handled( ECORE_CALLBACK_PASS_ON ); + + if ( handler && handler->mWindow ) + { + WindowVisibilityObserver* observer( handler->mWindow->mAdaptor ); + if ( observer && ( iconifyChangedEvent->win == (unsigned int) ecore_wl_window_id_get( handler->mEcoreWindow ) ) ) + { + if( iconifyChangedEvent->iconified == EINA_TRUE ) + { + observer->OnWindowHidden(); + DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Iconfied\n", handler->mEcoreWindow ); + } + else + { + observer->OnWindowShown(); + DALI_LOG_INFO( gWindowLogFilter, Debug::General, "Window (%d) Shown\n", handler->mEcoreWindow ); + } + handled = ECORE_CALLBACK_DONE; + } + } + + return handled; } // Data Window* mWindow; Ecore_Event_Handler* mWindowPropertyHandler; - Ecore_Event_Handler* mClientMessageHandler; + Ecore_Event_Handler* mWindowIconifyStateHandler; Ecore_Wl_Window* mEcoreWindow; }; diff --git a/adaptors/ecore/wayland/window-render-surface-ecore-wl.cpp b/adaptors/ecore/wayland/window-render-surface-ecore-wl.cpp index 0d0609a..2dfbddf 100644 --- a/adaptors/ecore/wayland/window-render-surface-ecore-wl.cpp +++ b/adaptors/ecore/wayland/window-render-surface-ecore-wl.cpp @@ -51,8 +51,7 @@ WindowRenderSurface::WindowRenderSurface( Dali::PositionSize positionSize, bool isTransparent) : EcoreWlRenderSurface( positionSize, surface, name, isTransparent ), mWlWindow( NULL ), - mEglWindow( NULL ), - mNeedToApproveDeiconify( false ) + mEglWindow( NULL ) { DALI_LOG_INFO( gRenderSurfaceLogFilter, Debug::Verbose, "Creating Window\n" ); Init( surface ); @@ -89,11 +88,6 @@ Ecore_Wl_Window* WindowRenderSurface::GetWlWindow() return mWlWindow; } -void WindowRenderSurface::RequestToApproveDeiconify() -{ - mNeedToApproveDeiconify = true; -} - void WindowRenderSurface::InitializeEgl( EglInterface& eglIf ) { DALI_LOG_TRACE_METHOD( gRenderSurfaceLogFilter ); @@ -221,17 +215,6 @@ void WindowRenderSurface::PostRender( EglInterface& egl, Integration::GlAbstract { mRenderNotification->Trigger(); } - - // When the window is deiconified, it approves the deiconify operation to window manager after rendering - if(mNeedToApproveDeiconify) - { - // SwapBuffer is desychronized. So make sure to sychronize when window is deiconified. - glAbstraction.Finish(); - - //FIXME - - mNeedToApproveDeiconify = false; - } } void WindowRenderSurface::StopRender() diff --git a/adaptors/ecore/wayland/window-render-surface.h b/adaptors/ecore/wayland/window-render-surface.h index 7aea88b..8fa093a 100644 --- a/adaptors/ecore/wayland/window-render-surface.h +++ b/adaptors/ecore/wayland/window-render-surface.h @@ -61,12 +61,6 @@ public: // API virtual Ecore_Wl_Window* GetDrawable(); /** - * Request to approve deiconify operation - * If it is requested, it will send ECORE_X_ATOM_E_DEICONIFY_APPROVE event to window manager after rendering - */ - void RequestToApproveDeiconify(); - - /** * Map window */ virtual void Map(); @@ -159,7 +153,6 @@ private: // Data Ecore_Wl_Window* mWlWindow; ///< Wayland-Window wl_egl_window* mEglWindow; - bool mNeedToApproveDeiconify; ///< Whether need to send ECORE_X_ATOM_E_DEICONIFY_APPROVE event }; // class WindowRenderSurface @@ -167,4 +160,4 @@ private: // Data } // namespace Dali -#endif // __DALI_INTERNAL_ECORE_X_WINDOW_RENDER_SURFACE_H__ +#endif // __DALI_INTERNAL_ECORE_WL_WINDOW_RENDER_SURFACE_H__ -- 2.7.4