{
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;
{
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;
- }
}
}
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;
}