Converted strings to utf8 before passing to gtksheet. Should work properly now with
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 11 May 2006 14:28:02 +0000 (14:28 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 11 May 2006 14:28:02 +0000 (14:28 +0000)
internationalised system files.

12 files changed:
lib/gtksheet/ChangeLog
lib/gtksheet/gtksheet.c
lib/gtksheet/gtksheet.h
src/ui/gui/ChangeLog
src/ui/gui/data-sheet.c
src/ui/gui/helper.c
src/ui/gui/helper.h
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-dict.c
src/ui/gui/psppire-var-store.c
src/ui/gui/psppire.c
src/ui/gui/var-sheet.c

index 6d4075d84f621fe6f76e88ef1bd24259944e122f..2d2cfd043b6a114b6c7cf7a93e5cacb5faf4d232 100644 (file)
@@ -1,3 +1,7 @@
+Thu May 11 22:20:04 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+    * gtksheet.c, gtksheet.h: Fixed broken deallocation of sheet->pixmap.
+
 Thu May  4 17:55:48 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
     * gtksheet.c: Added callback on inserted rows.
index 648126f06d64a2ac4ccfc22991c2af14ad8ce0ee..2e9e416dc54cf7967085aab65a77bfcac4aed4d9 100644 (file)
@@ -2782,7 +2782,7 @@ gtk_sheet_unrealize (GtkWidget * widget)
   gdk_window_destroy (sheet->row_title_window);
 
   if (sheet->pixmap){
-    g_free (sheet->pixmap);
+    g_object_unref(sheet->pixmap);
     sheet->pixmap = NULL;
   }
 
@@ -4134,7 +4134,7 @@ gtk_sheet_make_backing_pixmap (GtkSheet *sheet, guint width, guint height)
                           &pixmap_width, &pixmap_height);
       if ((pixmap_width != width) || (pixmap_height != height))
        {
-          g_free(sheet->pixmap);
+         g_object_unref(sheet->pixmap);
          sheet->pixmap = gdk_pixmap_new (sheet->sheet_window,
                                               width, height,
                                               -1);
index 9f0a76dac46681dc10e0f368a1db0ff5f42c6204..3fecbc926267849a813d4960d6f9ed05c698614b 100644 (file)
@@ -178,7 +178,7 @@ struct _GtkSheet{
   guint sheet_window_height;
 
   /* sheet backing pixmap */  
-  GdkWindow *pixmap;    
+  GdkPixmap *pixmap;    
 
   /* offsets for scrolling */
   gint hoffset;
index ece35938ac0410d68db19d33b04275f5b1fdedf2..6aba2cf8d67d9e2b924a684a4538e48d582fe249 100644 (file)
@@ -1,3 +1,14 @@
+Thu May 11 22:25:49 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * data-sheet.c helper.c helper.h psppire-data-store.c psppire-var-store.c 
+       psppire.c: Converted strings to utf8 before passing to gtksheet.
+
+       * psppire-dict.c: Changed buffer to more reasonable length
+
+       * var-sheet.c: Changed maximum string length to use macro from
+       data/values.h
+
+       
 Sun May  7 10:07:28 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
        * psppire-data-store.c: Fixed buglet initialising string members.
index d32e6e373f265b6fa02f7b8d139bc666cfeaeb37..20869dcb0b0939466fdb16e3847779a83c8ca547 100644 (file)
@@ -98,6 +98,7 @@ update_data_ref_entry(GtkSheet *sheet, gint row, gint col)
        psppire_dict_get_variable(data_store->dict, col);
 
       gchar *text ;
+      gchar *s ;
 
       if ( !xml) 
        return FALSE;
@@ -107,9 +108,13 @@ update_data_ref_entry(GtkSheet *sheet, gint row, gint col)
   
       cell_ref_entry = GTK_ENTRY(get_widget_assert(xml, "cell_ref_entry"));
 
-      gtk_entry_set_text(cell_ref_entry, text);
+      s = pspp_locale_to_utf8(text, -1, 0);
 
       g_free(text);
+
+      gtk_entry_set_text(cell_ref_entry, s);
+
+      g_free(s);
     }
 
   return FALSE;
index 549242e6f01a1b4b4bfc952a7965242a1f74b46c..e3c4ee081a911cb4d70d81d14517cf0005b25ee3 100644 (file)
@@ -71,8 +71,30 @@ get_widget_assert(GladeXML *xml, const gchar *name)
   w = glade_xml_get_widget(xml, name);
 
   if ( !w ) 
-    g_warning("Widget \"%s\" could not be found\n",name);
+    g_warning("Widget \"%s\" could not be found\n", name);
 
   return w;
 }
 
