From 10fbb87823dd689844c93ce8b0d43a5098acdba9 Mon Sep 17 00:00:00 2001 From: terkhen Date: Sun, 11 Jul 2010 10:58:55 +0000 Subject: [PATCH] (svn r20120) -Feature [FS#3913]: Tooltips are shown by hovering the mouse over a widget instead of by right clicking on it. --- src/depot_gui.cpp | 4 ++-- src/window.cpp | 25 +++++++++++++++++++------ src/window_gui.h | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index ee22720040..1ad79b12ee 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -842,10 +842,10 @@ struct DepotWindow : 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); + GuiShowTooltips(whole_chain ? STR_DEPOT_VEHICLE_TOOLTIP_CHAIN : STR_DEPOT_VEHICLE_TOOLTIP, 2, args, TCC_RIGHT_CLICK); } else { /* Show tooltip help */ - GuiShowTooltips(STR_DEPOT_TRAIN_LIST_TOOLTIP + this->type); + GuiShowTooltips(STR_DEPOT_TRAIN_LIST_TOOLTIP + this->type, TCC_RIGHT_CLICK); } } diff --git a/src/window.cpp b/src/window.cpp index 69fccf9d3e..d34f138b66 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -384,6 +384,23 @@ static void DispatchRightClickEvent(Window *w, int x, int y) { NWidgetCore *wid = w->nested_root->GetWidgetFromPos(x, y); + /* 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); +} + +/** + * Dispatch hover of the mouse over a window. + * @param w Window to dispatch event in. + * @param x X coordinate of the click. + * @param y Y coordinate of the click. + */ +static void DispatchHoverEvent(Window *w, int x, int y) +{ + NWidgetCore *wid = w->nested_root->GetWidgetFromPos(x, y); + /* No widget to handle */ if (wid == NULL) return; @@ -392,12 +409,6 @@ static void DispatchRightClickEvent(Window *w, int x, int y) GuiShowTooltips(wid->tool_tip); return; } - - /* Widget has no index, so the window is not interested in it. */ - if (wid->index < 0) return; - - Point pt = { x, y }; - w->OnRightClick(pt, wid->index); } /** @@ -2178,6 +2189,8 @@ static void MouseLoop(MouseClick click, int mousewheel) /* fallthough */ case MC_RIGHT: DispatchRightClickEvent(w, x - w->left, y - w->top); break; + + case MC_HOVER: DispatchHoverEvent(w, x - w->left, y - w->top); break; } } } diff --git a/src/window_gui.h b/src/window_gui.h index 6a882647bb..f25ebba087 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -900,7 +900,7 @@ enum TooltipCloseCondition { TCC_HOVER, }; -void GuiShowTooltips(StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_RIGHT_CLICK); +void GuiShowTooltips(StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER); /* widget.cpp */ int GetWidgetFromPos(const Window *w, int x, int y);