# HG changeset patch # User Sam Lantinga # Date 1285575845 25200 # Node ID 69d9db65f248bd690d14d4d1a17e0a9bfa0bf988 # Parent 5d529386db73cd22f903cb71812bc8dc0fc8e313 Merged the Windows custom window system hooks into the union used by X11. Added Cocoa custom window system hooks diff -r 5d529386db73 -r 69d9db65f248 include/SDL_syswm.h --- a/include/SDL_syswm.h Mon Sep 27 00:50:46 2010 -0700 +++ b/include/SDL_syswm.h Mon Sep 27 01:24:05 2010 -0700 @@ -54,8 +54,12 @@ struct SDL_SysWMinfo; #else +#if defined(SDL_VIDEO_DRIVER_WIN32) +#define WIN32_LEAN_AND_MEAN +#include +#endif + /* This is the structure for custom window manager events */ -#if defined(SDL_VIDEO_DRIVER_X11) || defined(SDL_VIDEO_DRIVER_DIRECTFB) #if defined(SDL_VIDEO_DRIVER_X11) #if defined(__APPLE__) && defined(__MACH__) /* conflicts with Quickdraw.h */ @@ -75,21 +79,29 @@ #if defined(SDL_VIDEO_DRIVER_DIRECTFB) #include #endif + +#if defined(SDL_VIDEO_DRIVER_COCOA) +#ifdef __OBJC__ +#include +#else +typedef struct _NSWindow NSWindow; +#endif +#endif + /** - * These are the various supported subsystems under UNIX. + * These are the various supported windowing subsystems */ typedef enum { -#if defined(SDL_VIDEO_DRIVER_X11) + SDL_SYSWM_UNKNOWN, + SDL_SYSWM_WINDOWS, SDL_SYSWM_X11, -#endif -#if defined(SDL_VIDEO_DRIVER_DIRECTFB) SDL_SYSWM_DIRECTFB, -#endif + SDL_SYSWM_COCOA, } SDL_SYSWM_TYPE; /** - * The UNIX custom event structure. + * The custom event structure. */ struct SDL_SysWMmsg { @@ -97,17 +109,35 @@ SDL_SYSWM_TYPE subsystem; union { +#if defined(SDL_VIDEO_DRIVER_WIN32) + struct { + HWND hwnd; /**< The window for the message */ + UINT msg; /**< The type of message */ + WPARAM wParam; /**< WORD message parameter */ + LPARAM lParam; /**< LONG message parameter */ + } win; +#endif #if defined(SDL_VIDEO_DRIVER_X11) - XEvent xevent; + struct { + XEvent event; + } x11; #endif #if defined(SDL_VIDEO_DRIVER_DIRECTFB) - DFBEvent dfb_event; + struct { + DFBEvent event; + } dfb; #endif - } event; +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + /* No Cocoa window events yet */ + } cocoa; +#endif + } msg; }; /** - * The UNIX custom window manager information structure. + * The custom window manager information structure. * * When this structure is returned, it holds information about which * low level system it is using, and will be one of SDL_SYSWM_TYPE. @@ -118,11 +148,17 @@ SDL_SYSWM_TYPE subsystem; union { +#if defined(SDL_VIDEO_DRIVER_WIN32) + struct + { + HWND window; /**< The Win32 display window */ + } win; +#endif #if defined(SDL_VIDEO_DRIVER_X11) struct { - Display *display; /**< The X11 display */ - Window window; /**< The X11 display window */ + Display *display; /**< The X11 display */ + Window window; /**< The X11 display window */ } x11; #endif #if defined(SDL_VIDEO_DRIVER_DIRECTFB) @@ -131,106 +167,17 @@ IDirectFB *dfb; /**< The directfb main interface */ IDirectFBWindow *window; /**< The directfb window handle */ IDirectFBSurface *surface; /**< The directfb client surface */ - } directfb; + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + NSWindow *window; + } cocoa; #endif } info; }; -#elif defined(SDL_VIDEO_DRIVER_WIN32) -#define WIN32_LEAN_AND_MEAN -#include - -/** - * The windows custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - HWND hwnd; /**< The window for the message */ - UINT msg; /**< The type of message */ - WPARAM wParam; /**< WORD message parameter */ - LPARAM lParam; /**< LONG message parameter */ -}; - -/** - * The windows custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - HWND window; /**< The Win32 display window */ -}; - -#elif defined(SDL_VIDEO_DRIVER_RISCOS) - -/** - * RISC OS custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - int eventCode; /**< The window for the message */ - int pollBlock[64]; -}; - -/** - * The RISC OS custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - int wimpVersion; /**< Wimp version running under */ - int taskHandle; /**< The RISC OS task handle */ - int window; /**< The RISC OS display window */ -}; - -#elif defined(SDL_VIDEO_DRIVER_PHOTON) || defined(SDL_VIDEO_DRIVER_QNXGF) -#include -#if defined(SDL_VIDEO_OPENGL_ES) -#include -#endif /* SDL_VIDEO_OPENGL_ES */ -#include - -/** - * The QNX custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - int data; -}; - -/** - * The QNX Photon custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - int data; -}; - -#else - -/** - * The generic custom event structure. - */ -struct SDL_SysWMmsg -{ - SDL_version version; - int data; -}; - -/** - * The generic custom window manager information structure. - */ -struct SDL_SysWMinfo -{ - SDL_version version; - int data; -}; - -#endif /* video driver type */ - #endif /* SDL_PROTOTYPES_ONLY */ typedef struct SDL_SysWMinfo SDL_SysWMinfo; diff -r 5d529386db73 -r 69d9db65f248 src/video/SDL_video.c --- a/src/video/SDL_video.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/SDL_video.c Mon Sep 27 01:24:05 2010 -0700 @@ -40,12 +40,14 @@ #if SDL_VIDEO_OPENGL #include "SDL_opengl.h" +#endif /* SDL_VIDEO_OPENGL */ + +#include "SDL_syswm.h" /* On Windows, windows.h defines CreateWindow */ #ifdef CreateWindow #undef CreateWindow #endif -#endif /* SDL_VIDEO_OPENGL */ /* Available video drivers */ static VideoBootStrap *bootstrap[] = { @@ -3384,6 +3386,11 @@ { CHECK_WINDOW_MAGIC(window, SDL_FALSE); + if (!info) { + return SDL_FALSE; + } + info->subsystem = SDL_SYSWM_UNKNOWN; + if (!_this->GetWindowWMInfo) { return SDL_FALSE; } diff -r 5d529386db73 -r 69d9db65f248 src/video/cocoa/SDL_cocoawindow.m --- a/src/video/cocoa/SDL_cocoawindow.m Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/cocoa/SDL_cocoawindow.m Mon Sep 27 01:24:05 2010 -0700 @@ -704,10 +704,11 @@ SDL_bool Cocoa_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) { - //NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; + NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; if (info->version.major <= SDL_MAJOR_VERSION) { - //info->window = nswindow; + info->subsystem = SDL_SYSWM_COCOA; + info->info.cocoa.window = nswindow; return SDL_TRUE; } else { SDL_SetError("Application not compiled with SDL %d.%d\n", diff -r 5d529386db73 -r 69d9db65f248 src/video/win32/SDL_win32events.c --- a/src/video/win32/SDL_win32events.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/win32/SDL_win32events.c Mon Sep 27 01:24:05 2010 -0700 @@ -113,10 +113,11 @@ SDL_SysWMmsg wmmsg; SDL_VERSION(&wmmsg.version); - wmmsg.hwnd = hwnd; - wmmsg.msg = msg; - wmmsg.wParam = wParam; - wmmsg.lParam = lParam; + wmmsg.subsystem = SDL_SYSWM_WINDOWS; + wmmsg.msg.win.hwnd = hwnd; + wmmsg.msg.win.msg = msg; + wmmsg.msg.win.wParam = wParam; + wmmsg.msg.win.lParam = lParam; SDL_SendSysWMEvent(&wmmsg); } diff -r 5d529386db73 -r 69d9db65f248 src/video/win32/SDL_win32window.c --- a/src/video/win32/SDL_win32window.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/win32/SDL_win32window.c Mon Sep 27 01:24:05 2010 -0700 @@ -551,7 +551,8 @@ { HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; if (info->version.major <= SDL_MAJOR_VERSION) { - info->window = hwnd; + info->subsystem = SDL_SYSWM_WINDOWS; + info->info.win.window = hwnd; return SDL_TRUE; } else { SDL_SetError("Application not compiled with SDL %d.%d\n", diff -r 5d529386db73 -r 69d9db65f248 src/video/x11/SDL_x11events.c --- a/src/video/x11/SDL_x11events.c Mon Sep 27 00:50:46 2010 -0700 +++ b/src/video/x11/SDL_x11events.c Mon Sep 27 01:24:05 2010 -0700 @@ -90,7 +90,7 @@ SDL_VERSION(&wmmsg.version); wmmsg.subsystem = SDL_SYSWM_X11; - wmmsg.event.xevent = xevent; + wmmsg.msg.x11.event = xevent; SDL_SendSysWMEvent(&wmmsg); }