diff options
Diffstat (limited to 'plugins/BasicHistory/src/HotkeyHelper.cpp')
| -rw-r--r-- | plugins/BasicHistory/src/HotkeyHelper.cpp | 141 | 
1 files changed, 63 insertions, 78 deletions
diff --git a/plugins/BasicHistory/src/HotkeyHelper.cpp b/plugins/BasicHistory/src/HotkeyHelper.cpp index 29f916ea3c..89db08013e 100644 --- a/plugins/BasicHistory/src/HotkeyHelper.cpp +++ b/plugins/BasicHistory/src/HotkeyHelper.cpp @@ -21,91 +21,76 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.  #include "resource.h"
  #include "Options.h"
 -LRESULT CALLBACK HotkeySubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
 -
 -void RegisterHotkeyControl(HWND control)
 -{
 -	WNDPROC oldProc = (WNDPROC)SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR) HotkeySubclassProc);
 -	SetWindowLongPtr(control, GWLP_USERDATA, (LONG_PTR) oldProc);
 -}
 -
 -void UnregisterHotkeyControl(HWND control)
 -{
 -	WNDPROC oldProc = (WNDPROC)GetWindowLongPtr(control, GWLP_USERDATA);
 -	if(oldProc != NULL)
 -	{
 -		SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR) oldProc);
 -		SetWindowLongPtr(control, GWLP_USERDATA, NULL);
 -	}
 -}
 -
  static bool isPresed = false;
 -LRESULT CALLBACK HotkeySubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 +static LRESULT CALLBACK HotkeySubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  {
 -	WNDPROC oldProc = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA);
 -
  	switch (msg) {
 -		case WM_NCPAINT:
 -			if(Options::instance->noFindBorder && GetDlgCtrlID(hwnd) == IDC_FIND_TEXT)
 -				return 0;
 -			break;
 -		case WM_CHAR:
 -		case WM_SYSCHAR:
 -		case WM_UNICHAR:
 -		case WM_DEADCHAR:
 -		case WM_SYSDEADCHAR:
 -			if(isPresed)
 -				return 0;
 -			break;
 -		case WM_KEYUP:
 -		case WM_SYSKEYUP:
 -			if(isPresed)
 +	case WM_NCPAINT:
 +		if(Options::instance->noFindBorder && GetDlgCtrlID(hwnd) == IDC_FIND_TEXT)
 +			return 0;
 +		break;
 +	case WM_CHAR:
 +	case WM_SYSCHAR:
 +	case WM_UNICHAR:
 +	case WM_DEADCHAR:
 +	case WM_SYSDEADCHAR:
 +		if(isPresed)
 +			return 0;
 +		break;
 +	case WM_KEYUP:
 +	case WM_SYSKEYUP:
 +		if(isPresed)
 +		{
 +			isPresed = false;
 +			return 0;
 +		}
 +		break;
 +	case WM_KEYDOWN:
 +	case WM_SYSKEYDOWN:
 +		{
 +			isPresed = false;
 +			HWND hwndParent = GetParent(hwnd);
 +			MSGFILTER filter;
 +			filter.msg = msg;
 +			filter.lParam = lParam;
 +			filter.wParam = wParam;
 +			filter.nmhdr.hwndFrom = hwnd;
 +			filter.nmhdr.code = EN_MSGFILTER;
 +			filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
 +			if(SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter))
  			{
 -				isPresed = false;
 +				isPresed = true;
  				return 0;
  			}
 -			break;
 -		case WM_KEYDOWN:
 -		case WM_SYSKEYDOWN:
 -			{
 -				isPresed = false;
 -				HWND hwndParent = GetParent(hwnd);
 -				MSGFILTER filter;
 -				filter.msg = msg;
 -				filter.lParam = lParam;
 -				filter.wParam = wParam;
 -				filter.nmhdr.hwndFrom = hwnd;
 -				filter.nmhdr.code = EN_MSGFILTER;
 -				filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
 -				if(SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter))
 -				{
 -					isPresed = true;
 -					return 0;
 -				}
 -				LRESULT res = CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
 -				filter.nmhdr.code = CLN_MYSELCHANGED;
 -				SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
 -				return res;
 -			}
 -			break;
 -		case WM_LBUTTONDOWN:
 -			{
 -				HWND hwndParent = GetParent(hwnd);
 -				MSGFILTER filter;
 -				filter.msg = msg;
 -				filter.lParam = lParam;
 -				filter.wParam = wParam;
 -				filter.nmhdr.hwndFrom = hwnd;
 -				filter.nmhdr.code = CLN_MYSELCHANGED;
 -				filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
 +			LRESULT res = mir_callNextSubclass(hwnd, HotkeySubclassProc, msg, wParam, lParam);
 +			filter.nmhdr.code = CLN_MYSELCHANGED;
 +			SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
 +			return res;
 +		}
 +		break;
 +	case WM_LBUTTONDOWN:
 +		{
 +			HWND hwndParent = GetParent(hwnd);
 +			MSGFILTER filter;
 +			filter.msg = msg;
 +			filter.lParam = lParam;
 +			filter.wParam = wParam;
 +			filter.nmhdr.hwndFrom = hwnd;
 +			filter.nmhdr.code = CLN_MYSELCHANGED;
 +			filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
 -				LRESULT res = CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
 -				SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
 -				return res;
 -			}
 -			break;
 +			LRESULT res = mir_callNextSubclass(hwnd, HotkeySubclassProc, msg, wParam, lParam);
 +			SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
 +			return res;
 +		}
 +		break;
  	}
 -	return CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
 -}
\ No newline at end of file +	return mir_callNextSubclass(hwnd, HotkeySubclassProc, msg, wParam, lParam);
 +}
 +
 +void RegisterHotkeyControl(HWND control)
 +{
 +	mir_subclassWindow(control, HotkeySubclassProc);
 +}
  | 
