diff -Nru gnome-games-2.0.1/freecell/src/io-gtk.c gnome-games-2.0.2/freecell/src/io-gtk.c
--- gnome-games-2.0.1/freecell/src/io-gtk.c	Wed Jun  5 16:52:17 2002
+++ gnome-games-2.0.2/freecell/src/io-gtk.c	Tue Jul  9 21:58:32 2002
@@ -609,7 +609,7 @@
 	mb = NULL;
 }
 
-void
+gboolean
 callback_exit (GtkWidget *widget, GdkEvent *event)
 {
   if (!stalled
@@ -621,19 +621,24 @@
       mb = gtk_message_dialog_new (GTK_WINDOW (main_window),
 		      GTK_DIALOG_MODAL,
 		      GTK_MESSAGE_QUESTION,
-		      GTK_BUTTONS_YES_NO,
-		      _("Exit this game?"),
+		      GTK_BUTTONS_NONE,
+		      _("Really exit GNOME Freecell?"),
 		      NULL);
+      gtk_dialog_add_buttons (GTK_DIALOG (mb),
+              GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+              GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT, 
+              NULL);
+      
 
       gtk_dialog_set_default_response (GTK_DIALOG (mb),
-		      GTK_RESPONSE_YES);
+		      GTK_RESPONSE_REJECT);
       response = gtk_dialog_run (GTK_DIALOG(mb));
       gtk_widget_destroy (mb);
 
-      if (response == GTK_RESPONSE_YES)
-      {
-	      callback_exit_with_lose();
+      if (response == GTK_RESPONSE_REJECT) {
+          return TRUE;
       }
+      callback_exit_with_lose();
     }
   else
     callback_exit_really();
diff -Nru gnome-games-2.0.1/freecell/src/io-gtk.h gnome-games-2.0.2/freecell/src/io-gtk.h
--- gnome-games-2.0.1/freecell/src/io-gtk.h	Fri Apr 24 11:16:43 1998
+++ gnome-games-2.0.2/freecell/src/io-gtk.h	Tue Jul  9 21:58:43 2002
@@ -39,7 +39,7 @@
 void callback_score (GtkWidget *widget, GdkEvent *event);
 void callback_undo (GtkWidget *widget, GdkEvent *event);
 void callback_option (GtkWidget *widget, GdkEvent *event);
-void callback_exit (GtkWidget *widget, GdkEvent *event);
+gboolean callback_exit (GtkWidget *widget, GdkEvent *event);
 void callback_rule (GtkWidget *widget, GdkEvent *event);
 void callback_about (GtkWidget *widget, GdkEvent *event);
 
diff -Nru gnome-games-2.0.1/gataxx/gataxx.c gnome-games-2.0.2/gataxx/gataxx.c
--- gnome-games-2.0.1/gataxx/gataxx.c	Wed Jun  5 16:44:15 2002
+++ gnome-games-2.0.2/gataxx/gataxx.c	Tue Jul  9 19:48:55 2002
@@ -229,16 +229,22 @@
     gint response;
 
     box = gtk_message_dialog_new (GTK_WINDOW (window),
-                                 GTK_DIALOG_DESTROY_WITH_PARENT,
+                                 GTK_DIALOG_MODAL,
                                  GTK_MESSAGE_QUESTION,
-                                 GTK_BUTTONS_YES_NO,
-                                 _("Do you really want to quit?"));
-    gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_YES);
+                                 GTK_BUTTONS_NONE,
+                                 _("Really exit gataxx?"));
+    gtk_dialog_add_buttons (GTK_DIALOG (box),
+            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+            GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+            NULL);
+
+    
+    gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_REJECT);
 
     response = gtk_dialog_run (GTK_DIALOG (box));
     gtk_widget_destroy (box);
 
-    if (response == GTK_RESPONSE_NO)
+    if (response == GTK_RESPONSE_REJECT)
       return TRUE;
   }
 
diff -Nru gnome-games-2.0.1/glines/glines.c gnome-games-2.0.2/glines/glines.c
--- gnome-games-2.0.1/glines/glines.c	Wed Jun  5 16:44:15 2002
+++ gnome-games-2.0.2/glines/glines.c	Tue Jul  9 20:51:52 2002
@@ -937,7 +937,8 @@
 
 	gtk_container_add (GTK_CONTAINER(fv), cb);
 
-	cb = gtk_check_button_new_with_label ( _("Ask confirmation when quitting") );
+	/*
+    cb = gtk_check_button_new_with_label ( _("Ask confirmation when quitting") );
 	if (ask_me) 
 	 {
 	   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb),
@@ -947,6 +948,7 @@
 			  G_CALLBACK (set_selection_def), NULL);
 
 	gtk_container_add (GTK_CONTAINER(fv), cb);
+    */
 
 	gtk_box_pack_start_defaults (GTK_BOX(GTK_DIALOG(pref_dialog)->vbox), f);
 	gtk_container_add (GTK_CONTAINER (f), fv);
