summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Weimer <wishmaster51@googlemail.com>2012-10-28 16:31:30 +0000
committerTobias Weimer <wishmaster51@googlemail.com>2012-10-28 16:31:30 +0000
commitd36009eb5e942a823220add4aa62b17fd8e27c14 (patch)
tree9cdc3d1eafb73edd67af9d704329deb09ad74430
parent671e64f5d5461de259f8cadc38bb5014d9dc9e4d (diff)
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
-rw-r--r--plugins/AddContactPlus/src/addcontact.cpp36
1 files changed, 24 insertions, 12 deletions
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);