gtk-demo: Make losing games hurt
authorMatthias Clasen <mclasen@redhat.com>
Fri, 9 Sep 2022 19:36:31 +0000 (15:36 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 9 Sep 2022 19:36:31 +0000 (15:36 -0400)
Use a more annoying sound for losses.
And use it for all games.

demos/gtk-demo/listview_minesweeper.c
demos/gtk-demo/peg_solitaire.c
demos/gtk-demo/sliding_puzzle.c

index f7f77d623139c3fb123dc2bf7db002c20584d236..662ba065538758b78b42a695fc0fb921f6ecdac5 100644 (file)
@@ -8,6 +8,7 @@
  * to implement rather different interaction behavior to a typical list.
  */
 
+#include "config.h"
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
@@ -375,6 +376,23 @@ sweeper_game_init (SweeperGame *self)
   sweeper_game_new_game (self, 8, 8, 10);
 }
 
+static void
+celebrate (gboolean win)
+{
+  char *path;
+  GtkMediaStream *stream;
+
+  if (win)
+    path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "complete.oga", NULL);
+  else
+    path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "suspend-error.oga", NULL);
+  stream = gtk_media_file_new_for_filename (path);
+  gtk_media_stream_set_volume (stream, 1.0);
+  gtk_media_stream_play (stream);
+  g_signal_connect (stream, "notify::ended", G_CALLBACK (g_object_unref), NULL);
+  g_free (path);
+}
+
 static void
 sweeper_game_end (SweeperGame *self,
                   gboolean     win)
@@ -383,7 +401,9 @@ sweeper_game_end (SweeperGame *self,
     {
       self->playing = FALSE;
       g_object_notify_by_pspec (G_OBJECT (self), game_properties[GAME_PROP_PLAYING]);
+      celebrate (win);
     }
+
   if (self->win != win)
     {
       self->win = win;
index 0f5761408c60a57bb3facaa68c71abf7230cb516..2006aab736a86e37109e3158c6b5130020d6f6f7 100644 (file)
@@ -119,12 +119,6 @@ solitaire_peg_new (void)
 
 /*** Helper for finding a win ***/
 
-static void
-ended (GObject *object)
-{
-  g_object_unref (object);
-}
-
 static void
 celebrate (gboolean win)
 {
@@ -134,12 +128,12 @@ celebrate (gboolean win)
   if (win)
     path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "complete.oga", NULL);
   else
-    path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "dialog-error.oga", NULL);
+    path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "suspend-error.oga", NULL);
   stream = gtk_media_file_new_for_filename (path);
   gtk_media_stream_set_volume (stream, 1.0);
   gtk_media_stream_play (stream);
 
-  g_signal_connect (stream, "notify::ended", G_CALLBACK (ended), NULL);
+  g_signal_connect (stream, "notify::ended", G_CALLBACK (g_object_unref), NULL);
   g_free (path);
 }
 
index 592fe0fde282b7f66d33b68bb998e5849c7a751b..0e4c08a00f0292ff7938deff7bb9884499f2b532 100644 (file)
@@ -40,7 +40,7 @@ celebrate (gboolean win)
   if (win)
     path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "complete.oga", NULL);
   else
-    path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "dialog-error.oga", NULL);
+    path = g_build_filename (GTK_DATADIR, "sounds", "freedesktop", "stereo", "suspend-error.oga", NULL);
   stream = gtk_media_file_new_for_filename (path);
   gtk_media_stream_set_volume (stream, 1.0);
   gtk_media_stream_play (stream);