Made everything except gtkitementry.c multi-head safe
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 18 Nov 2008 23:57:59 +0000 (08:57 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 18 Nov 2008 23:57:59 +0000 (08:57 +0900)
lib/gtksheet/automake.mk
lib/gtksheet/gsheetmodel.c
lib/gtksheet/gsheetmodel.h
lib/gtksheet/gtkitementry.c
lib/gtksheet/gtksheet.c
src/ui/gui/automake.mk
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-var-store.c

index d6bb3cdc41536a64c1f1517415c3b96e45b9c5c2..ee523670a454bb068d4cce9dce4748ad729404e3 100644 (file)
@@ -2,7 +2,7 @@
 
 noinst_LIBRARIES += lib/gtksheet/libgtksheet.a
 
-lib_gtksheet_libgtksheet_a_CFLAGS = $(GTK_CFLAGS) -Wall
+lib_gtksheet_libgtksheet_a_CFLAGS = $(GTK_CFLAGS) -Wall -DGDK_MULTIHEAD_SAFE=1
 
 
 lib_gtksheet_libgtksheet_a_SOURCES = \
index 0d1a3f560a60c8edee89d9e7f8d0ff0553aa660a..f06dc6382933fa4b3652857e33bd71a7026454e1 100644 (file)
@@ -377,9 +377,9 @@ g_sheet_model_is_visible (const GSheetModel *model,
  * @column: The column
  *
  * Returns the foreground colour of the cell at @row, @column
- * Returns: the foreground colour, or NULL on error.
+ * The color is unallocated.  It will be allocated by the viewing object.
  **/
-const GdkColor *
+GdkColor *
 g_sheet_model_get_foreground (const GSheetModel *model,
                                glong row, glong column)
 {
@@ -399,9 +399,9 @@ g_sheet_model_get_foreground (const GSheetModel *model,
  * @column: The column
  *
  * Returns the background colour of the cell at @row, @column
- * Returns: the background colour, or NULL on error.
+ * The color is unallocated.  It will be allocated by the viewing object.
  **/
-const GdkColor *
+GdkColor *
 g_sheet_model_get_background (const GSheetModel *model,
                                glong row, glong column)
 {
index 6d60e032f9fb741b97d389b1ae1f50781b5ff298..ae5a372bb697e3eba83faebdb7b48f0d33e01d2c 100644 (file)
@@ -107,10 +107,10 @@ struct _GSheetModelIface
   gboolean (* is_visible) (const GSheetModel *sheet_model, glong row, glong column);
   gboolean (* is_editable) (const GSheetModel *sheet_model, glong row, glong column);
 
-  const GdkColor *  (* get_foreground) (const GSheetModel *sheet_model,
-                                   glong row, glong column);
+  GdkColor *  (* get_foreground) (const GSheetModel *sheet_model,
+                           glong row, glong column);
 
-  const GdkColor *  (* get_background) (const GSheetModel *sheet_model,
+  GdkColor *  (* get_background) (const GSheetModel *sheet_model,
                                    glong row, glong column);
 
   const GtkJustification *  (* get_justification) (const GSheetModel *sheet_model,
@@ -169,10 +169,10 @@ inline gboolean g_sheet_model_is_visible
                    (const GSheetModel *model, glong row, glong column);
 
 
-inline const GdkColor *g_sheet_model_get_foreground
-                   (const GSheetModel *model, glong row, glong column);
+inline GdkColor *g_sheet_model_get_foreground
+             (const GSheetModel *model, glong row, glong column);
 
-inline const GdkColor *g_sheet_model_get_background
+inline GdkColor *g_sheet_model_get_background
                    (const GSheetModel *model, glong row, glong column);
 
 
index efc22e2e2737dbfbb8afdf2ad51b61969a06a05c..0ee90cc83c2959f31593b86237a4c5433cf4e87e 100644 (file)
@@ -1,3 +1,4 @@
+#undef GDK_MULTIHEAD_SAFE
 /* GTK - The GIMP Toolkit
  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
  *
index 79ba35dc1bf521aa2fb31794e77b1f79a3c7aca6..69b551749afc98488c81b732b9a6176866002224 100644 (file)
@@ -548,12 +548,6 @@ static void gtk_sheet_button_size_request   (GtkSheet *sheet,
                                                  const GtkSheetButton *button,
                                                  GtkRequisition *requisition);
 
-/* Attributes routines */
-static void init_attributes                     (const GtkSheet *sheet,
-                                                 gint col,
-                                                 GtkSheetCellAttr *attributes);
-
-
 /* Memory allocation routines */
 static void gtk_sheet_real_cell_clear           (GtkSheet *sheet,
                                                  gint row,
@@ -5594,72 +5588,64 @@ gtk_sheet_set_row_height (GtkSheet *sheet,
 
   g_signal_emit (sheet, sheet_signals[CHANGED], 0, row, - 1);
 }
+
 gboolean
 gtk_sheet_get_attributes (const GtkSheet *sheet, gint row, gint col,
-                         GtkSheetCellAttr *attributes)
+                         GtkSheetCellAttr *attr)
 {
-  const GdkColor *fg, *bg;
+  GdkColor *fg, *bg;
   const GtkJustification *j ;
   const PangoFontDescription *font_desc ;
   const GtkSheetCellBorder *border ;
+  GdkColormap *colormap;
 
   g_return_val_if_fail (sheet != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_SHEET (sheet), FALSE);
 
   if (row < 0 || col < 0) return FALSE;
 
-  init_attributes (sheet, col, attributes);
+  attr->foreground = GTK_WIDGET (sheet)->style->black;
+  attr->background = sheet->color[BG_COLOR];
 
-  if ( !sheet->model)
-    return FALSE;
+  attr->border.width = 0;
+  attr->border.line_style = GDK_LINE_SOLID;
+  attr->border.cap_style = GDK_CAP_NOT_LAST;
+  attr->border.join_style = GDK_JOIN_MITER;
+  attr->border.mask = 0;
+  attr->border.color = GTK_WIDGET (sheet)->style->black;
+  attr->font_desc = GTK_WIDGET (sheet)->style->font_desc;
 
-  attributes->is_editable = g_sheet_model_is_editable (sheet->model, row, col);
-  attributes->is_visible = g_sheet_model_is_visible (sheet->model, row, col);
+  attr->is_editable = g_sheet_model_is_editable (sheet->model, row, col);
+  attr->is_visible = g_sheet_model_is_visible (sheet->model, row, col);
 
+  colormap = gtk_widget_get_colormap (GTK_WIDGET (sheet));
   fg = g_sheet_model_get_foreground (sheet->model, row, col);
   if ( fg )
-    attributes->foreground = *fg;
+    {
+      gdk_colormap_alloc_color (colormap, fg, TRUE, TRUE);
+      attr->foreground = *fg;
+    }
 
   bg = g_sheet_model_get_background (sheet->model, row, col);
   if ( bg )
-    attributes->background = *bg;
+    {
+      gdk_colormap_alloc_color (colormap, bg, TRUE, TRUE);
+      attr->background = *bg;
+    }
 
   j = g_sheet_model_get_justification (sheet->model, row, col);
-  attributes->justification = j ? *j : GTK_JUSTIFY_LEFT;
+  attr->justification = j ? *j : GTK_JUSTIFY_LEFT;
 
   font_desc = g_sheet_model_get_font_desc (sheet->model, row, col);
-  if ( font_desc ) attributes->font_desc = font_desc;
+  if ( font_desc ) attr->font_desc = font_desc;
 
   border = g_sheet_model_get_cell_border (sheet->model, row, col);
 
-  if ( border ) attributes->border = *border;
+  if ( border ) attr->border = *border;
 
   return TRUE;
 }
 
-static void
-init_attributes (const GtkSheet *sheet, gint col, GtkSheetCellAttr *attributes)
-{
-  /* DEFAULT VALUES */
-  attributes->foreground = GTK_WIDGET (sheet)->style->black;
-  attributes->background = sheet->color[BG_COLOR];
-  if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)))
-    {
-      attributes->background = sheet->color[BG_COLOR];
-    }
-  attributes->justification = g_sheet_column_get_justification (sheet->column_geometry, col);
-  attributes->border.width = 0;
-  attributes->border.line_style = GDK_LINE_SOLID;
-  attributes->border.cap_style = GDK_CAP_NOT_LAST;
-  attributes->border.join_style = GDK_JOIN_MITER;
-  attributes->border.mask = 0;
-  attributes->border.color = GTK_WIDGET (sheet)->style->black;
-  attributes->is_editable = TRUE;
-  attributes->is_visible = TRUE;
-  attributes->font_desc = GTK_WIDGET (sheet)->style->font_desc;
-}
-
-
 static void
 gtk_sheet_button_size_request   (GtkSheet *sheet,
                                  const GtkSheetButton *button,
index f77f88c7935134c94beea5f30abb14a9f6dc6471..9ac7050c133637d21a305390aa1f1194c874bd54 100644 (file)
@@ -3,7 +3,7 @@
 bin_PROGRAMS += src/ui/gui/psppire 
 
 src_ui_gui_psppire_CFLAGS = $(GTK_CFLAGS) $(GLADE_CFLAGS) -Wall \
-       -DINSTALLDIR=\"$(bindir)\"
+       -DINSTALLDIR=\"$(bindir)\" -DGDK_MULTIHEAD_SAFE=1
 
 
 src_ui_gui_psppire_LDFLAGS = \
index dee18378d4ae61bf8b4386bf24d517b0c2c38e9e..9f7e40754b4851b88678ba450ab8de22370a0264 100644 (file)
@@ -235,13 +235,6 @@ psppire_data_store_sheet_model_init (GSheetModelIface *iface)
   iface->get_row_count = psppire_data_store_get_case_count_wrapper;
 }
 
-static
-gboolean always_true ()
-{
-  return TRUE;
-}
-
-
 static void
 delete_cases_callback (GtkWidget *w,
         casenumber first, casenumber n_cases, gpointer data)
index 8fe5fc66f5bda9ad62e668372f3932c036c921c2..eb18f2c4fd700bd1c258ef1cabcc93bb44e0cccc 100644 (file)
@@ -239,14 +239,12 @@ psppire_var_store_class_init (PsppireVarStoreClass *class)
                                    pspec);
 }
 
+#define DISABLED_COLOR "pink"
 static void
 psppire_var_store_init (PsppireVarStore *var_store)
 {
-  GdkColormap *colormap = gdk_colormap_get_system ();
-
-  g_assert (gdk_color_parse ("gray", &var_store->disabled));
-
-  gdk_colormap_alloc_color (colormap, &var_store->disabled, FALSE, TRUE);
+  if ( ! gdk_color_parse (DISABLED_COLOR, &var_store->disabled))
+       g_critical ("Could not parse color \"%s\"", DISABLED_COLOR);
 
   var_store->dict = 0;
   var_store->trailing_rows = 40;
@@ -827,13 +825,6 @@ geometry_is_sensitive (const GSheetRow *geom, glong row)
   return  row < psppire_dict_get_var_cnt (vs->dict);
 }
 
-static
-gboolean always_true ()
-{
-  return TRUE;
-}
-
-
 static gchar *
 geometry_get_button_label (const GSheetRow *geom, glong unit)
 {