summaryrefslogtreecommitdiff
path: root/src/core/errors.c
diff options
context:
space:
mode:
authormonsta <[email protected]>2016-10-15 15:39:12 +0300
committermonsta <[email protected]>2016-10-15 15:39:12 +0300
commit40e26ed6d0e9ef84522ad0723f630bd7d796beec (patch)
tree67374984e9b7d2c60525976a008889775f7de4f3 /src/core/errors.c
parent3b69fd200912e27ce64caf3bf5d4338aab73177b (diff)
downloadmarco-40e26ed6d0e9ef84522ad0723f630bd7d796beec.tar.bz2
marco-40e26ed6d0e9ef84522ad0723f630bd7d796beec.tar.xz
move to GTK+3 (>= 3.14), drop GTK+2 code and --with-gtk build option
Diffstat (limited to 'src/core/errors.c')
-rw-r--r--src/core/errors.c264
1 files changed, 0 insertions, 264 deletions
diff --git a/src/core/errors.c b/src/core/errors.c
index c2cf82d0..19d2e015 100644
--- a/src/core/errors.c
+++ b/src/core/errors.c
@@ -30,23 +30,6 @@
#include <gdk/gdk.h>
#include <gtk/gtk.h>
-#if !GTK_CHECK_VERSION (3, 0, 0)
-static int x_error_handler (Display *display,
- XErrorEvent *error);
-static int x_io_error_handler (Display *display);
-#endif
-
-void
-meta_errors_init (void)
-{
-#if !GTK_CHECK_VERSION (3, 0, 0)
- XSetErrorHandler (x_error_handler);
- XSetIOErrorHandler (x_io_error_handler);
-#endif
-}
-
-#if GTK_CHECK_VERSION (3, 0, 0)
-
void
meta_error_trap_push (MetaDisplay *display)
{
@@ -73,250 +56,3 @@ meta_error_trap_pop_with_return (MetaDisplay *display,
return gdk_error_trap_pop ();
}
-#else
-
-typedef struct ForeignDisplay ForeignDisplay;
-
-struct ForeignDisplay
-{
- Display *dpy;
- ErrorHandler handler;
- gpointer data;
- ForeignDisplay *next;
-};
-
-static ForeignDisplay *foreign_displays;
-
-void
-meta_errors_register_foreign_display (Display *foreign_dpy,
- ErrorHandler handler,
- gpointer data)
-{
- ForeignDisplay *info = g_new0 (ForeignDisplay, 1);
- info->dpy = foreign_dpy;
- info->handler = handler;
- info->data = data;
- info->next = foreign_displays;
- foreign_displays = info;
-}
-
-static void
-meta_error_trap_push_internal (MetaDisplay *display,
- gboolean need_sync)
-{
- /* GDK resets the error handler on each push */
- int (* old_error_handler) (Display *,
- XErrorEvent *);
-
- if (need_sync)
- {
- XSync (display->xdisplay, False);
- }
-
- gdk_error_trap_push ();
-
- /* old_error_handler will just be equal to x_error_handler
- * for nested traps
- */
- old_error_handler = XSetErrorHandler (x_error_handler);
-
- /* Replace GDK handler, but save it so we can chain up */
- if (display->error_trap_handler == NULL)
- {
- g_assert (display->error_traps == 0);
- display->error_trap_handler = old_error_handler;
- g_assert (display->error_trap_handler != x_error_handler);
- }
-
- display->error_traps += 1;
-
- meta_topic (META_DEBUG_ERRORS, "%d traps remain\n", display->error_traps);
-}
-
-static int
-meta_error_trap_pop_internal (MetaDisplay *display,
- gboolean need_sync)
-{
- int result;
-
- g_assert (display->error_traps > 0);
-
- if (need_sync)
- {
- XSync (display->xdisplay, False);
- }
-
- result = gdk_error_trap_pop ();
-
- display->error_traps -= 1;
-
- if (display->error_traps == 0)
- {
- /* check that GDK put our handler back; this
- * assumes that there are no pending GDK traps from GDK itself
- */
-
- XSetErrorHandler (x_error_handler);
-
- /* remove this */
- display->error_trap_handler = NULL;
- }
-
- meta_topic (META_DEBUG_ERRORS, "%d traps\n", display->error_traps);
-
- return result;
-}
-
-void
-meta_error_trap_push (MetaDisplay *display)
-{
- meta_error_trap_push_internal (display, FALSE);
-}
-
-void
-meta_error_trap_pop (MetaDisplay *display,
- gboolean last_request_was_roundtrip)
-{
- gboolean need_sync;
-
- /* we only have to sync when popping the outermost trap */
- need_sync = (display->error_traps == 1 && !last_request_was_roundtrip);
-
- if (need_sync)
- meta_topic (META_DEBUG_SYNC, "Syncing on error_trap_pop, traps = %d, roundtrip = %d\n",
- display->error_traps, last_request_was_roundtrip);
-
- display->error_trap_synced_at_last_pop = need_sync || last_request_was_roundtrip;
-
- meta_error_trap_pop_internal (display, need_sync);
-}
-
-void
-meta_error_trap_push_with_return (MetaDisplay *display)
-{
- gboolean need_sync;
-
- /* We don't sync on push_with_return if there are no traps
- * currently, because we assume that any errors were either covered
- * by a previous pop, or were fatal.
- *
- * More generally, we don't sync if we were synchronized last time
- * we popped. This is known to be the case if there are no traps,
- * but we also keep a flag so we know whether it's the case otherwise.
- */
-
- if (!display->error_trap_synced_at_last_pop)
- need_sync = TRUE;
- else
- need_sync = FALSE;
-
- if (need_sync)
- meta_topic (META_DEBUG_SYNC, "Syncing on error_trap_push_with_return, traps = %d\n",
- display->error_traps);
-
- meta_error_trap_push_internal (display, FALSE);
-}
-
-int
-meta_error_trap_pop_with_return (MetaDisplay *display,
- gboolean last_request_was_roundtrip)
-{
- if (!last_request_was_roundtrip)
- meta_topic (META_DEBUG_SYNC, "Syncing on error_trap_pop_with_return, traps = %d, roundtrip = %d\n",
- display->error_traps, last_request_was_roundtrip);
-
- display->error_trap_synced_at_last_pop = TRUE;
-
- return meta_error_trap_pop_internal (display,
- !last_request_was_roundtrip);
-}
-
-static int
-x_error_handler (Display *xdisplay,
- XErrorEvent *error)
-{
- int retval;
- gchar buf[64];
- MetaDisplay *display;
- ForeignDisplay *foreign;
-
- for (foreign = foreign_displays; foreign != NULL; foreign = foreign->next)
- {
- if (foreign->dpy == xdisplay)
- {
- foreign->handler (xdisplay, error, foreign->data);
-
- return 0;
- }
- }
-
- XGetErrorText (xdisplay, error->error_code, buf, 63);
-
- display = meta_display_for_x_display (xdisplay);
-
- /* Display can be NULL here because the compositing manager
- * has its own Display, but Xlib only has one global error handler
- */
- if (display->error_traps > 0)
- {
- /* we're in an error trap, chain to the trap handler
- * saved from GDK
- */
- 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);
-
- g_assert (display->error_trap_handler != NULL);
- g_assert (display->error_trap_handler != x_error_handler);
-
- retval = (* display->error_trap_handler) (xdisplay, error);
- }
- else
- {
- meta_bug ("Unexpected 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 = 1; /* compiler warning */
- }
-
- return retval;
-}
-
-static int
-x_io_error_handler (Display *xdisplay)
-{
- MetaDisplay *display;
-
- display = meta_display_for_x_display (xdisplay);
-
- if (display == NULL)
- meta_bug ("IO error received for unknown display?\n");
-
- if (errno == EPIPE)
- {
- meta_warning (_("Lost connection to the display '%s';\n"
- "most likely the X server was shut down or you killed/destroyed\n"
- "the window manager.\n"),
- display->name);
- }
- else
- {
- meta_warning (_("Fatal IO error %d (%s) on display '%s'.\n"),
- errno, g_strerror (errno),
- display->name);
- }
-
- /* Xlib would force an exit anyhow */
- exit (1);
-
- return 0;
-}
-
-#endif