gnome-games r7221 - trunk/aisleriot



Author: chpe
Date: Sun Jan 13 22:09:18 2008
New Revision: 7221
URL: http://svn.gnome.org/viewvc/gnome-games?rev=7221&view=rev

Log:
Move settings code from realize to screen-changed handler.


Modified:
   trunk/aisleriot/board.c

Modified: trunk/aisleriot/board.c
==============================================================================
--- trunk/aisleriot/board.c	(original)
+++ trunk/aisleriot/board.c	Sun Jan 13 22:09:18 2008
@@ -1381,6 +1381,74 @@
   priv->last_clicked_card_id = -1;
 }
 
+static void
+aisleriot_board_settings_update (AisleriotBoard *board)
+{
+  AisleriotBoardPrivate *priv = board->priv;
+  GtkWidget *widget = GTK_WIDGET (board);
+  GtkSettings *settings;
+#ifndef HAVE_HILDON 
+  gboolean touchscreen_mode;
+#ifdef GDK_WINDOWING_X11
+  char *xft_rgba = NULL;
+#endif /* GDK_WINDOWING_X11 */
+#endif /* !HAVE_HILDON */
+
+   /* Set up the double-click detection. */
+  settings = gtk_widget_get_settings (widget);
+  g_object_get (settings,
+                "gtk-double-click-time", &priv->double_click_time,
+#ifndef HAVE_HILDON 
+                "gtk-touchscreen-mode", &touchscreen_mode,
+#ifdef GDK_WINDOWING_X11
+                "gtk-xft-rgba", &xft_rgba,
+#endif /* GDK_WINDOWING_X11 */
+#endif /* !HAVE_HILDON */
+                NULL);
+
+    g_print ("settings-update double-click-time:%d touchscreen:%s xft:%s\n",
+             priv->double_click_time, touchscreen_mode ? "t":"f", xft_rgba);
+
+#if defined (GDK_WINDOWING_X11) && !defined (HAVE_HILDON)
+  if (xft_rgba != NULL) {
+    gboolean antialias_set = TRUE;
+    cairo_antialias_t antialias_mode = CAIRO_ANTIALIAS_DEFAULT;
+    cairo_subpixel_order_t subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
+
+    if (strcmp (xft_rgba, "none") == 0) {
+      antialias_set = FALSE;
+    } else if (strcmp (xft_rgba, "rgb") == 0) {
+      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
+      subpixel_order = CAIRO_SUBPIXEL_ORDER_RGB;
+    } else if (strcmp (xft_rgba, "bgr") == 0) {
+      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
+      subpixel_order = CAIRO_SUBPIXEL_ORDER_BGR;
+    } else if (strcmp (xft_rgba, "vrgb") == 0) {
+      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
+      subpixel_order = CAIRO_SUBPIXEL_ORDER_VRGB;
+    } else if (strcmp (xft_rgba, "vbgr") == 0) {
+      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
+      subpixel_order = CAIRO_SUBPIXEL_ORDER_VBGR;
+    }
+
+    g_free (xft_rgba);
+
+    if (antialias_set) {
+      games_card_images_set_antialias (priv->images,
+                                       antialias_mode,
+                                       subpixel_order);
+
+      if (GTK_WIDGET_REALIZED (widget)) {
+        gtk_widget_queue_draw (widget);
+      }
+    }
+  }
+#endif /* GDK_WINDOWING_X11 && !HAVE_HILDON */
+#ifndef HAVE_HILDON 
+  priv->touchscreen_mode = touchscreen_mode != FALSE;
+#endif /* !HAVE_HILDON */
+}
+
 /* Note: this unsets the selection! */
 static gboolean
 aisleriot_board_move_selected_cards_to_slot (AisleriotBoard *board,
@@ -2372,13 +2440,6 @@
   AisleriotBoard *board = AISLERIOT_BOARD (widget);
   AisleriotBoardPrivate *priv = board->priv;
   GdkDisplay *display;
-  GtkSettings *settings;
-#ifndef HAVE_HILDON 
-  gboolean touchscreen_mode;
-#ifdef GDK_WINDOWING_X11
-  char *xft_rgba = NULL;
-#endif /* GDK_WINDOWING_X11 */
-#endif /* !HAVE_HILDON */
 
   GTK_WIDGET_CLASS (aisleriot_board_parent_class)->realize (widget);
 
@@ -2401,54 +2462,6 @@
   priv->cursor[CURSOR_DROPPABLE] = gdk_cursor_new_for_display (display, GDK_DOUBLE_ARROW); /* FIXMEchpe: better cursor */
 #endif /* !HAVE_HILDON */
 
-   /* Set up the double-click detection. */
-  settings = gtk_widget_get_settings (widget);
-  /* FIXMEchpe listen to changes! */
-  g_object_get (settings,
-                "gtk-double-click-time", &priv->double_click_time,
-#ifndef HAVE_HILDON 
-                "gtk-touchscreen-mode", &touchscreen_mode,
-#ifdef GDK_WINDOWING_X11
-                "gtk-xft-rgba", &xft_rgba,
-#endif /* GDK_WINDOWING_X11 */
-#endif /* !HAVE_HILDON */
-                NULL);
-
-#if defined (GDK_WINDOWING_X11) && !defined (HAVE_HILDON)
-  if (xft_rgba != NULL) {
-    gboolean antialias_set = TRUE;
-    cairo_antialias_t antialias_mode = CAIRO_ANTIALIAS_DEFAULT;
-    cairo_subpixel_order_t subpixel_order = CAIRO_SUBPIXEL_ORDER_DEFAULT;
-
-    if (strcmp (xft_rgba, "none") == 0) {
-      antialias_set = FALSE;
-    } else if (strcmp (xft_rgba, "rgb") == 0) {
-      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
-      subpixel_order = CAIRO_SUBPIXEL_ORDER_RGB;
-    } else if (strcmp (xft_rgba, "bgr") == 0) {
-      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
-      subpixel_order = CAIRO_SUBPIXEL_ORDER_BGR;
-    } else if (strcmp (xft_rgba, "vrgb") == 0) {
-      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
-      subpixel_order = CAIRO_SUBPIXEL_ORDER_VRGB;
-    } else if (strcmp (xft_rgba, "vbgr") == 0) {
-      antialias_mode = CAIRO_ANTIALIAS_SUBPIXEL;
-      subpixel_order = CAIRO_SUBPIXEL_ORDER_VBGR;
-    }
-
-    g_free (xft_rgba);
-
-    if (antialias_set) {
-      games_card_images_set_antialias (priv->images,
-                                       antialias_mode,
-                                       subpixel_order);
-    }
-  }
-#endif /* GDK_WINDOWING_X11 && !HAVE_HILDON */
-#ifndef HAVE_HILDON 
-  priv->touchscreen_mode = touchscreen_mode != FALSE;
-#endif /* !HAVE_HILDON */
-
   aisleriot_board_setup_geometry (board);
 }
 
