diff options
author | bjarni <bjarni@openttd.org> | 2006-09-28 15:41:53 +0000 |
---|---|---|
committer | bjarni <bjarni@openttd.org> | 2006-09-28 15:41:53 +0000 |
commit | 1832d008693e28207f19c2267fbcec498549ed42 (patch) | |
tree | 65beb67591dd380e681651ee911ea313d1f11dfd | |
parent | 4ee09c22bb837dee43bad93f284bfd5ae4862d78 (diff) | |
download | openttd-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.c | 18 |
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); |