changeset 15496:9df3018e209b draft

(svn r20145) -Codechange: keep original RMB->tooltip behaviour when hovering is disabled and there is no handled right click event for the widget, i.e. if a widget would handle the right click you won't see the tooltip anymore by right clicking; by enabling hovering you would get access to that tooltip again.
author rubidium <rubidium@openttd.org>
date Wed, 14 Jul 2010 17:36:27 +0000
parents 9cffefe9d5db
children 65a1ccb380e3
files src/depot_gui.cpp src/smallmap_gui.cpp src/window.cpp src/window_gui.h
diffstat 4 files changed, 53 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -793,9 +793,9 @@
 		DoCommandP(0, GetDepotIndex(this->window_number), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), NULL, str);
 	}
 
-	virtual void OnRightClick(Point pt, int widget)
+	virtual bool OnRightClick(Point pt, int widget)
 	{
-		if (widget != DEPOT_WIDGET_MATRIX) return;
+		if (widget != DEPOT_WIDGET_MATRIX) return false;
 
 		GetDepotVehiclePtData gdvp = { NULL, NULL };
 		const Vehicle *v = NULL;
@@ -804,47 +804,49 @@
 
 		if (this->type == VEH_TRAIN) v = gdvp.wagon;
 
-		if (v != NULL && mode == MODE_DRAG_VEHICLE) {
-			CargoArray capacity, loaded;
+		if (v == NULL || mode != MODE_DRAG_VEHICLE) return false;
 
-			/* Display info for single (articulated) vehicle, or for whole chain starting with selected vehicle */
-			bool whole_chain = (this->type == VEH_TRAIN && _ctrl_pressed);
+		CargoArray capacity, loaded;
+
+		/* Display info for single (articulated) vehicle, or for whole chain starting with selected vehicle */
+		bool whole_chain = (this->type == VEH_TRAIN && _ctrl_pressed);
 
-			/* loop through vehicle chain and collect cargos */
-			uint num = 0;
-			for (const Vehicle *w = v; w != NULL; w = w->Next()) {
-				if (w->cargo_cap > 0 && w->cargo_type < NUM_CARGO) {
-					capacity[w->cargo_type] += w->cargo_cap;
-					loaded  [w->cargo_type] += w->cargo.Count();
-				}
-
-				if (w->type == VEH_TRAIN && !Train::From(w)->HasArticulatedPart()) {
-					num++;
-					if (!whole_chain) break;
-				}
+		/* loop through vehicle chain and collect cargos */
+		uint num = 0;
+		for (const Vehicle *w = v; w != NULL; w = w->Next()) {
+			if (w->cargo_cap > 0 && w->cargo_type < NUM_CARGO) {
+				capacity[w->cargo_type] += w->cargo_cap;
+				loaded  [w->cargo_type] += w->cargo.Count();
 			}
 
-			/* Build tooltipstring */
-			static char details[1024];
-			details[0] = '\0';
-			char *pos = details;
+			if (w->type == VEH_TRAIN && !Train::From(w)->HasArticulatedPart()) {
+				num++;
+				if (!whole_chain) break;
+			}
+		}
 
-			for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
-				if (capacity[cargo_type] == 0) continue;
+		/* Build tooltipstring */
+		static char details[1024];
+		details[0] = '\0';
+		char *pos = details;
+
+		for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
+			if (capacity[cargo_type] == 0) continue;
 
-				SetDParam(0, cargo_type);           // {CARGO} #1
-				SetDParam(1, loaded[cargo_type]);   // {CARGO} #2
-				SetDParam(2, cargo_type);           // {SHORTCARGO} #1
-				SetDParam(3, capacity[cargo_type]); // {SHORTCARGO} #2
-				pos = GetString(pos, STR_DEPOT_VEHICLE_TOOLTIP_CARGO, lastof(details));
-			}
+			SetDParam(0, cargo_type);           // {CARGO} #1
+			SetDParam(1, loaded[cargo_type]);   // {CARGO} #2
+			SetDParam(2, cargo_type);           // {SHORTCARGO} #1
+			SetDParam(3, capacity[cargo_type]); // {SHORTCARGO} #2
+			pos = GetString(pos, STR_DEPOT_VEHICLE_TOOLTIP_CARGO, lastof(details));
+		}
 
-			/* Show tooltip window */
-			uint64 args[2];
-			args[0] = (whole_chain ? num : v->engine_type);
-			args[1] = (uint64)(size_t)details;
-			GuiShowTooltips(whole_chain ? STR_DEPOT_VEHICLE_TOOLTIP_CHAIN : STR_DEPOT_VEHICLE_TOOLTIP, 2, args, TCC_RIGHT_CLICK);
-		}
+		/* Show tooltip window */
+		uint64 args[2];
+		args[0] = (whole_chain ? num : v->engine_type);
+		args[1] = (uint64)(size_t)details;
+		GuiShowTooltips(whole_chain ? STR_DEPOT_VEHICLE_TOOLTIP_CHAIN : STR_DEPOT_VEHICLE_TOOLTIP, 2, args, TCC_RIGHT_CLICK);
+
+		return true;
 	}
 
 	virtual void OnPlaceObject(Point pt, TileIndex tile)
--- a/src/smallmap_gui.cpp
+++ b/src/smallmap_gui.cpp
@@ -1258,12 +1258,12 @@
 		}
 	}
 
-	virtual void OnRightClick(Point pt, int widget)
+	virtual bool OnRightClick(Point pt, int widget)
 	{
-		if (widget == SM_WIDGET_MAP) {
-			if (_scrolling_viewport) return;
-			_scrolling_viewport = true;
-		}
+		if (widget != SM_WIDGET_MAP || _scrolling_viewport) return false;
+
+		_scrolling_viewport = true;
+		return true;
 	}
 
 	virtual void OnMouseWheel(int wheel)
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -383,12 +383,15 @@
 static void DispatchRightClickEvent(Window *w, int x, int y)
 {
 	NWidgetCore *wid = w->nested_root->GetWidgetFromPos(x, y);
+	if (wid == NULL) return;
 
 	/* No widget to handle, or the window is not interested in it. */
-	if (wid == NULL || wid->index < 0) return;
-
-	Point pt = { x, y };
-	w->OnRightClick(pt, wid->index);
+	if (wid->index >= 0) {
+		Point pt = { x, y };
+		if (w->OnRightClick(pt, wid->index)) return;
+	}
+
+	if (_settings_client.gui.hover_delay == 0 && wid->tool_tip != 0) GuiShowTooltips(wid->tool_tip, 0, NULL, TCC_RIGHT_CLICK);
 }
 
 /**
--- a/src/window_gui.h
+++ b/src/window_gui.h
@@ -654,8 +654,10 @@
 	 * A click with the right mouse button has been made on the window.
 	 * @param pt     the point inside the window that has been clicked.
 	 * @param widget the clicked widget.
+	 * @return true if the click was actually handled, i.e. do not show a
+	 *         tooltip if tooltip-on-right-click is enabled.
 	 */
-	virtual void OnRightClick(Point pt, int widget) {}
+	virtual bool OnRightClick(Point pt, int widget) { return false; }
 
 	/**
 	 * The mouse is hovering over a widget in the window, perform an action for it, like opening a custom tooltip.