Merge commit 'origin/stable'
[pspp-builds.git] / src / ui / gui / message-dialog.c
index 281ef527d55f357ab3897743c884a58a16e76cfd..7513295323988677b38c26807cff73b96d10b04a 100644 (file)
@@ -31,7 +31,6 @@
 
 
 #include <gtk/gtk.h>
-#include <glade/glade.h>
 #include <glib.h>
 
 #include "helper.h"
@@ -49,7 +48,7 @@ static GQueue *late_queue;
 
 static int error_cnt, warning_cnt, note_cnt;
 
-static GladeXML *message_xml;
+static GtkBuilder *message_xml;
 static GtkWidget *message_dialog;
 
 void
@@ -60,8 +59,12 @@ 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_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
@@ -193,6 +196,8 @@ popup_messages (gpointer unused UNUSED)
   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;
@@ -205,6 +210,7 @@ popup_messages (gpointer unused UNUSED)
     {
       ds_destroy (&lead);
       ds_destroy (&msg);
+      gdk_threads_leave ();
       return TRUE;
     }
 
@@ -260,12 +266,15 @@ popup_messages (gpointer unused UNUSED)
     goto use_fallback;
   gtk_text_view_set_buffer (text_view, text_buffer);
 
+  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:
@@ -274,6 +283,7 @@ use_fallback:
   fputs (ds_cstr (&msg), stderr);
   ds_destroy (&lead);
   ds_destroy (&msg);
+  gdk_threads_leave ();
   return FALSE;
 }