[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] pspp lib/gtksheet/gtksheet.c src/ui/gui/ChangeL...
From: |
John Darrington |
Subject: |
[Pspp-cvs] pspp lib/gtksheet/gtksheet.c src/ui/gui/ChangeL... |
Date: |
Sun, 03 Feb 2008 12:09:25 +0000 |
CVSROOT: /sources/pspp
Module name: pspp
Changes by: John Darrington <jmd> 08/02/03 12:09:25
Modified files:
lib/gtksheet : gtksheet.c
src/ui/gui : ChangeLog compute-dialog.c data-editor.c
psppire-case-file.c psppire-case-file.h
psppire-data-store.c psppire-data-store.h
psppire-dialog.c
Log message:
Fixed various memory leaks in GUI
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/lib/gtksheet/gtksheet.c?cvsroot=pspp&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/ChangeLog?cvsroot=pspp&r1=1.103&r2=1.104
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/compute-dialog.c?cvsroot=pspp&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/data-editor.c?cvsroot=pspp&r1=1.58&r2=1.59
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-case-file.c?cvsroot=pspp&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-case-file.h?cvsroot=pspp&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.c?cvsroot=pspp&r1=1.53&r2=1.54
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-data-store.h?cvsroot=pspp&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/pspp/src/ui/gui/psppire-dialog.c?cvsroot=pspp&r1=1.11&r2=1.12
Patches:
Index: lib/gtksheet/gtksheet.c
===================================================================
RCS file: /sources/pspp/pspp/lib/gtksheet/gtksheet.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- lib/gtksheet/gtksheet.c 2 Feb 2008 06:40:29 -0000 1.32
+++ lib/gtksheet/gtksheet.c 3 Feb 2008 12:09:24 -0000 1.33
@@ -136,10 +136,13 @@
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;
}
}
@@ -6702,7 +6705,7 @@
{
GdkWindow *window = NULL;
GdkRectangle allocation;
- GtkSheetButton *button = NULL;
+
gboolean is_sensitive = FALSE;
if (!GTK_WIDGET_REALIZED (GTK_WIDGET (sheet))) return;
@@ -6731,7 +6734,7 @@
}
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;
@@ -6741,6 +6744,12 @@
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); */
+
}
}
@@ -7640,11 +7649,14 @@
{
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;
Index: src/ui/gui/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/ChangeLog,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -b -r1.103 -r1.104
--- src/ui/gui/ChangeLog 29 Jan 2008 11:12:59 -0000 1.103
+++ src/ui/gui/ChangeLog 3 Feb 2008 12:09:24 -0000 1.104
@@ -1,3 +1,11 @@
+2008-02-03 John Darrington <address@hidden>
+
+ * psppire-case-file.c psppire-case-file.h: Dont clone the casereader
+ before creating datasheet. Add properties instead of direct code
+ in _new function.
+
+ * psppire-data-store.c: Implement proper dispose function.
+
2008-01-29 John Darrington <address@hidden>
* psppire-var-ptr.c psppire-var-ptr.h: New files
Index: src/ui/gui/compute-dialog.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/compute-dialog.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- src/ui/gui/compute-dialog.c 29 Jan 2008 11:12:59 -0000 1.13
+++ src/ui/gui/compute-dialog.c 3 Feb 2008 12:09:25 -0000 1.14
@@ -153,7 +153,7 @@
gchar *text;
GString *string ;
const gchar *target_name ;
- const gchar *expression;
+ gchar *expression;
const gchar *label;
GtkTextIter start, end;
GtkWidget *target = get_widget_assert (cd->xml, "compute-entry1");
@@ -208,6 +208,9 @@
g_string_append (string, "EXECUTE.\n");
+
+ g_free (expression);
+
text = string->str;
g_string_free (string, FALSE);
Index: src/ui/gui/data-editor.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/data-editor.c,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -b -r1.58 -r1.59
--- src/ui/gui/data-editor.c 29 Jan 2008 11:12:59 -0000 1.58
+++ src/ui/gui/data-editor.c 3 Feb 2008 12:09:25 -0000 1.59
@@ -1201,6 +1201,7 @@
gtk_toggle_action_get_active (ta));
}
+extern PsppireDataStore *the_data_store ;
static void
file_quit (GtkCheckMenuItem *menuitem, gpointer data)
@@ -1208,6 +1209,7 @@
/* FIXME: Need to be more intelligent here.
Give the user the opportunity to save any unsaved data.
*/
+ g_object_unref (the_data_store);
gtk_main_quit ();
}
Index: src/ui/gui/psppire-case-file.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-case-file.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- src/ui/gui/psppire-case-file.c 2 Feb 2008 06:40:29 -0000 1.32
+++ src/ui/gui/psppire-case-file.c 3 Feb 2008 12:09:25 -0000 1.33
@@ -80,16 +80,91 @@
return object_type;
}
+/* Properties */
+enum
+{
+ PROP_0,
+ PROP_DATASHEET,
+ PROP_READER
+};
+
+
+
+
+static void
+psppire_case_file_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+
+{
+ PsppireCaseFile *cf = PSPPIRE_CASE_FILE (object);
+
+ switch (prop_id)
+ {
+ case PROP_READER:
+ cf->datasheet = datasheet_create (g_value_get_pointer (value));
+ cf->accessible = TRUE;
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ };
+}
+
+static void
+psppire_case_file_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ PsppireCaseFile *cf = PSPPIRE_CASE_FILE (object);
+
+ switch (prop_id)
+ {
+ case PROP_DATASHEET:
+ g_value_set_pointer (value, cf->datasheet);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ };
+}
+
static void
psppire_case_file_class_init (PsppireCaseFileClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GParamSpec *datasheet_spec ;
+ GParamSpec *reader_spec ;
parent_class = g_type_class_peek_parent (class);
object_class->finalize = psppire_case_file_finalize;
+ datasheet_spec =
+ g_param_spec_pointer ("datasheet",
+ "Datasheet",
+ "A pointer to the datasheet belonging to this object",
+ G_PARAM_READABLE );
+ reader_spec =
+ g_param_spec_pointer ("casereader",
+ "CaseReader",
+ "A pointer to the case reader from which this object
is constructed",
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE );
+
+ object_class->set_property = psppire_case_file_set_property;
+ object_class->get_property = psppire_case_file_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_DATASHEET,
+ datasheet_spec);
+
+ g_object_class_install_property (object_class,
+ PROP_READER,
+ reader_spec);
+
signals [CASE_CHANGED] =
g_signal_new ("case-changed",
G_TYPE_FROM_CLASS (class),
@@ -152,14 +227,11 @@
* Creates a new #PsppireCaseFile.
*/
PsppireCaseFile*
-psppire_case_file_new (const struct casereader *reader)
+psppire_case_file_new (struct casereader *reader)
{
- PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL);
-
- cf->datasheet = datasheet_create (casereader_clone (reader));
- cf->accessible = TRUE;
-
- return cf;
+ return g_object_new (G_TYPE_PSPPIRE_CASE_FILE,
+ "casereader", reader,
+ NULL);
}
Index: src/ui/gui/psppire-case-file.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-case-file.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- src/ui/gui/psppire-case-file.h 18 Jul 2007 05:32:22 -0000 1.19
+++ src/ui/gui/psppire-case-file.h 3 Feb 2008 12:09:25 -0000 1.20
@@ -67,7 +67,7 @@
/* -- PsppireCaseFile --- */
GType psppire_case_file_get_type (void);
-PsppireCaseFile *psppire_case_file_new (const struct casereader *);
+PsppireCaseFile *psppire_case_file_new (struct casereader *);
gboolean psppire_case_file_insert_case (PsppireCaseFile *cf, struct ccase *c,
casenumber row);
Index: src/ui/gui/psppire-data-store.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -b -r1.53 -r1.54
--- src/ui/gui/psppire-data-store.c 19 Sep 2007 04:29:00 -0000 1.53
+++ src/ui/gui/psppire-data-store.c 3 Feb 2008 12:09:25 -0000 1.54
@@ -48,6 +48,7 @@
static void psppire_data_store_sheet_row_init (GSheetRowIface *iface);
static void psppire_data_store_finalize (GObject *object);
+static void psppire_data_store_dispose (GObject *object);
static gboolean psppire_data_store_clear_datum (GSheetModel *model,
glong row, glong column);
@@ -137,6 +138,7 @@
object_class = (GObjectClass*) class;
object_class->finalize = psppire_data_store_finalize;
+ object_class->dispose = psppire_data_store_dispose;
signals [FONT_CHANGED] =
g_signal_new ("font_changed",
@@ -182,10 +184,9 @@
psppire_data_store_init (PsppireDataStore *data_store)
{
data_store->dict = 0;
- data_store->case_file = 0;
+ data_store->case_file = NULL;
data_store->width_of_m = 10;
-
-
+ data_store->dispose_has_run = FALSE;
}
const PangoFontDescription *
@@ -396,10 +397,8 @@
PsppireCaseFile *cf)
{
gint i;
- if ( ds->case_file)
- {
- g_object_unref (ds->case_file);
- }
+ if ( ds->case_file) g_object_unref (ds->case_file);
+
ds->case_file = cf;
@@ -515,6 +514,24 @@
(* parent_class->finalize) (object);
}
+
+static void
+psppire_data_store_dispose (GObject *object)
+{
+ PsppireDataStore *ds = PSPPIRE_DATA_STORE (object);
+
+ if (ds->dispose_has_run)
+ return;
+
+ if (ds->case_file) g_object_unref (ds->case_file);
+
+ /* must chain up */
+ (* parent_class->dispose) (object);
+
+ ds->dispose_has_run = TRUE;
+}
+
+
gboolean
psppire_data_store_delete_cases (PsppireDataStore *ds,
casenumber first, casenumber count)
Index: src/ui/gui/psppire-data-store.h
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-data-store.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- src/ui/gui/psppire-data-store.h 19 Sep 2007 04:29:00 -0000 1.21
+++ src/ui/gui/psppire-data-store.h 3 Feb 2008 12:09:25 -0000 1.22
@@ -81,6 +81,7 @@
GObject parent;
/*< private >*/
+ gboolean dispose_has_run ;
PsppireDict *dict;
PsppireCaseFile *case_file;
const PangoFontDescription *font_desc;
Index: src/ui/gui/psppire-dialog.c
===================================================================
RCS file: /sources/pspp/pspp/src/ui/gui/psppire-dialog.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- src/ui/gui/psppire-dialog.c 29 Jan 2008 11:13:00 -0000 1.11
+++ src/ui/gui/psppire-dialog.c 3 Feb 2008 12:09:25 -0000 1.12
@@ -428,6 +428,8 @@
g_main_loop_run (dialog->loop);
+ g_main_loop_unref (dialog->loop);
+
return dialog->response;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pspp-cvs] pspp lib/gtksheet/gtksheet.c src/ui/gui/ChangeL...,
John Darrington <=