X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmessage-dialog.c;h=ffdd491ee2d780bdb8ebdbe3e9edc4fa48e44816;hb=5d5b324c12dc799e6e4dc3230e93edaa7d0a0272;hp=e5b2756290ab0cc66533eb4d30d02ec535d006da;hpb=a55b554c0479168ef3e4879fe0fa517f7ca4def7;p=pspp-builds.git diff --git a/src/ui/gui/message-dialog.c b/src/ui/gui/message-dialog.c index e5b27562..ffdd491e 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,7 +23,12 @@ #include #include +#include +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + #include +#include #include "message-dialog.h" #include "progname.h" @@ -35,70 +39,66 @@ #include "helper.h" -extern GladeXML *xml; - -#define _(A) A - -static void handle_msg(const struct msg *); -static void enqueue_msg(const struct msg *m); +static void enqueue_msg (const struct msg *m); static GQueue *message_queue; + void -message_dialog_init (void) +message_dialog_init (struct source_stream *ss) { - message_queue = g_queue_new(); - msg_init(enqueue_msg); + message_queue = g_queue_new (); + msg_init (ss, enqueue_msg); } - void message_dialog_done (void) { - msg_done(); - g_queue_free(message_queue); + msg_done (); + g_queue_free (message_queue); } -static gboolean -dequeue_message(gpointer data) +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. + a modal dialog box, will cause an impossible situation. So don't pop it up just yet. - */ - if ( gdk_pointer_is_grabbed()) + */ + if ( gdk_pointer_is_grabbed ()) return TRUE; - m = g_queue_pop_tail(message_queue); + m = g_queue_pop_tail (message_queue); - if ( m ) + if ( m ) { - handle_msg(m); - msg_destroy(m); + popup_message (m); + msg_destroy (m); return TRUE; } - + return FALSE; } static void -enqueue_msg(const struct msg *msg) +enqueue_msg (const struct msg *msg) { - struct msg *m = msg_dup(msg); + struct msg *m = msg_dup (msg); - g_queue_push_head(message_queue, m); + g_queue_push_head (message_queue, m); - g_idle_add(dequeue_message, 0); + g_idle_add (dequeue_message, 0); } -static void -handle_msg(const struct msg *m) + +void +popup_message (const struct msg *m) { - GtkWindow *parent; GtkWidget *dialog; + gchar *location = NULL; gint message_type; const char *msg; @@ -116,8 +116,8 @@ handle_msg(const struct msg *m) message_type = GTK_MESSAGE_INFO; break; }; - - switch (m->category) + + switch (m->category) { case MSG_SYNTAX: msg = _("Script Error"); @@ -132,32 +132,33 @@ handle_msg(const struct msg *m) 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), - "%s", m->text); - - gtk_window_set_transient_for(GTK_WINDOW(dialog), parent); + if ( m->where.line_number != -1) + { + location = g_strdup_printf (_("%s (line %d)"), + m->where.file_name ? m->where.file_name : "", + m->where.line_number); + } + else + { + location = g_strdup_printf (_("%s"), + m->where.file_name ? m->where.file_name : ""); } - gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + _("%s %s"), + location, + m->text); + g_free (location); - gtk_widget_destroy (dialog); -} + gtk_window_set_keep_above (GTK_WINDOW (dialog), TRUE); -/* 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_dialog_run (GTK_DIALOG (dialog)); + + gtk_widget_destroy (dialog); }