summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/depot_gui.cpp70
-rw-r--r--src/smallmap_gui.cpp10
-rw-r--r--src/window.cpp9
-rw-r--r--src/window_gui.h4
4 files changed, 50 insertions, 43 deletions
diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp
index b3414d384..e29396987 100644
--- a/src/depot_gui.cpp
+++ b/src/depot_gui.cpp
@@ -793,9 +793,9 @@ struct DepotWindow : Window {
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 @@ struct DepotWindow : Window {
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;
- /* 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();
- }
+ /* Display info for single (articulated) vehicle, or for whole chain starting with selected vehicle */
+ bool whole_chain = (this->type == VEH_TRAIN && _ctrl_pressed);
- 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;
- 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));
- }
+ for (CargoID cargo_type = 0; cargo_type < NUM_CARGO; cargo_type++) {
+ if (capacity[cargo_type] == 0) continue;
- /* 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);
+ 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);
+
+ return true;
}
virtual void OnPlaceObject(Point pt, TileIndex tile)
diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp
index 30ccc9cb5..8869a8353 100644
--- a/src/smallmap_gui.cpp
+++ b/src/smallmap_gui.cpp
@@ -1258,12 +1258,12 @@ public:
}
}
- 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)
diff --git a/src/window.cpp b/src/window.cpp
index 5658e6887..5c9eeb7f5 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -383,12 +383,15 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count)
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;
+ if (wid->index >= 0) {
+ Point pt = { x, y };
+ if (w->OnRightClick(pt, wid->index)) return;
+ }
- Point pt = { x, y };
- w->OnRightClick(pt, wid->index);
+ if (_settings_client.gui.hover_delay == 0 && wid->tool_tip != 0) GuiShowTooltips(wid->tool_tip, 0, NULL, TCC_RIGHT_CLICK);
}
/**
diff --git a/src/window_gui.h b/src/window_gui.h
index 38129cbfc..83c7e3bb9 100644
--- a/src/window_gui.h
+++ b/src/window_gui.h
@@ -654,8 +654,10 @@ public:
* 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.