diff options
author | Tomeu <tomeu@bicho.(none)> | 2007-04-03 18:17:30 (GMT) |
---|---|---|
committer | Tomeu <tomeu@bicho.(none)> | 2007-04-03 18:17:30 (GMT) |
commit | 164df7bf8518526c51e063d333a364934096652b (patch) | |
tree | c6c80aa77804bcd3fa2a9d4d5bc3920f624d3613 /lib/src/sugar-browser.cpp | |
parent | ba08492778261828e4411e0b8d1e4a47f21dbe52 (diff) |
Add XSetErrorHandler for not crashing on X errors caused by Gecko plugins.
Diffstat (limited to 'lib/src/sugar-browser.cpp')
-rw-r--r-- | lib/src/sugar-browser.cpp | 31 |
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; |