static void X11InitDisplay();
static DrawWindow *X11InitWindow();
+static int X11DebugErrorHandler(Display *display, XErrorEvent *event)
+{
+ int x = 0;
+
+ return 1 / x; /* !!! crash program to give backtrace in gdb !!! */
+}
+
void X11InitVideoDisplay(void)
{
/* initialize X11 video */
Error(ERR_EXIT, "cannot connect to X server %s",
XDisplayName(options.display_name));
+ if (options.debug_x11_sync)
+ {
+ Error(ERR_WARN, "running in X11 synchronous mode (debug only)");
+
+ XSynchronize(display, True);
+ XSetErrorHandler(X11DebugErrorHandler);
+ }
+
screen = DefaultScreen(display);
visual = DefaultVisual(display, screen);
depth = DefaultDepth(display, screen);
}
void X11FadeRectangle(Bitmap *bitmap_cross, int x, int y, int width, int height,
- int fade_mode, int fade_delay, int post_delay)
+ int fade_mode, int fade_delay, int post_delay,
+ void (*draw_border_function)(void))
{
/* fading currently not supported -- simply copy backbuffer to screen */
if (fade_mode == FADE_MODE_FADE_OUT)
- X11FillRectangle(window, x, y, width, height, BLACK_PIXEL);
- else
- X11CopyArea(backbuffer, window, x, y, width, height, 0, 0, BLIT_OPAQUE);
+ X11FillRectangle(backbuffer, x, y, width, height, BLACK_PIXEL);
+
+ if (draw_border_function != NULL)
+ draw_border_function();
+
+ X11CopyArea(backbuffer, window, x, y, width, height, x, y, BLIT_OPAQUE);
/* as we currently cannot use the fade delay, also do not use post delay */
}