Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/auth.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 8210 by zmatsuo, Sat Sep 21 15:05:47 2019 UTC revision 8218 by yutakapon, Sun Sep 22 11:00:31 2019 UTC
# Line 243  static void update_server_supported_type Line 243  static void update_server_supported_type
243          }          }
244  }  }
245    
246    typedef struct {
247            int tab_focus_entered;
248            WNDPROC proc_org;
249            size_t str_len;
250    } username_proc_data_t;
251    
252  static LRESULT CALLBACK username_proc(HWND hWnd, UINT msg,  static LRESULT CALLBACK username_proc(HWND hWnd, UINT msg,
253                                                                            WPARAM wParam, LPARAM lParam)                                                                            WPARAM wParam, LPARAM lParam)
254  {  {
255          const WNDPROC ProcOrg = (WNDPROC)GetWindowLongPtr(hWnd, GWLP_USERDATA);          username_proc_data_t *data = (username_proc_data_t *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
256            const WNDPROC ProcOrg = data->proc_org;
257          const LRESULT result = CallWindowProc(ProcOrg, hWnd, msg, wParam, lParam);          const LRESULT result = CallWindowProc(ProcOrg, hWnd, msg, wParam, lParam);
258    
259    
260          switch (msg) {          switch (msg) {
261          case WM_CHAR:          case WM_CHAR:
262          case WM_SETTEXT: {          case WM_SETTEXT:
263                  // ユーザー名が入力されていた場合、オプションを使うことはないので、                  if (data->tab_focus_entered == 0) {
264                  // tabでのフォーカス移動時、オプションボタンをパスするようにする                          // ユーザー名が入力されていた場合、オプションを使うことはないので、
265                  // 従来と同じキー操作でユーザー名とパスフレーズを入力可能とする                          // tabでのフォーカス移動時、オプションボタンをパスするようにする
266                  const HWND dlg = GetParent(hWnd);                          // 従来と同じキー操作でユーザー名とパスフレーズを入力可能とする
267                  const HWND hWndOption = GetDlgItem(dlg, IDC_USERNAME_OPTION);                          const int len = GetWindowTextLength(hWnd);
268                  const int len = GetWindowTextLength(hWnd);  #if 0
269                  LONG_PTR style = GetWindowLongPtr(hWndOption, GWL_STYLE);                          if (len > 0) {
270                  if (len > 0) {                                  // ユーザー名を入力して、TABを押したときに引っかかった感じがする場合がある
271                          // 不要tabstop                                  // そこで一度でも文字入力があったら、TABストップ不要に倒す
272                          style = style & (~(LONG_PTR)WS_TABSTOP);                                  data->tab_focus_entered = 1;
273                  } else {                          }
274                          // 要tabstop  #endif
275                          style = style | WS_TABSTOP;                          if ((data->str_len == 0 && len != 0) ||
276                                    (data->str_len != 0 && len == 0)) {
277                                    // ユーザー名の文字長が 0になる or 0ではなくなる 時のみ処理
278                                    const HWND dlg = GetParent(hWnd);
279                                    const HWND hWndOption = GetDlgItem(dlg, IDC_USERNAME_OPTION);
280                                    LONG_PTR style = GetWindowLongPtr(hWndOption, GWL_STYLE);
281    
282                                    if (len > 0) {
283                                            // 不要tabstop
284                                            style = style & (~(LONG_PTR)WS_TABSTOP);
285                                    }
286                                    else {
287                                            // 要tabstop
288                                            style = style | WS_TABSTOP;
289                                    }
290                                    SetWindowLongPtr(hWndOption, GWL_STYLE, style);
291                                    data->str_len = len;
292                            }
293                  }                  }
294                  SetWindowLongPtr(hWndOption, GWL_STYLE, style);                  break;
295          }          case WM_NCDESTROY:
296                    free(data);
297                    break;
298          }          }
299          return result;          return result;
300  }  }
# Line 333  static void init_auth_dlg(PTInstVar pvar Line 361  static void init_auth_dlg(PTInstVar pvar
361          // usernameのサブクラス化          // usernameのサブクラス化
362          {          {
363                  HWND hWndUserName = GetDlgItem(dlg, IDC_SSHUSERNAME);                  HWND hWndUserName = GetDlgItem(dlg, IDC_SSHUSERNAME);
364                  LONG_PTR ProcOrg =                  username_proc_data_t *data = (username_proc_data_t *)malloc(sizeof(username_proc_data_t));
365                          SetWindowLongPtr(hWndUserName, GWLP_WNDPROC, (LONG_PTR)username_proc);                  if (data != NULL) {
366                  SetWindowLongPtr(hWndUserName, GWLP_USERDATA, ProcOrg);                          SetWindowLongPtr(hWndUserName, GWLP_USERDATA, (LONG_PTR)data);
367                            data->tab_focus_entered = 0;
368                            data->str_len = 0;
369                            data->proc_org =
370                                    (WNDPROC)SetWindowLongPtr(hWndUserName, GWLP_WNDPROC, (LONG_PTR)username_proc);
371                    }
372          }          }
373    
374          if (pvar->auth_state.user != NULL) {          if (pvar->auth_state.user != NULL) {

Legend:
Removed from v.8210  
changed lines
  Added in v.8218

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26