# HG changeset patch # User smatz # Date 2008-02-17 12:21:05 # Node ID c9a068074baaf1e5c62f65668a329b228eddad2b # Parent 9141cb2fd096ee28c77954f71f1e05429024cf1e (svn r12166) -Fix [FS#337]: when drag&drop mode was cancelled by keyboard input, depot/group window wasn't updated (original patch by GrimRC) diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -860,8 +860,13 @@ static void DepotWndProc(Window *w, Wind } 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.. */ diff --git a/src/group_gui.cpp b/src/group_gui.cpp --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -761,6 +761,13 @@ static void GroupWndProc(Window *w, Wind 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; + } } diff --git a/src/viewport.cpp b/src/viewport.cpp --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2847,9 +2847,8 @@ void SetObjectToPlace(CursorID icon, Spr { 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); } diff --git a/src/window.cpp b/src/window.cpp --- a/src/window.cpp +++ b/src/window.cpp @@ -1085,8 +1085,6 @@ static bool HandleDragDrop() w = GetCallbackWnd(); - ResetObjectToPlace(); - if (w != NULL) { /* send an event in client coordinates. */ e.event = WE_DRAGDROP; @@ -1095,6 +1093,9 @@ static bool HandleDragDrop() e.we.dragdrop.widget = GetWidgetFromPos(w, e.we.dragdrop.pt.x, e.we.dragdrop.pt.y); w->wndproc(w, &e); } + + ResetObjectToPlace(); + return false; }