+/* Converts a string in the pspp locale to utf-8 */
+const char *
+pspp_locale_to_utf8(const gchar *text, gssize len, GError **err)
+{
+  GError *tmp_error = 0;
+
+  const gchar *s;
+
+  if ( ! text ) 
+    return 0;
+
+  s = g_locale_to_utf8(text, len, 0, 0, &tmp_error);
+
+  if ( tmp_error)
+    {
+      g_warning("Error converting to UTF8: %s", tmp_error->message);
+      g_propagate_error (err, tmp_error);
+    }
+
+  return s;
+}
+
index eef64213c2c229735af0f8b03db5c6a2a68523dd..3ec352d945f490705e6cce4b8cf01d6a22758b97 100644 (file)
@@ -38,4 +38,8 @@ gboolean text_to_value(const gchar *text, union value *v,
 
 GtkWidget * get_widget_assert(GladeXML *xml, const gchar *name);
 
+/* Converts a string in the pspp locale to utf-8 */
+const char * pspp_locale_to_utf8(const gchar *text, gssize len, GError **err);
+
+
 #endif
index cdd000b3fbed2f147282111c9a78ee51378c03bb..4a517db1872e616e94a6ed13a01a22a57fcbb6f6 100644 (file)
@@ -329,7 +329,7 @@ psppire_data_store_finalize (GObject *object)
 static const gchar *
 psppire_data_store_get_string(GSheetModel *model, gint row, gint column)
 {
-
+  const char *text;
   const struct fmt_spec *fp ;
   const struct PsppireVariable *pv ;
   const union value *v ;
@@ -358,7 +358,7 @@ psppire_data_store_get_string(GSheetModel *model, gint row, gint column)
       const gchar *label;
       if ( (label = val_labs_find(vl, *v)) )
        {
-         return label;
+         return pspp_locale_to_utf8(label, -1, 0);
        }
     }
 
@@ -375,28 +375,12 @@ psppire_data_store_get_string(GSheetModel *model, gint row, gint column)
      FP->W character in buffer S according to format specification
      FP.  No null terminator is appended to the buffer.  */
   data_out (s->str, fp, v);
+
   
-  return g_string_free(s, FALSE);
-#if 0
-  {
-    static gchar buf[255];
-    GError *err = NULL;
-    gchar *text = g_locale_to_utf8(s, fp->w, 0, 0, &err);
-    if ( !err ) 
-      { 
-       g_snprintf(buf, 255, text);
-       g_free(text);
-      }
-    else
-      {
-       g_warning("Cannot convert string \"%s\" to utf-8: %s\n", s, err->message);
-       g_error_free(err);
-       return NULL;
-      }
+  text = pspp_locale_to_utf8(s->str, fp->w, 0);
+  g_string_free(s, TRUE);
 
-  return buf ;
-  }
-#endif
+  return text;
 }
 
 
@@ -658,15 +642,18 @@ static const gchar null_var_name[]=_("var");
 static const gchar *
 geometry_get_button_label(const GSheetColumn *geom, gint unit)
 {
+  const gchar *text;
   struct PsppireVariable *pv ;
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
-    return null_var_name;
+    return pspp_locale_to_utf8(null_var_name, -1, 0);
 
   pv = psppire_dict_get_variable(ds->dict, unit);
 
-  return psppire_variable_get_name(pv);
+  text =  pspp_locale_to_utf8(psppire_variable_get_name(pv), -1, 0);
+
+  return text;
 }
 
 
index f919650491d993f565acc7cb74b9150f30064f70..5f2975a1035016d45bf7fcde5384ce211edc3400 100644 (file)
@@ -212,10 +212,10 @@ static gchar *
 auto_generate_var_name(PsppireDict *dict)
 {
   gint d = 0;
-  static gchar name[255];
+  static gchar name[10];
 
 
-  while (g_snprintf(name, 255, "VAR%05d",d++),
+  while (g_snprintf(name, 10, "VAR%05d",d++),
         psppire_dict_lookup_var(dict, name))
     ;
 
index 97695a13641fb4079d443fac0e868ee685243d41..77ea7343636244c1c2cfc0403f7116ea1f7b339d 100644 (file)
@@ -312,7 +312,7 @@ psppire_var_store_get_string(GSheetModel *model, gint row, gint column)
   
   s = text_for_column(pv, column);
 
-  return g_locale_to_utf8(s, -1, 0,0,0);
+  return pspp_locale_to_utf8(s, -1, 0);
 }
 
 
index aefb26e70ab524c8f10be4f93e71151efef78558..9d01f9f76a4f8bbe9b4edfce3e81c51278b0715a 100644 (file)
@@ -78,7 +78,7 @@ main(int argc, char *argv[])
   var_store = psppire_var_store_new(the_dictionary);
 
   /* Create the model for the data sheet */
-  the_cases = psppire_case_array_new(100, 20);
+  the_cases = psppire_case_array_new(100000, 20);
 
   data_store = psppire_data_store_new(the_dictionary, the_cases);
 
index e04d48955d571f3edec16d54e858b6c11f8fca23..76065949829564e7e6ef4c39ca5267864e5d7e40 100644 (file)
@@ -30,7 +30,9 @@
 #include <stdlib.h>
 #include <string.h>
 
-#define min(A,B) ((A < B)?A:B)
+#include <data/value.h>
+
+#include <minmax.h>
 
 #include <gtksheet/gtksheet.h>
 #include <gtksheet/gsheet-hetero-column.h>
@@ -366,11 +368,11 @@ var_sheet_cell_change_entry (GtkSheet * sheet, gint row, gint column,
                {
                case COL_WIDTH:
                  r_min = fmt->d + 1;
-                 r_max = (psppire_variable_get_type(pv) == ALPHA) ? 255 : 40;
+                 r_max = (psppire_variable_get_type(pv) == ALPHA) ? MAX_STRING : 40;
                  break;
                case COL_DECIMALS:
                  r_min = 0 ; 
-                 r_max = min(fmt->w - 1, 16);
+                 r_max = MIN(fmt->w - 1, 16);
                  break;
                case COL_COLUMNS:
                  r_min = 1;