(svn r22226) -Codechange: When autoreplace invalidates vehicle windows because the Vehicle index changed, use a better eye-catcher-'data' than 0 to identify them.

This commit is contained in:
frosch
2011-03-08 19:41:58 +00:00
parent e6f7a60acf
commit 0a28d212f4
3 changed files with 27 additions and 3 deletions

View File

@@ -811,9 +811,10 @@ public:
VehicleOrderID to = GB(data, 8, 8);
switch (data) {
case 0:
case -666:
/* Autoreplace replaced the vehicle */
this->vehicle = Vehicle::Get(this->window_number);
/* This case is _not_ called asynchronously. Get out directly, rest can be done later */
break;
case -1:

View File

@@ -246,9 +246,10 @@ struct TimetableWindow : Window {
virtual void OnInvalidateData(int data)
{
switch (data) {
case 0:
case -666:
/* Autoreplace replaced the vehicle */
this->vehicle = Vehicle::Get(this->window_number);
/* This case is _not_ called asynchronously. Get out directly, rest can be done later */
break;
case -1:

View File

@@ -686,6 +686,12 @@ struct RefitWindow : public Window {
virtual void OnInvalidateData(int data)
{
switch (data) {
case -666:
/* Autoreplace replaced the vehicle.
* Nothing to do though for this window.
* This case is _not_ called asynchronously. Get out directly, rest can be done later */
break;
case 0: { // The consist has changed; rebuild the entire list.
/* Clear the selection. */
Vehicle *v = Vehicle::Get(this->window_number);
@@ -1121,7 +1127,7 @@ static inline void ChangeVehicleWindow(WindowClass window_class, VehicleID from_
}
/* Notify the window immediately, without scheduling. */
w->InvalidateData();
w->InvalidateData(-666);
}
}
@@ -1780,6 +1786,12 @@ struct VehicleDetailsWindow : Window {
virtual void OnInvalidateData(int data)
{
if (data == -666) {
/* Autoreplace replaced the vehicle.
* Nothing to do for this window though.
* This case is _not_ called asynchronously. Get out directly, rest can be done later */
return;
}
const Vehicle *v = Vehicle::Get(this->window_number);
if (v->type == VEH_ROAD) {
const NWidgetBase *nwid_info = this->GetWidget<NWidgetBase>(VLD_WIDGET_MIDDLE_DETAILS);
@@ -2581,6 +2593,16 @@ public:
}
}
virtual void OnInvalidateData(int data)
{
if (data == -666) {
/* Autoreplace replaced the vehicle.
* Nothing to do for this window though.
* This case is _not_ called asynchronously. Get out directly, rest can be done later */
return;
}
}
virtual bool IsNewGRFInspectable() const
{
return ::IsNewGRFInspectable(GetGrfSpecFeature(Vehicle::Get(this->window_number)->type), this->window_number);