summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbjarni <bjarni@openttd.org>2006-09-28 15:41:53 +0000
committerbjarni <bjarni@openttd.org>2006-09-28 15:41:53 +0000
commit1832d008693e28207f19c2267fbcec498549ed42 (patch)
tree65beb67591dd380e681651ee911ea313d1f11dfd
parent4ee09c22bb837dee43bad93f284bfd5ae4862d78 (diff)
downloadopenttd-1832d008693e28207f19c2267fbcec498549ed42.tar.xz
(svn r6554) -Fix r6513: [depot window] fixed a bug where moving rail vehicles from one line to another could fail under certain conditions
-rw-r--r--depot_gui.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/depot_gui.c b/depot_gui.c
index 799ed3723..c33612d8f 100644
--- a/depot_gui.c
+++ b/depot_gui.c
@@ -392,11 +392,17 @@ static int GetVehicleFromDepotWndPt(const Window *w, int x, int y, Vehicle **veh
row = (y - 14) / w->resize.step_height;
if (row >= w->vscroll.cap) return MODE_ERROR;
- pos = (row + w->vscroll.pos) * w->hscroll.cap + xt;
+ pos = (row + w->vscroll.pos) * (WP(w, depot_d).type == VEH_Train ? 1 : w->hscroll.cap) + xt;
- if (WP(w, depot_d).type == VEH_Train) pos = row + w->vscroll.pos;
-
- if (WP(w, depot_d).engine_count + WP(w, depot_d).wagon_count <= pos) return MODE_ERROR; // empty block, so no vehicle is selected
+ if (WP(w, depot_d).engine_count + WP(w, depot_d).wagon_count <= pos) {
+ if (WP(w, depot_d).type == VEH_Train) {
+ d->head = NULL;
+ d->wagon = NULL;
+ return MODE_DRAG_VEHICLE;
+ } else {
+ return MODE_ERROR; // empty block, so no vehicle is selected
+ }
+ }
if (WP(w, depot_d).engine_count > pos) {
*veh = vl[pos];
@@ -700,7 +706,7 @@ static void DepotWndProc(Window *w, WindowEvent *e)
if (WP(w, depot_d).type == VEH_Train) {
GetDepotVehiclePtData gdvp;
- if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, &gdvp) == 0 &&
+ if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, &gdvp) == MODE_DRAG_VEHICLE &&
sel != INVALID_VEHICLE) {
if (gdvp.wagon != NULL && gdvp.wagon->index == sel && _ctrl_pressed) {
DoCommandP(GetVehicle(sel)->tile, GetVehicle(sel)->index, true, NULL, CMD_REVERSE_TRAIN_DIRECTION | CMD_MSG(STR_9033_CAN_T_MAKE_VEHICLE_TURN));
@@ -710,7 +716,7 @@ static void DepotWndProc(Window *w, WindowEvent *e)
ShowTrainViewWindow(gdvp.head);
}
}
- } else if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, NULL) == 0 &&
+ } else if (GetVehicleFromDepotWndPt(w, e->we.dragdrop.pt.x, e->we.dragdrop.pt.y, &v, NULL) == MODE_DRAG_VEHICLE &&
v != NULL &&
sel == v->index) {
ShowVehicleViewWindow(v);