https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9b2b75df2bd8d5249c5d2…
commit 9b2b75df2bd8d5249c5d2ed44ba31ba26e1546f8
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Tue Feb 20 20:55:59 2024 +0100
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)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 */