Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Merged the Windows custom window system hooks into the union used by …
Browse files Browse the repository at this point in the history
…X11.

Added Cocoa custom window system hooks
  • Loading branch information
slouken committed Sep 27, 2010
1 parent 3aaeb3c commit 068a47a
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 118 deletions.
165 changes: 56 additions & 109 deletions include/SDL_syswm.h
Expand Up @@ -54,8 +54,12 @@ extern "C" {
struct SDL_SysWMinfo;
#else

#if defined(SDL_VIDEO_DRIVER_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#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 */
Expand All @@ -75,39 +79,65 @@ struct SDL_SysWMinfo;
#if defined(SDL_VIDEO_DRIVER_DIRECTFB)
#include <directfb/directfb.h>
#endif

#if defined(SDL_VIDEO_DRIVER_COCOA)
#ifdef __OBJC__
#include <Cocoa/Cocoa.h>
#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
{
SDL_version version;
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.
Expand All @@ -118,11 +148,17 @@ struct SDL_SysWMinfo
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)
Expand All @@ -131,106 +167,17 @@ struct SDL_SysWMinfo
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 <windows.h>

/**
* 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 <sys/neutrino.h>
#if defined(SDL_VIDEO_OPENGL_ES)
#include <gf/gf.h>
#endif /* SDL_VIDEO_OPENGL_ES */
#include <Ph.h>

/**
* 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;
Expand Down
9 changes: 8 additions & 1 deletion src/video/SDL_video.c
Expand Up @@ -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[] = {
Expand Down Expand Up @@ -3384,6 +3386,11 @@ SDL_GetWindowWMInfo(SDL_Window * window, struct SDL_SysWMinfo *info)
{
CHECK_WINDOW_MAGIC(window, SDL_FALSE);

if (!info) {
return SDL_FALSE;
}
info->subsystem = SDL_SYSWM_UNKNOWN;

if (!_this->GetWindowWMInfo) {
return SDL_FALSE;
}
Expand Down
5 changes: 3 additions & 2 deletions src/video/cocoa/SDL_cocoawindow.m
Expand Up @@ -704,10 +704,11 @@ - (BOOL)canBecomeMainWindow
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",
Expand Down
9 changes: 5 additions & 4 deletions src/video/win32/SDL_win32events.c
Expand Up @@ -113,10 +113,11 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
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);
}

Expand Down
3 changes: 2 additions & 1 deletion src/video/win32/SDL_win32window.c
Expand Up @@ -551,7 +551,8 @@ WIN_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info)
{
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",
Expand Down
2 changes: 1 addition & 1 deletion src/video/x11/SDL_x11events.c
Expand Up @@ -90,7 +90,7 @@ X11_DispatchEvent(_THIS)

SDL_VERSION(&wmmsg.version);
wmmsg.subsystem = SDL_SYSWM_X11;
wmmsg.event.xevent = xevent;
wmmsg.msg.x11.event = xevent;
SDL_SendSysWMEvent(&wmmsg);
}

Expand Down

0 comments on commit 068a47a

Please sign in to comment.