Merge branch 'rewrite-sheet' of ssh://jmd@git.sv.gnu.org/srv/git/pspp into rewrite...
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 27 Nov 2008 09:16:20 +0000 (18:16 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 27 Nov 2008 09:16:20 +0000 (18:16 +0900)
1  2 
lib/gtksheet/gsheetmodel.c
lib/gtksheet/gtksheet.c

index 5af404641bb499ffaee172bc90627d1fea5f5249,2497097d150b0a901e43282b8da5c9d177f1e09c..55b22db87010dd41488d15253dd279a13335ebfc
@@@ -20,7 -20,7 +20,7 @@@
  
  #include <glib.h>
  #include "gsheetmodel.h"
 -#include "gtkextra-marshal.h"
 +#include <gtksheet/psppire-marshal.h>
  
  enum {
    RANGE_CHANGED,
@@@ -80,7 -80,7 +80,7 @@@ g_sheet_model_base_init (gpointer g_cla
                      G_SIGNAL_RUN_LAST,
                      G_STRUCT_OFFSET (GSheetModelIface, range_changed),
                      NULL, NULL,
 -                    gtkextra_VOID__INT_INT_INT_INT,
 +                    psppire_marshal_VOID__INT_INT_INT_INT,
                      G_TYPE_NONE, 4,
                      G_TYPE_INT,
                      G_TYPE_INT,
@@@ -95,7 -95,7 +95,7 @@@
                      G_SIGNAL_RUN_LAST,
                      G_STRUCT_OFFSET (GSheetModelIface, rows_inserted),
                      NULL, NULL,
 -                    gtkextra_VOID__INT_INT,
 +                    psppire_marshal_VOID__INT_INT,
                      G_TYPE_NONE, 2,
                      G_TYPE_INT,
                      G_TYPE_INT);
                      G_SIGNAL_RUN_LAST,
                      G_STRUCT_OFFSET (GSheetModelIface, rows_deleted),
                      NULL, NULL,
 -                    gtkextra_VOID__INT_INT,
 +                    psppire_marshal_VOID__INT_INT,
                      G_TYPE_NONE, 2,
                      G_TYPE_INT,
                      G_TYPE_INT);
                      G_SIGNAL_RUN_LAST,
                      G_STRUCT_OFFSET (GSheetModelIface, columns_inserted),
                      NULL, NULL,
 -                    gtkextra_VOID__INT_INT,
 +                    psppire_marshal_VOID__INT_INT,
                      G_TYPE_NONE, 2,
                      G_TYPE_INT,
                      G_TYPE_INT);
                      G_SIGNAL_RUN_LAST,
                      G_STRUCT_OFFSET (GSheetModelIface, columns_deleted),
                      NULL, NULL,
 -                    gtkextra_VOID__INT_INT,
 +                    psppire_marshal_VOID__INT_INT,
                      G_TYPE_NONE, 2,
                      G_TYPE_INT,
                      G_TYPE_INT);
