Revision: 11017 https://osdn.net/projects/ttssh2/scm/svn/commits/11017 Author: zmatsuo Date: 2023-10-21 01:08:30 +0900 (Sat, 21 Oct 2023) Log Message: ----------- ログダイアログオープン時、コントロールのdisableが遅れるので対策 - コントロールの設定順を見直した - ファイル名の設定するのを最後にした - タイマーの使い方を誤っていたので修正 - BOOL を bool に変更 Modified Paths: -------------- trunk/teraterm/teraterm/logdlg.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/logdlg.cpp =================================================================== --- trunk/teraterm/teraterm/logdlg.cpp 2023-10-20 13:27:46 UTC (rev 11016) +++ trunk/teraterm/teraterm/logdlg.cpp 2023-10-20 16:08:30 UTC (rev 11017) @@ -52,14 +52,16 @@ #include "logdlg.h" #define TitLog L"Log" +#define ID_EVENT 0 typedef struct { FLogDlgInfo_t *info; // work - BOOL file_exist; + 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; + bool available_timer; + bool enable_timer; + bool on_initdialog; WNDPROC proc; TTTSet *pts; TComVar *pcv; @@ -103,13 +105,13 @@ * \x83\x8D\x83O\x83t\x83@\x83C\x83\x8B\x83`\x83F\x83b\x83N * * @param[in] filename - * @param[out] exist TURE/FALSE - * @param[out] bom 0 no BOM (or file not exist) + * @param[out] exist ture/false + * @param[out] bom 0 no BOM (or file not exist or too short) * 1 UTF-8 * 2 UTF-16LE * 3 UTF-16BE */ -static void CheckLogFile(const wchar_t *filename, BOOL *exist, int *bom) +static void CheckLogFile(const wchar_t *filename, bool *exist, int *bom) { *exist = FALSE; *bom = 0; @@ -147,7 +149,7 @@ static void CheckLogFile(const wchar_t *filename, LogDlgWork_t *work) { - BOOL exist; + bool exist; int bom; CheckLogFile(filename, &exist, &bom); work->file_exist = exist; @@ -229,7 +231,7 @@ case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_KILLFOCUS: - work->enable_timer = FALSE; + work->enable_timer = false; break; } return CallWindowProcW(work->proc, dlg, msg, wParam, lParam); @@ -268,6 +270,7 @@ switch (Message) { case WM_INITDIALOG: { work = (LogDlgWork_t *)lParam; + work->on_initdialog = true; TTTSet *pts = work->pts; SetWindowLongPtr(Dialog, DWLP_USER, (LONG_PTR)work); ::DragAcceptFiles(Dialog, TRUE); @@ -285,16 +288,6 @@ CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, pts->Append == 0 ? IDC_NEW_OVERWRITE : IDC_APPEND); - // \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 - 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 CheckDlgButton(Dialog, IDC_TIMESTAMP, pts->LogTimestamp == 0 ? BST_UNCHECKED : BST_CHECKED); @@ -322,13 +315,26 @@ // text/binary radio button CheckRadioButton(Dialog, IDC_FOPTBIN, IDC_FOPTTEXT, pts->LogBinary == 0 ? IDC_FOPTTEXT : IDC_FOPTBIN); + // \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 + 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); + CenterWindow(Dialog, GetParent(Dialog)); SetFocus(GetDlgItem(Dialog, IDC_FOPT_FILENAME_EDIT)); - work->enable_timer = TRUE; - work->timer = SetTimer(Dialog, 0, 1000, NULL); + work->enable_timer = true; + work->available_timer = true; + SetTimer(Dialog, ID_EVENT, 1000, NULL); + work->on_initdialog = false; + return TRUE; } @@ -401,10 +407,10 @@ if (HIWORD(wParam) == EN_CHANGE){ wchar_t *filename; hGetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, &filename); - const BOOL file_exist_prev = work->file_exist; + const bool file_exist_prev = work->file_exist; CheckLogFile(filename, work); free(filename); - if (file_exist_prev != work->file_exist) { + if (work->on_initdialog || file_exist_prev != work->file_exist) { if (work->file_exist) { // \x83t\x83@\x83C\x83\x8B\x82\xAA\x91\xB6\x8D݂\xB7\x82\xE9\x81A\x90ݒ\xE8\x82ɍ\x87\x82킹\x82ĐV\x8BK(\x8F㏑\x82\xAB)/\x92NjL\x82\xF0\x91I\x91\xF0\x82\xB7\x82\xE9 CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, @@ -414,8 +420,8 @@ // \x83t\x83@\x83C\x83\x8B\x82\xAA\x91\xB6\x8D݂\xB5\x82Ȃ\xA2\x81A\x90V\x8BK\x82\xF0\x91I\x91\xF0\x82\xB7\x82\xE9 CheckRadioButton(Dialog, IDC_NEW_OVERWRITE, IDC_APPEND, IDC_NEW_OVERWRITE); } + ArrangeControls(Dialog, work); } - ArrangeControls(Dialog, work); } break; } @@ -440,8 +446,8 @@ } case WM_TIMER: { if (!work->enable_timer) { - KillTimer(Dialog, work->timer); - work->timer = 0; + KillTimer(Dialog, ID_EVENT); + work->available_timer = false; break; } wchar_t *fname = FLogGetLogFilename(work->info->filename); @@ -448,12 +454,12 @@ 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); + if (work->available_timer) { + KillTimer(Dialog, ID_EVENT); + work->available_timer = false; } break; }