summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2015-10-30 17:23:16 +0000
committerfrosch <frosch@openttd.org>2015-10-30 17:23:16 +0000
commit44d1fc42530a304e501e4f41ff0c26bf19971e6a (patch)
tree321494b2a6ebe132fd06f989890aa7b4904dc4de
parentc0a301ae606cc877a0092e8fef6b14e53e46d4fc (diff)
downloadopenttd-44d1fc42530a304e501e4f41ff0c26bf19971e6a.tar.xz
(svn r27425) -Fix [FS#5842]: Crash when switching to or taking over companies, when an order window of a vehicle of the new company was opened. Now close those windows.
-rw-r--r--src/order_gui.cpp6
-rw-r--r--src/window.cpp1
2 files changed, 7 insertions, 0 deletions
diff --git a/src/order_gui.cpp b/src/order_gui.cpp
index d4feae35c..3ca29e087 100644
--- a/src/order_gui.cpp
+++ b/src/order_gui.cpp
@@ -1713,6 +1713,12 @@ void ShowOrdersWindow(const Vehicle *v)
DeleteWindowById(WC_VEHICLE_TIMETABLE, v->index, false);
if (BringWindowToFrontById(WC_VEHICLE_ORDERS, v->index) != NULL) return;
+ /* Using a different WindowDescs for _local_company causes problems.
+ * Due to this we have to close order windows in ChangeWindowOwner/DeleteCompanyWindows,
+ * because we cannot change switch the WindowDescs and keeping the old WindowDesc results
+ * in crashed due to missing widges.
+ * TODO Rewrite the order GUI to not use different WindowDescs.
+ */
if (v->owner != _local_company) {
new OrdersWindow(&_other_orders_desc, v);
} else {
diff --git a/src/window.cpp b/src/window.cpp
index 18e8f3588..1fce1f3a8 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1207,6 +1207,7 @@ void ChangeWindowOwner(Owner old_owner, Owner new_owner)
case WC_BUY_COMPANY:
case WC_COMPANY:
case WC_COMPANY_INFRASTRUCTURE:
+ case WC_VEHICLE_ORDERS: // Changing owner would also require changing WindowDesc, which is not possible; however keeping the old one crashes because of missing widgets etc.. See ShowOrdersWindow().
continue;
default: