gtk-demo: Remove deprecations from solitaire
authorMatthias Clasen <mclasen@redhat.com>
Fri, 21 Oct 2022 18:41:59 +0000 (14:41 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 22 Oct 2022 01:48:39 +0000 (21:48 -0400)
Make the solitaire game use global style providers.

demos/gtk-demo/peg_solitaire.c

index c13ac4780f779d5517bd578e2d522e9affe6f70f..913e521ff5fcebc40d5b761ee3920e6fb2c3c4df 100644 (file)
@@ -8,7 +8,6 @@
 #include "config.h"
 #include <gtk/gtk.h>
 
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 
 /* Create an object for the pegs that get moved around in the game.
  *
@@ -361,6 +360,15 @@ drop_drop (GtkDropTarget *target,
   return TRUE;
 }
 
+static void
+remove_provider (gpointer data)
+{
+  GtkStyleProvider *provider = GTK_STYLE_PROVIDER (data);
+
+  gtk_style_context_remove_provider_for_display (gdk_display_get_default (), provider);
+  g_object_unref (provider);
+}
+
 static void
 create_board (GtkWidget *window)
 {
@@ -377,6 +385,9 @@ create_board (GtkWidget *window)
 
   provider = gtk_css_provider_new ();
   gtk_css_provider_load_from_data (provider, css, -1);
+  gtk_style_context_add_provider_for_display (gdk_display_get_default (),
+                                              GTK_STYLE_PROVIDER (provider),
+                                              800);
 
   grid = gtk_grid_new ();
   gtk_widget_set_halign (grid, GTK_ALIGN_CENTER);
@@ -395,9 +406,6 @@ create_board (GtkWidget *window)
             continue;
 
           image = gtk_image_new ();
-          gtk_style_context_add_provider (gtk_widget_get_style_context (image),
-                                          GTK_STYLE_PROVIDER (provider),
-                                          800);
           gtk_widget_add_css_class (image, "solitaire-field");
           gtk_image_set_icon_size (GTK_IMAGE (image), GTK_ICON_SIZE_LARGE);
           if (x != 3 || y != 3)
@@ -441,7 +449,7 @@ create_board (GtkWidget *window)
         }
     }
 
-  g_object_unref (provider);
+  g_object_set_data_full (G_OBJECT (window), "provider", provider, remove_provider);
 }
 
 static void