diff options
Diffstat (limited to 'updater/popups.cpp')
-rw-r--r-- | updater/popups.cpp | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/updater/popups.cpp b/updater/popups.cpp index cbf1529..addcf60 100644 --- a/updater/popups.cpp +++ b/updater/popups.cpp @@ -8,13 +8,20 @@ HWND hwndPop = 0; HANDLE hEventPop;
bool pop_cancelled;
+typedef struct
+{
+ unsigned flags;
+ HICON hIcon;
+} PopupDataType;
+
+
LRESULT CALLBACK NullWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message ) {
case UM_INITPOPUP:
{
- int flags = CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,0);
- if(flags & POPFLAG_SAVEHWND) hwndPop = hWnd;
+ PopupDataType* popup = (PopupDataType*)CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,0);
+ if(popup->flags & POPFLAG_SAVEHWND) hwndPop = hWnd;
}
return 0;
case WMU_CLOSEPOP:
@@ -24,8 +31,8 @@ LRESULT CALLBACK NullWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM case WM_COMMAND:
{
- int flags = CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,0);
- if(flags & POPFLAG_SAVEHWND) pop_cancelled = false;
+ PopupDataType* popup = (PopupDataType*)CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,0);
+ if(popup->flags & POPFLAG_SAVEHWND) pop_cancelled = false;
}
SetEvent(hEventPop);
PUDeletePopUp( hWnd );
@@ -33,16 +40,21 @@ LRESULT CALLBACK NullWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM case WM_CONTEXTMENU:
{
- int flags = CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,0);
- if(flags & POPFLAG_SAVEHWND) pop_cancelled = true;
+ PopupDataType* popup = (PopupDataType*)CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd,0);
+ if(popup->flags & POPFLAG_SAVEHWND) pop_cancelled = true;
}
SetEvent(hEventPop);
PUDeletePopUp( hWnd );
return TRUE;
case UM_FREEPLUGINDATA: {
- int flags = CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd, 0);
- if(flags & POPFLAG_SAVEHWND) hwndPop = 0;
+ PopupDataType* popup = (PopupDataType*)CallService(MS_POPUP_GETPLUGINDATA, (WPARAM)hWnd, 0);
+ if ((unsigned)popup != CALLSERVICE_NOTFOUND)
+ {
+ if (popup->flags & POPFLAG_SAVEHWND) hwndPop = 0;
+ ReleaseIconEx(popup->hIcon);
+ free(popup);
+ }
return TRUE;
}
}
@@ -101,7 +113,7 @@ void ShowPopupA( HANDLE hContact, const char* line1, const char* line2, int flag memset((void *)ppd, 0, sizeof(POPUPDATAEX));
ppd->lchContact = hContact;
- ppd->lchIcon = hIconCheck;
+ ppd->lchIcon = LoadIconEx(I_CHKUPD);
if(line1 && line2) {
strcpy( ppd->lpzContactName, line1 );
@@ -128,7 +140,9 @@ void ShowPopupA( HANDLE hContact, const char* line1, const char* line2, int flag ppd->iSeconds = timeout;
ppd->PluginWindowProc = ( WNDPROC )NullWindowProc;
- ppd->PluginData = (void *)flags;
+ ppd->PluginData = malloc(sizeof(PopupDataType));
+ ((PopupDataType*)ppd->PluginData)->flags = flags;
+ ((PopupDataType*)ppd->PluginData)->hIcon = ppd->lchIcon;
QueueUserAPC( sttPopupProcA , mainThread, ( ULONG )ppd );
}
@@ -161,7 +175,7 @@ void ShowPopupW( HANDLE hContact, const wchar_t* line1, const wchar_t* line2, in memset((void *)ppd, 0, sizeof(POPUPDATAW));
ppd->lchContact = hContact;
- ppd->lchIcon = hIconCheck;
+ ppd->lchIcon = LoadIconEx(I_CHKUPD);
if(line1 && line2) {
wcscpy( ppd->lpwzContactName, line1 );
@@ -188,7 +202,9 @@ void ShowPopupW( HANDLE hContact, const wchar_t* line1, const wchar_t* line2, in ppd->iSeconds = timeout;
ppd->PluginWindowProc = ( WNDPROC )NullWindowProc;
- ppd->PluginData = (void *)flags;
+ ppd->PluginData = malloc(sizeof(PopupDataType));
+ ((PopupDataType*)ppd->PluginData)->flags = flags;
+ ((PopupDataType*)ppd->PluginData)->hIcon = ppd->lchIcon;
QueueUserAPC( sttPopupProcW , mainThread, ( ULONG )ppd );
@@ -279,3 +295,4 @@ void DeinitPopups() { CloseHandle(hEventPop);
}
+
|