From a97df24246a11622772485c4f5bef73a5a161044 Mon Sep 17 00:00:00 2001 From: taeyoon Date: Mon, 20 Jul 2015 18:29:23 +0900 Subject: [PATCH] [3.0] Fix crash in wayland Change-Id: I5fb6c065aed64736ca5059beac5b70a22e6f8a1c --- adaptors/tizen/framework-tizen.cpp | 8 ++++++-- adaptors/wayland/window-impl-wl.cpp | 2 ++ adaptors/wayland/window-render-surface-wl.cpp | 18 ++++++++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/adaptors/tizen/framework-tizen.cpp b/adaptors/tizen/framework-tizen.cpp index 1eef794..498c2a9 100644 --- a/adaptors/tizen/framework-tizen.cpp +++ b/adaptors/tizen/framework-tizen.cpp @@ -26,6 +26,7 @@ #ifdef OVER_TIZEN_SDK_2_2 #include #include +#include #endif #include @@ -90,8 +91,6 @@ struct Framework::Impl #else mEventCallback.app_control = AppControl; - ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, AppBatteryLow, data); - ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, AppMemoryLow, data); ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, AppDeviceRotated, data); ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, AppLanguageChanged, data); ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, AppRegionChanged, data); @@ -309,6 +308,7 @@ void Framework::Run() { DALI_LOG_ERROR("Framework::Run(), ui_app_main() is failed. err = %d", ret); } + #endif mRunning = false; @@ -316,7 +316,11 @@ void Framework::Run() void Framework::Quit() { +#ifndef OVER_TIZEN_SDK_2_2 app_efl_exit(); +#else + ui_app_exit(); +#endif } bool Framework::IsMainLoopRunning() diff --git a/adaptors/wayland/window-impl-wl.cpp b/adaptors/wayland/window-impl-wl.cpp index 1cef07a..5633d64 100644 --- a/adaptors/wayland/window-impl-wl.cpp +++ b/adaptors/wayland/window-impl-wl.cpp @@ -63,6 +63,8 @@ struct Window::EventHandler */ EventHandler( Window* window ) : mWindow( window ), + mWindowPropertyHandler( NULL ), + mClientMessagehandler( NULL ), mEcoreWindow( 0 ) { // store ecore window handle diff --git a/adaptors/wayland/window-render-surface-wl.cpp b/adaptors/wayland/window-render-surface-wl.cpp index fc171eb..8a655c0 100644 --- a/adaptors/wayland/window-render-surface-wl.cpp +++ b/adaptors/wayland/window-render-surface-wl.cpp @@ -50,7 +50,8 @@ WindowRenderSurface::WindowRenderSurface( Dali::PositionSize positionSize, const std::string& name, bool isTransparent) : EcoreWlRenderSurface( positionSize, surface, name, isTransparent ), - mNeedToApproveDeiconify(false) + mEglWindow( NULL ), + mNeedToApproveDeiconify( false ) { DALI_LOG_INFO( gRenderSurfaceLogFilter, Debug::Verbose, "Creating Window\n" ); Init( surface ); @@ -58,6 +59,12 @@ WindowRenderSurface::WindowRenderSurface( Dali::PositionSize positionSize, WindowRenderSurface::~WindowRenderSurface() { + if( mEglWindow != NULL ) + { + wl_egl_window_destroy(mEglWindow); + mEglWindow = NULL; + } + if( mOwnSurface ) { ecore_wl_window_free( mWlWindow ); @@ -113,15 +120,18 @@ void WindowRenderSurface::DestroyEglSurface( EglInterface& eglIf ) Internal::Adaptor::EglImplementation& eglImpl = static_cast( eglIf ); eglImpl.DestroySurface(); - wl_egl_window_destroy(mEglWindow); - mEglWindow = NULL; } bool WindowRenderSurface::ReplaceEGLSurface( EglInterface& egl ) { DALI_LOG_TRACE_METHOD( gRenderSurfaceLogFilter ); - wl_egl_window_destroy(mEglWindow); + if( mEglWindow != NULL ) + { + wl_egl_window_destroy(mEglWindow); + mEglWindow = NULL; + } + mEglWindow = wl_egl_window_create(ecore_wl_window_surface_get(mWlWindow), mPosition.width, mPosition.height); Internal::Adaptor::EglImplementation& eglImpl = static_cast( egl ); -- 2.7.4