fixed bug #1652075 - ONLY_NUMBERS Flag (Install Options Plugin) bug
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4922 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
618bfabd4a
commit
0221765d39
1 changed files with 72 additions and 14 deletions
|
@ -160,6 +160,8 @@ struct FieldType {
|
|||
|
||||
int nField; // field number in INI file
|
||||
char *pszHwndEntry; // "HWND" or "HWND2"
|
||||
|
||||
long wndProc;
|
||||
};
|
||||
|
||||
// initial buffer size. buffers will grow as required.
|
||||
|
@ -593,21 +595,21 @@ LRESULT WINAPI WMCommandProc(HWND hWnd, UINT id, HWND hwndCtl, UINT codeNotify)
|
|||
|
||||
switch (pField->nType)
|
||||
{
|
||||
case FIELD_BROWSEBUTTON:
|
||||
case FIELD_LINK:
|
||||
case FIELD_BUTTON:
|
||||
case FIELD_CHECKBOX:
|
||||
case FIELD_RADIOBUTTON:
|
||||
if (codeNotify != BN_CLICKED)
|
||||
case FIELD_BROWSEBUTTON:
|
||||
case FIELD_LINK:
|
||||
case FIELD_BUTTON:
|
||||
case FIELD_CHECKBOX:
|
||||
case FIELD_RADIOBUTTON:
|
||||
if (codeNotify != BN_CLICKED)
|
||||
return 0;
|
||||
break;
|
||||
case FIELD_COMBOBOX:
|
||||
case FIELD_LISTBOX:
|
||||
if (codeNotify != LBN_SELCHANGE) // LBN_SELCHANGE == CBN_SELCHANGE
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
case FIELD_COMBOBOX:
|
||||
case FIELD_LISTBOX:
|
||||
if (codeNotify != LBN_SELCHANGE) // LBN_SELCHANGE == CBN_SELCHANGE
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (pFields[nIdx].nType == FIELD_BROWSEBUTTON)
|
||||
|
@ -878,6 +880,57 @@ int WINAPI StaticLINKWindowProc(HWND hWin, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
}
|
||||
#endif
|
||||
|
||||
int WINAPI NumbersOnlyPasteWndProc(HWND hWin, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int nIdx = FindControlIdx(GetDlgCtrlID(hWin));
|
||||
if (nIdx < 0)
|
||||
return 0;
|
||||
|
||||
FieldType *pField = pFields + nIdx;
|
||||
|
||||
if (uMsg == WM_PASTE)
|
||||
{
|
||||
if (OpenClipboard(hWin))
|
||||
{
|
||||
HGLOBAL hData = GetClipboardData(CF_TEXT);
|
||||
|
||||
if (hData)
|
||||
{
|
||||
char *lpData = (char *) GlobalLock(hData);
|
||||
if (lpData)
|
||||
{
|
||||
int iLen = lstrlen(lpData);
|
||||
char *lpFilteredData = (char *) MALLOC(iLen + 1);
|
||||
|
||||
if (lpFilteredData)
|
||||
{
|
||||
for (int i = 0, j = 0; i < iLen; i++)
|
||||
{
|
||||
if (lpData[i] >= '0' && lpData[i] <= '9')
|
||||
{
|
||||
lpFilteredData[j] = lpData[i];
|
||||
j++;
|
||||
lpFilteredData[j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
SendMessage(hWin, EM_REPLACESEL, TRUE, (LPARAM) lpFilteredData);
|
||||
FREE(lpFilteredData);
|
||||
}
|
||||
|
||||
GlobalUnlock(hData);
|
||||
}
|
||||
}
|
||||
|
||||
CloseClipboard();
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return CallWindowProc((WNDPROC) pField->wndProc, hWin, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
int old_cancel_visible;
|
||||
|
||||
int WINAPI createCfgDlg()
|
||||
|
@ -1160,6 +1213,11 @@ int WINAPI createCfgDlg()
|
|||
case FIELD_FILEREQUEST:
|
||||
case FIELD_DIRREQUEST:
|
||||
mySendMessage(hwCtrl, EM_LIMITTEXT, (WPARAM)pField->nMaxLength, (LPARAM)0);
|
||||
if (dwStyle & ES_NUMBER)
|
||||
{
|
||||
pField->wndProc = GetWindowLong(hwCtrl, GWL_WNDPROC);
|
||||
SetWindowLong(hwCtrl, GWL_WNDPROC, (long) NumbersOnlyPasteWndProc);
|
||||
}
|
||||
break;
|
||||
|
||||
case FIELD_CHECKBOX:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue