diff --git a/Changelog.md b/Changelog.md index 1d1dd870987eab40ec63033953790056a443dbd1..9a2ebece9f7e833d1d38a46a47273105cd73871e 100644 --- a/Changelog.md +++ b/Changelog.md @@ -17,6 +17,7 @@ OpenCore Changelog - Fixed DEBUG ASSERT on pressing change entry keys with single boot entry in OpenCanopy - Added recommended `Apple12` and `Windows11` flavours - Added `TpmInfo` tool to DEBUG TPM status +- Fixed incorrect OpenCanopy initial display when default entry beyond right of screen #### v0.7.0 - Fixed NVRAM reset on firmware with write-protected `BootOptionSupport` diff --git a/Platform/OpenCanopy/Views/BootPicker.c b/Platform/OpenCanopy/Views/BootPicker.c index f7488e790ed8dd628c9bbb69b237134356d18505..7a327c58674af8b935d1c1de220128c828f087eb 100644 --- a/Platform/OpenCanopy/Views/BootPicker.c +++ b/Platform/OpenCanopy/Views/BootPicker.c @@ -1997,41 +1997,21 @@ BootPickerViewLateInitialize ( IN UINT8 DefaultIndex ) { - UINT32 Index; - INT64 ScrollOffset; CONST GUI_VOLUME_ENTRY *BootEntry; ASSERT (DefaultIndex < mBootPicker.Hdr.Obj.NumChildren); - ScrollOffset = InternelBootPickerScrollSelected (); + mBootPicker.SelectedIndex = DefaultIndex; + // - // If ScrollOffset is non-0, the selected entry will be aligned left- or - // right-most. The view holds a discrete amount of entries, so cut-offs are - // impossible. + // If more entries than screen width, firstly align left-most entry + // then scroll from there as needed to bring default entry on screen // - if (ScrollOffset == 0) { - // - // Find the first entry that is fully visible. - // - for (Index = 0; Index < mBootPicker.Hdr.Obj.NumChildren; ++Index) { - // - // Move the first partially visible boot entry to the very left to prevent - // cut-off entries. This only applies when entries overflow. - // - BootEntry = InternalGetVolumeEntry (Index); - if (mBootPicker.Hdr.Obj.OffsetX + BootEntry->Hdr.Obj.OffsetX >= 0) { - // - // Move the cut-off entry on-screen. - // - ScrollOffset = -ScrollOffset; - break; - } - - ScrollOffset = mBootPicker.Hdr.Obj.OffsetX + BootEntry->Hdr.Obj.OffsetX; - } + if (mBootPicker.Hdr.Obj.OffsetX < 0) { + mBootPicker.Hdr.Obj.OffsetX = 0; + mBootPicker.Hdr.Obj.OffsetX = InternelBootPickerScrollSelected (); } - mBootPicker.Hdr.Obj.OffsetX += ScrollOffset; // // If the scroll buttons are hidden, the intro animation will update them // implicitly.