2dfd6ad
--- gnome-panel-2.14.2/gnome-panel/panel-applet-frame.c.xio-error	2006-03-06 15:19:20.000000000 -0500
2dfd6ad
+++ gnome-panel-2.14.2/gnome-panel/panel-applet-frame.c	2006-07-26 11:01:06.000000000 -0400
2dfd6ad
@@ -31,6 +31,8 @@
2dfd6ad
 #include <gdk/gdk.h>
2dfd6ad
 #include <gdk/gdkx.h>
2dfd6ad
 
2dfd6ad
+#include <X11/Xlib.h>
2dfd6ad
+
2dfd6ad
 #include "panel-applet-frame.h"
2dfd6ad
 #include "panel-profile.h"
2dfd6ad
 #include "panel-util.h"
2dfd6ad
@@ -105,6 +107,10 @@ static void panel_applet_frame_activated
2dfd6ad
 					  CORBA_Environment *ev,
2dfd6ad
 					  gpointer          *data);
2dfd6ad
 
2dfd6ad
+static int (* panel_applet_frame_old_xio_error_handler) (Display *);
2dfd6ad
+static int panel_applet_frame_xio_error_handler (Display *display);
2dfd6ad
+static gboolean panel_applet_frame_display_is_dead = FALSE;
2dfd6ad
+
2dfd6ad
 void
2dfd6ad
 panel_applet_frame_sync_menu_state (PanelAppletFrame *frame)
2dfd6ad
 {
2dfd6ad
@@ -943,6 +949,9 @@ panel_applet_frame_cnx_broken (ORBitConn
2dfd6ad
 
2dfd6ad
 	g_return_if_fail (PANEL_IS_APPLET_FRAME (frame));
2dfd6ad
 
2dfd6ad
+	if (panel_applet_frame_display_is_dead)
2dfd6ad
+		return;
2dfd6ad
+
2dfd6ad
 	screen = gtk_widget_get_screen (GTK_WIDGET (frame));
2dfd6ad
 
2dfd6ad
 	if (frame->priv->iid)
2dfd6ad
@@ -1236,6 +1245,17 @@ panel_applet_frame_event_listener (Bonob
2dfd6ad
 		panel_applet_frame_set_size_hints_from_any (frame, any);
2dfd6ad
 }
2dfd6ad
 
2dfd6ad
+static int
2dfd6ad
+panel_applet_frame_xio_error_handler (Display *display)
2dfd6ad
+{
2dfd6ad
+    panel_applet_frame_display_is_dead = TRUE;
2dfd6ad
+
2dfd6ad
+    if (panel_applet_frame_old_xio_error_handler)
2dfd6ad
+	    return panel_applet_frame_old_xio_error_handler (display);
2dfd6ad
+
2dfd6ad
+    return 0;
2dfd6ad
+}
2dfd6ad
+
2dfd6ad
 static void
2dfd6ad
 panel_applet_frame_activated (Bonobo_Unknown     object,
2dfd6ad
 			      CORBA_Environment *ev,
bf84630
@@ -1373,6 +1393,9 @@ panel_applet_frame_activated (Bonobo_Unk
2dfd6ad
 	ORBit_small_listen_for_broken (object,
2dfd6ad
 				       G_CALLBACK (panel_applet_frame_cnx_broken),
2dfd6ad
 				       frame);
bf84630
+	if (!panel_applet_frame_old_xio_error_handler) 
bf84630
+         panel_applet_frame_old_xio_error_handler = 
2dfd6ad
+           XSetIOErrorHandler (panel_applet_frame_xio_error_handler);
2dfd6ad
 
2dfd6ad
 	gtk_container_add (GTK_CONTAINER (frame), widget);
2dfd6ad