diff --git a/src/company_gui.cpp b/src/company_gui.cpp index f4e81740fb..7909e5eb44 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2175,6 +2175,15 @@ static void ShowCompanyInfrastructure(CompanyID company) { if (!Company::IsValidID(company)) return; AllocateWindowDescFront(&_company_infrastructure_desc, company); + + /* Check if already open then move up in the order */ + auto to_moveup_in_order = std::find(_viewport_infrastructure_window_order.begin(), _viewport_infrastructure_window_order.end(), company); + + /* Cautious error checking */ + if (to_moveup_in_order != _viewport_infrastructure_window_order.end()) { + _viewport_infrastructure_window_order.erase(to_moveup_in_order); + } + _viewport_infrastructure_window_order.push_back(company); MarkWholeScreenDirty(); } diff --git a/src/viewport.cpp b/src/viewport.cpp index 31cf35647d..0e3838944a 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1042,12 +1042,19 @@ static TileHighlightType GetTileHighlightType(TileIndex t) if (!_viewport_infrastructure_window_order.empty()) { switch (GetTileType(t)) { case MP_ROAD: - /* Edge case of company owned tramway on non-company owned tile */ - if (IsTileType(t, MP_ROAD) && !IsRoadDepot(t) && HasTileRoadType(t, RTT_TRAM)) { + /* Edge case of company owned tramway on non-company owned road/rail tile */ + if (!IsRoadDepot(t) && HasTileRoadType(t, RTT_TRAM)) { if (IsRoadOwner(t, RTT_TRAM, _viewport_infrastructure_window_order.back())) { return THT_WHITE; } } + + /* Edge case of company owned road on non-company owned rail tile */ + if (!IsRoadDepot(t) && HasTileRoadType(t, RTT_ROAD)) { + if (IsRoadOwner(t, RTT_ROAD, _viewport_infrastructure_window_order.back())) { + return THT_WHITE; + } + } [[fallthrough]]; case MP_RAILWAY: case MP_TUNNELBRIDGE: