view test/testnativecocoa.m @ 3486:c87dbbde2bc2

Fixed bug #891 Mason Wheeler 2009-11-23 06:59:48 PST There's code in SDL_RecreateWindow specifically to handle SDL_WINDOW_FOREIGN, but it appears to have been overlooked in the allowed_flags constant. This causes the line window->flags = (flags & allowed_flags); to strip SDL_WINDOW_FOREIGN from the window's flags, which breaks some code in WIN_WindowProc in SDL_win32Events.c that treats foreign windows differently. This can be trivially fixed by defining allowed_flags as const Uint32 allowed_flags = (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE | SDL_WINDOW_INPUT_GRABBED | SDL_WINDOW_FOREIGN);
author Sam Lantinga <slouken@libsdl.org>
date Tue, 24 Nov 2009 04:59:50 +0000
parents 089a77aebb7d
children
line wrap: on
line source


#include "testnative.h"

#ifdef TEST_NATIVE_COCOA

#include <Cocoa/Cocoa.h>

static void *CreateWindowCocoa(int w, int h);
static void DestroyWindowCocoa(void *window);

NativeWindowFactory CocoaWindowFactory = {
    "cocoa",
    CreateWindowCocoa,
    DestroyWindowCocoa
};

static void *CreateWindowCocoa(int w, int h)
{
    NSAutoreleasePool *pool;
    NSWindow *nswindow;
    NSRect rect;
    unsigned int style;

    pool = [[NSAutoreleasePool alloc] init];

    rect.origin.x = 0;
    rect.origin.y = 0;
    rect.size.width = w;
    rect.size.height = h;
    rect.origin.y = CGDisplayPixelsHigh(kCGDirectMainDisplay) - rect.origin.y - rect.size.height;

    style = (NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask);

    nswindow = [[NSWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:FALSE];
    [nswindow makeKeyAndOrderFront:nil];

    [pool release];

    return nswindow;
}

static void DestroyWindowCocoa(void *window)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSWindow *nswindow = (NSWindow *)window;

    [nswindow close];
    [pool release];
}

#endif