Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorTomeu <tomeu@bicho.(none)>2007-04-03 18:17:30 (GMT)
committer Tomeu <tomeu@bicho.(none)>2007-04-03 18:17:30 (GMT)
commit164df7bf8518526c51e063d333a364934096652b (patch)
treec6c80aa77804bcd3fa2a9d4d5bc3920f624d3613 /lib
parentba08492778261828e4411e0b8d1e4a47f21dbe52 (diff)
Add XSetErrorHandler for not crashing on X errors caused by Gecko plugins.
Diffstat (limited to 'lib')
-rw-r--r--lib/src/sugar-browser.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/src/sugar-browser.cpp b/lib/src/sugar-browser.cpp
index b8b69dc..ac0c419 100644
--- a/lib/src/sugar-browser.cpp
+++ b/lib/src/sugar-browser.cpp
@@ -24,6 +24,7 @@
#include "GeckoContentHandler.h"
#include "GeckoDownload.h"
+#include <gdk/gdkx.h>
#include <gtkmozembed_internal.h>
#include <nsCOMPtr.h>
#include <nsIPrefService.h>
@@ -89,6 +90,34 @@ static const nsModuleComponentInfo sSugarComponents[] = {
}
};
+int (*old_handler) (Display *, XErrorEvent *);
+
+static int
+error_handler (Display *d, XErrorEvent *e)
+{
+ gchar buf[64];
+ gchar *msg;
+
+ XGetErrorText (d, e->error_code, buf, 63);
+
+ msg =
+ g_strdup_printf ("The program '%s' received an X Window System error.\n"
+ "This probably reflects a bug in the program.\n"
+ "The error was '%s'.\n"
+ " (Details: serial %ld error_code %d request_code %d minor_code %d)\n",
+ g_get_prgname (),
+ buf,
+ e->serial,
+ e->error_code,
+ e->request_code,
+ e->minor_code);
+
+ g_error ("%s", msg);
+
+ return 0;
+ /*return (*old_handler)(d, e);*/
+}
+
static void
setup_plugin_path ()
{
@@ -113,6 +142,8 @@ sugar_browser_startup(const char *profile_path, const char *profile_name)
gtk_moz_embed_set_profile_path(profile_path, profile_name);
+ old_handler = XSetErrorHandler (error_handler);
+
gtk_moz_embed_push_startup();
nsCOMPtr<nsIPrefService> prefService;