diff options
author | Havoc Pennington <hp@pobox.com> | 2001-09-01 05:53:07 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2001-09-01 05:53:07 +0000 |
commit | 2a0a5dfdf806f79bdcf8de4bf06109ef8c4eb849 (patch) | |
tree | 5c791b1aba204dc7da4110ea8eba1650e6e91884 | |
parent | 501dd26713773576dc7f0b334ac4121477ff64bc (diff) | |
download | metacity-2a0a5dfdf806f79bdcf8de4bf06109ef8c4eb849.tar.gz |
clean up the code, and replace GDK X error handler with one that chains up
2001-09-01 Havoc Pennington <hp@pobox.com>
* src/errors.c: clean up the code, and replace GDK X error handler
with one that chains up to GDK but first logs the error to logfile.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/errors.c | 112 | ||||
-rw-r--r-- | src/main.c | 8 |
3 files changed, 33 insertions, 92 deletions
@@ -1,3 +1,8 @@ +2001-09-01 Havoc Pennington <hp@pobox.com> + + * src/errors.c: clean up the code, and replace GDK X error handler + with one that chains up to GDK but first logs the error to logfile. + 2001-08-31 Havoc Pennington <hp@pobox.com> * src/tabpopup.c (meta_ui_tab_popup_new): fix args to diff --git a/src/errors.c b/src/errors.c index b3dad835..10fdc111 100644 --- a/src/errors.c +++ b/src/errors.c @@ -22,14 +22,13 @@ #include "errors.h" #include <errno.h> +#include <stdlib.h> #include <gdk/gdk.h> -typedef struct _ErrorTrap ErrorTrap; +static int (* saved_gdk_error_handler) (Display *display, + XErrorEvent *error); -struct _ErrorTrap -{ - int error_code; -}; +static int (* saved_gdk_io_error_handler) (Display *display); static int x_error_handler (Display *display, XErrorEvent *error); @@ -38,104 +37,44 @@ static int x_io_error_handler (Display *display); void meta_errors_init (void) { - XSetErrorHandler (x_error_handler); - XSetIOErrorHandler (x_io_error_handler); + saved_gdk_error_handler = XSetErrorHandler (x_error_handler); + saved_gdk_io_error_handler = XSetIOErrorHandler (x_io_error_handler); } void meta_error_trap_push (MetaDisplay *display) { - ErrorTrap *et; - gdk_error_trap_push (); - return; - - /* below here is old method */ - et = g_new (ErrorTrap, 1); - - et->error_code = Success; - display->error_traps = g_slist_prepend (display->error_traps, et); } int meta_error_trap_pop (MetaDisplay *display) { - int result; - ErrorTrap *et; - GSList *next; - + /* just use GDK trap */ XSync (display->xdisplay, False); - return gdk_error_trap_pop (); - /* below here is old method */ - - if (display->error_traps == NULL) - meta_bug ("No error trap to pop\n"); - - XSync (display->xdisplay, False); - - et = display->error_traps->data; - - result = et->error_code; - - next = display->error_traps->next; - g_slist_free_1 (display->error_traps); - display->error_traps = next; - - g_free (et); - - if (result != Success) - { - gchar buf[64]; - - XGetErrorText (display->xdisplay, result, buf, 63); - meta_verbose ("Popping error code %d (%s)\n", - result, buf); - } - - return result; + return gdk_error_trap_pop (); } - static int x_error_handler (Display *xdisplay, XErrorEvent *error) { - if (error->error_code) - { - MetaDisplay *display; - - display = meta_display_for_x_display (xdisplay); - - if (display == NULL) - meta_bug ("Error received for unknown display?\n"); - - if (display->error_traps == NULL) - { - gchar buf[64]; - - XGetErrorText (xdisplay, error->error_code, buf, 63); - - meta_bug ("Received an X Window System error without handling it.\n" - "The error was '%s'.\n" - " (Details: serial %ld error_code %d request_code %d minor_code %d)\n", - buf, - error->serial, - error->error_code, - error->request_code, - error->minor_code); - } - else - { - ErrorTrap *et; - - et = display->error_traps->data; - - et->error_code = error->error_code; - } - } + int retval; + gchar buf[64]; - return 0; + XGetErrorText (xdisplay, error->error_code, buf, 63); + + meta_verbose ("X error: %s serial %ld error_code %d request_code %d minor_code %d)\n", + buf, + error->serial, + error->error_code, + error->request_code, + error->minor_code); + + retval = saved_gdk_error_handler (xdisplay, error); + + return retval; } static int @@ -162,11 +101,8 @@ x_io_error_handler (Display *xdisplay) display->name); } - meta_display_close (display); + /* Xlib would force an exit anyhow */ + exit (1); - /* I believe Xlib will force an exit after we return, which - * seems sort of broken to me, but if true we should probably just - * exit for ourselves. But for now I'm not doing it. - */ return 0; } @@ -153,10 +153,7 @@ main (int argc, char **argv) { putenv (display_name); /* DO NOT FREE display_name, putenv() sucks */ - } - - /* gtk_init() below overrides this, so it can be removed */ - meta_errors_init (); + } g_type_init (); @@ -164,6 +161,9 @@ main (int argc, char **argv) meta_session_init (client_id); /* client_id == NULL is fine */ meta_ui_init (&argc, &argv); + + /* must be after UI init so we can override GDK handlers */ + meta_errors_init (); if (!meta_display_open (NULL)) meta_exit (META_EXIT_ERROR); |