diff options
-rw-r--r-- | src/order_gui.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 2a6dacaf8..6f1a61539 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -751,6 +751,9 @@ public: virtual void OnInvalidateData(int data) { + VehicleOrderID from = GB(data, 0, 8); + VehicleOrderID to = GB(data, 8, 8); + switch (data) { case 0: /* Autoreplace replaced the vehicle */ @@ -770,14 +773,11 @@ public: /* Some other order changes */ break; - default: { + default: /* Moving an order. If one of these is INVALID_VEH_ORDER_ID, then * the order is being created / removed */ if (this->selected_order == -1) break; - VehicleOrderID from = GB(data, 0, 8); - VehicleOrderID to = GB(data, 8, 8); - if (from == to) break; // no need to change anything if (from != this->selected_order) { @@ -800,11 +800,15 @@ public: /* Moving selected order */ this->selected_order = to; break; - } } this->vscroll->SetCount(this->vehicle->GetNumOrders() + 1); this->UpdateButtonState(); + + /* Scroll to the new order. */ + if (from == INVALID_VEH_ORDER_ID && to != INVALID_VEH_ORDER_ID && !this->vscroll->IsVisible(to)) { + this->vscroll->ScrollTowards(to); + } } void UpdateButtonState() |