@@ -976,31 +978,30 @@
 {
 	GtkWidget *box;
 
-	if (ask_me) {
+	/*
+    if (ask_me) {
+    */
 
 	 box = gtk_message_dialog_new (GTK_WINDOW (app),
 				       GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
 				       GTK_MESSAGE_QUESTION,
 				       GTK_BUTTONS_NONE,
-				       (_("Do you really want to quit?")));
+				       (_("Really exit glines?")));
 	 gtk_dialog_add_buttons (GTK_DIALOG (box),
-				 GTK_STOCK_NO, GTK_RESPONSE_NO,
-				 GTK_STOCK_YES, GTK_RESPONSE_YES,
+				 GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
+				 GTK_STOCK_QUIT, GTK_RESPONSE_YES,
 				 NULL);
 					
 	 gtk_widget_show (box);
 	 response = gtk_dialog_run (GTK_DIALOG (box));
-	 
+	 gtk_widget_destroy (box);
+     
 	 if (response == GTK_RESPONSE_YES)
 	 {
 		 gtk_widget_destroy (app);
 		 gtk_main_quit ();
-	 }
-	 else
-	 {
-		 gtk_widget_hide (box);
-		 return TRUE;
-	 }
+	 } else {
+         return TRUE;
 	}
 	gtk_main_quit ();
 	return FALSE;
diff -Nru gnome-games-2.0.1/gnect/src/gui.c gnome-games-2.0.2/gnect/src/gui.c
--- gnome-games-2.0.1/gnect/src/gui.c	Sat May  4 12:43:03 2002
+++ gnome-games-2.0.2/gnect/src/gui.c	Tue Jul  9 21:56:18 2002
@@ -33,7 +33,7 @@
 
 
 
-static void cb_gui_quit_verify(GtkWidget *widget, gpointer data);
+gboolean cb_gui_quit_verify(GtkWidget *widget, gpointer data);
 static void cb_gui_game_new(GtkWidget *widget, gpointer data);
 static void cb_gui_game_undo(GtkWidget *widget, gpointer data);
 static void cb_gui_game_hint(GtkWidget *widget, gpointer data);
@@ -114,48 +114,36 @@
 
 
 
-static void
-cb_gui_quit_test (GtkWidget *widget, int response_id, gpointer data)
-{
-        if (response_id == GUI_RESPONSE_FINISH) {
-                gtk_main_quit ();
-        }
-        else {
-                gtk_widget_destroy (widget);
-        }
-}
-
-
-
-static void
+gboolean
 cb_gui_quit_verify (GtkWidget *widget, gpointer data)
 {
         GtkWidget *quitverify;
-
+        gint response;
 
         if (prefs.do_verify && !gnect.over) {
 
                 quitverify = gtk_message_dialog_new (GTK_WINDOW(app),
-                                                     GTK_DIALOG_DESTROY_WITH_PARENT,
-                                                     GTK_MESSAGE_QUESTION,
-                                                     GTK_BUTTONS_NONE,
-                                                     _("Exit gnect and end the current game?"));
+                        GTK_DIALOG_MODAL,
+                        GTK_MESSAGE_QUESTION,
+                        GTK_BUTTONS_NONE,
+                        _("Really exit glines?"));
 
                 gtk_dialog_add_buttons (GTK_DIALOG(quitverify),
-                                        "Continue",
-                                        GUI_RESPONSE_CONTINUE,
-                                        "End game & Quit",
-                                        GUI_RESPONSE_FINISH,
-                                        NULL);
+                        GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                        GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+                        NULL);
+                gtk_dialog_set_default_response (GTK_DIALOG (quitverify), GTK_RESPONSE_REJECT); 
+
+/*                gtk_window_set_position (GTK_WINDOW(quitverify), GTK_WIN_POS_MOUSE);*/
+                response = gtk_dialog_run (GTK_DIALOG (quitverify));
+                gtk_widget_destroy (quitverify);
 
-                gtk_window_set_position (GTK_WINDOW(quitverify), GTK_WIN_POS_MOUSE);
-                g_signal_connect (GTK_OBJECT(quitverify), "response", 
-                                  G_CALLBACK(cb_gui_quit_test), NULL);
-                gtk_widget_show(quitverify);
-        }
-        else {
-                gtk_main_quit ();
+                if (response == GTK_RESPONSE_REJECT) {
+                    return TRUE;
+                }
+                
         }
+        gtk_main_quit ();
 }
 
 
@@ -574,7 +562,7 @@
         gtk_window_set_wmclass (GTK_WINDOW(app), APPNAME, "main");
 
         g_signal_connect (GTK_OBJECT(app), "delete_event", GTK_SIGNAL_FUNC(cb_gui_quit_verify), NULL);
-        g_signal_connect (GTK_OBJECT(app), "destroy", GTK_SIGNAL_FUNC(cb_gui_quit_verify), NULL);
+        /*g_signal_connect (GTK_OBJECT(app), "destroy", GTK_SIGNAL_FUNC(cb_gui_quit_verify), NULL);*/
 
         gnome_window_icon_set_default_from_file (FNAME_GNECT_ICON);
         gnome_window_icon_set_from_default (GTK_WINDOW(app));
diff -Nru gnome-games-2.0.1/gnibbles/main.c gnome-games-2.0.2/gnibbles/main.c
--- gnome-games-2.0.1/gnibbles/main.c	Mon May 13 04:24:39 2002
+++ gnome-games-2.0.2/gnibbles/main.c	Tue Jul  9 22:05:05 2002
@@ -150,15 +150,28 @@
 	pause_state = paused;
 	if (!paused)
 		pause_game_cb (NULL, (gpointer) 0);
