// Removes an event from the contact list's queue // wParam=(WPARAM)(HANDLE)hContact // lParam=(LPARAM)(HANDLE)hDbEvent // Returns 0 if the event was successfully removed, or nonzero if the event was not found int RemoveEvent(HANDLE hContact, HANDLE hDbEvent) { HANDLE hItem; int i; BOOL bUnstick = TRUE; // Find the event that should be removed for (i = 0; i < pcli->events.count; i++) { if ((pcli->events.items[i]->cle.hContact == hContact) && (pcli->events.items[i]->cle.hDbEvent == hDbEvent)) { break; } } // Event was not found if (i == pcli->events.count) return 1; // remove event from the notify menu if (1) { if (pcli->events.items[i]->menuId > 0) { MENUITEMINFO mii = {0}; mii.cbSize = sizeof(mii); mii.fMask = MIIM_DATA; if (GetMenuItemInfo(cfg::dat.hMenuNotify, pcli->events.items[i]->menuId, FALSE, &mii) != 0) { struct NotifyMenuItemExData *nmi = (struct NotifyMenuItemExData *) mii.dwItemData; if (nmi && nmi->hContact == hContact && nmi->hDbEvent == hDbEvent) { free(nmi); DeleteMenu(cfg::dat.hMenuNotify, pcli->events.items[i]->menuId, MF_BYCOMMAND); } } } } saveRemoveEvent(hContact, hDbEvent); if (pcli->events.count == 0) { cfg::dat.bEventAreaEnabled = FALSE; if (cfg::dat.dwFlags & CLUI_FRAME_AUTOHIDENOTIFY) { cfg::dat.notifyActive = 0; HideShowNotifyFrame(); } } if (bUnstick) { // clear "sticky" (sort) status hItem = (HANDLE) SendMessage(pcli->hwndContactTree, CLM_FINDCONTACT, (WPARAM)hContact, 0); if (hItem) { SendMessage(pcli->hwndContactTree, CLM_SETSTICKY, (WPARAM) hItem, 0); pcli->pfnClcBroadcast(INTM_PROTOCHANGED, (WPARAM)hContact, 0); } } if (hContact == cfg::dat.hUpdateContact || (INT_PTR)hDbEvent == 1) cfg::dat.hUpdateContact = 0; if (cfg::dat.notifyActive) { InvalidateRect(hwndEventFrame, NULL, FALSE); if(cfg::dat.bUseFloater & CLUI_USE_FLOATER && cfg::dat.bUseFloater & CLUI_FLOATER_EVENTS) SFL_Update(0, 0, 0, NULL, FALSE); } return 0; }
// Removes an event from the contact list's queue // wParam=(MCONTACT)hContact // lParam=(LPARAM)(HANDLE)hDbEvent // Returns 0 if the event was successfully removed, or nonzero if the event was not found int RemoveEvent(MCONTACT hContact, MEVENT hDbEvent) { // Find the event that should be removed int i; for (i = 0; i < pcli->events->getCount(); i++) { CListEvent &e = (*pcli->events)[i]; if (e.hContact == hContact && e.hDbEvent == hDbEvent) break; } // Event was not found if (i == pcli->events->getCount()) return 1; // remove event from the notify menu int iMenuId = (*pcli->events)[i].menuId; if (iMenuId > 0) { MENUITEMINFO mii = { 0 }; mii.cbSize = sizeof(mii); mii.fMask = MIIM_DATA; if (GetMenuItemInfo(cfg::dat.hMenuNotify, iMenuId, FALSE, &mii) != 0) { struct NotifyMenuItemExData *nmi = (struct NotifyMenuItemExData *) mii.dwItemData; if (nmi && nmi->hContact == hContact && nmi->hDbEvent == hDbEvent) { free(nmi); DeleteMenu(cfg::dat.hMenuNotify, iMenuId, MF_BYCOMMAND); } } } int res = coreCli.pfnRemoveEvent(hContact, hDbEvent); if (pcli->events->getCount() == 0) { cfg::dat.bEventAreaEnabled = FALSE; if (cfg::dat.dwFlags & CLUI_FRAME_AUTOHIDENOTIFY) { cfg::dat.notifyActive = 0; HideShowNotifyFrame(); } } // clear "sticky" (sort) status HANDLE hItem = (HANDLE)SendMessage(pcli->hwndContactTree, CLM_FINDCONTACT, hContact, 0); if (hItem) { SendMessage(pcli->hwndContactTree, CLM_SETSTICKY, (WPARAM)hItem, 0); pcli->pfnClcBroadcast(INTM_PROTOCHANGED, hContact, 0); } if (hContact == cfg::dat.hUpdateContact || (INT_PTR)hDbEvent == 1) cfg::dat.hUpdateContact = 0; if (cfg::dat.notifyActive) InvalidateRect(hwndEventFrame, NULL, FALSE); return res; }
INT_PTR CALLBACK DlgProcGenOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_USER+1: { HANDLE hContact = (HANDLE) wParam; DBCONTACTWRITESETTING *ws = (DBCONTACTWRITESETTING *) lParam; if (hContact == NULL && ws != NULL && ws->szModule != NULL && ws->szSetting != NULL && lstrcmpiA(ws->szModule, "CList") == 0 && lstrcmpiA(ws->szSetting, "UseGroups") == 0 && IsWindowVisible(hwndDlg)) { CheckDlgButton(hwndDlg, IDC_DISABLEGROUPS, ws->value.bVal == 0); } break; } case WM_DESTROY: UnhookEvent((HANDLE) GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); break; case WM_INITDIALOG: opt_gen_opts_changed = 0; TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR) HookEventMessage(ME_DB_CONTACT_SETTINGCHANGED, hwndDlg, WM_USER + 1)); CheckDlgButton(hwndDlg, IDC_ONTOP, cfg::getByte("CList", "OnTop", SETTING_ONTOP_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_HIDEOFFLINE, cfg::getByte(NULL, "CList", "HideOffline", SETTING_HIDEOFFLINE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_HIDEEMPTYGROUPS, cfg::getByte("CList", "HideEmptyGroups", SETTING_HIDEEMPTYGROUPS_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_DISABLEGROUPS, cfg::getByte("CList", "UseGroups", SETTING_USEGROUPS_DEFAULT) ? BST_UNCHECKED : BST_CHECKED); CheckDlgButton(hwndDlg, IDC_CONFIRMDELETE, cfg::getByte("CList", "ConfirmDelete", SETTING_CONFIRMDELETE_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); { DWORD caps = CallService(MS_CLUI_GETCAPS, CLUICAPS_FLAGS1, 0); if (!(caps & CLUIF_HIDEEMPTYGROUPS)) ShowWindow(GetDlgItem(hwndDlg, IDC_HIDEEMPTYGROUPS), SW_HIDE); if (!(caps & CLUIF_DISABLEGROUPS)) ShowWindow(GetDlgItem(hwndDlg, IDC_DISABLEGROUPS), SW_HIDE); if (caps & CLUIF_HASONTOPOPTION) ShowWindow(GetDlgItem(hwndDlg, IDC_ONTOP), SW_HIDE); if (caps & CLUIF_HASAUTOHIDEOPTION) { } } CheckDlgButton(hwndDlg, IDC_SHOWBUTTONBAR, cfg::dat.dwFlags & CLUI_FRAME_SHOWTOPBUTTONS); CheckDlgButton(hwndDlg, IDC_SHOWBOTTOMBUTTONS, cfg::dat.dwFlags & CLUI_FRAME_SHOWBOTTOMBUTTONS); CheckDlgButton(hwndDlg, IDC_CLISTSUNKEN, cfg::dat.dwFlags & CLUI_FRAME_CLISTSUNKEN); CheckDlgButton(hwndDlg, IDC_EVENTAREAAUTOHIDE, cfg::dat.dwFlags & CLUI_FRAME_AUTOHIDENOTIFY); CheckDlgButton(hwndDlg, IDC_EVENTAREASUNKEN, (cfg::dat.dwFlags & CLUI_FRAME_EVENTAREASUNKEN) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_ONECLK, cfg::getByte("CList", "Tray1Click", SETTING_TRAY1CLICK_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_ALWAYSSTATUS, cfg::getByte("CList", "AlwaysStatus", SETTING_ALWAYSSTATUS_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_ALWAYSMULTI, !cfg::getByte("CList", "AlwaysMulti", SETTING_ALWAYSMULTI_DEFAULT) ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_DONTCYCLE, cfg::getByte("CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_SINGLE ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_CYCLE, cfg::getByte("CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_CYCLE ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_MULTITRAY, cfg::getByte("CList", "TrayIcon", SETTING_TRAYICON_DEFAULT) == SETTING_TRAYICON_MULTI ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_DISABLEBLINK, cfg::getByte("CList", "DisableTrayFlash", 0) == 1 ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hwndDlg, IDC_ICONBLINK, cfg::getByte("CList", "NoIconBlink", 0) == 1 ? BST_CHECKED : BST_UNCHECKED); if (IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE)) { Utils::enableDlgControl(hwndDlg, IDC_CYCLETIMESPIN, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CYCLETIME, FALSE); Utils::enableDlgControl(hwndDlg, IDC_ALWAYSMULTI, FALSE); } if (IsDlgButtonChecked(hwndDlg, IDC_CYCLE)) { Utils::enableDlgControl(hwndDlg, IDC_PRIMARYSTATUS, FALSE); Utils::enableDlgControl(hwndDlg, IDC_ALWAYSMULTI, FALSE); } if (IsDlgButtonChecked(hwndDlg, IDC_MULTITRAY)) { Utils::enableDlgControl(hwndDlg, IDC_CYCLETIMESPIN, FALSE); Utils::enableDlgControl(hwndDlg, IDC_CYCLETIME, FALSE); Utils::enableDlgControl(hwndDlg, IDC_PRIMARYSTATUS, FALSE); } SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_SETRANGE, 0, MAKELONG(120, 1)); SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_SETPOS, 0, MAKELONG(cfg::getWord("CList", "CycleTime", SETTING_CYCLETIME_DEFAULT), 0)); { int i, count, item; PROTOACCOUNT **accs; DBVARIANT dbv = { DBVT_DELETED }; DBGetContactSetting(NULL, "CList", "PrimaryStatus", &dbv); ProtoEnumAccounts( &count, &accs ); item = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_ADDSTRING, 0, (LPARAM) TranslateT("Global")); SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETITEMDATA, item, (LPARAM) 0); for (i = 0; i < count; i++) { if ( !IsAccountEnabled(accs[i]) || CallProtoService(accs[i]->szModuleName, PS_GETCAPS, PFLAGNUM_2, 0) == 0) continue; item = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_ADDSTRING, 0, (LPARAM) accs[i]->tszAccountName); SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETITEMDATA, item, (LPARAM)accs[i] ); if (dbv.type == DBVT_ASCIIZ && !lstrcmpA(dbv.pszVal, accs[i]->szModuleName )) SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETCURSEL, item, 0); } } if (-1 == (int) SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETCURSEL, 0, 0)) SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_SETCURSEL, 0, 0); SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETBUDDY, (WPARAM) GetDlgItem(hwndDlg, IDC_BLINKTIME), 0); // set buddy SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETRANGE, 0, MAKELONG(0x3FFF, 250)); SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_SETPOS, 0, MAKELONG(cfg::getWord("CList", "IconFlashTime", 550), 0)); CheckDlgButton(hwndDlg, IDC_NOTRAYINFOTIPS, cfg::dat.bNoTrayTips ? 1 : 0); CheckDlgButton(hwndDlg, IDC_APPLYLASTVIEWMODE, cfg::getByte("CList", "AutoApplyLastViewMode", 0) ? 1 : 0); return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDC_DONTCYCLE || LOWORD(wParam) == IDC_CYCLE || LOWORD(wParam) == IDC_MULTITRAY) { Utils::enableDlgControl(hwndDlg, IDC_PRIMARYSTATUS, IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE)); Utils::enableDlgControl(hwndDlg, IDC_CYCLETIME, IsDlgButtonChecked(hwndDlg, IDC_CYCLE)); Utils::enableDlgControl(hwndDlg, IDC_CYCLETIMESPIN, IsDlgButtonChecked(hwndDlg, IDC_CYCLE)); Utils::enableDlgControl(hwndDlg, IDC_ALWAYSMULTI, IsDlgButtonChecked(hwndDlg, IDC_MULTITRAY)); } if ((LOWORD(wParam) == IDC_CYCLETIME) && HIWORD(wParam) != EN_CHANGE) break; if (LOWORD(wParam) == IDC_PRIMARYSTATUS && HIWORD(wParam) != CBN_SELCHANGE) break; if ((LOWORD(wParam) == IDC_CYCLETIME) && (HIWORD(wParam) != EN_CHANGE || (HWND) lParam != GetFocus())) return 0; if (LOWORD(wParam) == IDC_BLINKTIME && HIWORD(wParam) != EN_CHANGE || (HWND) lParam != GetFocus()) return 0; // dont make apply enabled during buddy set crap SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); opt_gen_opts_changed = TRUE; break; case WM_NOTIFY: switch (((LPNMHDR) lParam)->idFrom) { case 0: switch (((LPNMHDR) lParam)->code) { case PSN_APPLY: if(!opt_gen_opts_changed) return TRUE; cfg::writeByte("CList", "HideOffline", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_HIDEOFFLINE)); { DWORD caps = CallService(MS_CLUI_GETCAPS, CLUICAPS_FLAGS1, 0); if (caps & CLUIF_HIDEEMPTYGROUPS) cfg::writeByte("CList", "HideEmptyGroups", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_HIDEEMPTYGROUPS)); if (caps & CLUIF_DISABLEGROUPS) cfg::writeByte("CList", "UseGroups", (BYTE) ! IsDlgButtonChecked(hwndDlg, IDC_DISABLEGROUPS)); if (!(caps & CLUIF_HASONTOPOPTION)) { cfg::writeByte("CList", "OnTop", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ONTOP)); SetWindowPos(pcli->hwndContactList, IsDlgButtonChecked(hwndDlg, IDC_ONTOP) ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } if (!(caps & CLUIF_HASAUTOHIDEOPTION)) { } } cfg::writeByte("CList", "ConfirmDelete", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_CONFIRMDELETE)); cfg::writeByte("CList", "Tray1Click", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ONECLK)); cfg::writeByte("CList", "AlwaysStatus", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ALWAYSSTATUS)); cfg::writeByte("CList", "AlwaysMulti", (BYTE) ! IsDlgButtonChecked(hwndDlg, IDC_ALWAYSMULTI)); cfg::writeByte("CList", "TrayIcon", (BYTE) (IsDlgButtonChecked(hwndDlg, IDC_DONTCYCLE) ? SETTING_TRAYICON_SINGLE : (IsDlgButtonChecked(hwndDlg, IDC_CYCLE) ? SETTING_TRAYICON_CYCLE : SETTING_TRAYICON_MULTI))); cfg::writeWord("CList", "CycleTime", (WORD) SendDlgItemMessage(hwndDlg, IDC_CYCLETIMESPIN, UDM_GETPOS, 0, 0)); cfg::writeWord("CList", "IconFlashTime", (WORD) SendDlgItemMessage(hwndDlg, IDC_BLINKSPIN, UDM_GETPOS, 0, 0)); cfg::writeByte("CList", "DisableTrayFlash", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_DISABLEBLINK)); cfg::writeByte("CList", "NoIconBlink", (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ICONBLINK)); cfg::writeByte("CList", "AutoApplyLastViewMode", (BYTE)IsDlgButtonChecked(hwndDlg, IDC_APPLYLASTVIEWMODE)); __setFlag(CLUI_FRAME_EVENTAREASUNKEN, IsDlgButtonChecked(hwndDlg, IDC_EVENTAREASUNKEN)); __setFlag(CLUI_FRAME_AUTOHIDENOTIFY, IsDlgButtonChecked(hwndDlg, IDC_EVENTAREAAUTOHIDE)); __setFlag(CLUI_FRAME_SHOWTOPBUTTONS, IsDlgButtonChecked(hwndDlg, IDC_SHOWBUTTONBAR)); __setFlag(CLUI_FRAME_SHOWBOTTOMBUTTONS, IsDlgButtonChecked(hwndDlg, IDC_SHOWBOTTOMBUTTONS)); __setFlag(CLUI_FRAME_CLISTSUNKEN, IsDlgButtonChecked(hwndDlg, IDC_CLISTSUNKEN)); cfg::dat.bNoTrayTips = IsDlgButtonChecked(hwndDlg, IDC_NOTRAYINFOTIPS) ? 1 : 0; cfg::writeByte("CList", "NoTrayTips", (BYTE)cfg::dat.bNoTrayTips); { int cursel = SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETCURSEL, 0, 0); PROTOACCOUNT* pa = (PROTOACCOUNT*)SendDlgItemMessage(hwndDlg, IDC_PRIMARYSTATUS, CB_GETITEMDATA, cursel, 0); if ( !pa ) DBDeleteContactSetting(NULL, "CList", "PrimaryStatus"); else cfg::writeString(NULL, "CList", "PrimaryStatus", pa->szModuleName ); } pcli->pfnTrayIconIconsChanged(); cfg::writeDword("CLUI", "Frameflags", cfg::dat.dwFlags); ConfigureFrame(); ConfigureCLUIGeometry(1); ConfigureEventArea(pcli->hwndContactList); HideShowNotifyFrame(); SendMessage(pcli->hwndContactTree, WM_SIZE, 0, 0); SendMessage(pcli->hwndContactList, WM_SIZE, 0, 0); LoadContactTree(); /* this won't do job properly since it only really works when changes happen */ pcli->pfnClcBroadcast(CLM_AUTOREBUILD, 0, 0); PostMessage(pcli->hwndContactList, CLUIINTM_REDRAW, 0, 0); opt_gen_opts_changed = 0; return TRUE; } break; } break; } return FALSE; }
CListEvent* AddEvent(CLISTEVENT *cle) { CListEvent *p = coreCli.pfnAddEvent(cle); if (p == NULL) return NULL; if (p->cle.hContact != 0 && p->cle.hDbEvent != 1 && !(p->cle.flags & CLEF_ONLYAFEW)) { MENUITEMINFO mii = { 0 }; mii.cbSize = sizeof(mii); mii.fMask = MIIM_DATA | MIIM_BITMAP | MIIM_ID; if (p->cle.pszService && !strncmp("SRMsg/ReadMessage", p->cle.pszService, 17)) { // dup check only for msg events for (int j = 0; j < GetMenuItemCount(cfg::dat.hMenuNotify); j++) { if (GetMenuItemInfo(cfg::dat.hMenuNotify, j, TRUE, &mii) != 0) { NotifyMenuItemExData *nmi = (NotifyMenuItemExData*)mii.dwItemData; if (nmi != 0 && (HANDLE)nmi->hContact == (HANDLE)p->cle.hContact && nmi->iIcon == p->imlIconIndex) return p; } } } char *szProto = GetContactProto(p->cle.hContact); TCHAR *szName = pcli->pfnGetContactDisplayName(p->cle.hContact, 0); if (szProto && szName) { NotifyMenuItemExData *nmi = (NotifyMenuItemExData*)malloc(sizeof(NotifyMenuItemExData)); if (nmi) { TCHAR szBuffer[128]; TCHAR* szStatus = pcli->pfnGetStatusModeDescription(cfg::getWord(p->cle.hContact, szProto, "Status", ID_STATUS_OFFLINE), 0); TCHAR szwProto[64]; MultiByteToWideChar(CP_ACP, 0, szProto, -1, szwProto, 64); szwProto[63] = 0; mir_sntprintf(szBuffer, _T("%s: %s (%s)"), szwProto, szName, szStatus); szBuffer[127] = 0; AppendMenu(cfg::dat.hMenuNotify, MF_BYCOMMAND | MF_STRING, cfg::dat.wNextMenuID, szBuffer); mii.hbmpItem = HBMMENU_CALLBACK; nmi->hContact = p->cle.hContact; nmi->iIcon = p->imlIconIndex; nmi->hIcon = p->cle.hIcon; nmi->hDbEvent = p->cle.hDbEvent; mii.dwItemData = (ULONG_PTR)nmi; mii.wID = cfg::dat.wNextMenuID; SetMenuItemInfo(cfg::dat.hMenuNotify, cfg::dat.wNextMenuID, FALSE, &mii); p->menuId = cfg::dat.wNextMenuID; cfg::dat.wNextMenuID++; if (cfg::dat.wNextMenuID > 0x7fff) cfg::dat.wNextMenuID = 1; cfg::dat.hIconNotify = p->imlIconIndex; } } } else if (p->cle.hContact != 0 && (p->cle.flags & CLEF_ONLYAFEW)) { cfg::dat.hIconNotify = p->imlIconIndex; cfg::dat.hUpdateContact = p->cle.hContact; } if (cfg::dat.dwFlags & CLUI_STICKYEVENTS) { HANDLE hItem = (HANDLE)SendMessage(pcli->hwndContactTree, CLM_FINDCONTACT, (WPARAM)p->cle.hContact, 0); if (hItem) { SendMessage(pcli->hwndContactTree, CLM_SETSTICKY, (WPARAM)hItem, 1); pcli->pfnClcBroadcast(INTM_PROTOCHANGED, (WPARAM)p->cle.hContact, 0); } } if (pcli->events.count > 0) { cfg::dat.bEventAreaEnabled = TRUE; if (cfg::dat.notifyActive == 0) { cfg::dat.notifyActive = 1; HideShowNotifyFrame(); } } InvalidateRect(hwndEventFrame, NULL, FALSE); return p; }