Revision: 10799 https://osdn.net/projects/ttssh2/scm/svn/commits/10799 Author: zmatsuo Date: 2023-07-06 23:45:17 +0900 (Thu, 06 Jul 2023) Log Message: ----------- ログダイアログでファイル名を定期的に更新するようにした - 次の動作を行うと更新は停止する - ファイル名エディットボックスからフォーカスが移動 - ファイル名エディットボックスをクリック - ファイル名エディットボックスでキー押下 - %H%M%S.log など時刻を含んでいると更新される ticket #46392 Ticket Links: ------------ https://osdn.net/projects/ttssh2/tracker/detail/46392 Modified Paths: -------------- trunk/teraterm/teraterm/filesys_log.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/filesys_log.cpp =================================================================== --- trunk/teraterm/teraterm/filesys_log.cpp 2023-07-05 14:43:20 UTC (rev 10798) +++ trunk/teraterm/teraterm/filesys_log.cpp 2023-07-06 14:45:17 UTC (rev 10799) @@ -420,6 +420,9 @@ // work BOOL file_exist; int current_bom; // \x91\xB6\x8D݂\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x82̃G\x83\x93\x83R\x81[\x83f\x83B\x83\x93\x83O\x81i\x83t\x83@\x83C\x83\x8B\x82\xCCBOM\x82\xA9\x82画\x92\xE8\x81j + UINT_PTR timer; + BOOL enable_timer; + WNDPROC proc; TTTSet *pts; TComVar *pcv; } LogDlgWork_t; @@ -522,6 +525,21 @@ work->current_bom = bom; } +static LRESULT CALLBACK FNameEditProc(HWND dlg, UINT msg, + WPARAM wParam, LPARAM lParam) +{ + LogDlgWork_t *work = (LogDlgWork_t *)GetWindowLongPtr(dlg, GWLP_USERDATA); + switch (msg) { + case WM_KEYDOWN: + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_KILLFOCUS: + work->enable_timer = FALSE; + break; + } + return CallWindowProcW(work->proc, dlg, msg, wParam, lParam); +} + static INT_PTR CALLBACK LogFnHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam) { static const DlgTextInfo TextInfos[] = { @@ -571,8 +589,12 @@ // \x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x90ݒ肷\x82\xE9 // \x83t\x83@\x83C\x83\x8B\x82̃`\x83F\x83b\x83N\x81A\x83R\x83\x93\x83g\x83\x8D\x81[\x83\x8B\x82̐ݒ\xE8\x82\xE0\x8Ds\x82\xED\x82\xEA\x82\xE9 // WM_COMMAND, EN_CHANGE \x82\xAA\x94\xAD\x90\xB6\x82\xB7\x82\xE9 - SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, work->info->filename); - work->info->filename = NULL; + wchar_t *fname = FLogGetLogFilename(work->info->filename); + SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, fname); + free(fname); + HWND file_edit = GetDlgItem(Dialog, IDC_FOPT_FILENAME_EDIT); + SetWindowLongPtr(file_edit, GWLP_USERDATA, (LONG_PTR)work); + work->proc = (WNDPROC)SetWindowLongPtrW(file_edit, GWLP_WNDPROC, (LONG_PTR)FNameEditProc); // timestamp \x8E\xED\x95\xCA int tstype = pts->LogTimestampType == TIMESTAMP_LOCAL ? 0 : @@ -593,6 +615,11 @@ CenterWindow(Dialog, GetParent(Dialog)); + SetFocus(GetDlgItem(Dialog, IDC_FOPT_FILENAME_EDIT)); + + work->enable_timer = TRUE; + work->timer = SetTimer(Dialog, 0, 1000, NULL); + return TRUE; } @@ -704,7 +731,25 @@ DragFinish(hDrop); return TRUE; } + case WM_TIMER: { + if (!work->enable_timer) { + KillTimer(Dialog, work->timer); + work->timer = 0; + break; + } + wchar_t *fname = FLogGetLogFilename(work->info->filename); + SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, fname); + SendDlgItemMessageW(Dialog, IDC_FOPT_FILENAME_EDIT, EM_SETSEL, 0, -1); + free(fname); + work->timer = SetTimer(Dialog, 0, 1000, NULL); + break; } + case WM_DESTROY: + if (work->timer != 0) { + KillTimer(Dialog, work->timer); + } + break; + } return FALSE; } @@ -1354,15 +1399,12 @@ BOOL FLogOpenDialog(HINSTANCE hInst, HWND hWnd, FLogDlgInfo_t *info) { LogDlgWork_t *work = (LogDlgWork_t *)calloc(sizeof(LogDlgWork_t), 1); - wchar_t *srcfnameW = FLogGetLogFilename(info->filename); work->info = info; - work->info->filename = srcfnameW; work->pts = &ts; work->pcv = &cv; INT_PTR ret = TTDialogBoxParam( hInst, MAKEINTRESOURCE(IDD_LOGDLG), hWnd, LogFnHook, (LPARAM)work); - free(srcfnameW); free(work); return ret == IDOK ? TRUE : FALSE; }