X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-dialog.c;h=7bdcaaecf1330a3a4bb449b614b65911f15a4f47;hb=50652d204ce6aae87f6a165a499cf5d460f1f557;hp=4bcb5cc92550e2901742ea51840a6c04e2899c9d;hpb=9529d1a99cc7c288d94e5bbdb9f4263bd524da6c;p=pspp diff --git a/src/ui/gui/psppire-dialog.c b/src/ui/gui/psppire-dialog.c index 4bcb5cc925..7bdcaaecf1 100644 --- a/src/ui/gui/psppire-dialog.c +++ b/src/ui/gui/psppire-dialog.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2007 Free Software Foundation + Copyright (C) 2007, 2010, 2011, 2012 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,20 +18,23 @@ #include #include -#include -#include #include "psppire-dialog.h" #include "psppire-buttonbox.h" #include "psppire-selector.h" -#include "psppire-conf.h" #include +#include "builder-wrapper.h" +#include "help-menu.h" + +#include "psppire-window-base.h" static void psppire_dialog_class_init (PsppireDialogClass *); static void psppire_dialog_init (PsppireDialog *); enum {DIALOG_REFRESH, + RESPONSE, VALIDITY_CHANGED, + DIALOG_HELP, n_SIGNALS}; static guint signals [n_SIGNALS]; @@ -67,7 +70,7 @@ psppire_dialog_get_type (void) NULL }; - dialog_type = g_type_register_static (GTK_TYPE_WINDOW, + dialog_type = g_type_register_static (PSPPIRE_TYPE_WINDOW_BASE, "PsppireDialog", &dialog_info, 0); g_type_add_interface_static (dialog_type, @@ -224,8 +227,6 @@ psppire_dialog_class_init (PsppireDialogClass *class) FALSE, G_PARAM_CONSTRUCT_ONLY |G_PARAM_READWRITE); - - object_class->set_property = psppire_dialog_set_property; object_class->get_property = psppire_dialog_get_property; @@ -238,8 +239,6 @@ psppire_dialog_class_init (PsppireDialogClass *class) PROP_SLIDING, sliding_spec); - - signals [DIALOG_REFRESH] = g_signal_new ("refresh", G_TYPE_FROM_CLASS (class), @@ -251,6 +250,18 @@ psppire_dialog_class_init (PsppireDialogClass *class) 0); + signals [RESPONSE] = + g_signal_new ("response", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + + signals [VALIDITY_CHANGED] = g_signal_new ("validity-changed", G_TYPE_FROM_CLASS (class), @@ -263,7 +274,21 @@ psppire_dialog_class_init (PsppireDialogClass *class) G_TYPE_BOOLEAN); + signals [DIALOG_HELP] = + g_signal_new ("help", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, + 1, + G_TYPE_STRING); + + object_class->finalize = psppire_dialog_finalize; + + parent_class = g_type_class_peek_parent (class); } @@ -292,39 +317,6 @@ delete_event_callback (GtkWidget *w, GdkEvent *e, gpointer data) } -static gboolean -configure_event_callback (GtkDialog *dialog, - GdkEvent *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) { @@ -346,19 +338,10 @@ psppire_dialog_init (PsppireDialog *dialog) 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); + g_object_set (dialog, "icon-name", "pspp", NULL); } @@ -396,8 +379,6 @@ connect_notify_signal (GtkWidget *w, gpointer data) if ( PSPPIRE_IS_BUTTONBOX (w)) return; - - if ( GTK_IS_CONTAINER (w)) { gtk_container_foreach (GTK_CONTAINER (w), @@ -519,6 +500,8 @@ psppire_dialog_run (PsppireDialog *dialog) g_main_loop_unref (dialog->loop); + g_signal_emit (dialog, signals [RESPONSE], 0, dialog->response); + return dialog->response; } @@ -530,6 +513,16 @@ psppire_dialog_reload (PsppireDialog *dialog) } +void +psppire_dialog_help (PsppireDialog *dialog) +{ + char *name = NULL; + g_object_get (dialog, "name", &name, NULL); + + online_help (name); + + g_signal_emit (dialog, signals [DIALOG_HELP], 0, name); +} GType