From b50b619be7af04bb7ecb1b30b628532d88c1844b Mon Sep 17 00:00:00 2001 From: grorp Date: Tue, 31 Dec 2024 14:11:17 +0100 Subject: [PATCH] Add explanation to touchscreen item tooltip code (#15607) this explains some cryptic inventory code I wrote in #14029 / 771da80bbb85c9fa4f0dcf0f3d04f46a0a20239f --- src/gui/guiInventoryList.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/gui/guiInventoryList.cpp b/src/gui/guiInventoryList.cpp index e5c61e86b..28d482994 100644 --- a/src/gui/guiInventoryList.cpp +++ b/src/gui/guiInventoryList.cpp @@ -137,12 +137,26 @@ void GUIInventoryList::draw() client, rotation_kind); } - // Add hovering tooltip + // Add hovering tooltip. The tooltip disappears if any item is selected, + // including the currently hovered one. bool show_tooltip = !item.empty() && hovering && !selected_item; - // Make it possible to see item tooltips on touchscreens + if (RenderingEngine::getLastPointerType() == PointerType::Touch) { + // Touchscreen users cannot hover over an item without selecting it. + // To allow touchscreen users to see item tooltips, we also show the + // tooltip if the item is selected and the finger is still on the + // source slot. + // The selected amount may be 0 in rare cases during "left-dragging" + // (used to distribute items evenly). + // In this case, the user doesn't see an item being dragged, + // so we don't show the tooltip. + // Note: `m_fs_menu->getSelectedAmount() != 0` below refers to the + // part of the selected item the user is dragging. + // `!item.empty()` would refer to the part of the selected item + // remaining in the source slot. show_tooltip |= hovering && selected && m_fs_menu->getSelectedAmount() != 0; } + if (show_tooltip) { std::string tooltip = orig_item.getDescription(client->idef()); if (m_fs_menu->doTooltipAppendItemname())