@@ -2487,6 +2500,41 @@
 }
 
 static void
+aisleriot_board_screen_changed (GtkWidget *widget,
+                                GdkScreen *previous_screen)
+{
+  AisleriotBoard *board = AISLERIOT_BOARD (widget);
+  GdkScreen *screen;
+
+  screen = gtk_widget_get_screen (widget);
+
+  g_print ("screen-changed realized %d old-screeen %p new-screen %p\n",
+           GTK_WIDGET_REALIZED (widget), previous_screen, screen);
+
+#if 0
+  if (previous_screen != NULL) {
+    GtkSettings *settings;
+
+    settings = gtk_settings_get_for_screen (previous_screen);
+    g_signal_handlers_disconnect_matched (settings, G_SIGNAL_MATCH_DATA,
+                                          0, 0, NULL, NULL,
+                                          widget);
+  }
+#endif
+
+  if (GTK_WIDGET_CLASS (aisleriot_board_parent_class)->screen_changed) {
+    GTK_WIDGET_CLASS (aisleriot_board_parent_class)->screen_changed (widget, previous_screen);
+  }
+
+  if (screen == NULL || screen == previous_screen)
+    return;
+
+  /* FIXMEchpe listen to changes! */
+
+  aisleriot_board_settings_update (board);
+}
+
+static void
 aisleriot_board_style_set (GtkWidget *widget,
                            GtkStyle *previous_style)
 {
@@ -2523,8 +2571,6 @@
   games_card_images_set_selection_color (priv->images,
                                          &priv->selection_colour);
 
-  priv->is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
-
   GTK_WIDGET_CLASS (aisleriot_board_parent_class)->style_set (widget, previous_style);
 }
 
@@ -3265,6 +3311,8 @@
 
   GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
 
+  priv->is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
+
   priv->force_geometry_update = FALSE;
 
   priv->click_to_move = FALSE;
@@ -3315,6 +3363,7 @@
 {
   AisleriotBoard *board = AISLERIOT_BOARD (object);
   AisleriotBoardPrivate *priv = board->priv;
+  //GtkWidget *widget = GTK_WIDGET (board);
 
   g_signal_handlers_disconnect_matched (priv->game,
                                         G_SIGNAL_MATCH_DATA,
@@ -3327,6 +3376,13 @@
 
   g_object_unref (priv->images);
 
+#if 0
+  screen = gtk_widget_get_settings (widget);
+  g_signal_handlers_disconnect_matched (settings, G_SIGNAL_MATCH_DATA,
+                                        0, 0, NULL, NULL,
+                                        widget);
+#endif
+
   G_OBJECT_CLASS (aisleriot_board_parent_class)->finalize (object);
 }
 
@@ -3398,6 +3454,7 @@
 
   widget_class->realize = aisleriot_board_realize;
   widget_class->unrealize = aisleriot_board_unrealize;
+  widget_class->screen_changed = aisleriot_board_screen_changed;
   widget_class->style_set = aisleriot_board_style_set;
   widget_class->direction_changed = aisleriot_board_direction_changed;
   widget_class->size_allocate = aisleriot_board_size_allocate;



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