-	box = gtk_message_dialog_new (GTK_WINDOW (window), GTK_DIALOG_MODAL,
+    if (game_running()) {
+	    box = gtk_message_dialog_new (GTK_WINDOW (window), GTK_DIALOG_MODAL,
 				      GTK_MESSAGE_QUESTION,
-				      GTK_BUTTONS_YES_NO,
-				      _("Do you really want to end this game?"));
-	status = gtk_dialog_run (GTK_DIALOG (box)) == GTK_RESPONSE_NO;
-	gtk_widget_destroy (GTK_WIDGET (box));
-	box = NULL;
-	if (!pause_state && status)
-		pause_game_cb (NULL, (gpointer) 0);
+				      GTK_BUTTONS_NONE,
+				      _("Really exit gnibbles?"));
+        gtk_dialog_add_buttons (GTK_DIALOG (box),
+            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+            GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+            NULL);
+        gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_REJECT);
+    
+	    status = gtk_dialog_run (GTK_DIALOG (box));
+	    gtk_widget_destroy (GTK_WIDGET (box));
+    
+	    box = NULL;
+	    if (!pause_state && status)
+		    pause_game_cb (NULL, (gpointer) 0);
+        if (status == GTK_RESPONSE_REJECT)
+            return TRUE;
+    }
+
+    gtk_main_quit();
 	return (status);
 }
 
diff -Nru gnome-games-2.0.1/gnobots2/menu.c gnome-games-2.0.2/gnobots2/menu.c
--- gnome-games-2.0.1/gnobots2/menu.c	Wed Jun  5 17:34:17 2002
+++ gnome-games-2.0.2/gnobots2/menu.c	Tue Jul  9 23:04:31 2002
@@ -13,7 +13,7 @@
 static void new_cb(GtkWidget *widget,gpointer data);
 static void properties_cb(GtkWidget *widget,gpointer data);
 static void scores_cb(GtkWidget *widget,gpointer data);
-void exit_cb(GtkWidget *widget,gpointer  data);
+gboolean exit_cb(GtkWidget *widget,gpointer  data);
 static void about_cb(GtkWidget *widget, gpointer data);
 /**********************************************************************/
 
@@ -191,19 +191,35 @@
  *
  * Returns:
  **/
-void exit_cb(
+gboolean exit_cb(
 GtkWidget *widget,
 gpointer  data
 ){
 
+  GtkWidget *dialog;
+  gint response;
+  gchar *label = _("Really exit gnobotsII?");
+
+  
   if(game_state != STATE_NOT_PLAYING){
-    gnome_app_ok_cancel_modal (GNOME_APP(app),
-                               _("Do you really want to quit the game?"),
-                               (GnomeReplyCallback)really_exit_cb,
-                               NULL);
-  } else {
-    really_exit_cb(widget, (gpointer)0);
+    dialog = gtk_message_dialog_new (GTK_WINDOW (app),
+            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+            GTK_MESSAGE_QUESTION,
+            GTK_BUTTONS_NONE,
+            label);
+    gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+            GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+            NULL);
+    gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT); 
+
+    response = gtk_dialog_run (GTK_DIALOG (dialog));
+    gtk_widget_destroy (dialog);
+    if (response == GTK_RESPONSE_REJECT) {
+        return TRUE;
+    }
   }
+    really_exit_cb(widget, (gpointer)0);
 }
 
 
diff -Nru gnome-games-2.0.1/gnobots2/menu.h gnome-games-2.0.2/gnobots2/menu.h
--- gnome-games-2.0.1/gnobots2/menu.h	Sat Feb 13 15:34:28 1999
+++ gnome-games-2.0.2/gnobots2/menu.h	Tue Jul  9 23:03:06 2002
@@ -7,7 +7,7 @@
 /**********************************************************************/
 gboolean create_game_menus();
 void really_exit_cb (GtkWidget *, gpointer);
-void exit_cb (GtkWidget *, gpointer);
+gboolean exit_cb (GtkWidget *, gpointer);
 /**********************************************************************/
 
 
diff -Nru gnome-games-2.0.1/gnome-stones/main.c gnome-games-2.0.2/gnome-stones/main.c
--- gnome-games-2.0.1/gnome-stones/main.c	Wed Jun  5 17:45:50 2002
+++ gnome-games-2.0.2/gnome-stones/main.c	Wed Jul 10 01:50:53 2002
@@ -121,11 +121,42 @@
 /****************************************************************************/
 /* Image stuff  */
 
