summaryrefslogtreecommitdiff
path: root/updater/popups.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'updater/popups.cpp')
-rw-r--r--updater/popups.cpp151
1 files changed, 93 insertions, 58 deletions
diff --git a/updater/popups.cpp b/updater/popups.cpp
index addcf60..813d58c 100644
--- a/updater/popups.cpp
+++ b/updater/popups.cpp
@@ -52,7 +52,7 @@ LRESULT CALLBACK NullWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM
if ((unsigned)popup != CALLSERVICE_NOTFOUND)
{
if (popup->flags & POPFLAG_SAVEHWND) hwndPop = 0;
- ReleaseIconEx(popup->hIcon);
+ if(popup->hIcon) ReleaseIconEx(popup->hIcon);
free(popup);
}
return TRUE;
@@ -109,42 +109,53 @@ void ShowPopupA( HANDLE hContact, const char* line1, const char* line2, int flag
SetEvent(hEventPop);
ResetEvent(hEventPop);
- POPUPDATAEX* ppd = ( POPUPDATAEX* )malloc( sizeof( POPUPDATAEX ));
- memset((void *)ppd, 0, sizeof(POPUPDATAEX));
+ if(ServiceExists(MS_POPUP_ADDPOPUPCLASS)) {
+ POPUPDATACLASS d = {sizeof(d), "updaterpopups"};
+ d.pszTitle = (char *)line1;
+ d.pszText = (char *)line2;
+ d.PluginData = malloc(sizeof(PopupDataType));
+ ((PopupDataType*)d.PluginData)->flags = flags;
+ ((PopupDataType*)d.PluginData)->hIcon = 0;
+ CallService(MS_POPUP_ADDPOPUPCLASS, 0, (LPARAM)&d);
+ } else {
- ppd->lchContact = hContact;
- ppd->lchIcon = LoadIconEx(I_CHKUPD);
+ POPUPDATAEX* ppd = ( POPUPDATAEX* )malloc( sizeof( POPUPDATAEX ));
+ memset((void *)ppd, 0, sizeof(POPUPDATAEX));
- if(line1 && line2) {
- strcpy( ppd->lpzContactName, line1 );
- strcpy( ppd->lpzText, line2 );
- } else {
- if(line1) {
- strcpy( ppd->lpzText, line1 );
+ ppd->lchContact = hContact;
+ ppd->lchIcon = LoadIconEx(I_CHKUPD);
+
+ if(line1 && line2) {
+ strcpy( ppd->lpzContactName, line1 );
+ strcpy( ppd->lpzText, line2 );
} else {
- if(line2)
- strcpy( ppd->lpzText, line2 );
+ if(line1) {
+ strcpy( ppd->lpzText, line1 );
+ } else {
+ if(line2)
+ strcpy( ppd->lpzText, line2 );
+ }
}
- }
- if(options.set_colours) {
- ppd->colorBack = options.bkCol;
- ppd->colorText = options.textCol;
- } else {
- //ppd->colorText = 0x00FFFFFF; // otherwise old popups are black on black
- ppd->colorText = 0;
- //ppd->colorBack = POPUP_USE_SKINNED_BG;
- ppd->colorBack = 0;
- }
+ if(options.set_colours) {
+ ppd->colorBack = options.bkCol;
+ ppd->colorText = options.textCol;
+ } else {
+ //ppd->colorText = 0x00FFFFFF; // otherwise old popups are black on black
+ ppd->colorText = 0;
+ //ppd->colorBack = POPUP_USE_SKINNED_BG;
+ ppd->colorBack = 0;
+ }
- ppd->iSeconds = timeout;
+ ppd->iSeconds = timeout;
- ppd->PluginWindowProc = ( WNDPROC )NullWindowProc;
- ppd->PluginData = malloc(sizeof(PopupDataType));
- ((PopupDataType*)ppd->PluginData)->flags = flags;
- ((PopupDataType*)ppd->PluginData)->hIcon = ppd->lchIcon;
+ ppd->PluginWindowProc = ( WNDPROC )NullWindowProc;
+ ppd->PluginData = malloc(sizeof(PopupDataType));
+ ((PopupDataType*)ppd->PluginData)->flags = flags;
+ ((PopupDataType*)ppd->PluginData)->hIcon = ppd->lchIcon;
- QueueUserAPC( sttPopupProcA , mainThread, ( ULONG )ppd );
+ QueueUserAPC( sttPopupProcA , mainThread, ( ULONG )ppd );
+ }
}
void ShowPopupW( HANDLE hContact, const wchar_t* line1, const wchar_t* line2, int flags, int timeout )
@@ -171,43 +182,52 @@ void ShowPopupW( HANDLE hContact, const wchar_t* line1, const wchar_t* line2, in
SetEvent(hEventPop);
ResetEvent(hEventPop);
- POPUPDATAW* ppd = ( POPUPDATAW* )malloc( sizeof( POPUPDATAW ));
- memset((void *)ppd, 0, sizeof(POPUPDATAW));
+ if(ServiceExists(MS_POPUP_ADDPOPUPCLASS)) {
+ POPUPDATACLASS d = {sizeof(d), "updaterpopups"};
+ d.pwszTitle = (wchar_t *)line1;
+ d.pwszText = (wchar_t *)line2;
+ d.PluginData = malloc(sizeof(PopupDataType));
+ ((PopupDataType*)d.PluginData)->flags = flags;
+ ((PopupDataType*)d.PluginData)->hIcon = 0;
+ CallService(MS_POPUP_ADDPOPUPCLASS, 0, (LPARAM)&d);
+ } else {
+ POPUPDATAW* ppd = ( POPUPDATAW* )malloc( sizeof( POPUPDATAW ));
+ memset((void *)ppd, 0, sizeof(POPUPDATAW));
- ppd->lchContact = hContact;
- ppd->lchIcon = LoadIconEx(I_CHKUPD);
+ ppd->lchContact = hContact;
+ ppd->lchIcon = LoadIconEx(I_CHKUPD);
- if(line1 && line2) {
- wcscpy( ppd->lpwzContactName, line1 );
- wcscpy( ppd->lpwzText, line2 );
- } else {
- if(line1) {
- wcscpy( ppd->lpwzText, line1 );
+ if(line1 && line2) {
+ wcscpy( ppd->lpwzContactName, line1 );
+ wcscpy( ppd->lpwzText, line2 );
} else {
- if(line2)
- wcscpy( ppd->lpwzText, line2 );
+ if(line1) {
+ wcscpy( ppd->lpwzText, line1 );
+ } else {
+ if(line2)
+ wcscpy( ppd->lpwzText, line2 );
+ }
}
- }
-
- if(options.set_colours) {
- ppd->colorBack = options.bkCol;
- ppd->colorText = options.textCol;
- } else {
- //ppd->colorText = 0x00FFFFFF;
- ppd->colorText = 0;
- //ppd->colorBack = POPUP_USE_SKINNED_BG;
- ppd->colorBack = 0;
- }
- ppd->iSeconds = timeout;
+ if(options.set_colours) {
+ ppd->colorBack = options.bkCol;
+ ppd->colorText = options.textCol;
+ } else {
+ //ppd->colorText = 0x00FFFFFF;
+ ppd->colorText = 0;
+ //ppd->colorBack = POPUP_USE_SKINNED_BG;
+ ppd->colorBack = 0;
+ }
- ppd->PluginWindowProc = ( WNDPROC )NullWindowProc;
- ppd->PluginData = malloc(sizeof(PopupDataType));
- ((PopupDataType*)ppd->PluginData)->flags = flags;
- ((PopupDataType*)ppd->PluginData)->hIcon = ppd->lchIcon;
+ ppd->iSeconds = timeout;
- QueueUserAPC( sttPopupProcW , mainThread, ( ULONG )ppd );
+ ppd->PluginWindowProc = ( WNDPROC )NullWindowProc;
+ ppd->PluginData = malloc(sizeof(PopupDataType));
+ ((PopupDataType*)ppd->PluginData)->flags = flags;
+ ((PopupDataType*)ppd->PluginData)->hIcon = ppd->lchIcon;
+ QueueUserAPC( sttPopupProcW , mainThread, ( ULONG )ppd );
+ }
}
void ShowWarning(TCHAR *msg) {
@@ -285,14 +305,29 @@ bool ArePopupsEnabled() {
return bPopupsEnabled;
}
+HICON hPopupIcon;
void InitPopups() {
bPopupsEnabled = (ServiceExists(MS_POPUP_ADDPOPUP) == 0 && ServiceExists(MS_POPUP_ADDPOPUPW) == 0 ? false : true);
hEventPop = CreateEvent( NULL, TRUE, FALSE, NULL );
+
+ if(ServiceExists(MS_POPUP_ADDPOPUPCLASS)) {
+ hPopupIcon = LoadIconEx(I_CHKUPD);
+ POPUPCLASS test = {0};
+ test.cbSize = sizeof(test);
+ test.flags = PCF_TCHAR;
+ test.hIcon = hPopupIcon;
+ test.iSeconds = -1;
+ test.ptszDescription = TranslateT("Updater");
+ test.pszName = "updaterpopups";
+ test.PluginWindowProc = NullWindowProc;
+ CallService(MS_POPUP_REGISTERCLASS, 0, (WPARAM)&test);
+ }
}
void DeinitPopups() {
CloseHandle(hEventPop);
+ ReleaseIconEx(hPopupIcon);
}