diff options
Diffstat (limited to 'src/kernel/qt_x11_p.h')
-rw-r--r-- | src/kernel/qt_x11_p.h | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/src/kernel/qt_x11_p.h b/src/kernel/qt_x11_p.h new file mode 100644 index 000000000..f3447dea1 --- /dev/null +++ b/src/kernel/qt_x11_p.h @@ -0,0 +1,280 @@ +/**************************************************************************** +** +** Includes X11 system header files. +** +** Created : 981123 +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the kernel module of the TQt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free TQt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing retquirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.TQPL +** included in the packaging of this file. Licensees holding valid TQt +** Commercial licenses may use this file in accordance with the TQt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#ifndef QT_X11_H +#define QT_X11_H + + +// +// W A R N I N G +// ------------- +// +// This file is not part of the TQt API. It exists for the convenience +// of q*_x11.cpp. This header file may change from version to version +// without notice, or even be removed. +// +// + + +#ifndef QT_H +#include "qwindowdefs.h" +#endif // QT_H + +// the following is necessary to work around breakage in many versions +// of XFree86's Xlib.h still in use +// ### which versions? +#if defined(_XLIB_H_) // crude hack, but... +#error "cannot include <X11/Xlib.h> before this file" +#endif +#define XRegisterIMInstantiateCallback qt_XRegisterIMInstantiateCallback +#define XUnregisterIMInstantiateCallback qt_XUnregisterIMInstantiateCallback +#define XSetIMValues qt_XSetIMValues +#include <X11/Xlib.h> +#undef XRegisterIMInstantiateCallback +#undef XUnregisterIMInstantiateCallback +#undef XSetIMValues + +#include <X11/Xutil.h> +#include <X11/Xos.h> +#include <X11/Xatom.h> + + +//#define QT_NO_SHAPE +#ifdef QT_NO_SHAPE +#define XShapeCombineRegion(a,b,c,d,e,f,g) +#define XShapeCombineMask(a,b,c,d,e,f,g) +#else +#include <X11/extensions/shape.h> +#endif // QT_NO_SHAPE + + +// the wacom tablet (currently just the IRIX version) +#if defined (QT_TABLET_SUPPORT) +# include <X11/extensions/XInput.h> +#if defined (Q_OS_IRIX) +# include <wacom.h> // wacom driver defines for IRIX (tquite handy) +#endif +#endif // QT_TABLET_SUPPORT + + +// #define QT_NO_XINERAMA +#ifndef QT_NO_XINERAMA +# if 0 // ### Xsun, but how to detect it? +// Xinerama is only supported in Solaris 7 with patches 107648/108376 and +// Solaris 8 or above which introduce the X11R6.4 Xserver. +// To switch the Xinerama functionality on, you need to add the "+xinerama" +// argument to the Xsun start line. +// At least Solaris 7 and 8 are missing Xinerama system headers and function +// declarations (bug 4284701). +// The Xinerama API is not documented. In theory it could change but it +// probably won't because Sun are using it in at least dtlogin (bug 4221829). +extern "C" Bool XPanoramiXQueryExtension( + Display*, + int*, + int* +); +extern "C" Status XPanoramiXQueryVersion( + Display*, + int*, + int* +); +extern "C" Status XPanoramiXGetState( + Display*, + Drawable, + XPanoramiXInfo* +); +extern "C" Status XPanoramiXGetScreenCount( + Display *, + Drawable, + XPanoramiXInfo* +); +extern "C" Status XPanoramiXGetScreenSize( + Display*, + Drawable, + int, + XPanoramiXInfo* +); +# else // XFree86 +// XFree86 does not C++ify Xinerama (at least up to XFree86 4.0.3). +extern "C" { +# include <X11/extensions/Xinerama.h> +} +# endif +#endif // QT_NO_XINERAMA + +// #define QT_NO_XRANDR +#ifndef QT_NO_XRANDR +# include <X11/extensions/Xrandr.h> +#endif // QT_NO_XRANDR + +// #define QT_NO_XRENDER +#ifndef QT_NO_XRENDER +# include <X11/extensions/Xrender.h> +// #define QT_NO_XFTFREETYPE +# ifndef QT_NO_XFTFREETYPE +// This hacks around the freetype poeple putting an #error into freetype.h in 2.1.7, making +// it impossible to use an updated freetype with older Xft header files. +# include <ft2build.h> +# ifdef QT_USE_XFT2_HEADER +# include <X11/Xft/Xft2.h> +# else +# include <X11/Xft/Xft.h> +# endif // QT_USE_XFT2_HEADER +# if defined(XFT_VERSION) && XFT_VERSION >= 20000 +# define QT_XFT2 +# else +# include <X11/Xft/XftFreetype.h> +// Xft1 doesn't have these functions, so we implement them in qtaddons_x11.cpp +extern "C" { + TQt::HANDLE XftDrawPicture( XftDraw * ); + void XftDrawSetClipRectangles(XftDraw *, int, int, XRectangle *, int); + void XftDrawSetSubwindowMode(XftDraw *, int); +} +# endif // XFT_VERSION +# endif // QT_NO_XFTFREETYPE +#else +// make sure QT_NO_XFTFREETYPE is defined if QT_NO_XRENDER is defined +# ifndef QT_NO_XFTFREETYPE +# define QT_NO_XFTFREETYPE +# endif +#endif // QT_NO_XRENDER + + +#ifndef QT_NO_XSYNC +# include <X11/extensions/sync.h> +#endif // QT_NO_XSYNC + + +#ifndef QT_NO_XKB +# include <X11/XKBlib.h> +#endif // QT_NO_XKB + + +#if !defined(XlibSpecificationRelease) +# define X11R4 +typedef char *XPointer; +#else +# undef X11R4 +#endif + +// #define QT_NO_XIM +#if defined(X11R4) +// X11R4 does not have XIM +#define QT_NO_XIM +#elif defined(Q_OS_OSF) && (XlibSpecificationRelease < 6) +// broken in Xlib up to OSF/1 3.2 +#define QT_NO_XIM +#elif defined(Q_OS_AIX) +// broken in Xlib up to what version of AIX? +#define QT_NO_XIM +#elif defined(QT_NO_DEBUG) && defined(Q_OS_IRIX) +// XmbLookupString broken on IRIX +// XCreateIC broken when compiling -64 on IRIX 6.5.2 +#define QT_NO_XIM +#elif defined(Q_OS_HPUX) && defined(__LP64__) +// XCreateIC broken when compiling 64-bit ELF on HP-UX 11.0 +#define QT_NO_XIM +#elif defined(Q_OS_SCO) +// ### suggested by user... +// ### #define QT_NO_XIM +#endif // QT_NO_XIM + + +/* + * Solaris patch 108652-47 and higher fixes crases in + * XRegisterIMInstantiateCallback, but the function doesn't seem to + * work. + * + * Instead, we disabled R6 input, and open the input method + * immediately at application start. + */ +#if !defined(QT_NO_XIM) && (XlibSpecificationRelease >= 6) && \ + !defined(Q_OS_SOLARIS) +#define USE_X11R6_XIM + +//######### XFree86 has wrong declarations for XRegisterIMInstantiateCallback +//######### and XUnregisterIMInstantiateCallback in at least version 3.3.2. +//######### Many old X11R6 header files lack XSetIMValues. +//######### Therefore, we have to declare these functions ourselves. + +extern "C" Bool XRegisterIMInstantiateCallback( + Display*, + struct _XrmHashBucketRec*, + char*, + char*, + XIMProc, //XFree86 has XIDProc, which has to be wrong + XPointer +); + +extern "C" Bool XUnregisterIMInstantiateCallback( + Display*, + struct _XrmHashBucketRec*, + char*, + char*, + XIMProc, //XFree86 has XIDProc, which has to be wrong + XPointer +); + +extern "C" char *XSetIMValues( XIM /* im */, ... ); + +#endif + +#ifndef QT_NO_XIM +// some platforms (eg. Solaris 2.51) don't have these defines in Xlib.h +#ifndef XNResetState +#define XNResetState "resetState" +#endif +#ifndef XIMPreserveState +#define XIMPreserveState (1L<<1) +#endif +#endif + + +#ifndef X11R4 +# include <X11/Xlocale.h> +#endif // X11R4 + + +#ifdef QT_MITSHM +# include <X11/extensions/XShm.h> +#endif // QT_MITSHM + + +#endif // QT_X11_H |