HANDLE add_contextmenu(MCONTACT) { CLISTMENUITEM mi = CallItem(); hMenuCallItem = Menu_AddContactMenuItem(&mi); mi = HupItem(); hMenuCallHangup = Menu_AddContactMenuItem(&mi); mi = SkypeOutCallItem(); hMenuSkypeOutCallItem = Menu_AddContactMenuItem(&mi); mi = HoldCallItem(); hMenuHoldCallItem = Menu_AddContactMenuItem(&mi); // We cannot use flag PF1_FILESEND for sending files, as Skype opens its own // sendfile-Dialog. mi = FileTransferItem(); hMenuFileTransferItem = Menu_AddContactMenuItem(&mi); mi = ChatInitItem(); hMenuChatInitItem = Menu_AddContactMenuItem(&mi); mi = BlockContactItem(); hMenuBlockContactItem = Menu_AddContactMenuItem(&mi); memset(&mi, 0, 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); }
HANDLE add_contextmenu(HANDLE hContact) { CLISTMENUITEM mi; UNREFERENCED_PARAMETER(hContact); if (!HasVoiceService()) { mi=CallItem(); hMenuCallItem=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0,(LPARAM)&mi); mi=HupItem(); hMenuCallHangup=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi); } mi=SkypeOutCallItem(); hMenuSkypeOutCallItem=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0,(LPARAM)&mi); if (!HasVoiceService()) { mi=HoldCallItem(); hMenuHoldCallItem=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0,(LPARAM)&mi); } // We cannot use flag PF1_FILESEND for sending files, as Skype opens its own // sendfile-Dialog. mi=FileTransferItem(); hMenuFileTransferItem=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0,(LPARAM)&mi); mi=ChatInitItem(); hMenuChatInitItem=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0,(LPARAM)&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 (HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM, 0,(LPARAM)&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; }
int __cdecl PrebuildContactMenu(WPARAM wParam, LPARAM) { MCONTACT hContact = (MCONTACT) wParam; char *szProto = GetContactProto(hContact); if (!szProto) return 0; // Clear hold-Item in case it exists CLISTMENUITEM mi = HoldCallItem(); mi.flags |= CMIM_ALL; Menu_ModifyItem(hMenuHoldCallItem, &mi); DBVARIANT dbv; BOOL callAvailable = FALSE; BOOL hangupAvailable = FALSE; if (!strcmp(szProto, SKYPE_PROTONAME)) { if (!db_get(hContact, SKYPE_PROTONAME, "CallId", &dbv)) { if (db_get_b(hContact, SKYPE_PROTONAME, "OnHold", 0)) mi = ResumeCallItem(); else mi = HoldCallItem(); mi.flags = CMIM_ALL; Menu_ModifyItem(hMenuHoldCallItem, &mi); callAvailable = FALSE; hangupAvailable = TRUE; db_free(&dbv); } else { callAvailable = TRUE; hangupAvailable = FALSE; } if (db_get_b(hContact, SKYPE_PROTONAME, "ChatRoom", 0) != 0) { callAvailable = FALSE; hangupAvailable = FALSE; } mi = CallItem(); mi.flags |= CMIM_ALL | (!callAvailable ? CMIF_HIDDEN : 0); Menu_ModifyItem(hMenuCallItem, &mi); mi = HupItem(); mi.flags |= CMIM_ALL | (!hangupAvailable ? CMIF_HIDDEN : 0); Menu_ModifyItem(hMenuCallHangup, &mi); // Clear SkypeOut menu in case it exists mi = SkypeOutCallItem(); mi.flags |= CMIM_ALL; Menu_ModifyItem(hMenuSkypeOutCallItem, &mi); // File sending and groupchat-creation works starting with protocol version 5 if (protocol >= 5) { mi = FileTransferItem(); if (db_get_b(hContact, SKYPE_PROTONAME, "ChatRoom", 0) == 0) mi.flags ^= CMIF_HIDDEN; mi.flags |= CMIM_FLAGS; Menu_ModifyItem(hMenuFileTransferItem, &mi); } if (protocol >= 5 || bIsImoproxy) { mi = ChatInitItem(); if (db_get_b(NULL, SKYPE_PROTONAME, "UseGroupchat", 0) && db_get_b(hContact, SKYPE_PROTONAME, "ChatRoom", 0) == 0) mi.flags ^= CMIF_HIDDEN; mi.flags |= CMIM_FLAGS; Menu_ModifyItem(hMenuChatInitItem, &mi); mi = BlockContactItem(); mi.flags ^= CMIF_HIDDEN; mi.flags |= CMIM_FLAGS | CMIM_NAME; if (db_get_b(hContact, SKYPE_PROTONAME, "IsBlocked", 0) == 1) mi.ptszName = LPGENT("Unblock contact"); Menu_ModifyItem(hMenuBlockContactItem, &mi); } } else if (bSkypeOut) { if (!db_get(hContact, SKYPE_PROTONAME, "CallId", &dbv)) { mi = SkypeOutHupItem(); db_free(&dbv); } else { mi = SkypeOutCallItem(); if (!db_get(hContact, "UserInfo", "MyPhone0", &dbv)) { db_free(&dbv); mi.flags = 0; } } mi.flags |= CMIM_ALL; Menu_ModifyItem(hMenuSkypeOutCallItem, &mi); } return 0; }