@@@ -505,7 -505,6 +505,6 @@@ g_sheet_model_get_row_count(const GShee
  {
    g_return_val_if_fail (G_IS_SHEET_MODEL (model), -1);
  
    return G_SHEET_MODEL_GET_IFACE (model)->get_row_count (model);
  }
  
  gboolean
  g_sheet_model_get_column_sensitivity (const GSheetModel *model, gint col)
  {
+   g_return_val_if_fail (G_IS_SHEET_MODEL (model), FALSE);
    if ( NULL == G_SHEET_MODEL_GET_IFACE (model)->get_column_sensitivity)
      return TRUE;
  
@@@ -553,6 -554,8 +554,8 @@@ GtkJustificatio
  g_sheet_model_get_column_justification (const GSheetModel *model,
                                        gint col)
  {
+   g_return_val_if_fail (G_IS_SHEET_MODEL (model), GTK_JUSTIFY_LEFT);
    if ( G_SHEET_MODEL_GET_IFACE (model)->get_column_justification)
      return G_SHEET_MODEL_GET_IFACE (model)->get_column_justification (model, col);
  
  gboolean
  g_sheet_model_get_row_sensitivity (const GSheetModel *model, gint row)
  {
+   g_return_val_if_fail (G_IS_SHEET_MODEL (model), FALSE);
    if ( NULL == G_SHEET_MODEL_GET_IFACE (model)->get_row_sensitivity)
      return TRUE;
  
diff --combined lib/gtksheet/gtksheet.c
index b6ff0000cd9cb2aab9893cf3a0fe80613f17d376,feeeaafa920e16aa55847487b5f7ad12ed84432b..b41840806430519c65f22524211ca32c0d2469b8
@@@ -53,7 -53,7 +53,7 @@@
  #include <gtk/gtkcontainer.h>
  #include <pango/pango.h>
  #include "gtksheet.h"
 -#include "gtkextra-marshal.h"
 +#include <gtksheet/psppire-marshal.h>
  #include "gsheetmodel.h"
  #include <libpspp/misc.h>
  #include <math.h>
@@@ -836,7 -836,7 +836,7 @@@ gtk_sheet_class_init (GtkSheetClass *kl
                  G_SIGNAL_RUN_LAST,
                  0,
                  NULL, NULL,
 -                gtkextra_VOID__INT_POINTER,
 +                psppire_marshal_VOID__INT_POINTER,
                  G_TYPE_NONE,
                  2,
                  G_TYPE_INT,
                  G_SIGNAL_RUN_LAST,
                  0,
                  NULL, NULL,
 -                gtkextra_VOID__INT_POINTER,
 +                psppire_marshal_VOID__INT_POINTER,
                  G_TYPE_NONE,
                  2,
                  G_TYPE_INT,
                  G_SIGNAL_RUN_LAST,
                  offsetof (GtkSheetClass, resize_range),
                  NULL, NULL,
 -                gtkextra_VOID__BOXED_BOXED,
 +                psppire_marshal_VOID__BOXED_BOXED,
                  G_TYPE_NONE,
                  2,
                  GTK_TYPE_SHEET_RANGE, GTK_TYPE_SHEET_RANGE
                  G_SIGNAL_RUN_LAST,
                  offsetof (GtkSheetClass, move_range),
                  NULL, NULL,
 -                gtkextra_VOID__BOXED_BOXED,
 +                psppire_marshal_VOID__BOXED_BOXED,
                  G_TYPE_NONE,
                  2,
                  GTK_TYPE_SHEET_RANGE, GTK_TYPE_SHEET_RANGE
                  G_SIGNAL_RUN_LAST,
                  offsetof (GtkSheetClass, traverse),
                  NULL, NULL,
 -                gtkextra_BOOLEAN__BOXED_POINTER,
 +                psppire_marshal_BOOLEAN__BOXED_POINTER,
                  G_TYPE_BOOLEAN, 2,
                  GTK_TYPE_SHEET_CELL,
                  G_TYPE_POINTER);
                  G_SIGNAL_RUN_LAST,
                  offsetof (GtkSheetClass, activate),
                  NULL, NULL,
 -                gtkextra_VOID__INT_INT_INT_INT,
 +                psppire_marshal_VOID__INT_INT_INT_INT,
                  G_TYPE_NONE, 4,
                  G_TYPE_INT, G_TYPE_INT,
                  G_TYPE_INT, G_TYPE_INT);
                  G_SIGNAL_RUN_LAST,
                  offsetof (GtkSheetClass, set_scroll_adjustments),
                  NULL, NULL,
 -                gtkextra_VOID__OBJECT_OBJECT,
 +                psppire_marshal_VOID__OBJECT_OBJECT,
                  G_TYPE_NONE, 2, GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
  
  
@@@ -1046,7 -1046,6 +1046,6 @@@ gtk_sheet_init (GtkSheet *sheet
  
    sheet->sheet_window = NULL;
    sheet->entry_widget = NULL;
-   sheet->entry_container = NULL;
    sheet->entry_handler_id = 0;
    sheet->button = NULL;
  
  
  
    /* create sheet entry */
-   sheet->entry_type = 0;
+   sheet->entry_type = GTK_TYPE_ENTRY;
    create_sheet_entry (sheet);
  
    /* create global selection button */
@@@ -1210,7 -1209,7 +1209,7 @@@ range_update_callback (GSheetModel *m, 
   * Returns: the new sheet widget
   */
  GtkWidget *
- gtk_sheet_new (void *vgeo, void *hgeo, GSheetModel *model)
+ gtk_sheet_new (GSheetModel *model)
  {
    GtkWidget *widget = g_object_new (GTK_TYPE_SHEET,
                                    "model", model,
@@@ -1658,9 -1657,6 +1657,6 @@@ gtk_sheet_dispose  (GObject *object
    if (sheet->vaxis) g_object_unref (sheet->vaxis);
    if (sheet->haxis) g_object_unref (sheet->haxis);
  
-   g_object_unref (sheet->entry_container);
-   sheet->entry_container = NULL;
    g_object_unref (sheet->button);
    sheet->button = NULL;
  
@@@ -2054,6 -2050,8 +2050,6 @@@ gtk_sheet_cell_draw (GtkSheet *sheet, g
                          area.width, area.height);
      }
  
 -  //  gtk_sheet_cell_draw_label (sheet, row, col);
 -
  
    label = gtk_sheet_cell_get_text (sheet, row, col);
    if (NULL == label)
@@@ -2511,9 -2509,7 +2507,7 @@@ gtk_sheet_entry_changed (GtkWidget *wid
    sheet->active_cell.row = -1;
    sheet->active_cell.col = -1;
  
-   text = gtk_entry_get_text (GTK_ENTRY (gtk_sheet_get_entry (sheet)));
+   text = gtk_entry_get_text (gtk_sheet_get_entry (sheet));
  
    if (text && strlen (text) > 0)
      {
@@@ -2628,7 -2624,7 +2622,7 @@@ gtk_sheet_show_active_cell (GtkSheet *s
  
    GTK_WIDGET_SET_FLAGS (GTK_WIDGET (sheet->entry_widget), GTK_VISIBLE);
  
-   sheet_entry = GTK_ENTRY (gtk_sheet_get_entry (sheet));
+   sheet_entry = gtk_sheet_get_entry (sheet);
  
    gtk_sheet_get_attributes (sheet, row, col, &attributes);
  
    if ( ! text )
      text = g_strdup ("");
  
-   gtk_entry_set_visibility (GTK_ENTRY (sheet_entry), attributes.is_visible);
+   gtk_entry_set_visibility (sheet_entry, attributes.is_visible);
  
  
    if ( GTK_IS_ENTRY (sheet_entry))
      {
        const gchar *old_text = gtk_entry_get_text (GTK_ENTRY (sheet_entry));
        if (strcmp (old_text, text) != 0)
-       gtk_entry_set_text (GTK_ENTRY (sheet_entry), text);
+       gtk_entry_set_text (sheet_entry, text);
  
        switch (attributes.justification)
        {
  
    gtk_sheet_size_allocate_entry (sheet);
  
+   gtk_widget_set_sensitive (GTK_WIDGET (sheet_entry),
+                           g_sheet_model_is_editable (sheet->model,
+                                                      row, col));
    gtk_widget_map (sheet->entry_widget);
  
    gtk_widget_grab_focus (GTK_WIDGET (sheet_entry));
@@@ -4523,16 -4522,19 +4520,16 @@@ gtk_sheet_size_allocate_entry (GtkShee
    GtkSheetCellAttr attributes = { 0 };
    GtkEntry *sheet_entry;
  
 -
    if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
    if (!GTK_WIDGET_MAPPED (GTK_WIDGET (sheet))) return;
  
-   sheet_entry = GTK_ENTRY (gtk_sheet_get_entry (sheet));
+   sheet_entry = gtk_sheet_get_entry (sheet);
  
    if ( ! gtk_sheet_get_attributes (sheet, sheet->active_cell.row,
                                   sheet->active_cell.col,
                                   &attributes) )
      return ;
  
 -  gtk_widget_ensure_style (GTK_WIDGET (sheet_entry));
 -
    if ( GTK_WIDGET_REALIZED (sheet->entry_widget) )
      {
        GtkStyle *style = GTK_WIDGET (sheet_entry)->style;
        style->bg[GTK_STATE_ACTIVE] = attributes.background;
        style->fg[GTK_STATE_ACTIVE] = attributes.foreground;
        style->text[GTK_STATE_ACTIVE] = attributes.foreground;
 -
 -      pango_font_description_free (style->font_desc);
 -      g_assert (attributes.font_desc);
 -      style->font_desc = pango_font_description_copy (attributes.font_desc);
      }
  
    rectangle_from_cell (sheet, sheet->active_cell.row,
@@@ -4562,29 -4568,8 +4559,8 @@@ create_sheet_entry (GtkSheet *sheet
        gtk_widget_unparent (sheet->entry_widget);
      }
  
-   if (sheet->entry_type)
-     {
-       sheet->entry_container = g_object_new (sheet->entry_type, NULL);
-       g_object_ref_sink (sheet->entry_container);
-       sheet->entry_widget = gtk_sheet_get_entry (sheet);
-       if  ( NULL == sheet->entry_widget)
-       {
-         g_warning ("Entry type is %s. It must be GtkEntry subclass, or a widget containing one. "
-                    "Using default", g_type_name (sheet->entry_type));
-         g_object_unref (sheet->entry_container);
-         sheet->entry_widget = sheet->entry_container = gtk_entry_new ();
-       }
-       else
-       {
-         sheet->entry_widget = sheet->entry_container ;
-       }
-     }
-   else
-     {
-       sheet->entry_widget = sheet->entry_container = gtk_entry_new ();
-       g_object_ref_sink (sheet->entry_container);
-     }
+   sheet->entry_widget = g_object_new (sheet->entry_type, NULL);
+   g_object_ref_sink (sheet->entry_widget);
  
    gtk_widget_size_request (sheet->entry_widget, NULL);
  
@@@ -4620,43 -4605,32 +4596,32 @@@ find_entry (GtkWidget *w, gpointer user
      }
  }
  
- GtkWidget *
+ GtkEntry *
  gtk_sheet_get_entry (GtkSheet *sheet)
  {
-   GtkWidget *parent;
-   GtkWidget *entry = NULL;
+   GtkWidget *w = sheet->entry_widget;
  
    g_return_val_if_fail (sheet != NULL, NULL);
    g_return_val_if_fail (GTK_IS_SHEET (sheet), NULL);
    g_return_val_if_fail (sheet->entry_widget != NULL, NULL);
  
-   if (GTK_IS_ENTRY (sheet->entry_container))
-     return (sheet->entry_container);
-   parent = sheet->entry_container;
-   if (GTK_IS_CONTAINER (parent))
+   while (! GTK_IS_ENTRY (w))
      {
-       gtk_container_forall (GTK_CONTAINER (parent), find_entry, &entry);
-       if (GTK_IS_ENTRY (entry))
-       return entry;
-     }
-   if (!GTK_IS_ENTRY (entry)) return NULL;
+       GtkWidget *entry = NULL;
  
-   return (entry);
+       if (GTK_IS_CONTAINER (w))
+       {
+         gtk_container_forall (GTK_CONTAINER (w), find_entry, &entry);
  
- }
+         if (NULL == entry)
+           break;
  
- GtkWidget *
- gtk_sheet_get_entry_widget (GtkSheet *sheet)
- {
-   g_return_val_if_fail (sheet != NULL, NULL);
-   g_return_val_if_fail (GTK_IS_SHEET (sheet), NULL);
-   g_return_val_if_fail (sheet->entry_widget != NULL, NULL);
+         w = entry;
+       }
+     }
  
-   return (sheet->entry_widget);
+   return GTK_ENTRY (w);
  }
  
  
@@@ -5218,6 -5192,7 +5183,6 @@@ gtk_sheet_get_attributes (const GtkShee
  
    if (row < 0 || col < 0) return FALSE;
  
 -
    attr->foreground = GTK_WIDGET (sheet)->style->black;
    attr->background = sheet->color[BG_COLOR];
  
@@@ -5336,8 -5311,8 +5301,8 @@@ gtk_sheet_forall (GtkContainer *contain
    if (sheet->button && sheet->button->parent)
      (* callback) (sheet->button, callback_data);
  
-   if (sheet->entry_container && GTK_IS_CONTAINER (sheet->entry_container))
-     (* callback) (sheet->entry_container, callback_data);
+   if (sheet->entry_widget && GTK_IS_CONTAINER (sheet->entry_widget))
+     (* callback) (sheet->entry_widget, callback_data);
  }