[ThemeManager] Clear current theme cache when theme changed (#5320)
authorjeremy-jang <35089715+jeremy-jang@users.noreply.github.com>
Tue, 20 Jun 2023 05:50:01 +0000 (14:50 +0900)
committerGitHub <noreply@github.com>
Tue, 20 Jun 2023 05:50:01 +0000 (14:50 +0900)
* [ThemeManager] Clear current theme cache when theme changed

Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
* Fix ThemeLoader.Dispose

Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
---------

Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/Tizen.Applications.ThemeManager/Tizen.Applications.ThemeManager/ThemeLoader.cs

index 14bcae7..babba8f 100755 (executable)
@@ -49,10 +49,19 @@ namespace Tizen.Applications.ThemeManager
             {
                 throw Interop.ThemeManager.ThemeManagerErrorFactory.GetException(err, "Failed to create themeloader");
             }
+
+            _callback = new Interop.ThemeManager.ThemeLoaderChangedCallback(OnThemeChanged);
+            err = Interop.ThemeManager.LoaderAddEvent(_loaderHandle, _callback, IntPtr.Zero, out _eventId);
+            if (err != Interop.ThemeManager.ErrorCode.None)
+            {
+                throw Interop.ThemeManager.ThemeManagerErrorFactory.GetException(err, "Failed to add event");
+            }
         }
 
         private int OnThemeChanged(IntPtr handle, IntPtr userData)
         {
+            _currentTheme = null;
+
             Interop.ThemeManager.ErrorCode err = Interop.ThemeManager.ThemeClone(handle, out IntPtr cloned);
             if (err != Interop.ThemeManager.ErrorCode.None)
                 return -1;
@@ -72,34 +81,12 @@ namespace Tizen.Applications.ThemeManager
         {
             add
             {
-                if (_changedEventHandler == null)
-                {
-                    if (_callback == null)
-                        _callback = new Interop.ThemeManager.ThemeLoaderChangedCallback(OnThemeChanged);
-                    Interop.ThemeManager.ErrorCode err = Interop.ThemeManager.LoaderAddEvent(_loaderHandle, _callback, IntPtr.Zero, out _eventId);
-
-                    if (err != Interop.ThemeManager.ErrorCode.None)
-                    {
-                        throw Interop.ThemeManager.ThemeManagerErrorFactory.GetException(err, "Failed to add event");
-                    }
-
-                }
                 _changedEventHandler += value;
 
             }
             remove
             {
                 _changedEventHandler -= value;
-                if (_changedEventHandler == null)
-                {
-                    Interop.ThemeManager.ErrorCode err = Interop.ThemeManager.LoaderRemoveEvent(_loaderHandle, _eventId);
-
-                    if (err != Interop.ThemeManager.ErrorCode.None)
-                    {
-                        throw Interop.ThemeManager.ThemeManagerErrorFactory.GetException(err, "Failed to remove event");
-                    }
-                    _callback = null;
-                }
             }
         }
 
@@ -217,6 +204,12 @@ namespace Tizen.Applications.ThemeManager
 
             if (_loaderHandle != IntPtr.Zero)
             {
+                Interop.ThemeManager.ErrorCode err = Interop.ThemeManager.LoaderRemoveEvent(_loaderHandle, _eventId);
+                if (err != Interop.ThemeManager.ErrorCode.None)
+                {
+                    Log.Error(LogTag, "Failed to remove event");
+                }
+
                 Interop.ThemeManager.LoaderDestroy(_loaderHandle);
                 _loaderHandle = IntPtr.Zero;
             }