X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog.c;h=854380036d6faf41fac477e1c12b6e9fea9a68b4;hb=df63b7b8aec3bd284ba2c4e62f1fc30924fe2c5b;hp=b0d8a7a34f22a51d7a5e38cdc44da7ec23a60461;hpb=c65449a628d13f4683e7dc7125874608c7152017;p=pspp diff --git a/src/ui/gui/psppire-dialog.c b/src/ui/gui/psppire-dialog.c index b0d8a7a34f..854380036d 100644 --- a/src/ui/gui/psppire-dialog.c +++ b/src/ui/gui/psppire-dialog.c @@ -19,9 +19,12 @@ #include #include +#include #include "psppire-dialog.h" #include "psppire-buttonbox.h" #include "psppire-selector.h" +#include "psppire-conf.h" +#include static void psppire_dialog_class_init (PsppireDialogClass *); static void psppire_dialog_init (PsppireDialog *); @@ -34,6 +37,9 @@ enum {DIALOG_REFRESH, static guint signals [n_SIGNALS]; +static void psppire_dialog_buildable_init (GtkBuildableIface *iface); + + GType psppire_dialog_get_type (void) { @@ -54,8 +60,20 @@ psppire_dialog_get_type (void) (GInstanceInitFunc) psppire_dialog_init, }; + static const GInterfaceInfo buildable_info = + { + (GInterfaceInitFunc) psppire_dialog_buildable_init, + NULL, + NULL + }; + dialog_type = g_type_register_static (GTK_TYPE_WINDOW, "PsppireDialog", &dialog_info, 0); + + g_type_add_interface_static (dialog_type, + GTK_TYPE_BUILDABLE, + &buildable_info); + } return dialog_type; @@ -247,6 +265,39 @@ delete_event_callback (GtkWidget *w, GdkEvent *e, gpointer data) } +static gboolean +configure_event_callback (GtkDialog *dialog, + GdkEventConfigure *event, gpointer data) +{ + gchar *base = NULL; + + PsppireConf *conf = psppire_conf_new (); + + if ( ! GTK_WIDGET_MAPPED (dialog)) + return FALSE; + + g_object_get (dialog, "name", &base, NULL); + + psppire_conf_save_window_geometry (conf, base, event); + + return FALSE; +} + + +static void +on_realize (GtkWindow *dialog, gpointer data) +{ + PsppireConf *conf = psppire_conf_new (); + + const gchar *base = NULL; + + g_object_get (dialog, "name", &base, NULL); + + psppire_conf_set_window_geometry (conf, base, dialog); +} + + + static void psppire_dialog_init (PsppireDialog *dialog) { @@ -265,13 +316,24 @@ psppire_dialog_init (PsppireDialog *dialog) g_value_unset (&value); - g_signal_connect (G_OBJECT (dialog), "delete-event", + g_signal_connect (dialog, "delete-event", G_CALLBACK (delete_event_callback), dialog); + g_signal_connect (dialog, "configure-event", + G_CALLBACK (configure_event_callback), + dialog); + + g_signal_connect (dialog, "realize", + G_CALLBACK (on_realize), + dialog); + + gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_DIALOG); + g_object_set (dialog, "icon-name", "psppicon", NULL); + gtk_widget_show_all (dialog->box); } @@ -281,7 +343,8 @@ psppire_dialog_new (void) { PsppireDialog *dialog ; - dialog = g_object_new (psppire_dialog_get_type (), NULL); + dialog = g_object_new (psppire_dialog_get_type (), + NULL); return GTK_WIDGET (dialog) ; } @@ -373,6 +436,8 @@ connect_notify_signal (GtkWidget *w, gpointer data) GtkTreeViewColumn *col; GtkTreeModel *model = gtk_tree_view_get_model (tv); + if ( model) + { g_signal_connect_swapped (model, "row-changed", G_CALLBACK (psppire_dialog_notify_change), dialog); @@ -384,6 +449,7 @@ connect_notify_signal (GtkWidget *w, gpointer data) g_signal_connect_swapped (model, "row-inserted", G_CALLBACK (psppire_dialog_notify_change), dialog); + } g_signal_connect_swapped (selection, "changed", G_CALLBACK (psppire_dialog_notify_change), @@ -425,6 +491,8 @@ psppire_dialog_run (PsppireDialog *dialog) g_main_loop_run (dialog->loop); + g_main_loop_unref (dialog->loop); + return dialog->response; } @@ -470,3 +538,26 @@ psppire_dialog_set_valid_predicate (PsppireDialog *dialog, } + + + +static GObject * +get_internal_child (GtkBuildable *buildable, + GtkBuilder *builder, + const gchar *childname) +{ + PsppireDialog *dialog = PSPPIRE_DIALOG (buildable); + + if ( 0 == strcmp (childname, "hbox")) + return G_OBJECT (dialog->box); + + return NULL; +} + + + +static void +psppire_dialog_buildable_init (GtkBuildableIface *iface) +{ + iface->get_internal_child = get_internal_child; +}