include/SDL_syswm.h
author Sam Lantinga <slouken@libsdl.org>
Sat, 26 Sep 2009 23:17:08 +0000
branchSDL-1.2
changeset 4246 8b8314cc34a6
parent 4217 4c4113c2162c
child 4544 3f2d351d8274
permissions -rw-r--r--
Fixed bug #810

Lauri Kenttä 2009-09-26 06:42:23 PDT

Support for disabling stdio redirect with environment variables.
     1 /*
     2     SDL - Simple DirectMedia Layer
     3     Copyright (C) 1997-2009 Sam Lantinga
     4 
     5     This library is free software; you can redistribute it and/or
     6     modify it under the terms of the GNU Lesser General Public
     7     License as published by the Free Software Foundation; either
     8     version 2.1 of the License, or (at your option) any later version.
     9 
    10     This library is distributed in the hope that it will be useful,
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    13     Lesser General Public License for more details.
    14 
    15     You should have received a copy of the GNU Lesser General Public
    16     License along with this library; if not, write to the Free Software
    17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    18 
    19     Sam Lantinga
    20     slouken@libsdl.org
    21 */
    22 
    23 /** @file SDL_syswm.h
    24  *  Include file for SDL custom system window manager hooks
    25  */
    26 
    27 #ifndef _SDL_syswm_h
    28 #define _SDL_syswm_h
    29 
    30 #include "SDL_stdinc.h"
    31 #include "SDL_error.h"
    32 #include "SDL_version.h"
    33 
    34 #include "begin_code.h"
    35 /* Set up for C function definitions, even when using C++ */
    36 #ifdef __cplusplus
    37 extern "C" {
    38 #endif
    39 
    40 /** @file SDL_syswm.h
    41  *  Your application has access to a special type of event 'SDL_SYSWMEVENT',
    42  *  which contains window-manager specific information and arrives whenever
    43  *  an unhandled window event occurs.  This event is ignored by default, but
    44  *  you can enable it with SDL_EventState()
    45  */
    46 #ifdef SDL_PROTOTYPES_ONLY
    47 struct SDL_SysWMinfo;
    48 typedef struct SDL_SysWMinfo SDL_SysWMinfo;
    49 #else
    50 
    51 /* This is the structure for custom window manager events */
    52 #if defined(SDL_VIDEO_DRIVER_X11)
    53 #if defined(__APPLE__) && defined(__MACH__)
    54 /* conflicts with Quickdraw.h */
    55 #define Cursor X11Cursor
    56 #endif
    57 
    58 #include <X11/Xlib.h>
    59 #include <X11/Xatom.h>
    60 
    61 #if defined(__APPLE__) && defined(__MACH__)
    62 /* matches the re-define above */
    63 #undef Cursor
    64 #endif
    65 
    66 /** These are the various supported subsystems under UNIX */
    67 typedef enum {
    68 	SDL_SYSWM_X11
    69 } SDL_SYSWM_TYPE;
    70 
    71 /** The UNIX custom event structure */
    72 struct SDL_SysWMmsg {
    73 	SDL_version version;
    74 	SDL_SYSWM_TYPE subsystem;
    75 	union {
    76 	    XEvent xevent;
    77 	} event;
    78 };
    79 
    80 /** The UNIX custom window manager information structure.
    81  *  When this structure is returned, it holds information about which
    82  *  low level system it is using, and will be one of SDL_SYSWM_TYPE.
    83  */
    84 typedef struct SDL_SysWMinfo {
    85 	SDL_version version;
    86 	SDL_SYSWM_TYPE subsystem;
    87 	union {
    88 	    struct {
    89 	    	Display *display;	/**< The X11 display */
    90 	    	Window window;		/**< The X11 display window */
    91 		/** These locking functions should be called around
    92                  *  any X11 functions using the display variable, 
    93                  *  but not the gfxdisplay variable.
    94                  *  They lock the event thread, so should not be
    95 		 *  called around event functions or from event filters.
    96 		 */
    97                 /*@{*/
    98 		void (*lock_func)(void);
    99 		void (*unlock_func)(void);
   100                 /*@}*/
   101 
   102 		/** @name Introduced in SDL 1.0.2 */
   103                 /*@{*/
   104 	    	Window fswindow;	/**< The X11 fullscreen window */
   105 	    	Window wmwindow;	/**< The X11 managed input window */
   106                 /*@}*/
   107 
   108 		/** @name Introduced in SDL 1.2.12 */
   109                 /*@{*/
   110 		Display *gfxdisplay;	/**< The X11 display to which rendering is done */
   111                 /*@}*/
   112 	    } x11;
   113 	} info;
   114 } SDL_SysWMinfo;
   115 
   116 #elif defined(SDL_VIDEO_DRIVER_NANOX)
   117 #include <microwin/nano-X.h>
   118 
   119 /** The generic custom event structure */
   120 struct SDL_SysWMmsg {
   121 	SDL_version version;
   122 	int data;
   123 };
   124 
   125 /** The windows custom window manager information structure */
   126 typedef struct SDL_SysWMinfo {
   127 	SDL_version version ;
   128 	GR_WINDOW_ID window ;	/* The display window */
   129 } SDL_SysWMinfo;
   130 
   131 #elif defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || defined(SDL_VIDEO_DRIVER_GAPI)
   132 #define WIN32_LEAN_AND_MEAN
   133 #include <windows.h>
   134 
   135 /** The windows custom event structure */
   136 struct SDL_SysWMmsg {
   137 	SDL_version version;
   138 	HWND hwnd;			/**< The window for the message */
   139 	UINT msg;			/**< The type of message */
   140 	WPARAM wParam;			/**< WORD message parameter */
   141 	LPARAM lParam;			/**< LONG message parameter */
   142 };
   143 
   144 /** The windows custom window manager information structure */
   145 typedef struct SDL_SysWMinfo {
   146 	SDL_version version;
   147 	HWND window;			/**< The Win32 display window */
   148 	HGLRC hglrc;			/**< The OpenGL context, if any */
   149 } SDL_SysWMinfo;
   150 
   151 #elif defined(SDL_VIDEO_DRIVER_RISCOS)
   152 
   153 /** RISC OS custom event structure */
   154 struct SDL_SysWMmsg {
   155 	SDL_version version;
   156 	int eventCode;		/**< The window for the message */
   157 	int pollBlock[64];
   158 };
   159 
   160 /** The RISC OS custom window manager information structure */
   161 typedef struct SDL_SysWMinfo {
   162 	SDL_version version;
   163 	int wimpVersion;    /**< Wimp version running under */
   164 	int taskHandle;     /**< The RISC OS task handle */
   165 	int window;		/**< The RISC OS display window */
   166 } SDL_SysWMinfo;
   167 
   168 #elif defined(SDL_VIDEO_DRIVER_PHOTON)
   169 #include <sys/neutrino.h>
   170 #include <Ph.h>
   171 
   172 /** The QNX custom event structure */
   173 struct SDL_SysWMmsg {
   174 	SDL_version version;
   175 	int data;
   176 };
   177 
   178 /** The QNX custom window manager information structure */
   179 typedef struct SDL_SysWMinfo {
   180 	SDL_version version;
   181 	int data;
   182 } SDL_SysWMinfo;
   183 
   184 #else
   185 
   186 /** The generic custom event structure */
   187 struct SDL_SysWMmsg {
   188 	SDL_version version;
   189 	int data;
   190 };
   191 
   192 /** The generic custom window manager information structure */
   193 typedef struct SDL_SysWMinfo {
   194 	SDL_version version;
   195 	int data;
   196 } SDL_SysWMinfo;
   197 
   198 #endif /* video driver type */
   199 
   200 #endif /* SDL_PROTOTYPES_ONLY */
   201 
   202 /* Function prototypes */
   203 /**
   204  * This function gives you custom hooks into the window manager information.
   205  * It fills the structure pointed to by 'info' with custom information and
   206  * returns 1 if the function is implemented.  If it's not implemented, or
   207  * the version member of the 'info' structure is invalid, it returns 0. 
   208  *
   209  * You typically use this function like this:
   210  * @code
   211  * SDL_SysWMInfo info;
   212  * SDL_VERSION(&info.version);
   213  * if ( SDL_GetWMInfo(&info) ) { ... }
   214  * @endcode
   215  */
   216 extern DECLSPEC int SDLCALL SDL_GetWMInfo(SDL_SysWMinfo *info);
   217 
   218 
   219 /* Ends C function definitions when using C++ */
   220 #ifdef __cplusplus
   221 }
   222 #endif
   223 #include "close_code.h"
   224 
   225 #endif /* _SDL_syswm_h */