gnome-games r7204 - trunk/aisleriot



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

Log:
Add direction-changed handler, and force a geometry update if the direction changes.


Modified:
   trunk/aisleriot/board.c

Modified: trunk/aisleriot/board.c
==============================================================================
--- trunk/aisleriot/board.c	(original)
+++ trunk/aisleriot/board.c	Sun Jan 13 22:08:44 2008
@@ -185,6 +185,8 @@
   guint show_selection : 1;
   guint show_highlight : 1;
   guint scalable_cards : 1;
+
+  guint force_geometry_update : 1;
 };
 
 STATIC_ASSERT (LAST_STATUS < 16 /* 2^4 */);
@@ -2504,27 +2506,48 @@
   games_card_images_set_selection_color (priv->images,
                                          &priv->selection_colour);
 
-  /* FIXMEchpe: is this the right place? */
-  // XXX move to direction-changed signal handler
   priv->is_rtl = gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL;
 
   GTK_WIDGET_CLASS (aisleriot_board_parent_class)->style_set (widget, previous_style);
 }
 
 static void
+aisleriot_board_direction_changed (GtkWidget *widget,
+                                   GtkTextDirection previous_direction)
+{
+  AisleriotBoard *board = AISLERIOT_BOARD (widget);
+  AisleriotBoardPrivate *priv = board->priv;
+  GtkTextDirection direction;
+
+  direction = gtk_widget_get_direction (widget);
+
+  priv->is_rtl = (direction == GTK_TEXT_DIR_RTL);
+
+  if (direction != previous_direction) {
+    priv->force_geometry_update = TRUE;
+  }
+
+  /* This will queue a resize */
+  GTK_WIDGET_CLASS (aisleriot_board_parent_class)->direction_changed (widget, previous_direction);
+}
+
+static void
 aisleriot_board_size_allocate (GtkWidget *widget,
                                GtkAllocation *allocation)
 {
   AisleriotBoard *board = AISLERIOT_BOARD (widget);
+  AisleriotBoardPrivate *priv = board->priv;
   gboolean is_same;
 
   is_same = (memcmp (&widget->allocation, allocation, sizeof (GtkAllocation)) == 0);
   
   GTK_WIDGET_CLASS (aisleriot_board_parent_class)->size_allocate (widget, allocation);
 
-  if (is_same)
+  if (is_same && !priv->force_geometry_update)
     return;
 
+  priv->force_geometry_update = FALSE;
+
   if (GTK_WIDGET_REALIZED (widget)) {
     aisleriot_board_setup_geometry (board);
   }
@@ -3213,6 +3236,8 @@
 
   GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
 
+  priv->force_geometry_update = FALSE;
+
   priv->click_to_move = FALSE;
   priv->show_selection = FALSE;
 
@@ -3350,6 +3375,7 @@
   widget_class->realize = aisleriot_board_realize;
   widget_class->unrealize = aisleriot_board_unrealize;
   widget_class->style_set = aisleriot_board_style_set;
+  widget_class->direction_changed = aisleriot_board_direction_changed;
   widget_class->size_allocate = aisleriot_board_size_allocate;
   widget_class->size_request = aisleriot_board_size_request;
   widget_class->focus = aisleriot_board_focus;



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