From d4d5a22685cfd0e7674f4cccf30f17945ab535e9 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Fri, 6 Feb 2026 20:36:29 -0800 Subject: [PATCH] Fix spellbook drag-drop onto action bar by detecting mouse release over slot --- src/ui/game_screen.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/ui/game_screen.cpp b/src/ui/game_screen.cpp index b5771aeb..8667385a 100644 --- a/src/ui/game_screen.cpp +++ b/src/ui/game_screen.cpp @@ -1510,17 +1510,20 @@ void GameScreen::renderActionBar(game::GameHandler& gameHandler) { } bool rightClicked = ImGui::IsItemClicked(ImGuiMouseButton_Right); + bool hoveredOnRelease = ImGui::IsItemHovered() && + ImGui::IsMouseReleased(ImGuiMouseButton_Left); - // Drop held item from inventory onto action bar - if (clicked && inventoryScreen.isHoldingItem()) { - const auto& held = inventoryScreen.getHeldItem(); - gameHandler.setActionBarSlot(i, game::ActionBarSlot::ITEM, held.itemId); - inventoryScreen.returnHeldItem(gameHandler.getInventory()); - } else if (clicked && spellbookScreen.isDraggingSpell()) { - // Drop dragged spell from spellbook onto this slot + // Drop dragged spell from spellbook onto this slot + // (mouse release over slot — button click won't fire since press was in spellbook) + if (hoveredOnRelease && spellbookScreen.isDraggingSpell()) { gameHandler.setActionBarSlot(i, game::ActionBarSlot::SPELL, spellbookScreen.getDragSpellId()); spellbookScreen.consumeDragSpell(); + } else if (clicked && inventoryScreen.isHoldingItem()) { + // Drop held item from inventory onto action bar + const auto& held = inventoryScreen.getHeldItem(); + gameHandler.setActionBarSlot(i, game::ActionBarSlot::ITEM, held.itemId); + inventoryScreen.returnHeldItem(gameHandler.getInventory()); } else if (clicked && actionBarDragSlot_ >= 0) { // Dropping a dragged action bar slot onto another slot - swap or place if (i != actionBarDragSlot_) {