changeset 10732:cb1b114429c8 draft

(svn r15065) -Change (r14919): Allow to select a new station location by ctrl-clicking while distant-join window is open. (PhilSophus)
author frosch <frosch@openttd.org>
date Tue, 13 Jan 2009 17:28:11 +0000
parents df1a103af241
children 50c4cede2aa8
files src/station_gui.cpp src/tilehighlight_func.h src/viewport.cpp src/window.cpp
diffstat 4 files changed, 15 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/station_gui.cpp
+++ b/src/station_gui.cpp
@@ -1206,17 +1206,26 @@
  */
 static bool StationJoinerNeeded(CommandContainer cmd, int w, int h)
 {
-	if (CmdFailed(DoCommand(&cmd, CommandFlagsToDCFlags(GetCommandFlags(cmd.cmd))))) return false;
-
 	/* Only show selection if distant join is enabled in the settings */
 	if (!_settings_game.station.distant_join_stations) return false;
 
-	/* If a window is already opened, we always return true */
-	if (FindWindowById(WC_SELECT_STATION, 0) != NULL) return true;
+	/* If a window is already opened and we didn't ctrl-click,
+	 * return true (i.e. just flash the old window) */
+	Window *selection_window = FindWindowById(WC_SELECT_STATION, 0);
+	if (selection_window != NULL) {
+		if (!_ctrl_pressed) return true;
+
+		/* Abort current distant-join and start new one */
+		delete selection_window;
+		UpdateTileSelection();
+	}
 
 	/* only show the popup, if we press ctrl */
 	if (!_ctrl_pressed) return false;
 
+	/* Now check if we could build there */
+	if (CmdFailed(DoCommand(&cmd, CommandFlagsToDCFlags(GetCommandFlags(cmd.cmd))))) return false;
+
 	/* First test for adjacent station */
 	FindStationsNearby(cmd.tile, w, h, false);
 	int neighbour_station_count = _stations_nearby_list.Length();
--- a/src/tilehighlight_func.h
+++ b/src/tilehighlight_func.h
@@ -24,6 +24,8 @@
 void VpSetPresizeRange(TileIndex from, TileIndex to);
 void VpSetPlaceSizingLimit(int limit);
 
+void UpdateTileSelection();
+
 extern PlaceProc *_place_proc;
 extern TileHighlightData _thd;
 
--- a/src/viewport.cpp
+++ b/src/viewport.cpp
@@ -2116,7 +2116,6 @@
  * Also drawstyle is determined. Uses _thd.new.* as a buffer and calls SetSelectionTilesDirty() twice,
  * Once for the old and once for the new selection.
  * _thd is TileHighlightData, found in viewport.h
- * Called by MouseLoop() in windows.cpp
  */
 void UpdateTileSelection()
 {
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1745,7 +1745,6 @@
 	TIME_BETWEEN_DOUBLE_CLICK = 500, ///< Time between 2 left clicks before it becoming a double click, in ms
 };
 
-extern void UpdateTileSelection();
 extern bool VpHandlePlaceSizingDrag();
 
 static void ScrollMainViewport(int x, int y)