X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmessage-dialog.c;h=227d3528de221ddc6a30f487d50722797e78c400;hb=75fe94ea24fd7b12a0d99b8f36a79d8423e668d4;hp=f1a18baf5bf5caf7080f7f2cb6e4607d0c34c5ff;hpb=6fdf428d72c5695c1bc21a7158f75a542d96df8b;p=pspp-builds.git diff --git a/src/ui/gui/message-dialog.c b/src/ui/gui/message-dialog.c index f1a18baf..227d3528 100644 --- a/src/ui/gui/message-dialog.c +++ b/src/ui/gui/message-dialog.c @@ -1,7 +1,6 @@ -/* +/* PSPPIRE --- A Graphical User Interface for PSPP Copyright (C) 2004,2005 Free Software Foundation - Written by John Darrington 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 @@ -16,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. + 02110-1301, USA. */ @@ -24,33 +23,86 @@ #include #include +#include +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + #include +#include #include "message-dialog.h" #include "progname.h" #include #include +#include #include "helper.h" -extern GladeXML *xml; +static void enqueue_msg (const struct msg *m); + + +static GQueue *message_queue; + -#define _(A) A +void +message_dialog_init (struct source_stream *ss) +{ + message_queue = g_queue_new (); + msg_init (ss, enqueue_msg); +} + +void +message_dialog_done (void) +{ + msg_done (); + g_queue_free (message_queue); +} + +static gboolean +dequeue_message (gpointer data) +{ + struct msg * m ; + /* If a pointer grab is in effect, then the combination of that, and + a modal dialog box, will cause an impossible situation. + So don't pop it up just yet. + */ + if ( gdk_pointer_is_grabbed ()) + return TRUE; -void -vmsg(int klass, const char *fmt, va_list args) + m = g_queue_pop_tail (message_queue); + + if ( m ) + { + popup_message (m); + msg_destroy (m); + return TRUE; + } + + return FALSE; +} + +static void +enqueue_msg (const struct msg *msg) +{ + struct msg *m = msg_dup (msg); + + g_queue_push_head (message_queue, m); + + g_idle_add (dequeue_message, 0); +} + + +void +popup_message (const struct msg *m) { - gchar *msg = 0; - gchar *text = g_strdup_vprintf (fmt, args); + GtkWidget *dialog; - GtkWindow *parent ; - GtkWidget *dialog ; - gint message_type; + const char *msg; - switch (msg_class_to_severity (klass)) + switch (m->severity) { case MSG_ERROR: message_type = GTK_MESSAGE_ERROR; @@ -63,84 +115,39 @@ vmsg(int klass, const char *fmt, va_list args) message_type = GTK_MESSAGE_INFO; break; }; - - switch (msg_class_to_category (klass)) + + switch (m->category) { case MSG_SYNTAX: - msg = g_strdup(_("Script Error")); + msg = _("Script Error"); break; case MSG_DATA: - msg = g_strdup(_("Data File Error")); + msg = _("Data File Error"); break; case MSG_GENERAL: default: - msg = g_strdup(_("PSPP Error")); + msg = _("PSPP Error"); break; }; - - parent = GTK_WINDOW(get_widget_assert(xml, "data_editor")); - dialog = gtk_message_dialog_new(parent, + dialog = gtk_message_dialog_new ( NULL, GTK_DIALOG_MODAL, message_type, GTK_BUTTONS_CLOSE, msg); - - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), text); - - g_free(text); - g_free(msg); - - gtk_window_set_transient_for(GTK_WINDOW(dialog), parent); - - gtk_dialog_run(GTK_DIALOG(dialog)); - - gtk_widget_destroy (dialog); - -} - - -void -msg(enum msg_class klass, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vmsg(klass, fmt, ap); - va_end(ap); -} - -void -msg_emit (const struct msg *m) -{ - vmsg (msg_class_from_category_and_severity (m->category, m->severity), - "%s", m->text); -} + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + _("%s (line %d) %s"), + m->where.file_name, + m->where.line_number, + m->text); + gtk_window_set_keep_above (GTK_WINDOW (dialog), TRUE); -void -msg_assert_fail(const char *expr, const char *file, int line) -{ - msg(ME, "Assertion failed: %s:%d; (%s)\n",file,line,expr); -} - -/* Writes MESSAGE formatted with printf, to stderr, if the - verbosity level is at least LEVEL. */ -void -verbose_msg (int level, const char *format, ...) -{ - /* Do nothing for now. */ -} + gtk_dialog_run (GTK_DIALOG (dialog)); -/* FIXME: This is a stub . - * A temporary workaround until getl.c is rearranged - */ -void -msg_location (struct msg_locator *loc) -{ - loc->file_name = 0; - loc->line_number = -1; + gtk_widget_destroy (dialog); }