Updated some deprecated functions with modern ones.
[pspp-builds.git] / lib / gtksheet / gtksheet.c
index fed265eb95acee635cbdd48b4e90e1c84327c01b..3a6da7ecb3af10fbd63c62787fa12d4dc6c921a8 100644 (file)
@@ -888,6 +888,27 @@ enum
     PROP_MODEL
   };
 
+static void
+gtk_sheet_set_row_geometry (GtkSheet *sheet, GSheetRow *geo)
+{
+  if ( sheet->row_geometry ) g_object_unref (sheet->row_geometry);
+
+  sheet->row_geometry = geo;
+
+  if ( sheet->row_geometry ) g_object_ref (sheet->row_geometry);
+}
+
+static void
+gtk_sheet_set_column_geometry (GtkSheet *sheet, GSheetColumn *geo)
+{
+  if ( sheet->column_geometry ) g_object_unref (sheet->column_geometry);
+
+  sheet->column_geometry = geo;
+
+  if ( sheet->column_geometry ) g_object_ref (sheet->column_geometry);
+}
+
+
 static void
 gtk_sheet_set_property (GObject         *object,
                        guint            prop_id,
@@ -900,10 +921,10 @@ gtk_sheet_set_property (GObject         *object,
   switch (prop_id)
     {
     case PROP_ROW_GEO:
-      sheet->row_geometry = g_value_get_pointer (value);
+      gtk_sheet_set_row_geometry (sheet, g_value_get_pointer (value));
       break;
     case PROP_COL_GEO:
-      sheet->column_geometry = g_value_get_pointer (value);
+      gtk_sheet_set_column_geometry (sheet, g_value_get_pointer (value));
       if ( sheet->column_geometry)
        g_signal_connect (sheet->column_geometry, "columns_changed",
                          G_CALLBACK (column_titles_changed), sheet);
@@ -1232,6 +1253,7 @@ gtk_sheet_class_init (GtkSheetClass * klass)
 static void
 gtk_sheet_init (GtkSheet *sheet)
 {
+  sheet->model = NULL;
   sheet->column_geometry = NULL;
   sheet->row_geometry = NULL;
 
@@ -1291,11 +1313,13 @@ gtk_sheet_init (GtkSheet *sheet)
   sheet->bg_gc = NULL;
   sheet->x_drag = 0;
   sheet->y_drag = 0;
-
   gdk_color_parse ("white", &sheet->bg_color);
-  gdk_color_alloc (gdk_colormap_get_system (), &sheet->bg_color);
+  gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->bg_color, FALSE,
+                            TRUE);
   gdk_color_parse ("gray", &sheet->grid_color);
-  gdk_color_alloc (gdk_colormap_get_system (), &sheet->grid_color);
+  gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->grid_color, FALSE,
+                            TRUE);
+
   sheet->show_grid = TRUE;
 
   sheet->motion_timer = 0;
@@ -1482,6 +1506,8 @@ gtk_sheet_set_model (GtkSheet *sheet, GSheetModel *model)
 
   if ( model)
     {
+      g_object_ref (model);
+
       g_signal_connect (model, "range_changed",
                        G_CALLBACK (range_update_callback), sheet);
 
@@ -1591,7 +1617,7 @@ gtk_sheet_set_background (GtkSheet *sheet, GdkColor *color)
   if (!color)
     {
       gdk_color_parse ("white", &sheet->bg_color);
-      gdk_color_alloc (gdk_colormap_get_system (), &sheet->bg_color);
+      gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->bg_color, FALSE, TRUE);
     }
   else
     sheet->bg_color = *color;
@@ -1609,7 +1635,7 @@ gtk_sheet_set_grid (GtkSheet *sheet, GdkColor *color)
   if (!color)
     {
       gdk_color_parse ("black", &sheet->grid_color);
-      gdk_color_alloc (gdk_colormap_get_system (), &sheet->grid_color);
+      gdk_colormap_alloc_color (gdk_colormap_get_system (), &sheet->grid_color, FALSE, TRUE);
     }
   else
     sheet->grid_color = *color;
@@ -2401,7 +2427,7 @@ gtk_sheet_finalize (GObject * object)
 }
 
 static void
-gtk_sheet_dispose  (GObject * object)
+gtk_sheet_dispose  (GObject *object)
 {
   GtkSheet *sheet = GTK_SHEET (object);
   GList *children;
@@ -2412,9 +2438,12 @@ gtk_sheet_dispose  (GObject * object)
   if ( sheet->dispose_has_run )
     return ;
 
-  if (sheet->model) g_object_unref (sheet->model);
   sheet->dispose_has_run = TRUE;
 
+  if (sheet->model) g_object_unref (sheet->model);
+  if (sheet->row_geometry) g_object_unref (sheet->row_geometry);
+  if (sheet->column_geometry) g_object_unref (sheet->column_geometry);
+
   g_object_unref (sheet->entry_container);
   g_object_unref (sheet->button);
 
@@ -2571,38 +2600,37 @@ gtk_sheet_realize (GtkWidget * widget)
 
   /* GCs */
   if (sheet->fg_gc)
-    gdk_gc_unref (sheet->fg_gc);
+    g_object_unref (sheet->fg_gc);
   if (sheet->bg_gc)
-    gdk_gc_unref (sheet->bg_gc);
+    g_object_unref (sheet->bg_gc);
   sheet->fg_gc = gdk_gc_new (widget->window);
   sheet->bg_gc = gdk_gc_new (widget->window);
 
   colormap = gtk_widget_get_colormap (widget);
 
-  gdk_color_white (colormap, &widget->style->white);
-  gdk_color_black (colormap, &widget->style->black);
-
   gdk_gc_get_values (sheet->fg_gc, &auxvalues);
 
   values.foreground = widget->style->white;
   values.function = GDK_INVERT;
   values.subwindow_mode = GDK_INCLUDE_INFERIORS;
   if (sheet->xor_gc)
-    gdk_gc_unref (sheet->xor_gc);
+    g_object_unref (sheet->xor_gc);
   sheet->xor_gc = gdk_gc_new_with_values (widget->window,
                                          &values,
                                          GDK_GC_FOREGROUND |
                                          GDK_GC_FUNCTION |
                                          GDK_GC_SUBWINDOW);
 
+
   gtk_widget_set_parent_window (sheet->entry_widget, sheet->sheet_window);
   gtk_widget_set_parent (sheet->entry_widget, GTK_WIDGET (sheet));
 
   gtk_widget_set_parent_window (sheet->button, sheet->sheet_window);
   gtk_widget_set_parent (sheet->button, GTK_WIDGET (sheet));
 
-  if (!sheet->cursor_drag)
-    sheet->cursor_drag = gdk_cursor_new (GDK_PLUS);
+
+  gdk_cursor_unref (sheet->cursor_drag);
+  sheet->cursor_drag = gdk_cursor_new (GDK_PLUS);
 
   if (sheet->column_titles_visible)
     gdk_window_show (sheet->column_title_window);
@@ -2676,11 +2704,11 @@ gtk_sheet_unrealize (GtkWidget * widget)
 
   sheet = GTK_SHEET (widget);
 
-  gdk_cursor_destroy (sheet->cursor_drag);
+  gdk_cursor_unref (sheet->cursor_drag);
 
-  gdk_gc_destroy (sheet->xor_gc);
-  gdk_gc_destroy (sheet->fg_gc);
-  gdk_gc_destroy (sheet->bg_gc);
+  g_object_unref (sheet->xor_gc);
+  g_object_unref (sheet->fg_gc);
+  g_object_unref (sheet->bg_gc);
 
   gdk_window_destroy (sheet->sheet_window);
   gdk_window_destroy (sheet->column_title_window);
@@ -2694,11 +2722,13 @@ gtk_sheet_unrealize (GtkWidget * widget)
 
   sheet->column_title_window = NULL;
   sheet->sheet_window = NULL;
-  sheet->cursor_drag = NULL;
   sheet->xor_gc = NULL;
   sheet->fg_gc = NULL;
   sheet->bg_gc = NULL;
 
+  gtk_widget_unparent (sheet->entry_widget);
+  gtk_widget_unparent (sheet->button);
+
   if (GTK_WIDGET_CLASS (parent_class)->unrealize)
     (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
 }
@@ -2717,10 +2747,7 @@ gtk_sheet_map (GtkWidget * widget)
     {
       GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
 
-      if (!sheet->cursor_drag) sheet->cursor_drag = gdk_cursor_new (GDK_PLUS);
-
       gdk_window_show (widget->window);
-
       gdk_window_show (sheet->sheet_window);
 
       if (sheet->column_titles_visible)
@@ -3050,7 +3077,7 @@ gtk_sheet_cell_draw_label (GtkSheet *sheet, gint row, gint col)
   gdk_gc_set_clip_rectangle (fg_gc, NULL);
   g_object_unref (layout);
 
-  gdk_draw_pixmap (sheet->sheet_window,
+  gdk_draw_drawable (sheet->sheet_window,
                   GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                   sheet->pixmap,
                   area.x,
@@ -3117,7 +3144,7 @@ gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range)
                          sheet->sheet_window_width - area.x,
                          sheet->sheet_window_height);
 
-      gdk_draw_pixmap (sheet->sheet_window,
+      gdk_draw_drawable (sheet->sheet_window,
                       GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                       sheet->pixmap,
                       area.x,
@@ -3144,7 +3171,7 @@ gtk_sheet_range_draw (GtkSheet *sheet, const GtkSheetRange *range)
                          sheet->sheet_window_width,
                          sheet->sheet_window_height - area.y);
 
-      gdk_draw_pixmap (sheet->sheet_window,
+      gdk_draw_drawable (sheet->sheet_window,
                       GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                       sheet->pixmap,
                       area.x,
@@ -3290,7 +3317,7 @@ gtk_sheet_draw_backing_pixmap (GtkSheet *sheet, GtkSheetRange range)
   if (range.rowi == yyy_row_count (sheet) - 1)
     height = sheet->sheet_window_height - y;
 
-  gdk_draw_pixmap (sheet->sheet_window,
+  gdk_draw_drawable (sheet->sheet_window,
                   GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                   sheet->pixmap,
                   x,
@@ -3771,7 +3798,7 @@ gtk_sheet_hide_active_cell (GtkSheet *sheet)
   gtk_widget_unmap (sheet->entry_widget);
 
   if (row != -1 && col != -1)
-    gdk_draw_pixmap (sheet->sheet_window,
+    gdk_draw_drawable (sheet->sheet_window,
                     GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                     sheet->pixmap,
                     COLUMN_LEFT_XPIXEL (sheet, col)- 1,
@@ -3939,8 +3966,8 @@ gtk_sheet_make_backing_pixmap (GtkSheet *sheet, guint width, guint height)
   else
     {
       /* reallocate if sizes don't match */
-      gdk_window_get_size (sheet->pixmap,
-                          &pixmap_width, &pixmap_height);
+      gdk_drawable_get_size (sheet->pixmap,
+                            &pixmap_width, &pixmap_height);
       if ( (pixmap_width != width) || (pixmap_height != height))
        {
          g_object_unref (sheet->pixmap);
@@ -4029,7 +4056,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range)
                    }
                  if (j == sheet->range.coli) width = width + 3;
 
-                 gdk_draw_pixmap (sheet->sheet_window,
+                 gdk_draw_drawable (sheet->sheet_window,
                                   GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                                   sheet->pixmap,
                                   x + 1,
@@ -4103,7 +4130,7 @@ gtk_sheet_new_selection (GtkSheet *sheet, GtkSheetRange *range)
                }
              if (j == sheet->range.coli) width = width + 3;
 
-             gdk_draw_pixmap (sheet->sheet_window,
+             gdk_draw_drawable (sheet->sheet_window,
                               GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                               sheet->pixmap,
                               x + 1,
@@ -4292,7 +4319,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range)
     {
       x = COLUMN_LEFT_XPIXEL (sheet, range.col0);
       y = ROW_TOP_YPIXEL (sheet, range.row0);
-      gdk_draw_pixmap (sheet->sheet_window,
+      gdk_draw_drawable (sheet->sheet_window,
                       GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                       sheet->pixmap,
                       x - 1,
@@ -4320,7 +4347,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range)
          y = ROW_TOP_YPIXEL (sheet, MIN_VISIBLE_ROW (sheet))+3;
          width = 3;
        }
-      gdk_draw_pixmap (sheet->sheet_window,
+      gdk_draw_drawable (sheet->sheet_window,
                       GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                       sheet->pixmap,
                       x - width,
@@ -4348,7 +4375,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range)
          x = COLUMN_LEFT_XPIXEL (sheet, MIN_VISIBLE_COLUMN (sheet))+3;
          width = 3;
        }
-      gdk_draw_pixmap (sheet->sheet_window,
+      gdk_draw_drawable (sheet->sheet_window,
                       GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                       sheet->pixmap,
                       x - width,
@@ -4373,7 +4400,7 @@ gtk_sheet_draw_corners (GtkSheet *sheet, GtkSheetRange range)
       width = 1;
       if (sheet->state == GTK_SHEET_RANGE_SELECTED) width = 3;
       if (sheet->state == GTK_SHEET_NORMAL) width = 3;
-      gdk_draw_pixmap (sheet->sheet_window,
+      gdk_draw_drawable (sheet->sheet_window,
                       GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                       sheet->pixmap,
                       x - width,
@@ -5205,7 +5232,7 @@ gtk_sheet_motion (GtkWidget * widget,
          new_cursor = GDK_SB_H_DOUBLE_ARROW;
          if (new_cursor != sheet->cursor_drag->type)
            {
-             gdk_cursor_destroy (sheet->cursor_drag);
+             gdk_cursor_unref (sheet->cursor_drag);
              sheet->cursor_drag = gdk_cursor_new (GDK_SB_H_DOUBLE_ARROW);
              gdk_window_set_cursor (sheet->column_title_window,
                                     sheet->cursor_drag);
@@ -5217,7 +5244,7 @@ gtk_sheet_motion (GtkWidget * widget,
          if (!GTK_SHEET_IN_XDRAG (sheet) &&
              new_cursor != sheet->cursor_drag->type)
            {
-             gdk_cursor_destroy (sheet->cursor_drag);
+             gdk_cursor_unref (sheet->cursor_drag);
              sheet->cursor_drag = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
              gdk_window_set_cursor (sheet->column_title_window,
                                     sheet->cursor_drag);
@@ -5234,7 +5261,7 @@ gtk_sheet_motion (GtkWidget * widget,
          new_cursor = GDK_SB_V_DOUBLE_ARROW;
          if (new_cursor != sheet->cursor_drag->type)
            {
-             gdk_cursor_destroy (sheet->cursor_drag);
+             gdk_cursor_unref (sheet->cursor_drag);
              sheet->cursor_drag = gdk_cursor_new (GDK_SB_V_DOUBLE_ARROW);
              gdk_window_set_cursor (sheet->row_title_window, sheet->cursor_drag);
            }
@@ -5245,7 +5272,7 @@ gtk_sheet_motion (GtkWidget * widget,
          if (!GTK_SHEET_IN_YDRAG (sheet) &&
              new_cursor != sheet->cursor_drag->type)
            {
-             gdk_cursor_destroy (sheet->cursor_drag);
+             gdk_cursor_unref (sheet->cursor_drag);
              sheet->cursor_drag = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
              gdk_window_set_cursor (sheet->row_title_window, sheet->cursor_drag);
            }
@@ -5260,7 +5287,7 @@ gtk_sheet_motion (GtkWidget * widget,
        !GTK_SHEET_IN_RESIZE (sheet) &&
        new_cursor != sheet->cursor_drag->type)
     {
-      gdk_cursor_destroy (sheet->cursor_drag);
+      gdk_cursor_unref (sheet->cursor_drag);
       sheet->cursor_drag = gdk_cursor_new (GDK_PLUS);
       gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag);
     }
@@ -5271,7 +5298,7 @@ gtk_sheet_motion (GtkWidget * widget,
 
        new_cursor != sheet->cursor_drag->type)
     {
-      gdk_cursor_destroy (sheet->cursor_drag);
+      gdk_cursor_unref (sheet->cursor_drag);
       sheet->cursor_drag = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
       gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag);
     }
@@ -5284,7 +5311,7 @@ gtk_sheet_motion (GtkWidget * widget,
        GTK_SHEET_IN_RESIZE (sheet)) &&
        new_cursor != sheet->cursor_drag->type)
     {
-      gdk_cursor_destroy (sheet->cursor_drag);
+      gdk_cursor_unref (sheet->cursor_drag);
       sheet->cursor_drag = gdk_cursor_new (GDK_SIZING);
       gdk_window_set_cursor (sheet->sheet_window, sheet->cursor_drag);
     }
@@ -5538,7 +5565,7 @@ gtk_sheet_extend_selection (GtkSheet *sheet, gint row, gint column)
       sheet->range.row0 = r;
       sheet->range.coli = c;
       sheet->range.rowi = r;
-      gdk_draw_pixmap (sheet->sheet_window,
+      gdk_draw_drawable (sheet->sheet_window,
                       GTK_WIDGET (sheet)->style->fg_gc[GTK_STATE_NORMAL],
                       sheet->pixmap,
                       COLUMN_LEFT_XPIXEL (sheet, c)- 1,
@@ -6316,7 +6343,6 @@ gtk_sheet_get_entry (GtkSheet *sheet)
   if (GTK_IS_ENTRY (sheet->entry_container))
     return (sheet->entry_container);
 
-  //parent = GTK_WIDGET (sheet->entry_widget);
   parent = sheet->entry_container;
 
   if (GTK_IS_TABLE (parent)) children = GTK_TABLE (parent)->children;
@@ -6662,9 +6688,7 @@ vadjustment_value_changed (GtkAdjustment * adjustment,
 
   if (GTK_SHEET_IS_FROZEN (sheet)) return;
 
-  row = ROW_FROM_YPIXEL (sheet, sheet->column_title_area.height + CELL_SPACING);
-  if (!sheet->column_titles_visible)
-    row = ROW_FROM_YPIXEL (sheet, CELL_SPACING);
+  row = ROW_FROM_YPIXEL (sheet, CELL_SPACING);
 
   old_value = - sheet->voffset;
 
@@ -6767,9 +6791,7 @@ hadjustment_value_changed (GtkAdjustment * adjustment,
 
   if (GTK_SHEET_IS_FROZEN (sheet)) return;
 
-  column = COLUMN_FROM_XPIXEL (sheet, sheet->row_title_area.width + CELL_SPACING);
-  if (!sheet->row_titles_visible)
-    column = COLUMN_FROM_XPIXEL (sheet, CELL_SPACING);
+  column = COLUMN_FROM_XPIXEL (sheet, CELL_SPACING);
 
   old_value = - sheet->hoffset;
 
@@ -7129,7 +7151,6 @@ init_attributes (const GtkSheet *sheet, gint col, GtkSheetCellAttr *attributes)
     {
       GdkColormap *colormap;
       colormap = gdk_colormap_get_system ();
-      gdk_color_black (colormap, &attributes->foreground);
       attributes->background = sheet->bg_color;
     }
   attributes->justification = xxx_column_justification (sheet, col);
@@ -7937,6 +7958,9 @@ primary_clear_cb (GtkClipboard *clipboard,
                  gpointer      data)
 {
   GtkSheet *sheet = GTK_SHEET (data);
+  if ( ! GTK_WIDGET_REALIZED (GTK_WIDGET (sheet)))
+    return;
+
   gtk_sheet_real_unselect_range (sheet, NULL);
 }