HANDLE add_contextmenu(MCONTACT hContact) { CLISTMENUITEM mi; UNREFERENCED_PARAMETER(hContact); if (!HasVoiceService()) { mi = CallItem(); hMenuCallItem = Menu_AddContactMenuItem(&mi); mi = HupItem(); hMenuCallHangup = Menu_AddContactMenuItem(&mi); } mi = SkypeOutCallItem(); hMenuSkypeOutCallItem = Menu_AddContactMenuItem(&mi); if (!HasVoiceService()) { mi = HoldCallItem(); hMenuHoldCallItem = Menu_AddContactMenuItem(&mi); } // We cannot use flag PF1_FILESEND for sending files, as Skype opens its own // sendfile-Dialog. if (!bHasFileXfer) { mi = FileTransferItem(); hMenuFileTransferItem = Menu_AddContactMenuItem(&mi); } mi = ChatInitItem(); hMenuChatInitItem = Menu_AddContactMenuItem(&mi); mi = BlockContactItem(); hMenuBlockContactItem = Menu_AddContactMenuItem(&mi); ZeroMemory(&mi, sizeof(mi)); mi.cbSize = sizeof(mi); mi.position = -2000005000; mi.flags = CMIF_TCHAR; mi.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_IMPORT)); mi.pszContactOwner = SKYPE_PROTONAME; mi.ptszName = LPGENT("Import Skype history"); mi.pszService = SKYPE_IMPORTHISTORY; return Menu_AddContactMenuItem(&mi); }
int __cdecl PrebuildContactMenu(WPARAM wParam, LPARAM lParam) { DBVARIANT dbv; CLISTMENUITEM mi; char *szProto; BOOL callAvailable = FALSE; BOOL hangupAvailable = FALSE; UNREFERENCED_PARAMETER(lParam); if (!(szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0))) return 0; if (!HasVoiceService()) { // Clear hold-Item in case it exists mi=HoldCallItem(); mi.flags|=CMIM_ALL; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuHoldCallItem,(LPARAM)&mi); } if (!strcmp(szProto, SKYPE_PROTONAME)) { if (!HasVoiceService()) { if (!DBGetContactSetting((HANDLE)wParam, SKYPE_PROTONAME, "CallId", &dbv)) { if (DBGetContactSettingByte((HANDLE)wParam, SKYPE_PROTONAME, "OnHold", 0)) mi=ResumeCallItem(); else mi=HoldCallItem(); mi.flags=CMIM_ALL; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuHoldCallItem,(LPARAM)&mi); callAvailable = FALSE; hangupAvailable = TRUE; DBFreeVariant(&dbv); } else { callAvailable = TRUE; hangupAvailable = FALSE; } if (DBGetContactSettingByte((HANDLE)wParam, SKYPE_PROTONAME, "ChatRoom", 0)!=0) { callAvailable = FALSE; hangupAvailable = FALSE; } mi = CallItem(); mi.flags |= CMIM_ALL | (!callAvailable?CMIF_HIDDEN:0); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuCallItem,(LPARAM)&mi); mi = HupItem(); mi.flags |= CMIM_ALL | (!hangupAvailable?CMIF_HIDDEN:0); CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuCallHangup,(LPARAM)&mi); } // Clear SkypeOut menu in case it exists mi=SkypeOutCallItem(); mi.flags|=CMIM_ALL; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuSkypeOutCallItem,(LPARAM)&mi); // File sending and groupchat-creation works starting with protocol version 5 if (protocol>=5) { mi=FileTransferItem(); if (DBGetContactSettingByte((HANDLE)wParam, SKYPE_PROTONAME, "ChatRoom", 0)==0) mi.flags ^= CMIF_HIDDEN; mi.flags |= CMIM_FLAGS; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuFileTransferItem,(LPARAM)&mi); } if (protocol>=5 || bIsImoproxy) { mi=ChatInitItem(); if (DBGetContactSettingByte(NULL, SKYPE_PROTONAME, "UseGroupchat", 0) && DBGetContactSettingByte((HANDLE)wParam, SKYPE_PROTONAME, "ChatRoom", 0)==0) mi.flags ^= CMIF_HIDDEN; mi.flags |= CMIM_FLAGS; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuChatInitItem,(LPARAM)&mi); } } else if (bSkypeOut) { if (!DBGetContactSetting((HANDLE)wParam, SKYPE_PROTONAME, "CallId", &dbv)) { mi=SkypeOutHupItem(); DBFreeVariant(&dbv); } else { mi=SkypeOutCallItem(); if(!DBGetContactSetting((HANDLE)wParam,"UserInfo","MyPhone0",&dbv)) { DBFreeVariant(&dbv); mi.flags=0; } } mi.flags|=CMIM_ALL; CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)(HANDLE)hMenuSkypeOutCallItem,(LPARAM)&mi); } return 0; }