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\x82f - 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\x82f + 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: