changeset 4735:abf1d8226b4e draft

(svn r6647) -Fix: [vehicle list windows] Lists of shared orders are now no longer closed by a window event if the list is empty The window is now closed when the order is deleted. This is because removing windows from a window event is asking for problems
author bjarni <bjarni@openttd.org>
date Thu, 05 Oct 2006 08:27:40 +0000
parents f74ea9e005be
children aaa1f6e7836a
files order_cmd.c vehicle_gui.c
diffstat 2 files changed, 18 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/order_cmd.c
+++ b/order_cmd.c
@@ -1124,7 +1124,21 @@
 	v->orders = NULL;
 	v->num_orders = 0;
 
-		while (cur != NULL) {
+	if (cur != NULL) {
+		/* Delete the vehicle list of shared orders, if any */
+		int window_type = 0;
+
+		switch (v->type) {
+			case VEH_Train:    window_type = WC_TRAINS_LIST;   break;
+			case VEH_Road:     window_type = WC_ROADVEH_LIST;  break;
+			case VEH_Ship:     window_type = WC_SHIPS_LIST;    break;
+			case VEH_Aircraft: window_type = WC_AIRCRAFT_LIST; break;
+			default: NOT_REACHED();
+		}
+		DeleteWindowById(window_type, (cur->index << 16) | (v->type << 11) | VLW_SHARED_ORDERS | v->owner);
+	}
+
+	while (cur != NULL) {
 		next = cur->next;
 		DeleteOrder(cur);
 		cur = next;
--- a/vehicle_gui.c
+++ b/vehicle_gui.c
@@ -1553,10 +1553,9 @@
 	switch (window_type) {
 		case VLW_SHARED_ORDERS: /* Shared Orders */
 			if (vl->l.list_length == 0) {
-				/* The list is empty, so the last vehicle is sold or crashed */
-				/* Delete the window because the order is now not in use anymore */
-				DeleteWindow(w);
-				return;
+				/* We can't open this window without vehicles using this order
+				 * and we should close the window when deleting the order      */
+				NOT_REACHED();
 			}
 			SetDParam(0, w->vscroll.count);
 			break;