-static void
-my_exit (GtkWidget *widget, gpointer client_data)
-{ 
-  sound_close(); 
-  exit (1);
+extern gboolean
+gstones_maybe_exit (GtkWidget *widget, gpointer client_data)
+{
+  GtkWidget *dialog;
+  gint response;
+  gchar *label = _("Really exit GNOME Stones?");
+  
+  if (state == STATE_RUNNING) {
+    dialog = gtk_message_dialog_new (GTK_WINDOW (app),
+            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+            GTK_MESSAGE_QUESTION,
+            GTK_BUTTONS_NONE,
+            label);
+    gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,   
+            GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+            NULL);
+    gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT); 
+
+    response = gtk_dialog_run (GTK_DIALOG (dialog));
+    gtk_widget_destroy (dialog);
+
+    if (response == GTK_RESPONSE_REJECT) {
+        return TRUE;
+    }
+  }
+  
+  preferences_save_global();
+  sound_close();
+  /* 
+     I don't like the harsh exit, but it crashes
+     when gtk_main_quit is used, makes me wonder
+     FIXME
+  */
+  exit (0);
+  gtk_main_quit();
 }
 
 static GdkPixbuf *
@@ -976,16 +1007,6 @@
 
 
 static void
-quit_cb (GtkWidget *widget, gpointer data)
-{
-  preferences_save_global ();
-  sound_close();
-
-  exit (0);
-}
-
-
-static void
 show_scores_cb (GtkWidget *widget, gpointer data)
 {
   gnome_scores_display ("Gnome-Stones", APP_NAME, NULL, GPOINTER_TO_INT (data));
@@ -1045,7 +1066,7 @@
   GNOMEUIINFO_SEPARATOR,
   GNOMEUIINFO_MENU_SCORES_ITEM(show_scores_cb, NULL),
   GNOMEUIINFO_SEPARATOR,
-  GNOMEUIINFO_MENU_QUIT_ITEM(quit_cb, NULL),
+  GNOMEUIINFO_MENU_QUIT_ITEM(gstones_maybe_exit, NULL),
   GNOMEUIINFO_END
 };
 
@@ -1191,21 +1212,6 @@
 }
 
 
-/************************************************************************/
-/* exit function */
-
-/* FIXME: too many different exit/quit functions */
-
-
-void
-gstones_exit (GnomeClient *client, gpointer client_data)
-{
-  sound_close (); 
-  exit (0);
-}
-
-
-
 /*****************************************************************************/
 /* Main function.  */
 
@@ -1270,13 +1276,13 @@
   gtk_widget_set_events (app, gtk_widget_get_events (app) | GAME_EVENTS);
 
   g_signal_connect (GTK_OBJECT (app), "key_press_event",
-		      GTK_SIGNAL_FUNC (game_widget_key_press_callback), 0);
+		      G_CALLBACK (game_widget_key_press_callback), 0);
   g_signal_connect (GTK_OBJECT (app), "key_release_event",
-		      GTK_SIGNAL_FUNC (game_widget_key_release_callback), 0);
+		      G_CALLBACK (game_widget_key_release_callback), 0);
   g_signal_connect (GTK_OBJECT (app), "delete_event",
-		      GTK_SIGNAL_FUNC (gstones_exit), 0);
+		      G_CALLBACK (gstones_maybe_exit), 0);
   g_signal_connect (GTK_OBJECT (app), "destroy_event",
-		      GTK_SIGNAL_FUNC (gtk_main_quit), 0);
+		      G_CALLBACK (gstones_maybe_exit), 0);
 
   joystick_set_widget (app);
 
diff -Nru gnome-games-2.0.1/gnome-stones/main.h gnome-games-2.0.2/gnome-stones/main.h
--- gnome-games-2.0.1/gnome-stones/main.h	Tue Apr 16 19:35:31 2002
+++ gnome-games-2.0.2/gnome-stones/main.h	Wed Jul 10 01:41:24 2002
@@ -24,7 +24,7 @@
 
 #include <gnome.h>
 
-void gstones_exit (GnomeClient *client, gpointer client_data);
+extern gboolean gstones_maybe_exit (GtkWidget *widget, gpointer client_data);
 
 
 #endif /* MAIN_H */
diff -Nru gnome-games-2.0.1/gnome-stones/preferences.c gnome-games-2.0.2/gnome-stones/preferences.c
--- gnome-games-2.0.1/gnome-stones/preferences.c	Thu May  2 11:35:01 2002
+++ gnome-games-2.0.2/gnome-stones/preferences.c	Wed Jul 10 01:31:18 2002
@@ -990,10 +990,10 @@
   GnomeClient *client= gnome_master_client ();
   
   g_signal_connect (GTK_OBJECT (client), "save_yourself",
-		      GTK_SIGNAL_FUNC (preferences_save_local), 
+		      G_CALLBACK (preferences_save_local), 
 		      GINT_TO_POINTER (FALSE));
   g_signal_connect (GTK_OBJECT (client), "die",
-		      GTK_SIGNAL_FUNC (gstones_exit), NULL);
+		      G_CALLBACK (gstones_maybe_exit), NULL);
 }
 
 
diff -Nru gnome-games-2.0.1/gnomine/gnomine.c gnome-games-2.0.2/gnomine/gnomine.c
--- gnome-games-2.0.1/gnomine/gnomine.c	Tue Jun 18 20:32:56 2002
+++ gnome-games-2.0.2/gnomine/gnomine.c	Wed Jul 10 22:28:51 2002
@@ -73,8 +73,33 @@
 	pm_current = pm;
 }
 
