- Store the wizard page descriptors in a separate static array.
Then loop over these descriptors to create each page.
- Set the window small icon.
- Add a property sheet callback to set the window large icon (and not
a rescaled small icon!) from the `PSCB_INITIALIZED` notification.
Also, handle the `PSCB_PRECREATE` notification, and subclass the
property sheet window procedure, so as to be able to initially center
the wizard window while keeping it hidden before showing it,
independently of which wizard page is going to be initially shown.
A small hack for handling the `DM_REPOSITION` message is added,
because Wine's comctl32 propsheet.c doesn't send the message after
creating, initializing and resizing the property sheet dialog...
- drivepage.c:
* Move some local loop variables inside their loop block.
* Move the core of the Drives/Partitions dialog `PSN_WIZNEXT` handler
into a separate function.
- reactos.c:
* Move some `break;` into their corresponding `case` blocks.
* Replace remaining `EnableWindow(GetDlgItem(...), ...)` instances
with `EnableDlgItem(...)`.
* Introduce `hWndParent` variables in some routines, so as not to
invoke `GetParent(hwndDlg)` repeatedly.
* Use NULL for default "Error" message-box title.
* Remove an empty `case WM_DESTROY` in `FinishDlgProc()`.
- Use explicit Unicode property-sheet structures.
- Update the copyright notice dates. Fix the file header in drivepage.c.
Add the missing file header into reactos.rc.
- Fix TAB order in the Installation type page.
- Don't systematically set focus to the "Install ReactOS" radio-button.
Always resetting the focus to the "Install" choice is unwanted,
because, if the user instead selects "Upgrade", goes to the next
"Upgrade/Repair" page, then goes back to the installation type page,
the selection focus wouldn't be on what the user previously chose,
but would instead be on the "Install" choice, while the "Upgrade"
choice would stay checked, thus leading to an inconsistency.
We want instead the selection to stay as the user previously chose,
without changing it.
- Correctly handle item selection change in the Installations list,
so that only the "selected" state change is detected and UI buttons
are updated accordingly.
When the `PSN_QUERYINITIALFOCUS` notification is received (whenever
the page is made active), reselect the currently-selected item so as
to properly update the UI buttons.
- Add missing keyboard accelerators in the Devices selection page.
- Group all the push-buttons together in the Drives/Partitions page,
so that when the focus is on the first one and the user presses the
Left-arrow key, the focus stays on the buttons and doesn't go to the
partitions list.
- Remove the `PSN_QUERYINITIALFOCUS` hack in the Drives/Partition page
dialog procedure (see commit 6cb1394bb1, PR #9272).
- Correctly handle item selection change in the Drives/Partition list,
so that only the "selected" state change is detected and UI buttons
are updated accordingly.
When the `PSN_QUERYINITIALFOCUS` notification is received (whenever
the page is made active), reselect the currently-selected item so as
to properly update the UI buttons.
- Remove redundant `WS_VISIBLE` style for all the Edit-text fields of
the Summary page.
- In the Start/Welcome and the Finish/Abort pages: when disabling the
wizard "Back"/"Next" navigation buttons with `PropSheet_SetWizButtons()`,
for the purpose of hiding them next, do *NOT* use that macro, because
it posts the `PSM_SETWIZBUTTONS` message instead of sending it, and so,
it would be handled after hiding the buttons. The message would then
interfere with the hidden buttons (when both "Back" and "Next" are
hidden, "Next" gets forcefully shown).
- Set the default button to "No" for some confirmation dialogs
(setup abort; partition deletion; ...).
Import patch from wine-9.15: wine-mirror/wine@320547b
```
comctl32/tests: Add test for PSN_QUERYINITIALFOCUS for the propsheet.
wine commit id 320547b6757a7236929a0d47847cab0802607cde by Jacob Czekalla <[email protected]>
```
- Move around the status items static controls.
- Bolden the main status label.
- Whereas the repair/upgrade procedure may move, rename, or delete files,
the regular installation only copies files. Therefore, display only the
file name instead of the full "Copying..." message in this case.
(Based upon a suggestion by Carl Bialorucki.)
CORE-20447
Remove the `TVS_EDITLABELS` window style from the tree view control of the `SYSTEM.INI`/`WIN.INI` tabs, making the labels read-only as intended.
This prevents the UI from opening an editable text box when users click or pause on tree view items, which was misleading since editing/saving here is not implemented.
Users are still able to edit configurations using the dedicated "Edit" button on the UI.
Root cause: CcRosDeleteFileCache's first loop ran under the spinlock and removed VACBs from the LRU and dirty lists, but left them in CacheMapVacbListHead. It also set Vacb->Dirty = TRUE as a flush hint (after CcRosUnmarkDirtyVacb cleared it), creating an inconsistent VACB state: Dirty=TRUE but not in the dirty list, with only the cache-map-list refcount (1). After releasing the lock, the second loop removed VACBs from CacheMapVacbListHead without holding any lock.
This created a race with CcFlushCache: a caller that already held a SharedCacheMap pointer could call CcRosLookupVacb between the two loops, find the VACB (refcount → 2), see Dirty=TRUE (the hack), and call CcRosFlushVacb. Meanwhile the second loop could set Dirty=FALSE, drop the cmap ref (→1, print "Leaking VACB"), and then the early-return in CcRosUnmarkDirtyVacb would skip the decrement. CcRosReleaseVacb then drops 1→0 → ASSERT(Refs > 0) fires.
Before the previous fix, the same race caused ASSERT(Vacb->Dirty) in the old CcRosUnmarkDirtyVacb — the previous fix just changed which assert fired.
The fix:
- CcRosDeleteFileCache: VACBs are now removed from CacheMapVacbListHead in the first loop, under the spinlock, and moved to a private LocalVacbList. After the lock is released, CcRosLookupVacb can no longer find these VACBs, preventing new lookup references from being created.
- CcRosReleaseVacb: Removed the overly strict ASSERT(Refs > 0). When CcRosDeleteFileCache drops the cmap ref while a lookup is outstanding, CcRosReleaseVacb legitimately releases the last reference and CcRosVacbDecRefCount correctly frees the VACB. Callers (e.g., CcFlushCache) don't access the VACB pointer afterward.
Signed-off-by: Timo Kreuzer <[email protected]>
- CcRosUnmarkDirtyVacb: return BOOLEAN, guard against double-unmark
- CcRosMarkDirtyVacb: guard against double-insertion
- CcRosFlushVacb: only re-mark dirty on failure if we were the one who unmarked
- Add comments to lockless Dirty reads in CcFlushCache and CcRosReleaseVacb
Signed-off-by: Timo Kreuzer <[email protected]>
Split off CShellitemArray
stub out CShellLibrary
stub out CUserEventTimer
rewrite some vista shellitem APIs
Misc stubs for vista
AddITaskbarList3/ITaskbarList4
---------
Co-authored-by: Oleb Dubinskiy <[email protected]>
Co-authored-by: Mikhail Tyukin <[email protected]>
- Ensures the choice selection characters are not duplicated, this passes one extra Wine test.
- Make the choice selection characters display as uppercase when appropriate.
- Return the errorlevel.
This fixes cmd_winetest hanging on the echo Y | choice /C ABCXYZ /D A /T 2 test.
- Reads the first character from stdin if stdin is not connected to a real console.
- Ensures the timeout never goes negative if there is a problem reading stdin.
Fix an out of bounds heap read when compacting the ghost device list.
Change the loop condition from `GhostPort < DeviceRelations->Count` to
`GhostPort < DeviceRelations->Count - 1` so the array shift never reads
past the last valid entry.
This PR implements two of the three hooks that allows you to run custom
applications during 2nd-stage setup (the 3rd hook is `...\$OEM$\Cmdlines.txt`,
but that requires file copy operations, etc.)
- `DetachedProgram` is documented[^1] for NT4...2003; it is started before
installation and `UserExecute` after.
- `UserExecute` is a great place to install VM Guest Additions, one reboot
less and you have shared folders/clipboard on the first normal boot.
[^1]: https://web.archive.org/web/20090902145959/http://technet.microsoft.com/en-us/library/cc757642(WS.10).aspx
- Added copy/move support for FolderItems collections.
- Added support for InvokeVerbEx on FolderItems collections.
- Added filter support for FolderItems collections.
Oleacc winetest depends on uiautomation.dll to be registered to use IAccessible interface. The oleacc DLL does not use the wine_dllregister library but instead registers the proxy class which results in the interface not being accessible.
This makes our built-in choice command compatible with how choice is implemented on NT5.2+ (it isn't included in Windows XP and below), while retaining compatibility with how it worked in DOS/9x.
- Changes /C and /T to also support the NT syntax.
- Adds the /CS, /D and /M switches.
This makes it easy for JIRA issue CORE-20043 to use this code to create a proper choice.exe
This is an RVA, so there is no reason to expand it to 64 bit on x64.
Fixes crash of dbghelp_apitest rsym on x64, as the test was using ULONG while dbghelp was using ULONG_PTR and rsym itself was using TARGET_ULONG_PTR.
In SetupDiCreateDeviceInterfaceRegKeyW(), force creating device and reference subkeys of device interface in Registry if they are not created yet.
- Change RegOpenKeyExW() to RegCreateKeyExW() for device and reference subkeys.
This properly fixes audio device name string improperly set in registry and displaying audio device name system-wide. Now it's properly written not only after re-installing audio driver from Device Manager, but also during 2nd setup stage, so it's correct just right after 1st boot.
Addendum to 1ef584c446 and b205c04173.
CORE-20603