From a029b2b83aa344fdd8ba1f7bc0915205c52daca0 Mon Sep 17 00:00:00 2001 From: rubidium Date: Sun, 12 Dec 2010 14:14:26 +0000 Subject: [PATCH] (svn r21477) -Fix [FS#4300]: tooltips were removed when their related window got closed --- src/depot_gui.cpp | 2 +- src/industry_gui.cpp | 4 ++-- src/misc_gui.cpp | 8 +++++--- src/viewport.cpp | 2 +- src/window.cpp | 4 ++-- src/window_gui.h | 2 +- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 54ebecdbe7..095c41af94 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -835,7 +835,7 @@ 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, TCC_RIGHT_CLICK); + GuiShowTooltips(this, whole_chain ? STR_DEPOT_VEHICLE_TOOLTIP_CHAIN : STR_DEPOT_VEHICLE_TOOLTIP, 2, args, TCC_RIGHT_CLICK); return true; } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index dd9fce88eb..6bf3932c1f 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2564,7 +2564,7 @@ struct IndustryCargoesWindow : public Window { case CFT_INDUSTRY: if (fld->u.industry.ind_type < NUM_INDUSTRYTYPES && (this->ind_cargo >= NUM_INDUSTRYTYPES || fieldxy.x != 2)) { - GuiShowTooltips(STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, TCC_HOVER); + GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, TCC_HOVER); } return; @@ -2575,7 +2575,7 @@ struct IndustryCargoesWindow : public Window { const CargoSpec *csp = CargoSpec::Get(cid); uint64 params[5]; params[0] = csp->name; - GuiShowTooltips(STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, TCC_HOVER); + GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, TCC_HOVER); } } diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index ef485c7be9..a1327ba1bf 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -822,8 +822,9 @@ struct TooltipsWindow : public Window uint64 params[5]; ///< The string parameters. TooltipCloseCondition close_cond; ///< Condition for closing the window. - TooltipsWindow(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_tooltip) : Window() + TooltipsWindow(Window *parent, StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_tooltip) : Window() { + this->parent = parent; this->string_id = str; assert_compile(sizeof(this->params[0]) == sizeof(params[0])); assert(paramcount <= lengthof(this->params)); @@ -901,18 +902,19 @@ struct TooltipsWindow : public Window /** * Shows a tooltip + * @param parent The window this tooltip is related to. * @param str String to be displayed * @param paramcount number of params to deal with * @param params (optional) up to 5 pieces of additional information that may be added to a tooltip * @param use_left_mouse_button close the tooltip when the left (true) or right (false) mousebutton is released */ -void GuiShowTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_tooltip) +void GuiShowTooltips(Window *parent, StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_tooltip) { DeleteWindowById(WC_TOOLTIPS, 0); if (str == STR_NULL) return; - new TooltipsWindow(str, paramcount, params, close_tooltip); + new TooltipsWindow(parent, str, paramcount, params, close_tooltip); } /* Delete a character at the caret position in a text buf. diff --git a/src/viewport.cpp b/src/viewport.cpp index 01b98effa9..21ca5a81de 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2058,7 +2058,7 @@ void UpdateTileSelection() static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond = TCC_LEFT_CLICK) { if (!_settings_client.gui.measure_tooltip) return; - GuiShowTooltips(str, paramcount, params, close_cond); + GuiShowTooltips(FindWindowById(_thd.window_class, _thd.window_number), str, paramcount, params, close_cond); } /** highlighting tiles while only going over them with the mouse */ diff --git a/src/window.cpp b/src/window.cpp index 5c6ef3fa7f..df7771633b 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -406,7 +406,7 @@ static void DispatchRightClickEvent(Window *w, int x, int 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); + if (_settings_client.gui.hover_delay == 0 && wid->tool_tip != 0) GuiShowTooltips(w, wid->tool_tip, 0, NULL, TCC_RIGHT_CLICK); } /** @@ -424,7 +424,7 @@ static void DispatchHoverEvent(Window *w, int x, int y) /* Show the tooltip if there is any */ if (wid->tool_tip != 0) { - GuiShowTooltips(wid->tool_tip); + GuiShowTooltips(w, wid->tool_tip); return; } diff --git a/src/window_gui.h b/src/window_gui.h index b69f012943..90e3135bef 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -792,7 +792,7 @@ enum TooltipCloseCondition { TCC_HOVER, }; -void GuiShowTooltips(StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER); +void GuiShowTooltips(Window *parent, 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);