-void quit_game(GtkWidget *widget, gpointer data)
+gboolean quit_game(GtkWidget *widget, gpointer data)
 {
+    GtkWidget *box;
+    gint response;
+    
+    /*if game is in progress*/
+    if (pm_current == pm_cool) { 
+        box = gtk_message_dialog_new (GTK_WINDOW (window),
+                GTK_DIALOG_MODAL,
+                GTK_MESSAGE_QUESTION,
+                GTK_BUTTONS_NONE,
+                _("Really exit GNOME Mines?"));
+        gtk_dialog_add_buttons (GTK_DIALOG (box),
+                GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+                NULL);
+
+
+        gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_REJECT);
+
+        response = gtk_dialog_run (GTK_DIALOG (box));
+        gtk_widget_destroy (box);
+
+        if (response == GTK_RESPONSE_REJECT)
+            return TRUE;
+    }
+
 	gtk_main_quit();
 }
 
diff -Nru gnome-games-2.0.1/gnotravex/gnotravex.c gnome-games-2.0.2/gnotravex/gnotravex.c
--- gnome-games-2.0.1/gnotravex/gnotravex.c	Wed Jun  5 18:10:24 2002
+++ gnome-games-2.0.2/gnotravex/gnotravex.c	Wed Jul 10 22:42:23 2002
@@ -77,6 +77,7 @@
 int session_ypos = 0;
 int session_position  = 0;
 guint timer_timeout = 0;
+guint game_in_progress = 0;
 
 void make_buffer(GtkWidget *);
 void create_window();
@@ -104,7 +105,7 @@
 
 /* ------------------------- MENU ------------------------ */
 void new_game_cb(GtkWidget *, gpointer);
-void quit_game_cb(GtkWidget *, gpointer);
+gboolean quit_game_cb(GtkWidget *, gpointer);
 void size_cb(GtkWidget *, gpointer);
 void move_cb(GtkWidget *, gpointer);
 void about_cb(GtkWidget *, gpointer);
@@ -443,6 +444,7 @@
     mover.pixmap = NULL;
     if(game_over()){
       paused = 1;
+      game_in_progress = 0;
       games_clock_stop(GAMES_CLOCK(timer));
       if(!have_been_hinted){
 	message(_("Puzzle solved! Well done!"));
@@ -786,13 +788,38 @@
   make_buffer(widget);
   redraw_all();
   gtk_widget_thaw_child_notify(space);
+  game_in_progress = 1;
   paused = 0;
   timer_start();
   sprintf(str,_("Playing %dx%d board"),SIZE,SIZE);
   message(str);
 }
 
-void quit_game_cb(GtkWidget *widget, gpointer data){
+gboolean quit_game_cb(GtkWidget *widget, gpointer data){
+  GtkWidget *box;
+  gint response;
+
+  if(game_in_progress) {
+
+      box = gtk_message_dialog_new (GTK_WINDOW (window),
+              GTK_DIALOG_MODAL,
+              GTK_MESSAGE_QUESTION,
+              GTK_BUTTONS_NONE,
+              _("Really exit gataxx?"));
+      gtk_dialog_add_buttons (GTK_DIALOG (box),
+              GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+              GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+              NULL);
+
+      gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_REJECT);
+
+      response = gtk_dialog_run (GTK_DIALOG (box));
+      gtk_widget_destroy (box);
+
+      if (response == GTK_RESPONSE_REJECT)
+          return TRUE;
+  }
+    
   if(buffer)
     gdk_drawable_unref(buffer);
   if(tiles_pixmap)
@@ -900,7 +927,7 @@
   int x1, y1, x2, y2, x, y, size = SIZE;
   tile hint_tile;
 
-  if(game_over() || button_down || paused || hint_moving) return;
+  if(!game_in_progress || game_over() || button_down || paused || hint_moving) return;
   
   find_first_tile(USED,&x,&y);
   x1 = x; y1 = y;
diff -Nru gnome-games-2.0.1/gnotski/gnotski.c gnome-games-2.0.2/gnotski/gnotski.c
--- gnome-games-2.0.1/gnotski/gnotski.c	Wed Jun  5 16:44:15 2002
+++ gnome-games-2.0.2/gnotski/gnotski.c	Wed Jul 10 23:24:31 2002
@@ -56,6 +56,8 @@
 int session_xpos = 0;
 int session_ypos = 0;
 int session_position  = 0;
+gboolean game_in_progress = FALSE;
+gboolean first_time = TRUE;
 
 char current_level[16];
 
@@ -85,7 +87,7 @@
 
 /* ------------------------- MENU ------------------------ */
 void new_game_cb(GtkWidget *, gpointer);
-void quit_game_cb(GtkWidget *, gpointer);
+gboolean quit_game_cb(GtkWidget *, gpointer);
 void level_cb(GtkWidget *, gpointer);
 void about_cb(GtkWidget *, gpointer);
 void score_cb(GtkWidget *, gpointer);
@@ -510,6 +512,7 @@
     gtk_widget_set_uposition(window, session_xpos, session_ypos);
     
   gtk_widget_show(window);
+  first_time = TRUE;
   new_game_cb(space,NULL);
   
   gtk_main ();
@@ -576,6 +579,7 @@
 	if(mapcmp(move_map,map)){
 	  new_move();
 	  if(game_over()){
+        game_in_progress = FALSE;
 	    message(_("Level completed. Well done."));
 	    game_score();
 	  }
@@ -933,11 +937,39 @@
   gtk_drawing_area_size(GTK_DRAWING_AREA(space),
 			width*TILE_SIZE,height*TILE_SIZE);
   gtk_widget_realize(window);
-
+  if (!first_time) {
+    game_in_progress = TRUE;
+  } 
+  first_time = FALSE;
   set_move(0);
 }
 
-void quit_game_cb(GtkWidget *widget, gpointer data){
+gboolean quit_game_cb(GtkWidget *widget, gpointer data){
+  GtkWidget *box;
+  gint response;
+
+  if(game_in_progress) {
+
+    box = gtk_message_dialog_new (GTK_WINDOW (window),
+            GTK_DIALOG_MODAL,
+            GTK_MESSAGE_QUESTION,
+            GTK_BUTTONS_NONE,
+            _("Really exit gnotski?"));
+    gtk_dialog_add_buttons (GTK_DIALOG (box),
+            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+            GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+            NULL);
+
+
+    gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_REJECT);
+
+    response = gtk_dialog_run (GTK_DIALOG (box));
+    gtk_widget_destroy (box);
+
+    if (response == GTK_RESPONSE_REJECT)
+        return TRUE;
+  }
+    
   if(buffer)
     gdk_drawable_unref(buffer);
   if(tiles_pixmap)
diff -Nru gnome-games-2.0.1/gtali/gyahtzee.c gnome-games-2.0.2/gtali/gyahtzee.c
--- gnome-games-2.0.1/gtali/gyahtzee.c	Wed Jun  5 16:44:15 2002
+++ gnome-games-2.0.2/gtali/gyahtzee.c	Tue Jul  9 19:13:22 2002
@@ -210,7 +210,29 @@
 static gint 
 quit_game(GtkWidget *widget, gpointer data)
 {
-        gtk_main_quit();
+    GtkWidget *dialog;
+    gint response;
+    gchar *label = _("Really exit gtali?");
+    
+    dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+            GTK_MESSAGE_QUESTION,
+            GTK_BUTTONS_NONE,
+            label);
+    gtk_dialog_add_buttons (GTK_DIALOG (dialog), 
+            GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+            GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+            NULL);
+    gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT); 
+
+    response = gtk_dialog_run (GTK_DIALOG (dialog));
+    gtk_widget_destroy (dialog);
+
+    if (response == GTK_RESPONSE_REJECT) {
+        return TRUE;
+    }
+    
+    gtk_main_quit();
 	return TRUE;
 }
 
diff -Nru gnome-games-2.0.1/iagno/gnothello.c gnome-games-2.0.2/iagno/gnothello.c
--- gnome-games-2.0.1/iagno/gnothello.c	Wed Jun  5 16:44:15 2002
+++ gnome-games-2.0.2/iagno/gnothello.c	Tue Jul  9 18:57:35 2002
@@ -241,24 +241,23 @@
 	}
 }
 
