changeset 8585:2880bcf43f14 draft

(svn r12166) -Fix [FS#337]: when drag&drop mode was cancelled by keyboard input, depot/group window wasn't updated (original patch by GrimRC)
author smatz <smatz@openttd.org>
date Sun, 17 Feb 2008 12:21:05 +0000
parents c9982ce96837
children 5f272b02ff37
files src/depot_gui.cpp src/group_gui.cpp src/viewport.cpp src/window.cpp
diffstat 4 files changed, 17 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -860,8 +860,13 @@
 		} break;
 
 		case WE_ABORT_PLACE_OBJ: {
+			/* abort clone */
 			w->RaiseWidget(DEPOT_WIDGET_CLONE);
 			w->InvalidateWidget(DEPOT_WIDGET_CLONE);
+
+			/* abort drag & drop */
+			WP(w, depot_d).sel = INVALID_VEHICLE;
+			w->InvalidateWidget(DEPOT_WIDGET_MATRIX);
 		} break;
 
 			/* check if a vehicle in a depot was clicked.. */
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -761,6 +761,13 @@
 				SetWindowDirty(w);
 			}
 			break;
+
+		case WE_ABORT_PLACE_OBJ: // called when new object to place is selected from keyboard
+			/* abort drag & drop */
+			gv->vehicle_sel = INVALID_VEHICLE;
+			w->InvalidateWidget(GRP_WIDGET_LIST_VEHICLE);
+			break;
+
 	}
 }
 
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -2847,9 +2847,8 @@
 {
 	Window *w;
 
-	/* undo clicking on button */
-	if (_thd.place_mode != VHM_NONE) {
-		_thd.place_mode = VHM_NONE;
+	/* undo clicking on button and drag & drop */
+	if (_thd.place_mode != VHM_NONE || _special_mouse_mode == WSM_DRAGDROP) {
 		w = FindWindowById(_thd.window_class, _thd.window_number);
 		if (w != NULL) CallWindowEventNP(w, WE_ABORT_PLACE_OBJ);
 	}
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1085,8 +1085,6 @@
 
 	w = GetCallbackWnd();
 
-	ResetObjectToPlace();
-
 	if (w != NULL) {
 		/* send an event in client coordinates. */
 		e.event = WE_DRAGDROP;
@@ -1095,6 +1093,9 @@
 		e.we.dragdrop.widget = GetWidgetFromPos(w, e.we.dragdrop.pt.x, e.we.dragdrop.pt.y);
 		w->wndproc(w, &e);
 	}
+
+	ResetObjectToPlace();
+
 	return false;
 }