mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-07-23 01:02:36 +00:00
notification: Fix Win32 delegate structs
Cast from the generic implementation, which has space for the refcount.
This commit is contained in:
@@ -87,8 +87,6 @@ DEFINE_GUID(IID_IToastActivatedEventHandler,
|
||||
DEFINE_GUID(IID_IToastDismissedEventHandler,
|
||||
0x61c2402f, 0x0ed0, 0x5a18, 0xab, 0x69, 0x59, 0xf4, 0xaa, 0x99, 0xa3, 0x68);
|
||||
|
||||
static struct Impl_IGeneric *pClassFactory = NULL;
|
||||
|
||||
static HSTRING hsGroupId = NULL;
|
||||
static HSTRING hsAppId = NULL;
|
||||
|
||||
@@ -119,7 +117,12 @@ typedef struct Impl_IGeneric
|
||||
|
||||
static ULONG STDMETHODCALLTYPE Impl_IGeneric_AddRef(Impl_IGeneric *_this)
|
||||
{
|
||||
return SDL_AddAtomicInt(&_this->refCount, 1) + 1;
|
||||
return (ULONG)SDL_AddAtomicInt(&_this->refCount, 1) + 1UL;
|
||||
}
|
||||
|
||||
static ULONG STDMETHODCALLTYPE Impl_IGeneric_Release(Impl_IGeneric *_this)
|
||||
{
|
||||
return (ULONG)SDL_AddAtomicInt(&_this->refCount, -1) - 1UL;
|
||||
}
|
||||
|
||||
// OnActivated interface
|
||||
@@ -179,12 +182,13 @@ static HRESULT STDMETHODCALLTYPE Impl_OnActivated_Invoke(__FITypedEventHandler_2
|
||||
static __FITypedEventHandler_2_Windows__CUI__CNotifications__CToastNotification_IInspectableVtbl WindowsToast__OnActivatedVtbl = {
|
||||
.QueryInterface = &Impl_OnActivated_QueryInterface,
|
||||
.AddRef = (void *)Impl_IGeneric_AddRef,
|
||||
.Release = (void *)Impl_IGeneric_AddRef,
|
||||
.Release = (void *)Impl_IGeneric_Release,
|
||||
.Invoke = &Impl_OnActivated_Invoke,
|
||||
};
|
||||
|
||||
static __FITypedEventHandler_2_Windows__CUI__CNotifications__CToastNotification_IInspectable OnActivated = {
|
||||
.lpVtbl = &WindowsToast__OnActivatedVtbl
|
||||
static Impl_IGeneric OnActivated = {
|
||||
.lpVtbl = (IUnknownVtbl *)&WindowsToast__OnActivatedVtbl,
|
||||
.refCount.value = 1
|
||||
};
|
||||
|
||||
// OnDismissed interface
|
||||
@@ -227,12 +231,13 @@ static HRESULT STDMETHODCALLTYPE Impl_OnDismissed_Invoke(__FITypedEventHandler_2
|
||||
static __FITypedEventHandler_2_Windows__CUI__CNotifications__CToastNotification_Windows__CUI__CNotifications__CToastDismissedEventArgsVtbl WindowsToast__OnDismissedVtbl = {
|
||||
.QueryInterface = &Impl_OnDismissed_QueryInterface,
|
||||
.AddRef = (void *)Impl_IGeneric_AddRef,
|
||||
.Release = (void *)Impl_IGeneric_AddRef,
|
||||
.Release = (void *)Impl_IGeneric_Release,
|
||||
.Invoke = &Impl_OnDismissed_Invoke,
|
||||
};
|
||||
|
||||
static __FITypedEventHandler_2_Windows__CUI__CNotifications__CToastNotification_Windows__CUI__CNotifications__CToastDismissedEventArgs OnDismissed = {
|
||||
.lpVtbl = &WindowsToast__OnDismissedVtbl
|
||||
static Impl_IGeneric OnDismissed = {
|
||||
.lpVtbl = (IUnknownVtbl *)&WindowsToast__OnDismissedVtbl,
|
||||
.refCount.value = 1
|
||||
};
|
||||
|
||||
static bool IsInPackage()
|
||||
@@ -489,10 +494,6 @@ static void QuitToastSystem()
|
||||
pToastNotificationManager->lpVtbl->Release(pToastNotificationManager);
|
||||
pToastNotificationManager = NULL;
|
||||
}
|
||||
if (pClassFactory) {
|
||||
pClassFactory->lpVtbl->Release((IUnknown *)pClassFactory);
|
||||
pClassFactory = NULL;
|
||||
}
|
||||
if (hsAppId) {
|
||||
WIN_WindowsDeleteString(hsAppId);
|
||||
hsAppId = NULL;
|
||||
@@ -1060,14 +1061,14 @@ SDL_NotificationID SDL_SYS_ShowNotification(SDL_PropertiesID props)
|
||||
// Register the OnDismissed notifier to clear transient notifications when cancelled or timed out.
|
||||
if (transient) {
|
||||
EventRegistrationToken dismissedToken;
|
||||
hr = pToastNotification->lpVtbl->add_Dismissed(pToastNotification, &OnDismissed, &dismissedToken);
|
||||
hr = pToastNotification->lpVtbl->add_Dismissed(pToastNotification, (__FITypedEventHandler_2_Windows__CUI__CNotifications__CToastNotification_Windows__CUI__CNotifications__CToastDismissedEventArgs *)&OnDismissed, &dismissedToken);
|
||||
if (FAILED(hr)) {
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
{
|
||||
EventRegistrationToken activatedToken;
|
||||
hr = pToastNotification->lpVtbl->add_Activated(pToastNotification, &OnActivated, &activatedToken);
|
||||
hr = pToastNotification->lpVtbl->add_Activated(pToastNotification, (__FITypedEventHandler_2_Windows__CUI__CNotifications__CToastNotification_IInspectable *)&OnActivated, &activatedToken);
|
||||
if (FAILED(hr)) {
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user