-void quit_game_cb(GtkWidget *widget, gpointer data)
+gboolean quit_game_cb(GtkWidget *widget, gpointer data)
 {
 	GtkWidget *dialog;
 
 	if(game_in_progress) {
 		gint response;
+        gchar *label = _("Really exit iagno?");
 
-		dialog = gtk_dialog_new_with_buttons (NULL,
-				GTK_WINDOW (window),
-				GTK_DIALOG_MODAL,
-				GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
-				GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+		dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+				GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                GTK_MESSAGE_QUESTION,
+                GTK_BUTTONS_NONE,
+                label);
+        gtk_dialog_add_buttons (GTK_DIALOG(dialog),
+                GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+				GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
 				NULL);
-		{
-			GtkWidget *label = gtk_label_new (_("Do you really want to quit?"));
-			gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox),
-					label);
-		}
 
 		gtk_dialog_set_default_response (GTK_DIALOG (dialog),
 				GTK_RESPONSE_REJECT);
@@ -268,9 +267,15 @@
 		gtk_widget_destroy (dialog);
 
 		if (response == GTK_RESPONSE_ACCEPT)
+        {
 			quit_game_maybe(NULL, 0);
+            return FALSE;
+        } else {
+            return TRUE;
+        }
 	} else {
 		quit_game_maybe(NULL, 0);
+        return FALSE;
 	}
 }
 
@@ -713,7 +718,7 @@
 
 	gtk_widget_realize(window);
 	gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
-	g_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(quit_game_cb), NULL);
+	g_signal_connect(GTK_OBJECT(window), "delete_event", G_CALLBACK(quit_game_cb), NULL);
 
 	gnome_app_create_menus(GNOME_APP(window), mainmenu);
 
@@ -912,7 +917,7 @@
 	gtk_object_sink(GTK_OBJECT(client));
 
 	g_signal_connect(GTK_OBJECT(client), "save_yourself", GTK_SIGNAL_FUNC(save_state), argv[0]);
-	g_signal_connect(GTK_OBJECT(client), "die", GTK_SIGNAL_FUNC(quit_game_cb), argv[0]);
+	g_signal_connect(GTK_OBJECT(client), "die", G_CALLBACK(quit_game_cb), argv[0]);
 
 	create_window();
 	
