/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2010 Free Software Foundation, Inc.
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
#define _(msgid) gettext (msgid)
#define N_(msgid) msgid
+#include <libpspp/assertion.h>
#include <libpspp/message.h>
#include <libpspp/str.h>
#include <libpspp/msg-locator.h>
#include <gtk/gtk.h>
-#include <glade/glade.h>
#include <glib.h>
#include "helper.h"
static int error_cnt, warning_cnt, note_cnt;
-static GladeXML *message_xml;
-static GtkDialog *message_dialog;
+static GtkBuilder *message_xml;
+static GtkWidget *message_dialog;
void
message_dialog_init (struct source_stream *ss)
late_queue = g_queue_new ();
error_cnt = warning_cnt = note_cnt = 0;
msg_init (ss, enqueue_msg);
- message_xml = XML_NEW ("message-dialog.glade");
- message_dialog = GTK_DIALOG (get_widget_assert (message_xml,
- "message-dialog"));
+ message_xml = builder_new ("message-dialog.ui");
+ message_dialog = get_widget_assert (message_xml, "message-dialog");
+
+ GTK_WIDGET_SET_FLAGS (get_widget_assert (message_xml, "close-button"),
+ GTK_CAN_DEFAULT);
+
}
void
g_queue_free (early_queue);
dropped_messages = 0;
g_queue_free (late_queue);
- gtk_widget_destroy (GTK_WIDGET (message_dialog));
+ gtk_widget_destroy (message_dialog);
g_object_unref (message_xml);
}
switch (m->severity)
{
- case MSG_ERROR:
+ case MSG_S_ERROR:
switch (m->category)
{
- case MSG_SYNTAX:
+ case MSG_C_SYNTAX:
label = _("syntax error");
break;
- case MSG_DATA:
+ case MSG_C_DATA:
label = _("data file error");
break;
- case MSG_GENERAL:
+ case MSG_C_GENERAL:
default:
label = _("PSPP error");
break;
}
break;
- case MSG_WARNING:
+ case MSG_S_WARNING:
switch (m->category)
{
- case MSG_SYNTAX:
+ case MSG_C_SYNTAX:
label = _("syntax warning");
break;
- case MSG_DATA:
+ case MSG_C_DATA:
label = _("data file warning");
break;
- case MSG_GENERAL:
+ case MSG_C_GENERAL:
default:
label = _("PSPP warning");
break;
}
break;
- case MSG_NOTE:
+ case MSG_S_NOTE:
default:
switch (m->category)
{
- case MSG_SYNTAX:
+ case MSG_C_SYNTAX:
label = _("syntax information");
break;
- case MSG_DATA:
+ case MSG_C_DATA:
label = _("data file information");
break;
- case MSG_GENERAL:
+ case MSG_C_GENERAL:
default:
label = _("PSPP information");
break;
switch (m->severity)
{
- case MSG_ERROR:
+ case MSG_S_ERROR:
error_cnt++;
break;
- case MSG_WARNING:
+ case MSG_S_WARNING:
warning_cnt++;
break;
- case MSG_NOTE:
+ case MSG_S_NOTE:
note_cnt++;
break;
+ case MSG_N_SEVERITIES:
+ NOT_REACHED ();
}
if (g_queue_get_length (early_queue) < MAX_EARLY_MESSAGES)
}
}
-gboolean
+static gboolean
popup_messages (gpointer unused UNUSED)
{
GtkTextBuffer *text_buffer;
struct string msg = DS_EMPTY_INITIALIZER;
int message_cnt;
+ gdk_threads_enter ();
+
+ /* Set up the dialog. */
+ if (message_xml == NULL || message_dialog == NULL)
+ goto use_fallback;
+
/* 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;
+ if ( gdk_display_pointer_is_grabbed (gtk_widget_get_display (message_dialog)))
+ {
+ ds_destroy (&lead);
+ ds_destroy (&msg);
+ gdk_threads_leave ();
+ return TRUE;
+ }
/* Compose the lead-in. */
message_cnt = error_cnt + warning_cnt + note_cnt;
while (!g_queue_is_empty (late_queue))
format_message (g_queue_pop_head (late_queue), &msg);
- /* Set up the dialog. */
- if (message_xml == NULL || message_dialog == NULL)
- goto use_fallback;
-
text_buffer = gtk_text_buffer_new (NULL);
gtk_text_buffer_get_end_iter (text_buffer, &end);
gtk_text_buffer_insert (text_buffer, &end, ds_data (&msg), ds_length (&msg));
goto use_fallback;
gtk_text_view_set_buffer (text_view, text_buffer);
- gtk_dialog_run (message_dialog);
- gtk_widget_hide (GTK_WIDGET (message_dialog));
+ gtk_widget_grab_default (get_widget_assert (message_xml, "close-button"));
+ gtk_widget_grab_focus (get_widget_assert (message_xml, "close-button"));
+ gtk_dialog_run ( GTK_DIALOG (message_dialog));
+ gtk_widget_hide (message_dialog);
ds_destroy (&lead);
ds_destroy (&msg);
+ gdk_threads_leave ();
return FALSE;
use_fallback:
fputs (ds_cstr (&msg), stderr);
ds_destroy (&lead);
ds_destroy (&msg);
+ gdk_threads_leave ();
return FALSE;
}