[gnome-tetravex] Disallow solve when moving tile.



commit 152da887e9a19fe5d1e98f1f146beb1680cccae8
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Mon Sep 16 22:57:02 2019 +0200

    Disallow solve when moving tile.
    
    Disallow solving a game
    while a tile is moving.
    
    Fixes #10.

 src/gnome-tetravex.vala | 13 +++++++++----
 src/puzzle-view.vala    |  5 +++++
 2 files changed, 14 insertions(+), 4 deletions(-)
---
diff --git a/src/gnome-tetravex.vala b/src/gnome-tetravex.vala
index 86de813..8efe229 100644
--- a/src/gnome-tetravex.vala
+++ b/src/gnome-tetravex.vala
@@ -118,9 +118,6 @@ private class Tetravex : Gtk.Application
             game_size = settings.get_int (KEY_GRID_SIZE);
         ((SimpleAction) lookup_action ("size")).set_state ("%d".printf (game_size));
 
-        pause_action = (SimpleAction) lookup_action ("pause");
-        solve_action = (SimpleAction) lookup_action ("solve");
-
         HeaderBar headerbar = new HeaderBar ();
         headerbar.title = _("Tetravex");
         headerbar.show_close_button = true;
@@ -213,6 +210,14 @@ private class Tetravex : Gtk.Application
         box.set_margin_bottom (20);
         grid.attach (box, 1, 1, 1, 1);
 
+        pause_action = (SimpleAction) lookup_action ("pause");
+        solve_action = (SimpleAction) lookup_action ("solve");
+        view.tile_selected.connect ((/* bool */ selected) => {
+                if (puzzle == null || ((!) puzzle).is_solved)
+                    return;
+                solve_action.set_enabled (!selected);
+            });
+
         window.show_all ();
 
         tick_cb ();
@@ -279,7 +284,6 @@ private class Tetravex : Gtk.Application
 
     private void new_game ()
     {
-        pause_action.change_state (false);
         pause_action.set_enabled (true);
         solve_action.set_enabled (true);
         new_game_solve_stack.set_visible_child_name ("solve");
@@ -394,6 +398,7 @@ private class Tetravex : Gtk.Application
             puzzle.solve ();
             new_game_solve_stack.set_visible_child_name ("new-game");
             pause_action.set_enabled (false);
+            solve_action.set_enabled (false);
         }
     }
 
diff --git a/src/puzzle-view.vala b/src/puzzle-view.vala
index 70edc88..108cc62 100644
--- a/src/puzzle-view.vala
+++ b/src/puzzle-view.vala
@@ -78,6 +78,7 @@ public class PuzzleView : Gtk.DrawingArea
 
     /* Tile being controlled by the mouse */
     private TileImage? selected_tile = null;
+    internal signal void tile_selected (bool selected);
 
     /* Timeout to detect if a click is a selection or a drag */
     private uint selection_timeout = 0;
@@ -266,6 +267,7 @@ public class PuzzleView : Gtk.DrawingArea
             move_tile_to_location (image, x, y);
         }
         selected_tile = null;
+        tile_selected (false);
 
         return false;
     }
@@ -386,6 +388,7 @@ public class PuzzleView : Gtk.DrawingArea
             if (x >= image.x && x <= image.x + size && y >= image.y && y <= image.y + size)
             {
                 selected_tile = image;
+                tile_selected (true);
                 selected_x_offset = x - image.x;
                 selected_y_offset = y - image.y;
 
@@ -449,6 +452,7 @@ public class PuzzleView : Gtk.DrawingArea
         else
             move_tile_to_location (selected_tile, selected_x, selected_y, 0.2);
         selected_tile = null;
+        tile_selected (false);
     }
 
     private void move_tile_to_right_half (TileImage image)
@@ -491,6 +495,7 @@ public class PuzzleView : Gtk.DrawingArea
                 if (selected_tile != null && !on_right_half (selected_tile.x))
                     move_tile_to_right_half (selected_tile);
                 selected_tile = null;
+                tile_selected (false);
             }
         }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]