diff -Nru gnome-games-2.0.1/iagno/gnothello.h gnome-games-2.0.2/iagno/gnothello.h
--- gnome-games-2.0.1/iagno/gnothello.h	Thu Nov 22 13:26:30 2001
+++ gnome-games-2.0.2/iagno/gnothello.h	Sat Jul  6 20:20:58 2002
@@ -46,7 +46,7 @@
 
 void new_game_cb(GtkWidget *widget, gpointer data);
 void new_net_game_cb(GtkWidget *widget, gpointer data);
-void quit_game_cb(GtkWidget *widget, gpointer data);
+gboolean quit_game_cb(GtkWidget *widget, gpointer data);
 void undo_move_cb(GtkWidget *widget, gpointer data);
 void redo_move_cb(GtkWidget *widget, gpointer data);
 void black_level_cb (GtkWidget *widget, gpointer data);
diff -Nru gnome-games-2.0.1/mahjongg/mahjongg.c gnome-games-2.0.2/mahjongg/mahjongg.c
--- gnome-games-2.0.1/mahjongg/mahjongg.c	Wed Jun  5 18:21:32 2002
+++ gnome-games-2.0.2/mahjongg/mahjongg.c	Wed Jul 10 01:33:50 2002
@@ -872,7 +872,7 @@
 							gtk_label_set_text (GTK_LABEL(tiles_label), tmpstr);
 							update_moves_left ();
 
-							if (visible_tiles <= 0) {
+							if (visible_tiles <= 0 && game_over == GAME_RUNNING) {
 								games_clock_stop(GAMES_CLOCK(chrono));
 								you_won ();
 							}
@@ -1429,6 +1429,34 @@
 }
 
 void
+maybe_quit (GtkWidget *widget, gpointer data)
+{
+    GtkWidget *dialog;
+    gint response;
+    gchar *label = _("Really exit GNOME Mahjongg?");
+
+    if (game_over == GAME_RUNNING)
+    {
+        dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+             GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+             GTK_MESSAGE_QUESTION,
+             GTK_BUTTONS_NONE,
+             label);
+        gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT, NULL);
+        gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT); 
+    
+        response = gtk_dialog_run (GTK_DIALOG (dialog));
+        gtk_widget_destroy (dialog);
+        
+        if (response == GTK_RESPONSE_REJECT) {
+            return;
+        }
+    }
+    gtk_main_quit();
+            
+}
+void
 confirm_action (GtkWidget *widget, gpointer data)
 {
 	gboolean doit = TRUE;
@@ -1442,10 +1470,12 @@
 		case RESTART_GAME :
 			confirm_text = _("Really restart this game?");
 			break;
+#if 0
 		case QUIT_GAME :
 			/* GNOME IS AN ACRONYM, DAMNIT! */
 			confirm_text = _("Really exit GNOME Mahjongg?");
 			break;
+#endif
 		case NEW_GAME:
 		case NEW_GAME_WITH_SEED:
 			confirm_text = _("Really start a new game?");
@@ -1478,9 +1508,11 @@
 		case RESTART_GAME:
 			restart_game ();
 			break;
+#if 0
 		case QUIT_GAME:
 			gtk_main_quit ();
 			break;
+#endif
 		default:
 			break;
 		}
@@ -1490,7 +1522,7 @@
 gboolean
 delete_event_callback (GtkWidget *widget, GdkEventAny *any, gpointer data)
 {
-        confirm_action (widget, data);
+        maybe_quit (widget, data);
         return TRUE;
 }
 
@@ -1867,7 +1899,7 @@
 
         g_free (buf2);
 	g_free (buf);
-	init_game ();
+    init_game ();
 }
 
 void
@@ -1908,7 +1940,7 @@
 
         do {
                 num_shuffle++;
-                /* We do a circular permutation (FIXME: check the english term...)*/
+                /* We do a circular permutation */
                 for (i=0; i<MAX_TILES; i++) {
                         if (tiles[i].visible) {
                                 if (first) {
@@ -1926,7 +1958,7 @@
         }
         while (!(update_moves_left ()) && num_shuffle < visible_tiles);
         
-        if (num_shuffle >= visible_tiles) {
+        if (num_shuffle >= visible_tiles) { 
                 GtkWidget *mb;
                 game_over = GAME_DEAD;
                 games_clock_stop (GAMES_CLOCK (chrono));
@@ -1936,6 +1968,7 @@
 					     GTK_BUTTONS_OK,
 					     (_("Sorry, I was unable to find a playable configuration.")));
 		gtk_dialog_run (GTK_DIALOG (mb));
+        gtk_widget_destroy (mb);
 
         } else {
                 
@@ -2033,8 +2066,8 @@
 
 	mbox = gtk_vbox_new (FALSE, 0);
 	gnome_app_set_contents (GNOME_APP (window), mbox);
-	create_mahjongg_board (mbox);
-
+	create_mahjongg_board (mbox); 
+    
 	gtk_widget_show (window);
 
 	show = gconf_client_get_bool (conf_client,
diff -Nru gnome-games-2.0.1/same-gnome/same-gnome.c gnome-games-2.0.2/same-gnome/same-gnome.c
--- gnome-games-2.0.1/same-gnome/same-gnome.c	Fri May 31 05:25:40 2002
+++ gnome-games-2.0.2/same-gnome/same-gnome.c	Wed Jul 10 23:37:15 2002
@@ -658,16 +658,21 @@
 		gint response;
 		
 		box = gtk_message_dialog_new (GTK_WINDOW (app),
-					     GTK_DIALOG_DESTROY_WITH_PARENT,
-					     GTK_MESSAGE_QUESTION,
-					     GTK_BUTTONS_YES_NO,
-					     _("Do you really want to quit?"));
+                GTK_DIALOG_MODAL,
+                GTK_MESSAGE_QUESTION,
+                GTK_BUTTONS_NONE,
+                _("Really exit Same-GNOME?"));
+        gtk_dialog_add_buttons (GTK_DIALOG (box),
+                GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+                NULL);
+        
 
-		gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_YES);
+		gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_REJECT);
 		response = gtk_dialog_run (GTK_DIALOG (box));
 		gtk_widget_destroy (box);
 
-		if (response != GTK_RESPONSE_YES)
+		if (response == GTK_RESPONSE_REJECT)
 			return TRUE;
 	}
 	gtk_main_quit ();
diff -Nru gnome-games-2.0.1/xbill/UI.cc gnome-games-2.0.2/xbill/UI.cc
--- gnome-games-2.0.1/xbill/UI.cc	Sun Jun  2 16:59:50 2002
+++ gnome-games-2.0.2/xbill/UI.cc	Wed Jul 10 23:56:31 2002
@@ -21,6 +21,10 @@
 	timer = gtk_timeout_add(250, (GtkFunction)timer_eh, NULL); /* 250 ms */
 }
 
