gnome-games r8366 - trunk/mahjongg



Author: rancell
Date: Tue Dec  9 16:51:55 2008
New Revision: 8366
URL: http://svn.gnome.org/viewvc/gnome-games?rev=8366&view=rev

Log:
When cannot shuffle tiles don't display shuffle button in 'no moves' dialog (Bug #306984)

Modified:
   trunk/mahjongg/mahjongg.c

Modified: trunk/mahjongg/mahjongg.c
==============================================================================
--- trunk/mahjongg/mahjongg.c	(original)
+++ trunk/mahjongg/mahjongg.c	Tue Dec  9 16:51:55 2008
@@ -608,7 +608,8 @@
 
     update_menu_sensitivities ();
     if (!game_over) {
-      gint response_id;       
+      gint response_id;
+       
       mb = gtk_message_dialog_new (GTK_WINDOW (window),
 				   GTK_DIALOG_MODAL
 				   | GTK_DIALOG_DESTROY_WITH_PARENT,
@@ -616,10 +617,14 @@
 				   GTK_BUTTONS_NONE,
 				   (_("There are no more moves.")));
       gtk_dialog_add_buttons (GTK_DIALOG (mb),
-			      GTK_STOCK_UNDO,
-			      GTK_RESPONSE_REJECT,
-                              _("_New game"), GTK_RESPONSE_CANCEL,
-			      _("_Shuffle"), GTK_RESPONSE_ACCEPT, NULL);
+			      GTK_STOCK_UNDO, GTK_RESPONSE_REJECT,
+                              _("_New game"), GTK_RESPONSE_CANCEL, NULL);
+
+      /* Can only shuffle if two tiles are visible to be matched. This cannot occur
+       * if all tiles are in a stack */
+      if (visible_tiles >= 2)
+        gtk_dialog_add_button(GTK_DIALOG (mb), _("_Shuffle"), GTK_RESPONSE_ACCEPT);
+
       gtk_dialog_set_default_response (GTK_DIALOG (mb), GTK_RESPONSE_ACCEPT);
       response_id = gtk_dialog_run (GTK_DIALOG (mb));
       switch (response_id) {
@@ -1197,8 +1202,6 @@
 void
 shuffle_tiles_callback (void)
 {
-  gboolean ok;
-
   if (paused || game_over == GAME_DEAD || game_over == GAME_WON)
     return;
 
@@ -1209,36 +1212,23 @@
     unselect_tile (selected_tile);
   }
 
-  ok = shuffle ();
-
-  if (!ok) {
-    GtkWidget *mb;
-    game_over = GAME_DEAD;
-    games_clock_stop (GAMES_CLOCK (chrono));
-    mb = gtk_message_dialog_new (GTK_WINDOW (window),
-				 GTK_DIALOG_MODAL |
-				 GTK_DIALOG_DESTROY_WITH_PARENT,
-				 GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-				 (_
-				  ("Sorry, I was unable to find a playable configuration.")));
-    gtk_dialog_run (GTK_DIALOG (mb));
-    gtk_widget_destroy (mb);
-
-  } else {
+  /* Shuffle the tiles - this should always succeed, the option should not be
+   * available if they cannot be shuffled */
+  if (!shuffle ())
+    return;
 
-    draw_all_tiles ();
+  draw_all_tiles ();
 
-    game_over = GAME_RUNNING;
+  game_over = GAME_RUNNING;
 
-    /* 60s penalty */
-    games_clock_add_seconds (GAMES_CLOCK (chrono), 60);
+  /* 60s penalty */
+  games_clock_add_seconds (GAMES_CLOCK (chrono), 60);
 
-    update_moves_left ();
-    /* Disable undo/redo after a shuffle. */
-    sequence_number = 1;
-    clear_undo_queue ();
-    set_undoredo_state (FALSE, FALSE);
-  }
+  update_moves_left ();
+  /* Disable undo/redo after a shuffle. */
+  sequence_number = 1;
+  clear_undo_queue ();
+  set_undoredo_state (FALSE, FALSE);
 
   update_menu_sensitivities ();
 }



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