diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp --- 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; + + /* 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) diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp --- 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 --- a/src/window.cpp +++ b/src/window.cpp @@ -383,12 +383,15 @@ static void DispatchLeftClickEvent(Windo 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); } /** diff --git a/src/window_gui.h b/src/window_gui.h --- 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.