+int UI::is_playing() {
+    return playing;
+}
+
 void UI::kill_timer() {
 	if (timer) {
 		gtk_timeout_remove(timer);
@@ -50,6 +54,7 @@
 			GNOME_PARAM_APP_DATADIR, DATADIR, NULL);
 	gnome_window_icon_set_default_from_file (GNOME_ICONDIR"/xbill.png");
 	toplevel = gnome_app_new("gnome-xbill", "Gnome xBill");
+    g_signal_connect(G_OBJECT(toplevel), "delete_event", G_CALLBACK(maybe_quit), NULL);
 	g_signal_connect(GTK_OBJECT(toplevel), "destroy",
 			   GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
 	gtk_widget_realize(toplevel);
diff -Nru gnome-games-2.0.1/xbill/UI.h gnome-games-2.0.2/xbill/UI.h
--- gnome-games-2.0.1/xbill/UI.h	Thu Jan 10 03:16:38 2002
+++ gnome-games-2.0.2/xbill/UI.h	Wed Jul 10 23:49:02 2002
@@ -24,6 +24,7 @@
 	void restart_timer();
 	void kill_timer();
 
+    int is_playing();
 	void pause_game();
 	void resume_game();
 
diff -Nru gnome-games-2.0.1/xbill/x11-gtk.cc gnome-games-2.0.2/xbill/x11-gtk.cc
--- gnome-games-2.0.1/xbill/x11-gtk.cc	Sun Jun  2 17:49:33 2002
+++ gnome-games-2.0.2/xbill/x11-gtk.cc	Wed Jul 10 23:58:22 2002
@@ -277,6 +277,35 @@
 /******************/
 /* Event handlers */
 /******************/
+gboolean maybe_quit(GtkWidget *w, gpointer data) {
+    GtkWidget *box;
+    gint response;
+
+    if(ui.is_playing()) {
+        /* FIXME: get a pointer to the main window, not NULL */
+        box = gtk_message_dialog_new (NULL,
+                GTK_DIALOG_MODAL,
+                GTK_MESSAGE_QUESTION,
+                GTK_BUTTONS_NONE,
+                _("Really exit GNOME Xbill?"));
+        gtk_dialog_add_buttons (GTK_DIALOG (box),
+                GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                GTK_STOCK_QUIT, GTK_RESPONSE_ACCEPT,
+                NULL);
+
+
+        gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_REJECT);
+
+        response = gtk_dialog_run (GTK_DIALOG (box));
+        gtk_widget_destroy (box);
+
+        if (response == GTK_RESPONSE_REJECT)
+            return TRUE;
+    }
+    
+    gtk_main_quit();
+}
+
 void leave_window_eh(GtkWidget *w, GdkEventCrossing *event) {
 	ui.pause_game();
 }
diff -Nru gnome-games-2.0.1/xbill/x11.h gnome-games-2.0.2/xbill/x11.h
--- gnome-games-2.0.1/xbill/x11.h	Tue Apr 16 07:35:15 2002
+++ gnome-games-2.0.2/xbill/x11.h	Wed Jul 10 23:42:23 2002
@@ -12,6 +12,7 @@
 void new_game_cb (GtkDialog *dialog, gint arg1, gpointer user_data);
 void quit_game_cb (GtkDialog *dialog, gint arg1, gpointer user_data);
 
+gboolean maybe_quit(GtkWidget *w, gpointer data);
 void leave_window_eh(GtkWidget *w, GdkEventCrossing *event);
 void enter_window_eh(GtkWidget *w, GdkEventCrossing *event);
 void redraw_window_eh(GtkWidget *w, GdkEventExpose *event);
