fix resize problem (reaquire buffer when resized)
[framework/osp/appwidget-service.git] / src / FShell_AppWidgetContextBase.cpp
index 9bce5a2..0e6aa77 100644 (file)
@@ -140,21 +140,27 @@ _AppWidgetContextBase::IsSharedMemCreated(void) const
 int
 _AppWidgetContextBase::GetSharedMemId(int w, int h)
 {
-       SysLog(NID_APP, "Enter");
+    SysLog(NID_APP, "Enter");
 
-       if( __buffer_info == null)
-       {
-               std::unique_ptr<char[]> packageName(_StringConverter::CopyToCharArrayN(__providerId));
-               std::unique_ptr<char[]> id(_StringConverter::CopyToCharArrayN(__instanceId));
+    bool isResized = (__buffer_info != null) && (__buffer_info->width != w || __buffer_info->height != h);
+    if ( isResized )
+    {
+       ReleaseSharedMem();
+    }
 
-               __buffer_info = provider_buffer_acquire(__type, packageName.get(), id.get(), w, h, sizeof(int), AppWidgetHandleBufferEventCallback, this);
-               SysTryReturnResult(NID_APP, __buffer_info , -1, "[E_SYSTEM] failed to provider_buffer_acquire");
-               SysLog(NID_APP, "provider_buffer_acquire successed");
+    if( __buffer_info == null)
+    {
+        std::unique_ptr<char[]> packageName(_StringConverter::CopyToCharArrayN(__providerId));
+        std::unique_ptr<char[]> id(_StringConverter::CopyToCharArrayN(__instanceId));
 
-               __buffer = provider_buffer_ref(__buffer_info);
-               SysTryReturnResult(NID_APP, __buffer , -1, "[E_SYSTEM] failed to provider_buffer_ref");
-               SysLog(NID_APP, "provider_buffer_ref successed");
-       }
+        __buffer_info = provider_buffer_acquire(__type, packageName.get(), id.get(), w, h, sizeof(int), AppWidgetHandleBufferEventCallback, this);
+        SysTryReturnResult(NID_APP, __buffer_info , -1, "[E_SYSTEM] failed to provider_buffer_acquire");
+        SysLog(NID_APP, "provider_buffer_acquire successed");
+
+        __buffer = provider_buffer_ref(__buffer_info);
+        SysTryReturnResult(NID_APP, __buffer , -1, "[E_SYSTEM] failed to provider_buffer_ref");
+        SysLog(NID_APP, "provider_buffer_ref successed");
+    }
 
     int bufferId = __buffer_info->fb->handle;
     __providerState = RUNNING;