From d4b95c46e963cf742adaad520f15af4bcd867e6d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 6 Jul 2012 12:51:52 +0000 Subject: stdemail + stdurl git-svn-id: http://svn.miranda-ng.org/main/trunk@790 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/sremail/email.cpp | 89 ------ src/modules/srurl/url.cpp | 182 ----------- src/modules/srurl/url.h | 41 --- src/modules/srurl/urldialogs.cpp | 664 --------------------------------------- 4 files changed, 976 deletions(-) delete mode 100644 src/modules/sremail/email.cpp delete mode 100644 src/modules/srurl/url.cpp delete mode 100644 src/modules/srurl/url.h delete mode 100644 src/modules/srurl/urldialogs.cpp (limited to 'src/modules') diff --git a/src/modules/sremail/email.cpp b/src/modules/sremail/email.cpp deleted file mode 100644 index 3782f132ed..0000000000 --- a/src/modules/sremail/email.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2009 Miranda ICQ/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 "..\..\core\commonheaders.h" - -static HANDLE hEMailMenuItem; - -void SendEmailThread(void *szUrl) -{ - ShellExecuteA(NULL, "open", (char*)szUrl, "", "", SW_SHOW); - mir_free(szUrl); - return; -} - -static INT_PTR SendEMailCommand(WPARAM wParam, LPARAM lParam) -{ - DBVARIANT dbv; - char *szUrl; - char *szProto; - - szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0); - if (szProto == NULL || DBGetContactSettingString((HANDLE)wParam, szProto, "e-mail", &dbv)) { - if (DBGetContactSettingString((HANDLE)wParam, "UserInfo", "Mye-mail0", &dbv)) { - MessageBox((HWND)lParam, TranslateT("User has not registered an e-mail address"), TranslateT("Send e-mail"), MB_OK); - return 1; - } - } - szUrl = (char*)mir_alloc(lstrlenA(dbv.pszVal)+8); - lstrcpyA(szUrl, "mailto:"); - lstrcatA(szUrl, dbv.pszVal); - mir_free(dbv.pszVal); - forkthread(SendEmailThread, 0, szUrl); - return 0; -} - -static int EMailPreBuildMenu(WPARAM wParam, LPARAM) -{ - CLISTMENUITEM mi; - DBVARIANT dbv = { 0 }; - char *szProto; - - ZeroMemory(&mi, sizeof(mi)); - mi.cbSize = sizeof(mi); - mi.flags = CMIM_FLAGS; - - szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0); - if (szProto == NULL || DBGetContactSettingString((HANDLE)wParam, szProto, "e-mail", & dbv)) - if (DBGetContactSettingString((HANDLE)wParam, "UserInfo", "Mye-mail0", &dbv)) - mi.flags = CMIM_FLAGS | CMIF_HIDDEN; - - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hEMailMenuItem, (LPARAM)&mi); - if (dbv.pszVal) DBFreeVariant(&dbv); - return 0; -} - -int LoadSendRecvEMailModule(void) -{ - CLISTMENUITEM mi = { 0 }; - mi.cbSize = sizeof(mi); - mi.position = -2000010000; - mi.flags = CMIF_ICONFROMICOLIB; - mi.icolibItem = GetSkinIconHandle(SKINICON_OTHER_SENDEMAIL); - mi.pszName = LPGEN("&E-mail"); - mi.pszService = MS_EMAIL_SENDEMAIL; - hEMailMenuItem = Menu_AddContactMenuItem(&mi); - - CreateServiceFunction(MS_EMAIL_SENDEMAIL, SendEMailCommand); - HookEvent(ME_CLIST_PREBUILDCONTACTMENU, EMailPreBuildMenu); - return 0; -} diff --git a/src/modules/srurl/url.cpp b/src/modules/srurl/url.cpp deleted file mode 100644 index ba1b025296..0000000000 --- a/src/modules/srurl/url.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2009 Miranda ICQ/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 "..\..\core\commonheaders.h" -#include -#include "url.h" - -HANDLE hUrlWindowList = NULL; -static HANDLE hEventContactSettingChange = NULL; -static HANDLE hContactDeleted = NULL; -static HANDLE hSRUrlMenuItem = NULL; - -INT_PTR CALLBACK DlgProcUrlSend(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK DlgProcUrlRecv(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); - -static INT_PTR ReadUrlCommand(WPARAM, LPARAM lParam) -{ - CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_URLRECV), NULL, DlgProcUrlRecv, lParam); - return 0; -} - -static int UrlEventAdded(WPARAM wParam, LPARAM lParam) -{ - CLISTEVENT cle; - DBEVENTINFO dbei; - TCHAR szTooltip[256]; - - ZeroMemory(&dbei, sizeof(dbei)); - dbei.cbSize = sizeof(dbei); - dbei.cbBlob = 0; - CallService(MS_DB_EVENT_GET, lParam, (LPARAM)&dbei); - if (dbei.flags&(DBEF_SENT|DBEF_READ) || dbei.eventType != EVENTTYPE_URL) return 0; - - SkinPlaySound("RecvUrl"); - ZeroMemory(&cle, sizeof(cle)); - cle.cbSize = sizeof(cle); - cle.flags = CLEF_TCHAR; - cle.hContact = (HANDLE)wParam; - cle.hDbEvent = (HANDLE)lParam; - cle.hIcon = LoadSkinIcon(SKINICON_EVENT_URL); - cle.pszService = "SRUrl/ReadUrl"; - mir_sntprintf(szTooltip, SIZEOF(szTooltip), TranslateT("URL from %s"), cli.pfnGetContactDisplayName((HANDLE)wParam, 0)); - cle.ptszTooltip = szTooltip; - CallService(MS_CLIST_ADDEVENT, 0, (LPARAM)&cle); - return 0; -} - -static INT_PTR SendUrlCommand(WPARAM wParam, LPARAM) -{ - CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_URLSEND), NULL, DlgProcUrlSend, wParam); - return 0; -} - -static void RestoreUnreadUrlAlerts(void) -{ - CLISTEVENT cle = {0}; - DBEVENTINFO dbei = {0}; - TCHAR toolTip[256]; - HANDLE hDbEvent, hContact; - - dbei.cbSize = sizeof(dbei); - cle.cbSize = sizeof(cle); - cle.hIcon = LoadSkinIcon(SKINICON_EVENT_URL); - cle.pszService = "SRUrl/ReadUrl"; - - hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); - while (hContact) { - hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDFIRSTUNREAD, (WPARAM)hContact, 0); - while (hDbEvent) { - dbei.cbBlob = 0; - CallService(MS_DB_EVENT_GET, (WPARAM)hDbEvent, (LPARAM)&dbei); - if ( !(dbei.flags&(DBEF_SENT|DBEF_READ)) && dbei.eventType == EVENTTYPE_URL) { - cle.hContact = hContact; - cle.hDbEvent = hDbEvent; - cle.flags = CLEF_TCHAR; - mir_sntprintf(toolTip, SIZEOF(toolTip), TranslateT("URL from %s"), cli.pfnGetContactDisplayName(hContact, 0)); - cle.ptszTooltip = toolTip; - CallService(MS_CLIST_ADDEVENT, 0, (LPARAM)&cle); - } - hDbEvent = (HANDLE)CallService(MS_DB_EVENT_FINDNEXT, (WPARAM)hDbEvent, 0); - } - hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0); - } -} - -static int ContactSettingChanged(WPARAM wParam, LPARAM lParam) -{ - DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING*)lParam; - char *szProto; - - szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0); - if (lstrcmpA(cws->szModule, "CList") && (szProto == NULL || lstrcmpA(cws->szModule, szProto))) return 0; - WindowList_Broadcast(hUrlWindowList, DM_UPDATETITLE, 0, 0); - return 0; -} - -static int SRUrlPreBuildMenu(WPARAM wParam, LPARAM) -{ - CLISTMENUITEM mi = { 0 }; - mi.cbSize = sizeof(mi); - mi.flags = CMIM_FLAGS | CMIF_HIDDEN; - - char *szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0); - if (szProto != NULL) - if (CallProtoServiceInt(NULL,szProto, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_URLSEND) - mi.flags = CMIM_FLAGS; - - CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hSRUrlMenuItem, (LPARAM)&mi); - return 0; -} - -static int SRUrlModulesLoaded(WPARAM, LPARAM) -{ - CLISTMENUITEM mi = { 0 }; - mi.cbSize = sizeof(mi); - mi.position = -2000040000; - mi.flags = CMIF_ICONFROMICOLIB; - mi.icolibItem = GetSkinIconHandle(SKINICON_EVENT_URL); - mi.pszName = LPGEN("Web Page Address (&URL)"); - mi.pszService = MS_URL_SENDURL; - hSRUrlMenuItem = Menu_AddContactMenuItem(&mi); - - RestoreUnreadUrlAlerts(); - return 0; -} - -static int SRUrlShutdown(WPARAM, LPARAM) -{ - if (hEventContactSettingChange) - UnhookEvent(hEventContactSettingChange); - - if (hContactDeleted) - UnhookEvent(hContactDeleted); - - if (hUrlWindowList) - WindowList_BroadcastAsync(hUrlWindowList, WM_CLOSE, 0, 0); - - return 0; -} - -int UrlContactDeleted(WPARAM wParam, LPARAM) -{ - HWND h = WindowList_Find(hUrlWindowList, (HANDLE)wParam); - if (h) - SendMessage(h, WM_CLOSE, 0, 0); - - return 0; -} - -int LoadSendRecvUrlModule(void) -{ - hUrlWindowList = (HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST, 0, 0); - HookEvent(ME_SYSTEM_MODULESLOADED, SRUrlModulesLoaded); - HookEvent(ME_DB_EVENT_ADDED, UrlEventAdded); - HookEvent(ME_CLIST_PREBUILDCONTACTMENU, SRUrlPreBuildMenu); - hEventContactSettingChange = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, ContactSettingChanged); - hContactDeleted = HookEvent(ME_DB_CONTACT_DELETED, UrlContactDeleted); - HookEvent(ME_SYSTEM_PRESHUTDOWN, SRUrlShutdown); - CreateServiceFunction(MS_URL_SENDURL, SendUrlCommand); - CreateServiceFunction("SRUrl/ReadUrl", ReadUrlCommand); - SkinAddNewSoundEx("RecvUrl", LPGEN("URL"), LPGEN("Incoming")); - return 0; -} diff --git a/src/modules/srurl/url.h b/src/modules/srurl/url.h deleted file mode 100644 index 4e00c38c56..0000000000 --- a/src/modules/srurl/url.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2009 Miranda ICQ/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. -*/ - -#define TIMEOUT_URLSEND 9000 -#define HM_EVENTSENT (WM_USER+10) -#define DM_UPDATETITLE (WM_USER+11) - -#define DDEMESSAGETIMEOUT 1000 - - -struct UrlRcvData { - HANDLE hContact; - HANDLE hDbEvent; -}; - -struct UrlSendData { - HANDLE hContact; - HANDLE hSendId; - HANDLE hAckEvent; - char *sendBuffer; -}; diff --git a/src/modules/srurl/urldialogs.cpp b/src/modules/srurl/urldialogs.cpp deleted file mode 100644 index 1198b70bef..0000000000 --- a/src/modules/srurl/urldialogs.cpp +++ /dev/null @@ -1,664 +0,0 @@ -/* - -Miranda IM: the free IM client for Microsoft* Windows* - -Copyright 2000-2009 Miranda ICQ/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 "..\..\core\commonheaders.h" -#include "url.h" - -INT_PTR CALLBACK DlgProcUrlSend(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); - -extern HANDLE hUrlWindowList; - -static void sttUpdateTitle(HWND hwndDlg, HANDLE hContact) -{ - TCHAR newtitle[256], oldtitle[256]; - TCHAR *szStatus, *contactName, *pszNewTitleStart = TranslateT("Send URL to"); - char *szProto; - - if (hContact) { - szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); - if (szProto) { - CONTACTINFO ci; - int hasName = 0; - char buf[128]; - ZeroMemory(&ci, sizeof(ci)); - - ci.cbSize = sizeof(ci); - ci.hContact = hContact; - ci.szProto = szProto; - ci.dwFlag = CNF_UNIQUEID; - if ( !CallService(MS_CONTACT_GETCONTACTINFO, 0, (LPARAM)&ci)) { - switch(ci.type) { - case CNFT_ASCIIZ: - hasName = 1; - mir_snprintf(buf, SIZEOF(buf), "%s", ci.pszVal); - mir_free(ci.pszVal); - break; - case CNFT_DWORD: - hasName = 1; - mir_snprintf(buf, SIZEOF(buf), "%u", ci.dVal); - break; - } } - - contactName = cli.pfnGetContactDisplayName(hContact, 0); - if (hasName) - SetDlgItemTextA(hwndDlg, IDC_NAME, buf); - else - SetDlgItemText(hwndDlg, IDC_NAME, contactName); - - szStatus = cli.pfnGetStatusModeDescription(szProto == NULL ? ID_STATUS_OFFLINE : DBGetContactSettingWord(hContact, szProto, "Status", ID_STATUS_OFFLINE), 0); - mir_sntprintf(newtitle, SIZEOF(newtitle), _T("%s %s (%s)"), pszNewTitleStart, contactName, szStatus); - } - } - else lstrcpyn(newtitle, pszNewTitleStart, SIZEOF(newtitle)); - - GetWindowText(hwndDlg, oldtitle, SIZEOF(oldtitle)); - - if (lstrcmp(newtitle, oldtitle)) //swt() flickers even if the title hasn't actually changed - SetWindowText(hwndDlg, newtitle); -} - -INT_PTR CALLBACK DlgProcUrlRecv(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - struct UrlRcvData *dat = (struct UrlRcvData *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - Window_SetIcon_IcoLib(hwndDlg, SKINICON_EVENT_URL); - Button_SetIcon_IcoLib(hwndDlg, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add Contact Permanently to List")); - Button_SetIcon_IcoLib(hwndDlg, IDC_DETAILS, SKINICON_OTHER_USERDETAILS, LPGEN("View User's Details")); - Button_SetIcon_IcoLib(hwndDlg, IDC_HISTORY, SKINICON_OTHER_HISTORY, LPGEN("View User's History")); - Button_SetIcon_IcoLib(hwndDlg, IDC_USERMENU, SKINICON_OTHER_DOWNARROW, LPGEN("User Menu")); - - dat = (struct UrlRcvData*)mir_alloc(sizeof(struct UrlRcvData)); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); - - dat->hContact = ((CLISTEVENT*)lParam)->hContact; - dat->hDbEvent = ((CLISTEVENT*)lParam)->hDbEvent; - - WindowList_Add(hUrlWindowList, hwndDlg, dat->hContact); - { - DBEVENTINFO dbei; - TCHAR* contactName; - TCHAR msg[128]; - - ZeroMemory(&dbei, sizeof(dbei)); - dbei.cbSize = sizeof(dbei); - dbei.cbBlob = CallService(MS_DB_EVENT_GETBLOBSIZE, (WPARAM)dat->hDbEvent, 0); - dbei.pBlob = (PBYTE)mir_alloc(dbei.cbBlob); - CallService(MS_DB_EVENT_GET, (WPARAM)dat->hDbEvent, (LPARAM)&dbei); - SetDlgItemTextA(hwndDlg, IDC_URL, (char*)dbei.pBlob); - SetDlgItemTextA(hwndDlg, IDC_MSG, (char*)dbei.pBlob+lstrlenA((char*)dbei.pBlob)+1); - mir_free(dbei.pBlob); - - CallService(MS_DB_EVENT_MARKREAD, (WPARAM)dat->hContact, (LPARAM)dat->hDbEvent); - - contactName = cli.pfnGetContactDisplayName(dat->hContact, 0); - mir_sntprintf(msg, SIZEOF(msg), TranslateT("URL from %s"), contactName); - SetWindowText(hwndDlg, msg); - SetDlgItemText(hwndDlg, IDC_FROM, contactName); - SendDlgItemMessage(hwndDlg, IDOK, BUTTONSETARROW, 1, 0); - { TCHAR str[128]; - tmi.printTimeStamp(NULL, dbei.timestamp, _T("t d"), str, SIZEOF(str), 0); - SetDlgItemText(hwndDlg, IDC_DATE, str); - } } - - // From message dlg - if ( !DBGetContactSettingByte(dat->hContact, "CList", "NotOnList", 0)) - ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), SW_HIDE); - - SendMessage(hwndDlg, DM_UPDATETITLE, 0, 0); - // From message dlg end - - Utils_RestoreWindowPositionNoSize(hwndDlg, NULL, "SRUrl", "recv"); - return TRUE; - - case WM_MEASUREITEM: - return CallService(MS_CLIST_MENUMEASUREITEM, wParam, lParam); - - case WM_DRAWITEM: - { - LPDRAWITEMSTRUCT dis = (LPDRAWITEMSTRUCT)lParam; - if (dis->hwndItem == GetDlgItem(hwndDlg, IDC_PROTOCOL)) { - char *szProto; - - szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)dat->hContact, 0); - if (szProto) { - HICON hIcon; - - hIcon = (HICON)CallProtoServiceInt(NULL,szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); - if (hIcon) { - DrawIconEx(dis->hDC, dis->rcItem.left, dis->rcItem.top, hIcon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0, NULL, DI_NORMAL); - DestroyIcon(hIcon); - } } } } - return CallService(MS_CLIST_MENUDRAWITEM, wParam, lParam); - - case DM_UPDATETITLE: - sttUpdateTitle(hwndDlg, dat->hContact); - break; - - case WM_COMMAND: - if (dat) - if (CallService(MS_CLIST_MENUPROCESSCOMMAND, MAKEWPARAM(LOWORD(wParam), MPCF_CONTACTMENU), (LPARAM)dat->hContact)) - break; - switch(LOWORD(wParam)) { - case IDOK: - { HMENU hMenu, hSubMenu; - RECT rc; - char url[256]; - - hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_CONTEXT)); - hSubMenu = GetSubMenu(hMenu, 6); - TranslateMenu(hSubMenu); - GetWindowRect((HWND)lParam, &rc); - GetDlgItemTextA(hwndDlg, IDC_URL, url, SIZEOF(url)); - switch(TrackPopupMenu(hSubMenu, TPM_RETURNCMD, rc.left, rc.bottom, 0, hwndDlg, NULL)) { - case IDM_OPENNEW: - CallService(MS_UTILS_OPENURL, 1, (LPARAM)url); - break; - case IDM_OPENEXISTING: - CallService(MS_UTILS_OPENURL, 0, (LPARAM)url); - break; - case IDM_COPYLINK: - { HGLOBAL hData; - if ( !OpenClipboard(hwndDlg)) break; - EmptyClipboard(); - hData = GlobalAlloc(GMEM_MOVEABLE, lstrlenA(url)+1); - lstrcpyA((char*)GlobalLock(hData), url); - GlobalUnlock(hData); - SetClipboardData(CF_TEXT, hData); - CloseClipboard(); - break; - } - } - DestroyMenu(hMenu); - } - return TRUE; - - case IDC_USERMENU: - { - RECT rc; - HMENU hMenu = (HMENU)CallService(MS_CLIST_MENUBUILDCONTACT, (WPARAM)dat->hContact, 0); - GetWindowRect(GetDlgItem(hwndDlg, IDC_USERMENU), &rc); - TrackPopupMenu(hMenu, 0, rc.left, rc.bottom, 0, hwndDlg, NULL); - DestroyMenu(hMenu); - } - break; - - case IDC_HISTORY: - CallService(MS_HISTORY_SHOWCONTACTHISTORY, (WPARAM)dat->hContact, 0); - break; - - case IDC_DETAILS: - CallService(MS_USERINFO_SHOWDIALOG, (WPARAM)dat->hContact, 0); - break; - - case IDC_ADD: - { - ADDCONTACTSTRUCT acs = {0}; - - acs.handle = dat->hContact; - acs.handleType = HANDLE_CONTACT; - acs.szProto = 0; - CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs); - } - if ( !DBGetContactSettingByte(dat->hContact, "CList", "NotOnList", 0)) { - ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), FALSE); - } - break; - - case IDC_REPLY: - CallService(MS_MSG_SENDMESSAGE, (WPARAM)dat->hContact, 0); - //fall through - case IDCANCEL: - DestroyWindow(hwndDlg); - return TRUE; - } - break; - - case WM_DESTROY: - Window_FreeIcon_IcoLib(hwndDlg); - Button_FreeIcon_IcoLib(hwndDlg, IDC_ADD); - Button_FreeIcon_IcoLib(hwndDlg, IDC_DETAILS); - Button_FreeIcon_IcoLib(hwndDlg, IDC_HISTORY); - Button_FreeIcon_IcoLib(hwndDlg, IDC_USERMENU); - - WindowList_Remove(hUrlWindowList, hwndDlg); - mir_free(dat); - Utils_SaveWindowPosition(hwndDlg, NULL, "SRUrl", "recv"); - break; - } - return FALSE; -} - -static int ddeAcked, ddeData; -static ATOM hSzDdeData; -static HWND hwndDde; -static HGLOBAL hGlobalDdeData; -static LRESULT DdeMessage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - UINT_PTR hSzItem; - - switch(msg) { - case WM_DDE_ACK: - ddeAcked = 1; - hwndDde = (HWND)wParam; - break; - - case WM_DDE_DATA: - UnpackDDElParam(msg, lParam, (PUINT_PTR)&hGlobalDdeData, (PUINT_PTR)&hSzItem); - ddeData = 1; - if (hGlobalDdeData) { - DDEDATA* data = (DDEDATA*)GlobalLock(hGlobalDdeData); - if (data->fAckReq) { - DDEACK ack = {0}; - PostMessage((HWND)wParam, WM_DDE_ACK, (WPARAM)hwndDlg, PackDDElParam(WM_DDE_ACK, *(PUINT)&ack, hSzItem)); - } - else GlobalDeleteAtom((ATOM)hSzItem); - GlobalUnlock(hGlobalDdeData); - } - else GlobalDeleteAtom((ATOM)hSzItem); - break; - } - return 0; -} - -static HGLOBAL DoDdeRequest(const char *szItemName, HWND hwndDlg) -{ - ATOM hSzItemName; - DWORD timeoutTick, thisTick; - MSG msg; - - hSzItemName = GlobalAddAtomA(szItemName); - if ( !PostMessage(hwndDde, WM_DDE_REQUEST, (WPARAM)hwndDlg, MAKELPARAM(CF_TEXT, hSzItemName))) { - GlobalDeleteAtom(hSzItemName); - return NULL; - } - timeoutTick = GetTickCount()+5000; - ddeData = 0; ddeAcked = 0; - do { - if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - if (ddeData || ddeAcked) break; - thisTick = GetTickCount(); - if (thisTick>timeoutTick) break; - } - while (MsgWaitForMultipleObjects(0, NULL, FALSE, timeoutTick-thisTick, QS_ALLINPUT) == WAIT_OBJECT_0); - - if ( !ddeData) { - GlobalDeleteAtom(hSzItemName); - return NULL; - } - - return hGlobalDdeData; -} - -static void FreeDdeRequestData(HGLOBAL hData) -{ - DDEDATA *data; - data = (DDEDATA*)GlobalLock(hData); - if (data->fRelease) { - GlobalUnlock(hData); - GlobalFree(hData); - } - else GlobalUnlock(hData); -} - -static void AddBrowserPageToCombo(char *url, HWND hwndCombo) -{ - char *title, *frame, *end; - - if (url[0] != '"') return; - url++; - title = strchr(url, '"'); - if (title == NULL) return; - *title = '\0'; title++; - if (*title) { - title+=2; - frame = strchr(title, '"'); - if (frame == NULL) return; - *frame = '\0'; frame++; - if (*frame) { - frame+=2; - end = strchr(frame, '"'); - if (end == NULL) return; - *end = '\0'; - } - else frame = NULL; - } - else title = frame = NULL; - if (frame == NULL || *frame == 0) { - char *szItemData; - int i; - char szExistingUrl[1024]; - - for (i = SendMessage(hwndCombo, CB_GETCOUNT, 0, 0)-1;i>=0;i--) { - if (SendMessage(hwndCombo, CB_GETLBTEXTLEN, i, 0) >= SIZEOF(szExistingUrl)) - continue; - SendMessageA(hwndCombo, CB_GETLBTEXT, i, (LPARAM)szExistingUrl); - if ( !lstrcmpA(szExistingUrl, url)) return; - } - i = SendMessageA(hwndCombo, CB_ADDSTRING, 0, (LPARAM)url); - szItemData = mir_strdup(title); - SendMessage(hwndCombo, CB_SETITEMDATA, i, (LPARAM)szItemData); - } -} - -//see Q160957 and http://developer.netscape.com/docs/manuals/communicator/DDE/index.htm -static void GetOpenBrowserUrlsForBrowser(const char *szBrowser, HWND hwndDlg, HWND hwndCombo) -{ - ATOM hSzBrowser, hSzTopic; - int windowCount, i; - DWORD *windowId; - DWORD dwResult; - HGLOBAL hData; - DDEDATA *data; - int dataLength; - - hSzBrowser = GlobalAddAtomA(szBrowser); - - hSzTopic = GlobalAddAtomA("WWW_ListWindows"); - ddeAcked = 0; - if ( !SendMessageTimeout(HWND_BROADCAST, WM_DDE_INITIATE, (WPARAM)hwndDlg, MAKELPARAM(hSzBrowser, hSzTopic), SMTO_ABORTIFHUNG|SMTO_NORMAL, DDEMESSAGETIMEOUT, (PDWORD_PTR)&dwResult) - || !ddeAcked) { - GlobalDeleteAtom(hSzTopic); - GlobalDeleteAtom(hSzBrowser); - return; - } - hData = DoDdeRequest("WWW_ListWindows", hwndDlg); - if (hData == NULL) { - GlobalDeleteAtom(hSzTopic); - GlobalDeleteAtom(hSzBrowser); - return; - } - dataLength = GlobalSize(hData)-offsetof(DDEDATA, Value); - data = (DDEDATA*)GlobalLock(hData); - windowCount = dataLength/sizeof(DWORD); - windowId = (PDWORD)mir_alloc(sizeof(DWORD)*windowCount); - memcpy(windowId, data->Value, windowCount*sizeof(DWORD)); - GlobalUnlock(hData); - FreeDdeRequestData(hData); - PostMessage(hwndDde, WM_DDE_TERMINATE, (WPARAM)hwndDlg, 0); - GlobalDeleteAtom(hSzTopic); - - hSzTopic = GlobalAddAtomA("WWW_GetWindowInfo"); - ddeAcked = 0; - if ( !SendMessageTimeout(HWND_BROADCAST, WM_DDE_INITIATE, (WPARAM)hwndDlg, MAKELPARAM(hSzBrowser, hSzTopic), SMTO_ABORTIFHUNG|SMTO_NORMAL, DDEMESSAGETIMEOUT, (PDWORD_PTR)&dwResult) - || !ddeAcked) { - GlobalDeleteAtom(hSzTopic); - GlobalDeleteAtom(hSzBrowser); - mir_free(windowId); - return; - } - for (i=0;iValue, hwndCombo); - GlobalUnlock(hData); - FreeDdeRequestData(hData); - } - } - PostMessage(hwndDde, WM_DDE_TERMINATE, (WPARAM)hwndDlg, 0); - GlobalDeleteAtom(hSzTopic); - GlobalDeleteAtom(hSzBrowser); - mir_free(windowId); -} - -static void GetOpenBrowserUrls(HWND hwndDlg, HWND hwndCombo) -{ - GetOpenBrowserUrlsForBrowser("opera", hwndDlg, hwndCombo); - GetOpenBrowserUrlsForBrowser("netscape", hwndDlg, hwndCombo); - GetOpenBrowserUrlsForBrowser("iexplore", hwndDlg, hwndCombo); -} - -static WNDPROC OldSendEditProc; -static LRESULT CALLBACK SendEditSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch(msg) { - case WM_CHAR: - if (wParam == '\n' && GetKeyState(VK_CONTROL)&0x8000) { - PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0); - return 0; - } - break; - case WM_SYSCHAR: - if ((wParam == 's' || wParam == 'S') && GetKeyState(VK_MENU)&0x8000) { - PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0); - return 0; - } - break; - } - return CallWindowProc(OldSendEditProc, hwnd, msg, wParam, lParam); -} - -INT_PTR CALLBACK DlgProcUrlSend(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - struct UrlSendData* dat = (struct UrlSendData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - Window_SetIcon_IcoLib(hwndDlg, SKINICON_EVENT_URL); - Button_SetIcon_IcoLib(hwndDlg, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add Contact Permanently to List")); - Button_SetIcon_IcoLib(hwndDlg, IDC_DETAILS, SKINICON_OTHER_USERDETAILS, LPGEN("View User's Details")); - Button_SetIcon_IcoLib(hwndDlg, IDC_HISTORY, SKINICON_OTHER_HISTORY, LPGEN("View User's History")); - Button_SetIcon_IcoLib(hwndDlg, IDC_USERMENU, SKINICON_OTHER_DOWNARROW, LPGEN("User Menu")); - - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_LIMITTEXT, 450, 0); - dat = (struct UrlSendData*)mir_alloc(sizeof(struct UrlSendData)); - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)dat); - dat->hContact = (HANDLE)lParam; - dat->hAckEvent = NULL; - dat->hSendId = NULL; - dat->sendBuffer = NULL; - - WindowList_Add(hUrlWindowList, hwndDlg, dat->hContact); - { - TCHAR *str = cli.pfnGetContactDisplayName(dat->hContact, 0); - SetDlgItemText(hwndDlg, IDC_NAME, str); - } - - GetOpenBrowserUrls(hwndDlg, GetDlgItem(hwndDlg, IDC_URLS)); - SendDlgItemMessage(hwndDlg, IDC_URLS, CB_SETCURSEL, 0, 0); - if (SendDlgItemMessage(hwndDlg, IDC_URLS, CB_GETCOUNT, 0, 0))SendMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_URLS, CBN_SELCHANGE), 0); - EnableWindow(GetDlgItem(hwndDlg, IDOK), (SendDlgItemMessage(hwndDlg, IDC_URLS, CB_GETCURSEL, 0, 0) == CB_ERR)?FALSE:TRUE); - Utils_RestoreWindowPositionNoSize(hwndDlg, NULL, "SRUrl", "send"); - OldSendEditProc = (WNDPROC)SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_MESSAGE), GWLP_WNDPROC, (LONG_PTR)SendEditSubclassProc); - OldSendEditProc = (WNDPROC)SetWindowLongPtr(GetWindow(GetDlgItem(hwndDlg, IDC_URLS), GW_CHILD), GWLP_WNDPROC, (LONG_PTR)SendEditSubclassProc); - - // From message dlg - if ( !DBGetContactSettingByte(dat->hContact, "CList", "NotOnList", 0)) - ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), SW_HIDE); - - SendMessage(hwndDlg, DM_UPDATETITLE, 0, 0); - // From message dlg end - return TRUE; - - case WM_DDE_DATA: - case WM_DDE_ACK: - return DdeMessage(hwndDlg, msg, wParam, lParam); - - case WM_TIMER: - if (wParam == 0) { - //ICQ sendurl timed out - KillTimer(hwndDlg, 0); - MessageBox(hwndDlg, TranslateT("Send timed out"), _T(""), MB_OK); - EnableWindow(GetDlgItem(hwndDlg, IDOK), TRUE); - EnableWindow(GetDlgItem(hwndDlg, IDC_URLS), TRUE); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETREADONLY, FALSE, 0); - } - break; - - case WM_MEASUREITEM: - return CallService(MS_CLIST_MENUMEASUREITEM, wParam, lParam); - - case WM_DRAWITEM: - { - LPDRAWITEMSTRUCT dis = (LPDRAWITEMSTRUCT)lParam; - if (dis->hwndItem == GetDlgItem(hwndDlg, IDC_PROTOCOL)) { - char *szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)dat->hContact, 0); - if (szProto) { - HICON hIcon = (HICON)CallProtoServiceInt(NULL,szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0); - if (hIcon) { - DrawIconEx(dis->hDC, dis->rcItem.left, dis->rcItem.top, hIcon, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0, NULL, DI_NORMAL); - DestroyIcon(hIcon); - } } } } - return CallService(MS_CLIST_MENUDRAWITEM, wParam, lParam); - - case DM_UPDATETITLE: - sttUpdateTitle(hwndDlg, dat->hContact); - break; - - case WM_COMMAND: - if (CallService(MS_CLIST_MENUPROCESSCOMMAND, MAKEWPARAM(LOWORD(wParam), MPCF_CONTACTMENU), (LPARAM)dat->hContact)) - break; - switch (LOWORD(wParam)) - { - case IDOK: - { - char *body, *url; - int bodySize, urlSize; - - urlSize = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_URLS))+1; - url = (char*)mir_alloc(urlSize); - GetDlgItemTextA(hwndDlg, IDC_URLS, url, urlSize); - if (url[0] == 0) { - mir_free(url); - break; - } - bodySize = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_MESSAGE))+1; - body = (char*)mir_alloc(bodySize); - GetDlgItemTextA(hwndDlg, IDC_MESSAGE, body, bodySize); - - dat->sendBuffer = (char*)mir_realloc(dat->sendBuffer, lstrlenA(url)+lstrlenA(body)+2); - lstrcpyA(dat->sendBuffer, url); - lstrcpyA(dat->sendBuffer+lstrlenA(url)+1, body); - dat->hAckEvent = HookEventMessage(ME_PROTO_ACK, hwndDlg, HM_EVENTSENT); - dat->hSendId = (HANDLE)CallContactService(dat->hContact, PSS_URL, 0, (LPARAM)dat->sendBuffer); - mir_free(url); - mir_free(body); - - //create a timeout timer - SetTimer(hwndDlg, 0, TIMEOUT_URLSEND, NULL); - EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_URLS), FALSE); - SendDlgItemMessage(hwndDlg, IDC_MESSAGE, EM_SETREADONLY, TRUE, 0); - - return TRUE; - } - - case IDCANCEL: - DestroyWindow(hwndDlg); - return TRUE; - case IDC_URLS: - if (HIWORD(wParam) == CBN_SELCHANGE) { - int i, urlSize; - char *title; - i = SendDlgItemMessage(hwndDlg, IDC_URLS, CB_GETCURSEL, 0, 0); - title = (char*)SendDlgItemMessage(hwndDlg, IDC_URLS, CB_GETITEMDATA, (WPARAM)i, 0); - SetDlgItemTextA(hwndDlg, IDC_MESSAGE, title); - urlSize = SendDlgItemMessage(hwndDlg, IDC_URLS, CB_GETLBTEXTLEN, (WPARAM)i, 0); - EnableWindow(GetDlgItem(hwndDlg, IDOK), (urlSize>0)); - } - else if (HIWORD(wParam) == CBN_EDITCHANGE) { - int urlSize = GetWindowTextLength(GetDlgItem(hwndDlg, IDC_URLS)); - EnableWindow(GetDlgItem(hwndDlg, IDOK), (urlSize>0)); - } - break; - case IDC_USERMENU: - { RECT rc; - HMENU hMenu = (HMENU)CallService(MS_CLIST_MENUBUILDCONTACT, (WPARAM)dat->hContact, 0); - GetWindowRect(GetDlgItem(hwndDlg, IDC_USERMENU), &rc); - TrackPopupMenu(hMenu, 0, rc.left, rc.bottom, 0, hwndDlg, NULL); - DestroyMenu(hMenu); - } - break; - case IDC_HISTORY: - CallService(MS_HISTORY_SHOWCONTACTHISTORY, (WPARAM)dat->hContact, 0); - break; - case IDC_DETAILS: - CallService(MS_USERINFO_SHOWDIALOG, (WPARAM)dat->hContact, 0); - break; - case IDC_ADD: - { ADDCONTACTSTRUCT acs = {0}; - - acs.handle = dat->hContact; - acs.handleType = HANDLE_CONTACT; - acs.szProto = 0; - CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs); - } - if ( !DBGetContactSettingByte(dat->hContact, "CList", "NotOnList", 0)) { - ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), FALSE); - } - break; - } - break; - case HM_EVENTSENT: - { ACKDATA *ack = (ACKDATA*)lParam; - DBEVENTINFO dbei; - if (ack->hProcess != dat->hSendId) break; - if (ack->hContact != dat->hContact) break; - if (ack->type != ACKTYPE_URL || ack->result != ACKRESULT_SUCCESS) break; - - ZeroMemory(&dbei, sizeof(dbei)); - dbei.cbSize = sizeof(dbei); - dbei.eventType = EVENTTYPE_URL; - dbei.flags = DBEF_SENT; - dbei.szModule = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)dat->hContact, 0); - dbei.timestamp = time(NULL); - dbei.cbBlob = (DWORD)(strlen(dat->sendBuffer)+strlen(dat->sendBuffer+strlen(dat->sendBuffer)+1)+2); - dbei.pBlob = (PBYTE)dat->sendBuffer; - CallService(MS_DB_EVENT_ADD, (WPARAM)dat->hContact, (LPARAM)&dbei); - KillTimer(hwndDlg, 0); - DestroyWindow(hwndDlg); - break; - } - case WM_DESTROY: - Window_FreeIcon_IcoLib(hwndDlg); - Button_FreeIcon_IcoLib(hwndDlg, IDC_ADD); - Button_FreeIcon_IcoLib(hwndDlg, IDC_DETAILS); - Button_FreeIcon_IcoLib(hwndDlg, IDC_HISTORY); - Button_FreeIcon_IcoLib(hwndDlg, IDC_USERMENU); - - WindowList_Remove(hUrlWindowList, hwndDlg); - SetWindowLongPtr(GetWindow(GetDlgItem(hwndDlg, IDC_URLS), GW_CHILD), GWLP_WNDPROC, (LONG_PTR)OldSendEditProc); - SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_MESSAGE), GWLP_WNDPROC, (LONG_PTR)OldSendEditProc); - if (dat->hAckEvent) UnhookEvent(dat->hAckEvent); - if (dat->sendBuffer != NULL) mir_free(dat->sendBuffer); - mir_free(dat); - Utils_SaveWindowPosition(hwndDlg, NULL, "SRUrl", "send"); - { int i; - for (i = SendDlgItemMessage(hwndDlg, IDC_URLS, CB_GETCOUNT, 0, 0)-1;i>=0;i--) - mir_free((char*)SendDlgItemMessage(hwndDlg, IDC_URLS, CB_GETITEMDATA, i, 0)); - } - break; - } - - return FALSE; -} -- cgit v1.2.3