src/video/x11/SDL_x11dyn.h
author Ryan C. Gordon <icculus@icculus.org>
Sat, 14 Jan 2006 08:15:38 +0000
changeset 1248 d2c6881935be
parent 1244 a388f2b59044
child 1299 2bf9dda618e5
permissions -rw-r--r--
Catch X11 extension errors...since most of these are notifications that we
queried for a missing extension (such as the XiG vidmode one that most
people don't have), and default Xlib behaviour is to write notification to
stderr, this tends to generate incorrect bug reports.

Since we'll actually deal with the missing extension when querying for it,
we ignore these errors in our hook. The rest continue to pass through to
the default handler.

Fixes Bugzilla #42.

--ryan.
icculus@1168
     1
/*
icculus@1168
     2
    SDL - Simple DirectMedia Layer
icculus@1168
     3
    Copyright (C) 1997-2004 Sam Lantinga
icculus@1168
     4
icculus@1168
     5
    This library is free software; you can redistribute it and/or
icculus@1168
     6
    modify it under the terms of the GNU Library General Public
icculus@1168
     7
    License as published by the Free Software Foundation; either
icculus@1168
     8
    version 2 of the License, or (at your option) any later version.
icculus@1168
     9
icculus@1168
    10
    This library is distributed in the hope that it will be useful,
icculus@1168
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
icculus@1168
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
icculus@1168
    13
    Library General Public License for more details.
icculus@1168
    14
icculus@1168
    15
    You should have received a copy of the GNU Library General Public
icculus@1168
    16
    License along with this library; if not, write to the Free
icculus@1168
    17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
icculus@1168
    18
icculus@1168
    19
    Sam Lantinga
icculus@1168
    20
    slouken@libsdl.org
icculus@1168
    21
*/
icculus@1168
    22
icculus@1168
    23
#ifndef _SDL_x11dyn_h
icculus@1168
    24
#define _SDL_x11dyn_h
icculus@1168
    25
icculus@1168
    26
#include <X11/Xlib.h>
icculus@1168
    27
#include <X11/Xutil.h>
icculus@1168
    28
#include <X11/Xatom.h>
icculus@1168
    29
#include <X11/Xproto.h>
icculus@1168
    30
#include <X11/Xlibint.h>
icculus@1169
    31
icculus@1169
    32
#if defined(__osf__)
icculus@1169
    33
#include <XFree86/extensions/extutil.h>
icculus@1169
    34
#else
icculus@1168
    35
#include <X11/extensions/extutil.h>
icculus@1169
    36
#endif
icculus@1168
    37
icculus@1168
    38
#ifndef NO_SHARED_MEMORY
icculus@1168
    39
#include <sys/ipc.h>
icculus@1168
    40
#include <sys/shm.h>
icculus@1168
    41
#include <X11/extensions/XShm.h>
icculus@1168
    42
#endif
icculus@1168
    43
icculus@1168
    44
/*
icculus@1168
    45
 * Never reference Xlib directly...we might load it dynamically at runtime.
icculus@1168
    46
 *  Even if we don't, for readability, we still use the function pointers
icculus@1168
    47
 *  (although the symbol resolution will be done by the loader in that case).
icculus@1168
    48
 *
icculus@1168
    49
 * We define SDL_X11_SYM and include SDL_x11sym.h to accomplish various
icculus@1168
    50
 *  goals, without having to duplicate those function signatures.
icculus@1168
    51
 */
icculus@1168
    52
#ifdef __cplusplus
icculus@1168
    53
extern "C" {
icculus@1168
    54
#endif
icculus@1168
    55
icculus@1168
    56
/* evil function signatures... */
icculus@1168
    57
typedef Bool (*SDL_X11_XESetWireToEventRetType)(Display*,XEvent*,xEvent*);
icculus@1168
    58
typedef int (*SDL_X11_XSynchronizeRetType)(Display*);
icculus@1168
    59
typedef Status (*SDL_X11_XESetEventToWireRetType)(Display*,XEvent*,xEvent*);
icculus@1248
    60
typedef int (*SDL_X11_XSetExtensionErrorHandlerType)(Display *,char *,char *);
icculus@1168
    61
icculus@1235
    62
#define SDL_X11_SYM(req,ret,fn,params) extern ret (*p##fn) params;
icculus@1168
    63
#include "SDL_x11sym.h"
icculus@1168
    64
#undef SDL_X11_SYM
icculus@1168
    65
icculus@1168
    66
/* Macro in the xlib headers, not an actual symbol... */
icculus@1168
    67
#define pXDestroyImage XDestroyImage
icculus@1168
    68
icculus@1226
    69
/* Workaround code in headers... */
icculus@1226
    70
#if !__SDL_NO_REDEFINE_X11_HEADER_SYMS
icculus@1226
    71
#define _XFlush p_XFlush
icculus@1226
    72
#define _XFlushGCCache p_XFlushGCCache
icculus@1226
    73
#define _XReply p_XReply
icculus@1226
    74
#define _XSend p_XSend
icculus@1226
    75
#define _XData32 p_XData32
icculus@1244
    76
#define XFree pXFree
icculus@1226
    77
#endif
icculus@1226
    78
icculus@1168
    79
int SDL_X11_LoadSymbols(void);
icculus@1168
    80
void SDL_X11_UnloadSymbols(void);
icculus@1168
    81
icculus@1168
    82
#ifdef __cplusplus
icculus@1168
    83
}
icculus@1168
    84
#endif
icculus@1168
    85
icculus@1168
    86
#endif  /* !defined _SDL_x11dyn_h */
icculus@1168
    87