(svn r12166) -Fix [FS#337]: when drag&drop mode was cancelled by keyboard input, depot/group window wasn't updated (original patch by GrimRC)
authorsmatz
Sun, 17 Feb 2008 12:21:05 +0000
changeset 9081 4c47047836f3
parent 9080 a5e184c542c4
child 9082 8217cb013e23
(svn r12166) -Fix [FS#337]: when drag&drop mode was cancelled by keyboard input, depot/group window wasn't updated (original patch by GrimRC)
src/depot_gui.cpp
src/group_gui.cpp
src/viewport.cpp
src/window.cpp
--- a/src/depot_gui.cpp	Sun Feb 17 00:47:39 2008 +0000
+++ b/src/depot_gui.cpp	Sun Feb 17 12:21:05 2008 +0000
@@ -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	Sun Feb 17 00:47:39 2008 +0000
+++ b/src/group_gui.cpp	Sun Feb 17 12:21:05 2008 +0000
@@ -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	Sun Feb 17 00:47:39 2008 +0000
+++ b/src/viewport.cpp	Sun Feb 17 12:21:05 2008 +0000
@@ -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	Sun Feb 17 00:47:39 2008 +0000
+++ b/src/window.cpp	Sun Feb 17 12:21:05 2008 +0000
@@ -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;
 }