Fixed various memory leaks in GUI
[pspp-builds.git] / lib / gtksheet / gtksheet.c
index 3830dac1e10ed50442b912f1171222ca20e074f8..2e5351191490e54a0d2f36dc14056f9055d06c69 100644 (file)
@@ -136,10 +136,13 @@ guint DEFAULT_ROW_HEIGHT (GtkWidget *widget)
        pango_context_get_metrics (context,
                                   widget->style->font_desc,
                                   pango_context_get_language (context));
+
       guint val = pango_font_metrics_get_descent (metrics) +
        pango_font_metrics_get_ascent (metrics);
+
       pango_font_metrics_unref (metrics);
-      return PANGO_PIXELS (val)+2 * CELLOFFSET;
+
+      return PANGO_PIXELS (val) + 2 * CELLOFFSET;
     }
 }
 
@@ -1320,6 +1323,15 @@ range_update_callback (GSheetModel *m, gint row0, gint col0,
   range.rowi = rowi;
   range.coli = coli;
 
+  if ( MAX_VISIBLE_ROW (sheet) >
+       g_sheet_model_get_row_count (sheet->model)
+       ||
+       MAX_VISIBLE_COLUMN (sheet) >
+       g_sheet_model_get_column_count (sheet->model))
+    {
+      gtk_sheet_move_query (sheet, 0, 0);
+    }
+
   if ( ( row0 < 0 && col0 < 0 ) || ( rowi < 0 && coli < 0 ) )
     {
       gint i;
@@ -6252,6 +6264,7 @@ gtk_sheet_size_allocate_entry (GtkSheet *sheet)
              style->fg[GTK_STATE_ACTIVE] = previous_style->fg[GTK_STATE_ACTIVE];
            }
          gtk_widget_set_style (GTK_WIDGET (sheet_entry), style);
+          g_object_unref (style);
        }
     }
 
@@ -6692,7 +6705,7 @@ gtk_sheet_column_title_button_draw (GtkSheet *sheet, gint column)
 {
   GdkWindow *window = NULL;
   GdkRectangle allocation;
-  GtkSheetButton *button = NULL;
+
   gboolean is_sensitive = FALSE;
 
   if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
@@ -6721,7 +6734,7 @@ gtk_sheet_column_title_button_draw (GtkSheet *sheet, gint column)
     }
   else
     {
-      button = xxx_column_button (sheet, column);
+      GtkSheetButton *button = xxx_column_button (sheet, column);
       allocation.x = COLUMN_LEFT_XPIXEL (sheet, column) + CELL_SPACING;
       if (sheet->row_titles_visible)
        allocation.x -= sheet->row_title_area.width;
@@ -6731,6 +6744,12 @@ gtk_sheet_column_title_button_draw (GtkSheet *sheet, gint column)
       is_sensitive = xxx_column_is_sensitive (sheet, column);
       gtk_sheet_button_draw (sheet, window, button,
                             is_sensitive, allocation);
+
+      /* FIXME: Not freeing this button is correct (sort of),
+      because in PSPP the model always returns a static copy */
+
+      /* gtk_sheet_button_free (button); */
+
     }
 }
 
@@ -7630,11 +7649,14 @@ gtk_sheet_column_size_request (GtkSheet *sheet,
 {
   GtkRequisition button_requisition;
   GList *children;
+  GtkSheetButton *button = xxx_column_button (sheet, col);
 
   gtk_sheet_button_size_request (sheet,
-                                xxx_column_button (sheet, col),
+                                button,
                                 &button_requisition);
 
+  gtk_sheet_button_free (button);
+
   *requisition = button_requisition.width;
 
   children = sheet->children;