@@ -857,14 +857,19 @@ static void DepotWndProc(Window *w, Wind
case WE_PLACE_OBJ: {
ClonePlaceObj(w);
} 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);
/* check if a vehicle in a depot was clicked.. */
case WE_MOUSELOOP: {
const Vehicle *v = _place_clicked_vehicle;
@@ -758,12 +758,19 @@ static void GroupWndProc(Window *w, Wind
if (--gl->l.resort_timer == 0) {
gl->l.resort_timer = DAY_TICKS * PERIODIC_RESORT_DAYS;
gl->l.flags |= VL_RESORT;
SetWindowDirty(w);
}
break;
case WE_ABORT_PLACE_OBJ: // called when new object to place is selected from keyboard
gv->vehicle_sel = INVALID_VEHICLE;
w->InvalidateWidget(GRP_WIDGET_LIST_VEHICLE);
static const WindowDesc _group_desc = {
WDP_AUTO, WDP_AUTO, 460, 194, 526, 246,
@@ -2844,15 +2844,14 @@ void SetObjectToPlaceWnd(CursorID icon,
#include "table/animcursors.h"
void SetObjectToPlace(CursorID icon, SpriteID pal, ViewportHighlightMode mode, WindowClass window_class, WindowNumber window_num)
{
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);
SetTileSelectSize(1, 1);
@@ -1082,22 +1082,23 @@ static bool HandleDragDrop()
if (_special_mouse_mode != WSM_DRAGDROP) return true;
if (_left_button_down) return false;
w = GetCallbackWnd();
ResetObjectToPlace();
if (w != NULL) {
/* send an event in client coordinates. */
e.event = WE_DRAGDROP;
e.we.dragdrop.pt.x = _cursor.pos.x - w->left;
e.we.dragdrop.pt.y = _cursor.pos.y - w->top;
e.we.dragdrop.widget = GetWidgetFromPos(w, e.we.dragdrop.pt.x, e.we.dragdrop.pt.y);
w->wndproc(w, &e);
return false;
static bool HandlePopupMenu()
Status change: