static void psppire_data_window_iface_init (PsppireWindowIface *iface);
static void psppire_data_window_dispose (GObject *object);
+static void psppire_data_window_finalize (GObject *object);
static void psppire_data_window_set_property (GObject *object,
guint prop_id,
const GValue *value,
parent_class = g_type_class_peek_parent (class);
object_class->dispose = psppire_data_window_dispose;
+ object_class->finalize = psppire_data_window_finalize;
object_class->set_property = psppire_data_window_set_property;
object_class->get_property = psppire_data_window_get_property;
}
else
{
- PsppireVarStore *vs = NULL;
PsppireDict *dict = NULL;
struct variable *var ;
gchar *text ;
- g_object_get (de->data_editor, "var-store", &vs, NULL);
- g_object_get (vs, "dictionary", &dict, NULL);
+ g_object_get (de->data_editor, "dictionary", &dict, NULL);
var = psppire_dict_get_variable (dict, filter_index);
else
{
struct variable *var ;
- PsppireVarStore *vs = NULL;
PsppireDict *dict = NULL;
gchar *text;
- g_object_get (de->data_editor, "var-store", &vs, NULL);
- g_object_get (vs, "dictionary", &dict, NULL);
+ g_object_get (de->data_editor, "dictionary", &dict, NULL);
var = psppire_dict_get_variable (dict, weight_index);
transformation_change_callback, /* transformations_changed */
};
- PsppireDict *dict;
-
GtkWidget *menubar;
GtkWidget *hb ;
GtkWidget *sb ;
GtkWidget *box = gtk_vbox_new (FALSE, 0);
de->dataset = ds;
- dict = psppire_dict_new_from_dict (dataset_dict (ds));
- de->var_store = psppire_var_store_new (dict);
- de->data_store = psppire_data_store_new (dict);
+ de->dict = psppire_dict_new_from_dict (dataset_dict (ds));
+ de->data_store = psppire_data_store_new (de->dict);
psppire_data_store_set_reader (de->data_store, NULL);
menubar = get_widget_assert (de->builder, "menubar");
de->merge_id = 0;
de->data_editor =
- PSPPIRE_DATA_EDITOR (psppire_data_editor_new (de->var_store,
- de->data_store));
+ PSPPIRE_DATA_EDITOR (psppire_data_editor_new (de->dict, de->data_store));
g_signal_connect (de->data_editor, "switch-page",
G_CALLBACK (on_switch_page), de);
gtk_container_add (GTK_CONTAINER (de), box);
- g_signal_connect (dict, "weight-changed",
+ g_signal_connect (de->dict, "weight-changed",
G_CALLBACK (on_weight_change),
de);
- g_signal_connect (dict, "filter-changed",
+ g_signal_connect (de->dict, "filter-changed",
G_CALLBACK (on_filter_change),
de);
- g_signal_connect (dict, "split-changed",
+ g_signal_connect (de->dict, "split-changed",
G_CALLBACK (on_split_change),
de);
{
PsppireDataWindow *dw = PSPPIRE_DATA_WINDOW (object);
+ if (dw->uim)
+ {
+ psppire_data_window_remove_ui (dw, dw->uim, dw->merge_id);
+ g_object_unref (dw->uim);
+ dw->uim = NULL;
+ }
+
if (dw->builder != NULL)
{
g_object_unref (dw->builder);
dw->builder = NULL;
}
- if (dw->var_store)
+ if (dw->dict)
{
- g_object_unref (dw->var_store);
- dw->var_store = NULL;
+ g_object_unref (dw->dict);
+ dw->dict = NULL;
}
if (dw->data_store)
G_OBJECT_CLASS (parent_class)->dispose (object);
}
+static void
+psppire_data_window_finalize (GObject *object)
+{
+ PsppireDataWindow *dw = PSPPIRE_DATA_WINDOW (object);
+
+ if (dw->dataset)
+ {
+ struct dataset *dataset = dw->dataset;
+ struct session *session = dataset_session (dataset);
+
+ dw->dataset = NULL;
+
+ dataset_set_callbacks (dataset, NULL, NULL);
+ session_set_active_dataset (session, NULL);
+ dataset_destroy (dataset);
+ }
+
+ if (G_OBJECT_CLASS (parent_class)->finalize)
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
static void
psppire_data_window_set_property (GObject *object,
guint prop_id,
gtk_window_remove_accel_group (GTK_WINDOW (pdw),
gtk_ui_manager_get_accel_group (uim));
-
- /* Our caller unrefs 'uim', possibly causing 'uim' to be freed. The
- following call appears to be necessary to ensure that pdw->ui_manager
- drops all references to 'uim'. Otherwise, I get valgrind complaints about
- access to freed memory (and segfaults) on e.g. Windows|Split View. */
- gtk_ui_manager_ensure_update (pdw->ui_manager);
}
GtkWidget*
if (ds == NULL)
{
- static int n_datasets;
- char *dataset_name;
-
- dataset_name = xasprintf ("DataSet%d", ++n_datasets);
+ char *dataset_name = session_generate_dataset_name (the_session);
ds = dataset_create (the_session, dataset_name);
free (dataset_name);
}
bool
psppire_data_window_is_empty (PsppireDataWindow *dw)
{
- return psppire_var_store_get_var_cnt (dw->var_store) == 0;
+ return psppire_dict_get_var_cnt (dw->dict) == 0;
}
static void