From d36009eb5e942a823220add4aa62b17fd8e27c14 Mon Sep 17 00:00:00 2001 From: Tobias Weimer Date: Sun, 28 Oct 2012 16:31:30 +0000 Subject: AddContactPlus: - restore last account (fixes #149) - fixed crash when no accounts(fixes #126) git-svn-id: http://svn.miranda-ng.org/main/trunk@2101 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/AddContactPlus/src/addcontact.cpp | 36 ++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'plugins') diff --git a/plugins/AddContactPlus/src/addcontact.cpp b/plugins/AddContactPlus/src/addcontact.cpp index d77ba3a07d..3a0a01f946 100644 --- a/plugins/AddContactPlus/src/addcontact.cpp +++ b/plugins/AddContactPlus/src/addcontact.cpp @@ -115,7 +115,7 @@ void AddContactDlgOpts(HWND hdlg, const char* szProto, BOOL bAuthOptsOnly = FALS } } -void AddContactDlgAccounts(HWND hdlg, ADDCONTACTSTRUCT* acs) +bool AddContactDlgAccounts(HWND hdlg, ADDCONTACTSTRUCT* acs) { PROTOACCOUNT** pAccounts; int iRealAccCount, iAccCount = 0, i; @@ -136,10 +136,9 @@ void AddContactDlgAccounts(HWND hdlg, ADDCONTACTSTRUCT* acs) DestroyWindow(hdlg); else EndDialog(hdlg, 0); - return; + return false; } - HICON hIcon; SIZE textSize; RECT rc; int iIndex = 0, cbWidth = 0; @@ -162,7 +161,7 @@ void AddContactDlgAccounts(HWND hdlg, ADDCONTACTSTRUCT* acs) cbei.pszText = pAccounts[i]->tszAccountName; GetTextExtentPoint32(hdc, cbei.pszText, lstrlen(cbei.pszText), &textSize); if (textSize.cx > cbWidth) cbWidth = textSize.cx; - hIcon = (HICON)CallProtoService(pAccounts[i]->szModuleName, PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0); + HICON hIcon = (HICON)CallProtoService(pAccounts[i]->szModuleName, PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0); cbei.iImage = cbei.iSelectedImage = ImageList_AddIcon(hIml, hIcon); DestroyIcon(hIcon); cbei.lParam = (LPARAM)pAccounts[i]->szModuleName; @@ -179,6 +178,8 @@ void AddContactDlgAccounts(HWND hdlg, ADDCONTACTSTRUCT* acs) SendMessage(hdlg, WM_COMMAND, MAKEWPARAM(IDC_PROTO, CBN_SELCHANGE), (LPARAM)GetDlgItem(hdlg, IDC_PROTO)); if (iAccCount == 1) SetFocus(GetDlgItem(hdlg, IDC_USERID)); + + return true; } #define DM_ADDCONTACT_CHANGEICONS WM_USER + 11 @@ -206,10 +207,9 @@ INT_PTR CALLBACK AddContactDlgProc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lp { DBVARIANT dbv; char idstr[4]; - int id; _itoa(groupId, idstr, 10); if (DBGetContactSettingTString(NULL, "CListGroups", idstr, &dbv)) break; - id = SendDlgItemMessage(hdlg, IDC_GROUP, CB_ADDSTRING, 0, (LPARAM)(dbv.ptszVal + 1)); + int id = SendDlgItemMessage(hdlg, IDC_GROUP, CB_ADDSTRING, 0, (LPARAM)(dbv.ptszVal + 1)); SendDlgItemMessage(hdlg, IDC_GROUP, CB_SETITEMDATA, (WPARAM)id, (LPARAM)groupId + 1); DBFreeVariant(&dbv); } @@ -217,12 +217,22 @@ INT_PTR CALLBACK AddContactDlgProc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lp SendDlgItemMessage(hdlg, IDC_GROUP, CB_INSERTSTRING, 0, (LPARAM)TranslateT("None")); SendDlgItemMessage(hdlg, IDC_GROUP, CB_SETCURSEL, 0, 0); - AddContactDlgAccounts(hdlg, acs); - // By default check these checkboxes - CheckDlgButton(hdlg, IDC_ADDED, BST_CHECKED); - CheckDlgButton(hdlg, IDC_AUTH, BST_CHECKED); - AddContactDlgOpts(hdlg, acs->szProto); - EnableWindow(GetDlgItem(hdlg, IDOK), FALSE); + { + DBVARIANT dbv = {0}; + if(!DBGetContactSettingString(NULL,"AddContact","LastProto",&dbv)) + { + acs->szProto = dbv.pszVal; + DBFreeVariant(&dbv); + } + } + if(AddContactDlgAccounts(hdlg, acs)) + { + // By default check these checkboxes + CheckDlgButton(hdlg, IDC_ADDED, BST_CHECKED); + CheckDlgButton(hdlg, IDC_AUTH, BST_CHECKED); + AddContactDlgOpts(hdlg, acs->szProto); + EnableWindow(GetDlgItem(hdlg, IDOK), FALSE); + } break; case WM_COMMAND: @@ -416,6 +426,8 @@ INT_PTR CALLBACK AddContactDlgProc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lp acs = (ADDCONTACTSTRUCT*)GetWindowLongPtr(hdlg, GWLP_USERDATA); if (acs) { + if(acs->szProto) + DBWriteContactSettingString(NULL,"AddContact","LastProto",acs->szProto); if (acs->psr) { mir_free(acs->psr->nick); -- cgit v1.2.3