https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9b2b75df2bd8d5249c5d2ed44ba31ba26e1546f8
commit 9b2b75df2bd8d5249c5d2ed44ba31ba26e1546f8 Author: Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org> AuthorDate: Tue Feb 20 20:55:59 2024 +0100 Commit: Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org> CommitDate: Tue Aug 27 23:18:08 2024 +0200 [SETUP:REACTOS] Collect some UI elements into a common UI_CONTEXT structure. Handles to some install-page UI elements, used in the installation thread, are collected into a UI_CONTEXT structure. --- base/setup/reactos/reactos.c | 46 ++++++++++++++++++++------------------------ base/setup/reactos/reactos.h | 26 ++++++++++++++++++------- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/base/setup/reactos/reactos.c b/base/setup/reactos/reactos.c index ee4f3cc8a2b..aeef1c1ea24 100644 --- a/base/setup/reactos/reactos.c +++ b/base/setup/reactos/reactos.c @@ -41,6 +41,9 @@ HANDLE ProcessHeap; BOOLEAN IsUnattendedSetup = FALSE; SETUPDATA SetupData; +/* UI elements */ +UI_CONTEXT UiContext; + /* FUNCTIONS ****************************************************************/ @@ -1104,8 +1107,6 @@ SummaryDlgProc( typedef struct _COPYCONTEXT { PSETUPDATA pSetupData; - HWND hWndItem; - HWND hWndProgress; ULONG TotalOperations; ULONG CompletedOperations; } COPYCONTEXT, *PCOPYCONTEXT; @@ -1133,10 +1134,10 @@ FileCopyCallback(PVOID Context, CopyContext->TotalOperations = (ULONG)Param2; CopyContext->CompletedOperations = 0; - SendMessageW(CopyContext->hWndProgress, + SendMessageW(UiContext.hWndProgress, PBM_SETRANGE, 0, MAKELPARAM(0, CopyContext->TotalOperations)); - SendMessageW(CopyContext->hWndProgress, + SendMessageW(UiContext.hWndProgress, PBM_SETSTEP, 1, 0); break; } @@ -1158,7 +1159,7 @@ FileCopyCallback(PVOID Context, // STRING_DELETING StringCchPrintfW(Status, ARRAYSIZE(Status), L"Deleting %s", DstFileName); - SetWindowTextW(CopyContext->hWndItem, Status); + SetWindowTextW(UiContext.hWndItem, Status); } else if (Notification == SPFILENOTIFY_STARTRENAME) { @@ -1179,7 +1180,7 @@ FileCopyCallback(PVOID Context, else StringCchPrintfW(Status, ARRAYSIZE(Status), L"Renaming %s to %s", SrcFileName, DstFileName); - SetWindowTextW(CopyContext->hWndItem, Status); + SetWindowTextW(UiContext.hWndItem, Status); } else if (Notification == SPFILENOTIFY_STARTCOPY) { @@ -1192,7 +1193,7 @@ FileCopyCallback(PVOID Context, // STRING_COPYING StringCchPrintfW(Status, ARRAYSIZE(Status), L"Copying %s", DstFileName); - SetWindowTextW(CopyContext->hWndItem, Status); + SetWindowTextW(UiContext.hWndItem, Status); } break; } @@ -1207,7 +1208,7 @@ FileCopyCallback(PVOID Context, if (CopyContext->TotalOperations >> 1 == CopyContext->CompletedOperations) DPRINT1("CHECKPOINT:HALF_COPIED\n"); - SendMessageW(CopyContext->hWndProgress, PBM_STEPIT, 0, 0); + SendMessageW(UiContext.hWndProgress, PBM_STEPIT, 0, 0); break; } } @@ -1234,6 +1235,12 @@ PrepareAndDoCopyThread( /* Get the progress handle */ hWndProgress = GetDlgItem(hwndDlg, IDC_PROCESSPROGRESS); + /* Setup global UI context */ + UiContext.hwndDlg = hwndDlg; + UiContext.hWndItem = GetDlgItem(hwndDlg, IDC_ITEM); + UiContext.hWndProgress = hWndProgress; + UiContext.dwPbStyle = 0; + /* * Preparation of the list of files to be copied @@ -1243,27 +1250,24 @@ PrepareAndDoCopyThread( SetDlgItemTextW(hwndDlg, IDC_ACTIVITY, L"Preparing the list of files to be copied, please wait..."); SetDlgItemTextW(hwndDlg, IDC_ITEM, L""); - /* Set progress marquee style */ + /* Set progress marquee style and start it up */ dwStyle = GetWindowLongPtrW(hWndProgress, GWL_STYLE); SetWindowLongPtrW(hWndProgress, GWL_STYLE, dwStyle | PBS_MARQUEE); - - /* Start it up */ SendMessageW(hWndProgress, PBM_SETMARQUEE, TRUE, 0); /* Prepare the list of files */ /* ErrorNumber = */ Success = PrepareFileCopy(&pSetupData->USetupData, NULL); + + /* Stop progress and restore its style */ + SendMessageW(hWndProgress, PBM_SETMARQUEE, FALSE, 0); + SetWindowLongPtrW(hWndProgress, GWL_STYLE, dwStyle); + if (/*ErrorNumber != ERROR_SUCCESS*/ !Success) { /* Display an error only if an unexpected failure happened, and not because the user cancelled the installation */ if (!pSetupData->bStopInstall) MessageBoxW(GetParent(hwndDlg), L"Failed to prepare the list of files!", L"Error", MB_ICONERROR); - /* Stop it */ - SendMessageW(hWndProgress, PBM_SETMARQUEE, FALSE, 0); - - /* Restore progress style */ - SetWindowLongPtrW(hWndProgress, GWL_STYLE, dwStyle); - /* * If we failed due to an unexpected error, keep on the copy page to view the current state, * but enable the "Next" button to allow the user to continue to the terminate page. @@ -1274,12 +1278,6 @@ PrepareAndDoCopyThread( return 1; } - /* Stop it */ - SendMessageW(hWndProgress, PBM_SETMARQUEE, FALSE, 0); - - /* Restore progress style */ - SetWindowLongPtrW(hWndProgress, GWL_STYLE, dwStyle); - /* * Perform the file copy @@ -1291,8 +1289,6 @@ PrepareAndDoCopyThread( /* Create context for the copy process */ CopyContext.pSetupData = pSetupData; - CopyContext.hWndItem = GetDlgItem(hwndDlg, IDC_ITEM); - CopyContext.hWndProgress = hWndProgress; CopyContext.TotalOperations = 0; CopyContext.CompletedOperations = 0; diff --git a/base/setup/reactos/reactos.h b/base/setup/reactos/reactos.h index 24ebf661bcd..92b52829bce 100644 --- a/base/setup/reactos/reactos.h +++ b/base/setup/reactos/reactos.h @@ -69,14 +69,17 @@ // #include <reactos/rosioctl.h> #include <../lib/setuplib.h> -#if 0 -typedef struct _KBLAYOUT + +/* UI elements */ +typedef struct _UI_CONTEXT { - TCHAR LayoutId[9]; - TCHAR LayoutName[128]; - TCHAR DllName[128]; -} KBLAYOUT, *PKBLAYOUT; -#endif + HWND hwndDlg; // Install progress page + HWND hWndItem; // Progress action + HWND hWndProgress; // Progress gauge + LONG_PTR dwPbStyle; // Progress gauge style +} UI_CONTEXT, *PUI_CONTEXT; + +extern UI_CONTEXT UiContext; /* @@ -108,6 +111,15 @@ typedef struct _NT_WIN32_PATH_MAPPING_LIST } NT_WIN32_PATH_MAPPING_LIST, *PNT_WIN32_PATH_MAPPING_LIST; +#if 0 +typedef struct _KBLAYOUT +{ + TCHAR LayoutId[9]; + TCHAR LayoutName[128]; + TCHAR DllName[128]; +} KBLAYOUT, *PKBLAYOUT; +#endif + typedef struct _SETUPDATA { /* General */