[Ttssh2-commit] [8220] SSHユーザー名オプションボタンのTABストップを修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 9月 23日 (月) 20:41:18 JST


Revision: 8220
          https://osdn.net/projects/ttssh2/scm/svn/commits/8220
Author:   zmatsuo
Date:     2019-09-23 20:41:18 +0900 (Mon, 23 Sep 2019)
Log Message:
-----------
SSHユーザー名オプションボタンのTABストップを修正

- ユーザー名を全て選択して状態でDELキーで削除したとき
  オプションボタンのTABストップが有効にならならなかった
- r8218 を再整理

Revision Links:
--------------
    https://osdn.net/projects/ttssh2/scm/svn/commits/8218

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/auth.c

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/auth.c
===================================================================
--- trunk/ttssh2/ttxssh/auth.c	2019-09-23 11:41:07 UTC (rev 8219)
+++ trunk/ttssh2/ttxssh/auth.c	2019-09-23 11:41:18 UTC (rev 8220)
@@ -243,62 +243,6 @@
 	}
 }
 
-typedef struct {
-	int tab_focus_entered;
-	WNDPROC proc_org;
-	size_t str_len;
-} username_proc_data_t;
-
-static LRESULT CALLBACK username_proc(HWND hWnd, UINT msg,
-									  WPARAM wParam, LPARAM lParam)
-{
-	username_proc_data_t *data = (username_proc_data_t *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
-	const WNDPROC ProcOrg = data->proc_org;
-	const LRESULT result = CallWindowProc(ProcOrg, hWnd, msg, wParam, lParam);
-
-
-	switch (msg) {
-	case WM_CHAR:
-	case WM_SETTEXT:
-		if (data->tab_focus_entered == 0) {
-			// \x83\x86\x81[\x83U\x81[\x96\xBC\x82\xAA\x93\xFC\x97͂\xB3\x82\xEA\x82Ă\xA2\x82\xBD\x8Fꍇ\x81A\x83I\x83v\x83V\x83\x87\x83\x93\x82\xF0\x8Eg\x82\xA4\x82\xB1\x82Ƃ͂Ȃ\xA2\x82̂ŁA
-			// tab\x82ł̃t\x83H\x81[\x83J\x83X\x88ړ\xAE\x8E\x9E\x81A\x83I\x83v\x83V\x83\x87\x83\x93\x83{\x83^\x83\x93\x82\xF0\x83p\x83X\x82\xB7\x82\xE9\x82悤\x82ɂ\xB7\x82\xE9
-			// \x8F]\x97\x88\x82Ɠ\xAF\x82\xB6\x83L\x81[\x91\x80\x8D\xEC\x82Ń\x86\x81[\x83U\x81[\x96\xBC\x82ƃp\x83X\x83t\x83\x8C\x81[\x83Y\x82\xF0\x93\xFC\x97͉”\\x82Ƃ\xB7\x82\xE9
-			const int len = GetWindowTextLength(hWnd);
-#if 0
-			if (len > 0) {
-				// \x83\x86\x81[\x83U\x81[\x96\xBC\x82\xF0\x93\xFC\x97͂\xB5\x82āATAB\x82\xF0\x89\x9F\x82\xB5\x82\xBD\x82Ƃ\xAB\x82Ɉ\xF8\x82\xC1\x82\xA9\x82\xA9\x82\xC1\x82\xBD\x8A\xB4\x82\xB6\x82\xAA\x82\xB7\x82\xE9\x8Fꍇ\x82\xAA\x82\xA0\x82\xE9
-				// \x82\xBB\x82\xB1\x82ň\xEA\x93x\x82ł\xE0\x95\xB6\x8E\x9A\x93\xFC\x97͂\xAA\x82\xA0\x82\xC1\x82\xBD\x82\xE7\x81ATAB\x83X\x83g\x83b\x83v\x95s\x97v\x82ɓ|\x82\xB7
-				data->tab_focus_entered = 1;
-			}
-#endif
-			if ((data->str_len == 0 && len != 0) ||
-				(data->str_len != 0 && len == 0)) {
-				// \x83\x86\x81[\x83U\x81[\x96\xBC\x82̕\xB6\x8E\x9A\x92\xB7\x82\xAA 0\x82ɂȂ\xE9 or 0\x82ł͂Ȃ\xAD\x82Ȃ\xE9 \x8E\x9E\x82̂ݏ\x88\x97\x9D
-				const HWND dlg = GetParent(hWnd);
-				const HWND hWndOption = GetDlgItem(dlg, IDC_USERNAME_OPTION);
-				LONG_PTR style = GetWindowLongPtr(hWndOption, GWL_STYLE);
-
-				if (len > 0) {
-					// \x95s\x97vtabstop
-					style = style & (~(LONG_PTR)WS_TABSTOP);
-				}
-				else {
-					// \x97vtabstop
-					style = style | WS_TABSTOP;
-				}
-				SetWindowLongPtr(hWndOption, GWL_STYLE, style);
-				data->str_len = len;
-			}
-		}
-		break;
-	case WM_NCDESTROY:
-		free(data);
-		break;
-	}
-	return result;
-}
-
 static void init_auth_dlg(PTInstVar pvar, HWND dlg, BOOL *UseControlChar)
 {
 	const static DlgTextInfo text_info[] = {
@@ -358,19 +302,6 @@
 		SetDlgItemText(dlg, IDC_SSHUSETIS, pvar->ts->UIMsg);
 	}
 
-	// username\x82̃T\x83u\x83N\x83\x89\x83X\x89\xBB
-	{
-		HWND hWndUserName = GetDlgItem(dlg, IDC_SSHUSERNAME);
-		username_proc_data_t *data = (username_proc_data_t *)malloc(sizeof(username_proc_data_t));
-		if (data != NULL) {
-			SetWindowLongPtr(hWndUserName, GWLP_USERDATA, (LONG_PTR)data);
-			data->tab_focus_entered = 0;
-			data->str_len = 0;
-			data->proc_org =
-				(WNDPROC)SetWindowLongPtr(hWndUserName, GWLP_WNDPROC, (LONG_PTR)username_proc);
-		}
-	}
-
 	if (pvar->auth_state.user != NULL) {
 		SetDlgItemText(dlg, IDC_SSHUSERNAME, pvar->auth_state.user);
 		EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
@@ -849,7 +780,6 @@
 }
 
 
-BOOL autologin_sent_none;
 static INT_PTR CALLBACK auth_dlg_proc(HWND dlg, UINT msg, WPARAM wParam,
 									  LPARAM lParam)
 {
@@ -858,9 +788,11 @@
 	const int IDC_TIMER3 = 302; // challenge \x82\xC5 ask4passwd \x82\xC5CheckAuthListFirst \x82\xAA FALSE \x82̂Ƃ\xAB
 	const int autologin_timeout = 10; // \x83~\x83\x8A\x95b
 	PTInstVar pvar;
+	static BOOL autologin_sent_none;
 	static BOOL UseControlChar;
 	static BOOL ShowPassPhrase;
 	static HICON hIconDropdown;
+	static size_t username_str_len;
 	TCHAR uimsg[MAX_UIMSG];
 
 	switch (msg) {
@@ -871,6 +803,7 @@
 
 		UseControlChar = TRUE;
 		ShowPassPhrase = FALSE;
+		username_str_len = 0;
 		init_auth_dlg(pvar, dlg, &UseControlChar);
 
 		// "\x81\xA5"\x89摜\x82\xF0\x83Z\x83b\x83g\x82\xB7\x82\xE9
@@ -1035,35 +968,63 @@
 			return TRUE;
 
 		case IDC_SSHUSERNAME:
-			// \x83\x86\x81[\x83U\x96\xBC\x82\xAA\x83t\x83H\x81[\x83J\x83X\x82\xF0\x8E\xB8\x82\xC1\x82\xBD\x82Ƃ\xAB (2007.9.29 maya)
-			if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) &&
-			    (pvar->ssh_state.status_flags & STATUS_HOST_OK) &&
-			    HIWORD(wParam) == EN_KILLFOCUS) {
-				// \x90ݒ肪\x97L\x8C\xF8\x82ł܂\xBE\x8E\xE6\x82\xE8\x82ɍs\x82\xC1\x82Ă\xA2\x82Ȃ\xA2\x82Ȃ\xE7
-				if (SSHv2(pvar) &&
-					pvar->session_settings.CheckAuthListFirst &&
-					!pvar->tryed_ssh2_authlist) {
-					// \x83_\x83C\x83A\x83\x8D\x83O\x82̃\x86\x81[\x83U\x96\xBC\x82𔽉f
-					if (pvar->auth_state.user == NULL) {
-						pvar->auth_state.user =
-							alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
-					}
+			switch (HIWORD(wParam)) {
+			case EN_KILLFOCUS: {
+				// \x83\x86\x81[\x83U\x96\xBC\x82\xAA\x83t\x83H\x81[\x83J\x83X\x82\xF0\x8E\xB8\x82\xC1\x82\xBD\x82Ƃ\xAB (2007.9.29 maya)
+				if (!(pvar->ssh_state.status_flags & STATUS_DONT_SEND_USER_NAME) &&
+					(pvar->ssh_state.status_flags & STATUS_HOST_OK)) {
+					// \x90ݒ肪\x97L\x8C\xF8\x82ł܂\xBE\x8E\xE6\x82\xE8\x82ɍs\x82\xC1\x82Ă\xA2\x82Ȃ\xA2\x82Ȃ\xE7
+					if (SSHv2(pvar) &&
+						pvar->session_settings.CheckAuthListFirst &&
+						!pvar->tryed_ssh2_authlist) {
+						// \x83_\x83C\x83A\x83\x8D\x83O\x82̃\x86\x81[\x83U\x96\xBC\x82𔽉f
+						if (pvar->auth_state.user == NULL) {
+							pvar->auth_state.user =
+								alloc_control_text(GetDlgItem(dlg, IDC_SSHUSERNAME));
+						}
 
-					// \x83\x86\x81[\x83U\x96\xBC\x82\xAA\x93\xFC\x97͂\xB3\x82\xEA\x82Ă\xA2\x82邩\x83`\x83F\x83b\x83N\x82\xB7\x82\xE9
-					if (strlen(pvar->auth_state.user) == 0) {
-						return FALSE;
-					}
+						// \x83\x86\x81[\x83U\x96\xBC\x82\xAA\x93\xFC\x97͂\xB3\x82\xEA\x82Ă\xA2\x82邩\x83`\x83F\x83b\x83N\x82\xB7\x82\xE9
+						if (strlen(pvar->auth_state.user) == 0) {
+							return FALSE;
+						}
 
-					// \x83\x86\x81[\x83U\x96\xBC\x82\xF0\x95ύX\x82\xB3\x82\xB9\x82Ȃ\xA2
-					EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
-					EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);
+						// \x83\x86\x81[\x83U\x96\xBC\x82\xF0\x95ύX\x82\xB3\x82\xB9\x82Ȃ\xA2
+						EnableWindow(GetDlgItem(dlg, IDC_SSHUSERNAME), FALSE);
+						EnableWindow(GetDlgItem(dlg, IDC_USERNAME_OPTION), FALSE);
 
-					// \x94F\x8F؃\x81\x83\\x83b\x83h none \x82𑗂\xE9
-					do_SSH2_userauth(pvar);
-					return TRUE;
+						// \x94F\x8F؃\x81\x83\\x83b\x83h none \x82𑗂\xE9
+						do_SSH2_userauth(pvar);
+						return TRUE;
+					}
 				}
+				return FALSE;
 			}
+			case EN_CHANGE: {
+				// \x83\x86\x81[\x83U\x81[\x96\xBC\x82\xAA\x93\xFC\x97͂\xB3\x82\xEA\x82Ă\xA2\x82\xBD\x8Fꍇ\x81A\x83I\x83v\x83V\x83\x87\x83\x93\x82\xF0\x8Eg\x82\xA4\x82\xB1\x82Ƃ͂Ȃ\xA2\x82̂ŁA
+				// tab\x82ł̃t\x83H\x81[\x83J\x83X\x88ړ\xAE\x8E\x9E\x81A\x83I\x83v\x83V\x83\x87\x83\x93\x83{\x83^\x83\x93\x82\xF0\x83p\x83X\x82\xB7\x82\xE9\x82悤\x82ɂ\xB7\x82\xE9
+				// \x8F]\x97\x88\x82Ɠ\xAF\x82\xB6\x83L\x81[\x91\x80\x8D\xEC\x82Ń\x86\x81[\x83U\x81[\x96\xBC\x82ƃp\x83X\x83t\x83\x8C\x81[\x83Y\x82\xF0\x93\xFC\x97͉”\\x82Ƃ\xB7\x82\xE9
+				HWND hWnd = (HWND)lParam;
+				const int len = GetWindowTextLength(hWnd);
+				if ((username_str_len == 0 && len != 0) ||
+					(username_str_len != 0 && len == 0)) {
+					// \x83\x86\x81[\x83U\x81[\x96\xBC\x82̕\xB6\x8E\x9A\x92\xB7\x82\xAA 0\x82ɂȂ\xE9 or 0\x82ł͂Ȃ\xAD\x82Ȃ\xE9 \x8E\x9E\x82̂ݏ\x88\x97\x9D
+					const HWND hWndOption = GetDlgItem(dlg, IDC_USERNAME_OPTION);
+					LONG_PTR style = GetWindowLongPtr(hWndOption, GWL_STYLE);
 
+					if (len > 0) {
+						// \x95s\x97vtabstop
+						style = style & (~(LONG_PTR)WS_TABSTOP);
+					}
+					else {
+						// \x97vtabstop
+						style = style | WS_TABSTOP;
+					}
+					SetWindowLongPtr(hWndOption, GWL_STYLE, style);
+				}
+				username_str_len = len;
+				return FALSE;
+			}
+			}
 			return FALSE;
 
 		case IDC_SSHUSEPASSWORD:


Ttssh2-commit メーリングリストの案内
Back to archive index