diff options
author | Owen Taylor <otaylor@redhat.com> | 1999-02-21 19:25:53 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1999-02-21 19:25:53 +0000 |
commit | 295e763b4da13726b7beb8e9c905a5af30b0e251 (patch) | |
tree | 5fe997b4b1782ab486fc747befca6a2d6caa69c7 /gdk/gdk.c | |
parent | e8cfe9062fff69574f41ad9a82688f140dcf2eda (diff) | |
download | gtk+-295e763b4da13726b7beb8e9c905a5af30b0e251.tar.gz |
removed debugging statements about embedded XID's. They could have been
Sun Feb 21 14:21:46 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwindow.c: removed debugging statements
about embedded XID's. They could have been
moved to the new PLUGSOCKET debug key, but they weren't
really useful anyways.
* gdk/gdk.h: Added gdk_error_trap_push/pop to provide
a clean interface to the gdk_error_code functionality
of trapping X errors.
* gtk/gtkplug.c gtk/gtksocket.c: Add error
traps around accesses to foreign windows.
Diffstat (limited to 'gdk/gdk.c')
-rw-r--r-- | gdk/gdk.c | 84 |
1 files changed, 82 insertions, 2 deletions
@@ -47,6 +47,7 @@ typedef struct _GdkPredicate GdkPredicate; +typedef struct _GdkErrorTrap GdkErrorTrap; struct _GdkPredicate { @@ -54,6 +55,12 @@ struct _GdkPredicate gpointer data; }; +struct _GdkErrorTrap +{ + gint error_warnings; + gint error_code; +}; + /* * Private function declarations */ @@ -97,9 +104,11 @@ static struct timeval *timerp; /* The actual timer passed to "select" static guint32 timer_val; /* The timeout length as specified by * the user in milliseconds. */ - static gint autorepeat; +static GSList *gdk_error_traps = NULL; /* List of error traps */ +static GSList *gdk_error_trap_free_list = NULL; /* Free list */ + #ifdef G_ENABLE_DEBUG static const GDebugKey gdk_debug_keys[] = { {"events", GDK_DEBUG_EVENTS}, @@ -1049,11 +1058,82 @@ gdk_x_io_error (Display *display) } gchar * -gdk_get_display(void) +gdk_get_display (void) { return (gchar *)XDisplayName (gdk_display_name); } +/************************************************************* + * gdk_error_trap_push: + * Push an error trap. X errors will be trapped until + * the corresponding gdk_error_pop(), which will return + * the error code, if any. + * arguments: + * + * results: + *************************************************************/ + +void +gdk_error_trap_push (void) +{ + GSList *node; + GdkErrorTrap *trap; + + if (gdk_error_trap_free_list) + { + node = gdk_error_trap_free_list; + gdk_error_trap_free_list = gdk_error_trap_free_list->next; + } + else + { + node = g_slist_alloc(); + node->data = g_new (GdkErrorTrap, 1); + } + + node->next = gdk_error_traps; + gdk_error_traps = node; + + trap = node->data; + trap->error_code = gdk_error_code; + trap->error_warnings = gdk_error_warnings; + + gdk_error_code = 0; + gdk_error_warnings = 0; +} + +/************************************************************* + * gdk_error_trap_pop: + * Pop an error trap added with gdk_error_push() + * arguments: + * + * results: + * 0, if no error occured, otherwise the error code. + *************************************************************/ + +gint +gdk_error_trap_pop (void) +{ + GSList *node; + GdkErrorTrap *trap; + gint result; + + g_return_val_if_fail (gdk_error_traps != NULL, 0); + + node = gdk_error_traps; + gdk_error_traps = gdk_error_traps->next; + + node->next = gdk_error_trap_free_list; + gdk_error_trap_free_list = node; + + result = gdk_error_code; + + trap = node->data; + gdk_error_code = trap->error_code; + gdk_error_warnings = trap->error_warnings; + + return result; +} + gint gdk_send_xevent (Window window, gboolean propagate, glong event_mask, XEvent *event_send) |