1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-21 14:53:02 +01:00

Prevent closing object selection window when selection is invalid (#23487)

* Prevent closing object selection window when selection is invalid

* Ride window: remove superfluous virtual keyword from event signatures

* Amend changelog
This commit is contained in:
Aaron van Geffen
2024-12-29 23:15:26 +01:00
committed by GitHub
parent fef568c7c8
commit 25ac4cf5d6
5 changed files with 35 additions and 18 deletions

View File

@@ -12,6 +12,7 @@
- Fix: [#23286] Currency formatted incorrectly in the in game console. - Fix: [#23286] Currency formatted incorrectly in the in game console.
- Fix: [#23348] Console set commands don't print output properly. - Fix: [#23348] Console set commands don't print output properly.
- Fix: [#23376] Peeps with balloons, hats and umbrellas may leave artifacts on screen. - Fix: [#23376] Peeps with balloons, hats and umbrellas may leave artifacts on screen.
- Fix: [#23486] Object selection minimum requirements can be bypassed with close window hotkey.
0.4.17 (2024-12-08) 0.4.17 (2024-12-08)
------------------------------------------------------------------------ ------------------------------------------------------------------------

View File

@@ -300,6 +300,12 @@ namespace OpenRCT2::Ui::Windows
VisibleListRefresh(); VisibleListRefresh();
} }
bool CanClose() override
{
// Prevent window closure when selection is invalid
return EditorObjectSelectionWindowCheck();
}
/** /**
* *
* rct2: 0x006AB199 * rct2: 0x006AB199

View File

@@ -752,7 +752,7 @@ namespace OpenRCT2::Ui::Windows
rideId = ride.id; rideId = ride.id;
} }
virtual void OnOpen() override void OnOpen() override
{ {
widgets = PageWidgets[WINDOW_RIDE_PAGE_MAIN]; widgets = PageWidgets[WINDOW_RIDE_PAGE_MAIN];
hold_down_widgets = PageHoldDownWidgets[WINDOW_RIDE_PAGE_MAIN]; hold_down_widgets = PageHoldDownWidgets[WINDOW_RIDE_PAGE_MAIN];
@@ -778,7 +778,7 @@ namespace OpenRCT2::Ui::Windows
PopulateVehicleTypeDropdown(*ride, true); PopulateVehicleTypeDropdown(*ride, true);
} }
virtual void OnClose() override void OnClose() override
{ {
switch (page) switch (page)
{ {
@@ -790,7 +790,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnResize() override void OnResize() override
{ {
switch (page) switch (page)
{ {
@@ -826,7 +826,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnUpdate() override void OnUpdate() override
{ {
switch (page) switch (page)
{ {
@@ -863,7 +863,7 @@ namespace OpenRCT2::Ui::Windows
} }
} }
virtual void OnPrepareDraw() override void OnPrepareDraw() override
{ {
switch (page) switch (page)
{ {
@@ -899,7 +899,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnDraw(DrawPixelInfo& dpi) override void OnDraw(DrawPixelInfo& dpi) override
{ {
switch (page) switch (page)
{ {
@@ -936,7 +936,7 @@ namespace OpenRCT2::Ui::Windows
} }
} }
virtual OpenRCT2String OnTooltip(WidgetIndex widgetIndex, StringId fallback) override OpenRCT2String OnTooltip(WidgetIndex widgetIndex, StringId fallback) override
{ {
switch (page) switch (page)
{ {
@@ -947,7 +947,7 @@ namespace OpenRCT2::Ui::Windows
} }
return { fallback, {} }; return { fallback, {} };
} }
virtual void OnMouseDown(WidgetIndex widgetIndex) override void OnMouseDown(WidgetIndex widgetIndex) override
{ {
switch (page) switch (page)
{ {
@@ -980,7 +980,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnMouseUp(WidgetIndex widgetIndex) override void OnMouseUp(WidgetIndex widgetIndex) override
{ {
switch (page) switch (page)
{ {
@@ -1016,7 +1016,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnDropdown(WidgetIndex widgetIndex, int32_t selectedIndex) override void OnDropdown(WidgetIndex widgetIndex, int32_t selectedIndex) override
{ {
switch (page) switch (page)
{ {
@@ -1043,7 +1043,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnTextInput(WidgetIndex widgetIndex, std::string_view text) override void OnTextInput(WidgetIndex widgetIndex, std::string_view text) override
{ {
switch (page) switch (page)
{ {
@@ -1058,7 +1058,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual ScreenSize OnScrollGetSize(int32_t scrollIndex) override ScreenSize OnScrollGetSize(int32_t scrollIndex) override
{ {
switch (page) switch (page)
{ {
@@ -1069,7 +1069,7 @@ namespace OpenRCT2::Ui::Windows
} }
return {}; return {};
} }
virtual void OnScrollSelect(int32_t scrollIndex, int32_t scrollAreaType) override void OnScrollSelect(int32_t scrollIndex, int32_t scrollAreaType) override
{ {
switch (page) switch (page)
{ {
@@ -1078,7 +1078,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnScrollDraw(int32_t scrollIndex, DrawPixelInfo& dpi) override void OnScrollDraw(int32_t scrollIndex, DrawPixelInfo& dpi) override
{ {
switch (page) switch (page)
{ {
@@ -1096,7 +1096,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnToolDown(WidgetIndex widgetIndex, const ScreenCoordsXY& screenCoords) override void OnToolDown(WidgetIndex widgetIndex, const ScreenCoordsXY& screenCoords) override
{ {
switch (page) switch (page)
{ {
@@ -1108,7 +1108,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnToolDrag(WidgetIndex widgetIndex, const ScreenCoordsXY& screenCoords) override void OnToolDrag(WidgetIndex widgetIndex, const ScreenCoordsXY& screenCoords) override
{ {
switch (page) switch (page)
{ {
@@ -1120,7 +1120,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnToolAbort(WidgetIndex widgetIndex) override void OnToolAbort(WidgetIndex widgetIndex) override
{ {
switch (page) switch (page)
{ {
@@ -1129,7 +1129,7 @@ namespace OpenRCT2::Ui::Windows
break; break;
} }
} }
virtual void OnViewportRotate() override void OnViewportRotate() override
{ {
switch (page) switch (page)
{ {

View File

@@ -227,6 +227,12 @@ void WindowSetWindowLimit(int32_t value)
*/ */
void WindowClose(WindowBase& w) void WindowClose(WindowBase& w)
{ {
if (!w.CanClose())
{
// Something's preventing this window from closing -- bail out early
return;
}
w.OnClose(); w.OnClose();
// Remove viewport // Remove viewport

View File

@@ -85,6 +85,10 @@ struct WindowBase
virtual void OnOpen() virtual void OnOpen()
{ {
} }
virtual bool CanClose()
{
return true;
}
virtual void OnClose() virtual void OnClose()
{ {
} }