diff options
| author | George Hazan <george.hazan@gmail.com> | 2014-12-13 19:53:55 +0000 | 
|---|---|---|
| committer | George Hazan <george.hazan@gmail.com> | 2014-12-13 19:53:55 +0000 | 
| commit | 087300b294b87ab2705244908ec932a5a8c98262 (patch) | |
| tree | 2f95e894f876d3d8876ac8f1902edc994b9992bd /plugins/TabSRMM/src | |
| parent | cb6be442595479bfd577d4cc7399861ff246f5e7 (diff) | |
fix for the url extractor
git-svn-id: http://svn.miranda-ng.org/main/trunk@11377 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/TabSRMM/src')
| -rw-r--r-- | plugins/TabSRMM/src/chat/window.cpp | 1 | ||||
| -rw-r--r-- | plugins/TabSRMM/src/infopanel.cpp | 9 | ||||
| -rw-r--r-- | plugins/TabSRMM/src/msgdialog.cpp | 26 | ||||
| -rw-r--r-- | plugins/TabSRMM/src/utils.cpp | 21 | ||||
| -rw-r--r-- | plugins/TabSRMM/src/utils.h | 2 | 
5 files changed, 23 insertions, 36 deletions
| diff --git a/plugins/TabSRMM/src/chat/window.cpp b/plugins/TabSRMM/src/chat/window.cpp index 0dc798560b..1f320d304a 100644 --- a/plugins/TabSRMM/src/chat/window.cpp +++ b/plugins/TabSRMM/src/chat/window.cpp @@ -204,6 +204,7 @@ bool IsStringValidLink(TCHAR* pszText)  {  	if (pszText == NULL)  		return false; +	  	if (mir_tstrlen(pszText) < 5 || _tcschr(pszText, '"'))  		return false; diff --git a/plugins/TabSRMM/src/infopanel.cpp b/plugins/TabSRMM/src/infopanel.cpp index 3c99a77283..68d8d58d04 100644 --- a/plugins/TabSRMM/src/infopanel.cpp +++ b/plugins/TabSRMM/src/infopanel.cpp @@ -1575,11 +1575,10 @@ INT_PTR CALLBACK CTip::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam  			switch (((ENLINK*)lParam)->msg) {
  			case WM_LBUTTONUP:
  				ENLINK *e = reinterpret_cast<ENLINK *>(lParam);
 -				const TCHAR *tszUrl = Utils::extractURLFromRichEdit(e, m_hRich);
 -				if (tszUrl) {
 -					CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW | OUF_TCHAR, (LPARAM)tszUrl);
 -					mir_free(const_cast<TCHAR *>(tszUrl));
 -				}
 +				ptrT tszUrl(Utils::extractURLFromRichEdit(e, m_hRich));
 +				if (tszUrl)
 +					CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW | OUF_TCHAR, tszUrl);
 +
  				::DestroyWindow(hwnd);
  			}
  		}
 diff --git a/plugins/TabSRMM/src/msgdialog.cpp b/plugins/TabSRMM/src/msgdialog.cpp index 0b14a60e49..a97008bf54 100644 --- a/plugins/TabSRMM/src/msgdialog.cpp +++ b/plugins/TabSRMM/src/msgdialog.cpp @@ -2064,24 +2064,12 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP  				case WM_RBUTTONDOWN:  				case WM_LBUTTONUP:  					{ -						CHARRANGE sel; -						SendDlgItemMessage(hwndDlg, IDC_LOG, EM_EXGETSEL, 0, (LPARAM)&sel); -						if (sel.cpMin != sel.cpMax) -							break; - -						TEXTRANGEW tr; -						tr.chrg = ((ENLINK*)lParam)->chrg; -						tr.lpstrText = (TCHAR*)_alloca(sizeof(TCHAR)*(tr.chrg.cpMax - tr.chrg.cpMin + 8)); -						SendDlgItemMessage(hwndDlg, IDC_LOG, EM_GETTEXTRANGE, 0, (LPARAM)&tr); -						if (_tcschr(tr.lpstrText, '@') != NULL && _tcschr(tr.lpstrText, ':') == NULL && _tcschr(tr.lpstrText, '/') == NULL) { -							memmove(tr.lpstrText + 7, tr.lpstrText, tr.chrg.cpMax - tr.chrg.cpMin + 1); -							memcpy(tr.lpstrText, _T("mailto:"), 7); -						} -						if (!IsStringValidLink(tr.lpstrText)) +						ptrT tszUrl(Utils::extractURLFromRichEdit((ENLINK*)lParam, GetDlgItem(hwndDlg, IDC_LOG))); +						if (!IsStringValidLink(tszUrl))  							break;  						if (((ENLINK*)lParam)->msg != WM_RBUTTONDOWN) { -							CallService(MS_UTILS_OPENURL, OUF_TCHAR, (LPARAM)tr.lpstrText); +							CallService(MS_UTILS_OPENURL, OUF_TCHAR, tszUrl);  							SetFocus(GetDlgItem(hwndDlg, IDC_MESSAGE));  							break;  						} @@ -2093,11 +2081,11 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP  						ClientToScreen(((NMHDR*)lParam)->hwndFrom, &pt);  						switch (TrackPopupMenu(hSubMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hwndDlg, NULL)) {  						case IDM_OPENNEW: -							CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW | OUF_TCHAR, (LPARAM)tr.lpstrText); +							CallService(MS_UTILS_OPENURL, OUF_NEWWINDOW | OUF_TCHAR, tszUrl);  							break;  						case IDM_OPENEXISTING: -							CallService(MS_UTILS_OPENURL, OUF_TCHAR, (LPARAM)tr.lpstrText); +							CallService(MS_UTILS_OPENURL, OUF_TCHAR, tszUrl);  							break;  						case IDM_COPYLINK: @@ -2105,9 +2093,9 @@ INT_PTR CALLBACK DlgProcMessage(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP  								break;  							EmptyClipboard(); -							HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(TCHAR)*(mir_tstrlen(tr.lpstrText) + 1)); +							HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(TCHAR)*(mir_tstrlen(tszUrl) + 1));  							TCHAR *buf = (TCHAR*)GlobalLock(hData); -							mir_tstrcpy(buf, tr.lpstrText); +							mir_tstrcpy(buf, tszUrl);  							GlobalUnlock(hData);  							SetClipboardData(CF_UNICODETEXT, hData);  							CloseClipboard(); diff --git a/plugins/TabSRMM/src/utils.cpp b/plugins/TabSRMM/src/utils.cpp index 960def80c4..80bded6da8 100644 --- a/plugins/TabSRMM/src/utils.cpp +++ b/plugins/TabSRMM/src/utils.cpp @@ -959,23 +959,22 @@ bool Utils::extractResource(const HMODULE h, const UINT uID, const TCHAR *tszNam  // @param 	hwndRich -  rich edit window handle
  // @return	wchar_t*	extracted URL
 -const wchar_t* Utils::extractURLFromRichEdit(const ENLINK* _e, const HWND hwndRich)
 +TCHAR* Utils::extractURLFromRichEdit(const ENLINK* _e, const HWND hwndRich)
  {
 -	TEXTRANGEW 	tr = {0};
 -	CHARRANGE 	sel = {0};
 -
 -	::SendMessageW(hwndRich, EM_EXGETSEL, 0, (LPARAM)&sel);
 +	CHARRANGE sel = {0};
 +	::SendMessage(hwndRich, EM_EXGETSEL, 0, (LPARAM)&sel);
  	if (sel.cpMin != sel.cpMax)
  		return 0;
 +	TEXTRANGE tr;
  	tr.chrg = _e->chrg;
 -	tr.lpstrText = (wchar_t *)mir_alloc(2 * (tr.chrg.cpMax - tr.chrg.cpMin + 8));
 -	::SendMessageW(hwndRich, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
 -	if (wcschr(tr.lpstrText, '@') != NULL && wcschr(tr.lpstrText, ':') == NULL && wcschr(tr.lpstrText, '/') == NULL) {
 -		::memmove(tr.lpstrText + 7, tr.lpstrText, sizeof(wchar_t) * (tr.chrg.cpMax - tr.chrg.cpMin + 1));
 -		::memcpy(tr.lpstrText, L"mailto:", 7 * sizeof(wchar_t));
 +	tr.lpstrText = (TCHAR*)mir_alloc(sizeof(TCHAR) * (tr.chrg.cpMax - tr.chrg.cpMin + 8));
 +	::SendMessage(hwndRich, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
 +	if (_tcschr(tr.lpstrText, '@') != NULL && _tcschr(tr.lpstrText, ':') == NULL && _tcschr(tr.lpstrText, '/') == NULL) {
 +		mir_tstrncpy(tr.lpstrText, _T("mailto:"), 7);
 +		mir_tstrncpy(tr.lpstrText + 7, tr.lpstrText, tr.chrg.cpMax - tr.chrg.cpMin + 1);
  	}
 -	return(tr.lpstrText);
 +	return tr.lpstrText;
  }
  /////////////////////////////////////////////////////////////////////////////////////////
 diff --git a/plugins/TabSRMM/src/utils.h b/plugins/TabSRMM/src/utils.h index 34b4c5039d..35d91c1b9a 100644 --- a/plugins/TabSRMM/src/utils.h +++ b/plugins/TabSRMM/src/utils.h @@ -107,7 +107,7 @@ public:  	static HMODULE  loadSystemLibrary(const wchar_t* szFilename);
  	static INT_PTR  CALLBACK PopupDlgProcError(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 -	static LPCTSTR  extractURLFromRichEdit(const ENLINK* _e, const HWND hwndRich);
 +	static LPTSTR   extractURLFromRichEdit(const ENLINK* _e, const HWND hwndRich);
  	static size_t   CopyToClipBoard(const wchar_t *str, const HWND hwndOwner);
 | 
