summaryrefslogtreecommitdiff
path: root/gdk/gdk.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1999-02-21 19:25:53 +0000
committerOwen Taylor <otaylor@src.gnome.org>1999-02-21 19:25:53 +0000
commit295e763b4da13726b7beb8e9c905a5af30b0e251 (patch)
tree5fe997b4b1782ab486fc747befca6a2d6caa69c7 /gdk/gdk.c
parente8cfe9062fff69574f41ad9a82688f140dcf2eda (diff)
downloadgtk+-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.c84
1 files changed, 82 insertions, 2 deletions
diff --git a/gdk/gdk.c b/gdk/gdk.c
index ea2a65aa24..f4d5f7b808 100644
--- a/gdk/gdk.c
+++ b/gdk/gdk.c
@@ -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)