X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog-action.c;h=9eeed98d8dd608fe8b101159017cd5a1ea269ad6;hb=d97c0f1ed2858c48173c023964cec8234b5bc831;hp=70a5a9d4aa93cc805c202b1529a57afac077c6c2;hpb=6e097c89af440da90b43ce90864394c4d0c843d5;p=pspp diff --git a/src/ui/gui/psppire-dialog-action.c b/src/ui/gui/psppire-dialog-action.c index 70a5a9d4aa..9eeed98d8d 100644 --- a/src/ui/gui/psppire-dialog-action.c +++ b/src/ui/gui/psppire-dialog-action.c @@ -22,6 +22,7 @@ #include "executor.h" #include "helper.h" #include "psppire-data-window.h" +#include "builder-wrapper.h" static void psppire_dialog_action_init (PsppireDialogAction *act); static void psppire_dialog_action_class_init (PsppireDialogActionClass *class); @@ -216,6 +217,14 @@ psppire_dialog_action_get_hash_table (PsppireDialogAction *act) return t; } +GtkBuilder * +psppire_dialog_action_get_xml (PsppireDialogAction *da) +{ + GHashTable *thing = psppire_dialog_action_get_hash_table (da); + GtkBuilder *xml = g_hash_table_lookup (thing, da); + return xml; +} + static void psppire_dialog_action_activate (PsppireDialogAction *act, GVariant *parameter) @@ -230,9 +239,25 @@ psppire_dialog_action_activate (PsppireDialogAction *act, GVariant *parameter) wl = g_slist_prepend (wl, act->dialog); g_object_set_data (G_OBJECT (act->toplevel), "widget-list", wl); - if (class->activate) - class->activate (act, parameter); + if (class->initial_activate) + { + GHashTable *thing = psppire_dialog_action_get_hash_table (act); + GtkBuilder *xml = g_hash_table_lookup (thing, act); + if (xml == NULL) + { + xml = class->initial_activate (act, parameter); + g_hash_table_insert (thing, act, xml); + } + } + if (class->activate) + { + GHashTable *thing = psppire_dialog_action_get_hash_table (act); + GtkBuilder *xml = g_hash_table_lookup (thing, act); + if (xml != NULL) + class->activate (act, parameter); + } + gtk_window_set_transient_for (GTK_WINDOW (act->dialog), GTK_WINDOW (act->toplevel)); @@ -285,8 +310,6 @@ psppire_dialog_action_class_init (PsppireDialogActionClass *class) class->generate_syntax = NULL; - class->activate = psppire_dialog_action_activate; - g_object_class_install_property (object_class, PROP_TOPLEVEL, toplevel_spec); @@ -322,11 +345,3 @@ psppire_dialog_action_set_refresh (PsppireDialogAction *pda, { g_signal_connect_swapped (pda->dialog, "refresh", G_CALLBACK (refresh), pda); } - - -void -psppire_dialog_action_set_activation (gpointer class, activation activate) -{ - PSPPIRE_DIALOG_ACTION_CLASS (class)->activate = (void (*)(PsppireDialogAction *, GVariant *)) activate; -} -