[Ttssh2-commit] [8218] SSHユーザ認証ダイアログで、ユーザ欄からTABキーでパスフレーズ欄への移動に遅延がある問題を改善した。

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2019年 9月 22日 (日) 20:00:32 JST


Revision: 8218
          https://osdn.net/projects/ttssh2/scm/svn/commits/8218
Author:   yutakapon
Date:     2019-09-22 20:00:31 +0900 (Sun, 22 Sep 2019)
Log Message:
-----------
SSHユーザ認証ダイアログで、ユーザ欄からTABキーでパスフレーズ欄への移動に遅延がある問題を改善した。

Modified Paths:
--------------
    trunk/doc/en/html/about/history.html
    trunk/doc/ja/html/about/history.html
    trunk/ttssh2/ttxssh/auth.c

-------------- next part --------------
Modified: trunk/doc/en/html/about/history.html
===================================================================
--- trunk/doc/en/html/about/history.html	2019-09-22 09:40:24 UTC (rev 8217)
+++ trunk/doc/en/html/about/history.html	2019-09-22 11:00:31 UTC (rev 8218)
@@ -3221,6 +3221,7 @@
       <li>The same messages may be included on MessageBox displaying.</li>
       <li>When the network is disconnected from SSH server side, an application fault may be occurred while known_hosts dialog is shown.</li>
       <li>SSH1: The <a href="../commandline/ttssh.html#nosecuritywarning">/nosecuritywarning</a> option does not work well.</li>
+      <li>The problem is improved in the user authentication dialog that the delay occurs when the focus is moved from the user name to passphrase with TAB key.</li>
     </ul>
   </li>
 </ul>

Modified: trunk/doc/ja/html/about/history.html
===================================================================
--- trunk/doc/ja/html/about/history.html	2019-09-22 09:40:24 UTC (rev 8217)
+++ trunk/doc/ja/html/about/history.html	2019-09-22 11:00:31 UTC (rev 8218)
@@ -3227,6 +3227,7 @@
       <li>\x83\x81\x83b\x83Z\x81[\x83W\x83{\x83b\x83N\x83X\x82̕\\x8E\xA6\x82ɓ\xAF\x88ꃁ\x83b\x83Z\x81[\x83W\x82\xAA\x95\xA1\x90\x94\x8A܂܂\xEA\x82邱\x82Ƃ\xAA\x82\xA0\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li>
       <li>known_hosts\x83_\x83C\x83A\x83\x8D\x83O\x82̕\\x8E\xA6\x92\x86\x82\xC9SSH\x83T\x81[\x83o\x91\xA4\x82\xA9\x82\xE7\x83l\x83b\x83g\x83\x8F\x81[\x83N\x90ؒf\x82\xB3\x82\xEA\x82\xE9\x82ƁA\x83A\x83v\x83\x8A\x82\xAA\x83N\x83\x89\x83b\x83V\x83\x85\x82\xB7\x82邱\x82Ƃ\xAA\x82\xA0\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li>
       <li>SSH1: <a href="../commandline/ttssh.html#nosecuritywarning">/nosecuritywarning</a>\x83I\x83v\x83V\x83\x87\x83\x93\x82\xAA\x8B@\x94\\x82\xB5\x82Ă\xA2\x82Ȃ\xA9\x82\xC1\x82\xBD\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li>
+      <li>\x83\x86\x81[\x83U\x94F\x8F؃_\x83C\x83A\x83\x8D\x83O\x82ŁA\x83\x86\x81[\x83U\x97\x93\x82\xA9\x82\xE7TAB\x83L\x81[\x82Ńp\x83X\x83t\x83\x8C\x81[\x83Y\x97\x93\x82ւ̈ړ\xAE\x82ɒx\x89\x84\x82\xAA\x82\xA0\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x89\xFC\x91P\x82\xB5\x82\xBD\x81B</li>
     </ul>
   </li>
 </ul>

Modified: trunk/ttssh2/ttxssh/auth.c
===================================================================
--- trunk/ttssh2/ttxssh/auth.c	2019-09-22 09:40:24 UTC (rev 8217)
+++ trunk/ttssh2/ttxssh/auth.c	2019-09-22 11:00:31 UTC (rev 8218)
@@ -243,31 +243,59 @@
 	}
 }
 
+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)
 {
-	const WNDPROC ProcOrg = (WNDPROC)GetWindowLongPtr(hWnd, GWLP_USERDATA);
+	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: {
-		// \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 HWND dlg = GetParent(hWnd);
-		const HWND hWndOption = GetDlgItem(dlg, IDC_USERNAME_OPTION);
-		const int len = GetWindowTextLength(hWnd);
-		LONG_PTR style = GetWindowLongPtr(hWndOption, GWL_STYLE);
-		if (len > 0) {
-			// \x95s\x97vtabstop
-			style = style & (~(LONG_PTR)WS_TABSTOP);
-		} else {
-			// \x97vtabstop
-			style = style | WS_TABSTOP;
+	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;
+			}
 		}
-		SetWindowLongPtr(hWndOption, GWL_STYLE, style);
+		break;
+	case WM_NCDESTROY:
+		free(data);
+		break;
 	}
-	}
 	return result;
 }
 
@@ -333,9 +361,14 @@
 	// username\x82̃T\x83u\x83N\x83\x89\x83X\x89\xBB
 	{
 		HWND hWndUserName = GetDlgItem(dlg, IDC_SSHUSERNAME);
-		LONG_PTR ProcOrg =
-			SetWindowLongPtr(hWndUserName, GWLP_WNDPROC, (LONG_PTR)username_proc);
-		SetWindowLongPtr(hWndUserName, GWLP_USERDATA, ProcOrg);
+		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) {


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