From 57b78efdbf185fb1f4deacdb98f4bf8bdf52aba3 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Thu, 28 Mar 2019 15:13:09 -0400 Subject: Fix double-click regardless of selection --- freecell.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/freecell.c b/freecell.c index 487ef79..d50b641 100644 --- a/freecell.c +++ b/freecell.c @@ -191,16 +191,22 @@ static bool keyDown(SDL_KeyboardEvent key) { static bool mouseButtonDown(SDL_MouseButtonEvent button) { struct SDL_Point point = { button.x, button.y }; + struct Item *item = listFind(&layout.main, &point); - if (layout.dragItem.card) { - if (button.clicks % 2 == 0) { - for (uint dest = Cell1; dest <= Cell4; ++dest) { - if (gameMove(dest, layout.dragItem.card)) { - layout.dragItem.card = 0; - return true; - } - } + if (button.clicks % 2 == 0) { + Card card = layout.dragItem.card; + if (!card) { + if (!item) return false; + card = item->card; } + for (uint dest = Cell1; dest <= Cell4; ++dest) { + if (gameMove(dest, card)) break; + } + layout.dragItem.card = 0; + return true; + } + + if (layout.dragItem.card) { for (uint dest = 0; dest < StacksLen; ++dest) { if (SDL_PointInRect(&point, &stackRects[dest])) { if (gameMove(dest, layout.dragItem.card)) break; @@ -211,7 +217,6 @@ static bool mouseButtonDown(SDL_MouseButtonEvent button) { } // TODO: Right click to reveal? - struct Item *item = listFind(&layout.main, &point); if (!item) return false; if (!gameAvail(item->card)) return false; layout.dragItem = *item; -- cgit 1.4.1