From 9536e0bb47b12ea2ae01ab070dd9f6aa5bb360c2 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 29 Dec 2023 17:03:21 +0300 Subject: =?UTF-8?q?fixes=20#4085=20(=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=B2=D0=B8=D0=B4=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/stdmsg/src/msgdialog.cpp | 7 - src/mir_app/mir_app.vcxproj | 1 - src/mir_app/mir_app.vcxproj.filters | 3 - src/mir_app/res/resource.rc | 13 -- src/mir_app/src/mir_app.def | 1 - src/mir_app/src/mir_app64.def | 1 - src/mir_app/src/modules.cpp | 2 - src/mir_app/src/proto_interface.cpp | 5 - src/mir_app/src/proto_internal.cpp | 6 - src/mir_app/src/protocols.cpp | 2 - src/mir_app/src/resource.h | 2 - src/mir_app/src/visibility.cpp | 289 ------------------------------------ 12 files changed, 332 deletions(-) delete mode 100644 src/mir_app/src/visibility.cpp (limited to 'src') diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index 4c13ced6be..30acf7bd06 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -1376,13 +1376,6 @@ void CMsgDialog::NotifyTyping(int mode) Chat_DoEventHook(m_si, GC_USER_TYPNOTIFY, 0, 0, m_nTypeMode); } else { - uint32_t protoCaps = CallProtoService(m_szProto, PS_GETCAPS, PFLAGNUM_1, 0); - if (protoCaps & PF1_VISLIST && db_get_w(m_hContact, m_szProto, "ApparentMode", 0) == ID_STATUS_OFFLINE) - return; - - if (protoCaps & PF1_INVISLIST && protoStatus == ID_STATUS_INVISIBLE && db_get_w(m_hContact, m_szProto, "ApparentMode", 0) != ID_STATUS_ONLINE) - return; - if (!g_plugin.bTypingUnknown && !Contact::OnList(m_hContact)) return; diff --git a/src/mir_app/mir_app.vcxproj b/src/mir_app/mir_app.vcxproj index fa8e33adfb..4cecba6fe2 100644 --- a/src/mir_app/mir_app.vcxproj +++ b/src/mir_app/mir_app.vcxproj @@ -169,7 +169,6 @@ - diff --git a/src/mir_app/mir_app.vcxproj.filters b/src/mir_app/mir_app.vcxproj.filters index bcc2243516..b1c74d0b08 100644 --- a/src/mir_app/mir_app.vcxproj.filters +++ b/src/mir_app/mir_app.vcxproj.filters @@ -107,9 +107,6 @@ Source Files - - Source Files - Source Files diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 64f519d355..bc272747c6 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -297,19 +297,6 @@ BEGIN LTEXT "Typing",IDC_STATIC,241,178,66,8,SS_NOPREFIX | SS_CENTERIMAGE END -IDD_OPT_VISIBILITY DIALOGEX 0, 0, 313, 240 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD -EXSTYLE WS_EX_CONTROLPARENT -FONT 8, "MS Shell Dlg", 0, 0, 0x1 -BEGIN - GROUPBOX "Visibility",IDC_STATIC,0,0,313,240 - CONTROL "",IDC_LIST,"CListControl",WS_TABSTOP | 0x1d0,8,14,297,183,WS_EX_CLIENTEDGE - ICON IDI_ONLINE,IDC_VISIBLEICON,8,203,20,20,SS_CENTERIMAGE - LTEXT "You are visible to this person even when in invisible mode",IDC_STATIC,26,209,279,8,SS_NOPREFIX | SS_CENTERIMAGE - ICON IDI_INVISIBLE,IDC_INVISIBLEICON,8,218,20,20,SS_CENTERIMAGE - LTEXT "You are never visible to this person",IDC_STATIC,26,224,279,8,SS_NOPREFIX | SS_CENTERIMAGE -END - IDD_ICONINDEX DIALOGEX 0, 0, 219, 197 STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_CONTROLPARENT diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 8f84e99e5e..4152581314 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -64,7 +64,6 @@ Button_SetSkin_IcoLib @24 ?SendContacts@PROTO_INTERFACE@@UAEHIHHPAI@Z @66 NONAME ?SendFile@PROTO_INTERFACE@@UAEPAXIPB_WPAPA_W@Z @67 NONAME ?SendMsg@PROTO_INTERFACE@@UAEHIIPBD@Z @68 NONAME -?SetApparentMode@PROTO_INTERFACE@@UAEHIH@Z @70 NONAME ?SetAwayMsg@PROTO_INTERFACE@@UAEHHPB_W@Z @71 NONAME ?SetStatus@PROTO_INTERFACE@@UAEHH@Z @72 NONAME ?SetStatusText@CProtoIntDlgBase@@QAEXPB_W@Z @73 NONAME diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index 7eeea9080a..1adcdd89e3 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -64,7 +64,6 @@ Button_SetSkin_IcoLib @24 ?SendContacts@PROTO_INTERFACE@@UEAAHIHHPEAI@Z @66 NONAME ?SendFile@PROTO_INTERFACE@@UEAAPEAXIPEB_WPEAPEA_W@Z @67 NONAME ?SendMsg@PROTO_INTERFACE@@UEAAHIIPEBD@Z @68 NONAME -?SetApparentMode@PROTO_INTERFACE@@UEAAHIH@Z @70 NONAME ?SetAwayMsg@PROTO_INTERFACE@@UEAAHHPEB_W@Z @71 NONAME ?SetStatus@PROTO_INTERFACE@@UEAAHH@Z @72 NONAME ?SetStatusText@CProtoIntDlgBase@@QEAAXPEB_W@Z @73 NONAME diff --git a/src/mir_app/src/modules.cpp b/src/mir_app/src/modules.cpp index 199188a835..757fba4a6a 100644 --- a/src/mir_app/src/modules.cpp +++ b/src/mir_app/src/modules.cpp @@ -52,7 +52,6 @@ int LoadSkinIcons(void); int LoadSkinSounds(void); int LoadSkinHotkeys(void); int LoadUserInfoModule(void); // ui: user info -int LoadVisibilityModule(void); // ui: visibility control int LoadUtilsModule(void); // ui: utils (has a few window classes, like HyperLink) int LoadCLCModule(void); // window class: CLC control @@ -144,7 +143,6 @@ int LoadDefaultModules(void) // order becomes less important below here if (LoadFindAddModule()) return 1; if (LoadIgnoreModule()) return 1; - if (LoadVisibilityModule()) return 1; if (LoadIdleModule()) return 1; return 0; } diff --git a/src/mir_app/src/proto_interface.cpp b/src/mir_app/src/proto_interface.cpp index 3d783df392..43a6f43c2e 100644 --- a/src/mir_app/src/proto_interface.cpp +++ b/src/mir_app/src/proto_interface.cpp @@ -262,11 +262,6 @@ int PROTO_INTERFACE::SendMsg(MCONTACT, MEVENT, const char*) return 0; // error } -int PROTO_INTERFACE::SetApparentMode(MCONTACT, int) -{ - return 1; // error -} - int PROTO_INTERFACE::SetStatus(int) { return 1; // you better declare it diff --git a/src/mir_app/src/proto_internal.cpp b/src/mir_app/src/proto_internal.cpp index b876e221ea..9fc9c45fd7 100644 --- a/src/mir_app/src/proto_internal.cpp +++ b/src/mir_app/src/proto_internal.cpp @@ -215,12 +215,6 @@ struct DEFAULT_PROTO_INTERFACE : public PROTO_INTERFACE return (int)ProtoCallService(m_szModuleName, PSS_MESSAGE, 0, (LPARAM)&ccs); } - int SetApparentMode(MCONTACT hContact, int mode) override - { - CCSDATA ccs = { hContact, PSS_SETAPPARENTMODE, (WPARAM)mode, 0 }; - return (int)ProtoCallService(m_szModuleName, PSS_SETAPPARENTMODE, 0, (LPARAM)&ccs); - } - int SetStatus(int iNewStatus) override { return (int)ProtoCallService(m_szModuleName, PS_SETSTATUS, iNewStatus, 0); diff --git a/src/mir_app/src/protocols.cpp b/src/mir_app/src/protocols.cpp index 3da908709c..60e15595b3 100644 --- a/src/mir_app/src/protocols.cpp +++ b/src/mir_app/src/protocols.cpp @@ -67,7 +67,6 @@ static TServiceListItem serviceItems[] = { PSS_CONTACTS, 23 }, { PSS_FILE, 24 }, { PSS_MESSAGE, 25 }, - { PSS_SETAPPARENTMODE, 26 }, { PS_SETSTATUS, 27 }, { PSS_GETAWAYMSG, 28 }, { PSR_AWAYMSG, 29 }, @@ -432,7 +431,6 @@ MIR_APP_DLL(INT_PTR) CallContactService(MCONTACT hContact, const char *szModule, } return msgId; } - case 26: return (INT_PTR)ppi->SetApparentMode(hContact, wParam); case 27: return (INT_PTR)ppi->SetStatus(wParam); case 28: return (INT_PTR)ppi->GetAwayMsg(hContact); case 29: return (INT_PTR)ppi->RecvAwayMsg(hContact, wParam, (PROTORECVEVENT *)lParam); diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index b7f4337a30..db1ba527c4 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -354,8 +354,6 @@ #define IDC_PAGETREE 1186 #define IDC_RUNNOW 1186 #define IDC_GETMORE 1200 -#define IDC_VISIBLEICON 1204 -#define IDC_INVISIBLEICON 1205 #define IDC_FILEICON 1206 #define IDC_ONLINEICON 1207 #define IDC_FILENAMES 1208 diff --git a/src/mir_app/src/visibility.cpp b/src/mir_app/src/visibility.cpp deleted file mode 100644 index 8dab94d294..0000000000 --- a/src/mir_app/src/visibility.cpp +++ /dev/null @@ -1,289 +0,0 @@ -/* - -Miranda NG: the free IM client for Microsoft* Windows* - -Copyright (C) 2012-23 Miranda NG team (https://miranda-ng.org), -Copyright (c) 2000-12 Miranda IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "stdafx.h" - -static void SetListGroupIcons(HWND hwndList, HANDLE hFirstItem, HANDLE hParentItem, int *groupChildCount) -{ - int iconOn[2] = {1, 1}; - int childCount[2] = {0, 0}; - - int typeOfFirst = SendMessage(hwndList, CLM_GETITEMTYPE, (WPARAM)hFirstItem, 0); - //check groups - HANDLE hItem; - if (typeOfFirst == CLCIT_GROUP) - hItem = hFirstItem; - else - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hFirstItem); - - while (hItem) { - HANDLE hChildItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); - if (hChildItem) SetListGroupIcons(hwndList, hChildItem, hItem, childCount); - for (int i=0; i < _countof(iconOn); i++) - if (iconOn[i] && SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, i) == 0) iconOn[i] = 0; - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hItem); - } - //check contacts - if (typeOfFirst == CLCIT_CONTACT) - hItem = hFirstItem; - else - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hFirstItem); - while (hItem) { - for (int i = 0; i < _countof(iconOn); i++) { - int iImage = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, i); - if (iconOn[i] && iImage == 0) iconOn[i] = 0; - if (iImage != EMPTY_EXTRA_ICON) - childCount[i]++; - } - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hItem); - } - //set icons - for (int i = 0; i < _countof(iconOn); i++) { - SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hParentItem, MAKELPARAM(i, childCount[i] ? (iconOn[i] ? i + 1 : 0) : EMPTY_EXTRA_ICON)); - if (groupChildCount) groupChildCount[i] += childCount[i]; - } -} - -static void SetAllChildIcons(HWND hwndList, HANDLE hFirstItem, int iColumn, int iImage) -{ - int typeOfFirst = SendMessage(hwndList, CLM_GETITEMTYPE, (WPARAM)hFirstItem, 0); - //check groups - HANDLE hItem; - if (typeOfFirst == CLCIT_GROUP) - hItem = hFirstItem; - else - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hFirstItem); - while (hItem) { - HANDLE hChildItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); - if (hChildItem) - SetAllChildIcons(hwndList, hChildItem, iColumn, iImage); - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hItem); - } - //check contacts - if (typeOfFirst == CLCIT_CONTACT) - hItem = hFirstItem; - else - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hFirstItem); - while (hItem) { - int iOldIcon = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, iColumn); - if (iOldIcon != EMPTY_EXTRA_ICON && iOldIcon != iImage) - SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage)); - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hItem); - } -} - -static void ResetListOptions(HWND hwndList) -{ - SetWindowLongPtr(hwndList, GWL_STYLE, GetWindowLongPtr(hwndList, GWL_STYLE)|CLS_SHOWHIDDEN); -} - -static void SetAllContactIcons(HWND hwndList) -{ - for (auto &hContact : Contacts()) { - HANDLE hItem = (HANDLE)SendMessage(hwndList, CLM_FINDCONTACT, hContact, 0); - if (hItem == nullptr) - continue; - - uint32_t flags; - uint16_t status; - char *szProto = Proto_GetBaseAccountName(hContact); - if (szProto == nullptr) { - flags = 0; - status = 0; - } - else { - flags = CallContactService(0, szProto, PS_GETCAPS, PFLAGNUM_1, 0); - status = db_get_w(hContact, szProto, "ApparentMode", 0); - } - - if (flags & PF1_INVISLIST) - if (SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(0, 0)) == EMPTY_EXTRA_ICON) - SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(0, status == ID_STATUS_ONLINE ? 1 : 0)); - - if (flags & PF1_VISLIST) - if (SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(1, 0)) == EMPTY_EXTRA_ICON) - SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(1, status == ID_STATUS_OFFLINE ? 2 : 0)); - } -} - -static INT_PTR CALLBACK DlgProcVisibilityOpts(HWND hwndDlg, UINT msg, WPARAM, LPARAM lParam) -{ - static HICON hVisibleIcon, hInvisibleIcon; - static HANDLE hItemAll; - - HIMAGELIST hIml; - - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - - hIml = ImageList_Create(g_iIconSX, g_iIconSY, ILC_COLOR32 | ILC_MASK, 3, 3); - ImageList_AddSkinIcon(hIml, SKINICON_OTHER_SMALLDOT); - ImageList_AddSkinIcon(hIml, SKINICON_OTHER_VISIBLE_ALL); - ImageList_AddSkinIcon(hIml, SKINICON_OTHER_INVISIBLE_ALL); - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hIml); - hVisibleIcon = ImageList_GetIcon(hIml, 1, ILD_NORMAL); - SendDlgItemMessage(hwndDlg, IDC_VISIBLEICON, STM_SETICON, (WPARAM)hVisibleIcon, 0); - hInvisibleIcon = ImageList_GetIcon(hIml, 2, ILD_NORMAL); - SendDlgItemMessage(hwndDlg, IDC_INVISIBLEICON, STM_SETICON, (WPARAM)hInvisibleIcon, 0); - - ResetListOptions(GetDlgItem(hwndDlg, IDC_LIST)); - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRACOLUMNS, 2, 0); - { - CLCINFOITEM cii = { sizeof(cii) }; - cii.flags = CLCIIF_GROUPFONT; - cii.pszText = TranslateT("** All contacts **"); - hItemAll = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_ADDINFOITEM, 0, (LPARAM)&cii); - } - SetAllContactIcons(GetDlgItem(hwndDlg, IDC_LIST)); - SetListGroupIcons(GetDlgItem(hwndDlg, IDC_LIST), (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_ROOT, 0), hItemAll, nullptr); - return TRUE; - - case WM_SETFOCUS: - SetFocus(GetDlgItem(hwndDlg, IDC_LIST)); - break; - - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case IDC_LIST: - switch (((LPNMHDR)lParam)->code) { - case CLN_NEWCONTACT: - case CLN_LISTREBUILT: - SetAllContactIcons(GetDlgItem(hwndDlg, IDC_LIST)); - __fallthrough; - - case CLN_CONTACTMOVED: - SetListGroupIcons(GetDlgItem(hwndDlg, IDC_LIST), (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_ROOT, 0), hItemAll, nullptr); - break; - - case CLN_OPTIONSCHANGED: - ResetListOptions(GetDlgItem(hwndDlg, IDC_LIST)); - break; - - case NM_CLICK: - // Make sure we have an extra column - NMCLISTCONTROL *nm = (NMCLISTCONTROL*)lParam; - if (nm->iColumn == -1) - break; - - // Find clicked item - uint32_t hitFlags; - HANDLE hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_HITTEST, (WPARAM)&hitFlags, MAKELPARAM(nm->pt.x, nm->pt.y)); - if (hItem == nullptr) - break; - - // It was not a visbility icon - if (!(hitFlags & CLCHT_ONITEMEXTRA)) - break; - - // Get image in clicked column (0 = none, 1 = visible, 2 = invisible) - int iImage = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, 0)); - if (iImage == 0) - iImage = nm->iColumn + 1; - else if (iImage == 1 || iImage == 2) - iImage = 0; - - // Get item type (contact, group, etc...) - int itemType = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETITEMTYPE, (WPARAM)hItem, 0); - - // Update list, making sure that the options are mutually exclusive - if (itemType == CLCIT_CONTACT) { // A contact - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, iImage)); - if (iImage && SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn ? 0 : 1, 0)) != EMPTY_EXTRA_ICON) - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn ? 0 : 1, 0)); - } - else if (itemType == CLCIT_INFO) { // All Contacts - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn, iImage); - if (iImage) - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn ? 0 : 1, 0); - } - else if (itemType == CLCIT_GROUP) { // A group - hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); - if (hItem) { - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn, iImage); - if (iImage) - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn ? 0 : 1, 0); - } - } - // Update the all/none icons - SetListGroupIcons(GetDlgItem(hwndDlg, IDC_LIST), (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_ROOT, 0), hItemAll, nullptr); - - // Activate Apply button - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - } - break; - - case 0: - if (((LPNMHDR)lParam)->code == PSN_APPLY) { - for (auto &hContact : Contacts()) { - HANDLE hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_FINDCONTACT, hContact, 0); - if (hItem == nullptr) - continue; - - int set = 0; - for (int i = 0; i < 2; i++) { - int iImage = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(i, 0)); - if (iImage == i + 1) { - ProtoChainSend(hContact, PSS_SETAPPARENTMODE, iImage == 1 ? ID_STATUS_ONLINE : ID_STATUS_OFFLINE, 0); - set = 1; - break; - } - } - if (!set) - ProtoChainSend(hContact, PSS_SETAPPARENTMODE, 0, 0); - } - return TRUE; - } - } - break; - - case WM_DESTROY: - DestroyIcon(hVisibleIcon); - DestroyIcon(hInvisibleIcon); - - hIml = (HIMAGELIST)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGELIST, 0, 0); - ImageList_Destroy(hIml); - break; - } - return FALSE; -} - -static int VisibilityOptInitialise(WPARAM wParam, LPARAM) -{ - OPTIONSDIALOGPAGE odp = {}; - odp.position = 850000000; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_VISIBILITY); - odp.szTitle.a = LPGEN("Visibility"); - odp.szGroup.a = LPGEN("Contacts"); - odp.pfnDlgProc = DlgProcVisibilityOpts; - odp.flags = ODPF_BOLDGROUPS; - g_plugin.addOptions(wParam, &odp); - return 0; -} - -int LoadVisibilityModule(void) -{ - HookEvent(ME_OPT_INITIALISE, VisibilityOptInitialise); - return 0; -} -- cgit v1.2.3