Fixed bug 2240 - On OS/X after calling SDL_SetWindowBordered right mouse clicks no longer register

philhassey

On OS/X after calling SDL_SetWindowBordered right mouse clicks no longer register.

Steps to Reproduce:

1. Open a windowed window on OS/X.  (With the border on.)

2. e.button.button will give values 1,2,3 depending on which mouse button I click.

3. Call SDL_SetWindowBordered to disable the border.

4. e.button.button will only give values 1,2.  3 (right mouse button) stops coming through.

Expected result:

I expect all mouse buttons to register.
This commit is contained in:
Sam Lantinga 2013-11-14 22:26:49 -08:00
parent ef97aab9cf
commit 4295a92f97

View file

@ -88,6 +88,31 @@ GetWindowStyle(SDL_Window * window)
return style; return style;
} }
static SDL_bool
SetWindowStyle(SDL_Window * window, unsigned int style)
{
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
NSWindow *nswindow = data->nswindow;
if (![nswindow respondsToSelector: @selector(setStyleMask:)]) {
return SDL_FALSE;
}
/* The view responder chain gets messed with during setStyleMask */
if ([[nswindow contentView] nextResponder] == data->listener) {
[[nswindow contentView] setNextResponder:nil];
}
[nswindow performSelector: @selector(setStyleMask:) withObject: (id)(uintptr_t)style];
/* The view responder chain gets messed with during setStyleMask */
if ([[nswindow contentView] nextResponder] != data->listener) {
[[nswindow contentView] setNextResponder:data->listener];
}
return SDL_TRUE;
}
@implementation Cocoa_WindowListener @implementation Cocoa_WindowListener
@ -422,10 +447,9 @@ GetWindowStyle(SDL_Window * window)
- (void)windowWillEnterFullScreen:(NSNotification *)aNotification - (void)windowWillEnterFullScreen:(NSNotification *)aNotification
{ {
SDL_Window *window = _data->window; SDL_Window *window = _data->window;
NSWindow *nswindow = _data->nswindow;
window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
[nswindow setStyleMask:(NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask)]; SetWindowStyle(window, (NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask));
isFullscreenSpace = YES; isFullscreenSpace = YES;
inFullscreenTransition = YES; inFullscreenTransition = YES;
@ -454,10 +478,9 @@ GetWindowStyle(SDL_Window * window)
- (void)windowWillExitFullScreen:(NSNotification *)aNotification - (void)windowWillExitFullScreen:(NSNotification *)aNotification
{ {
SDL_Window *window = _data->window; SDL_Window *window = _data->window;
NSWindow *nswindow = _data->nswindow;
window->flags &= ~SDL_WINDOW_FULLSCREEN_DESKTOP; window->flags &= ~SDL_WINDOW_FULLSCREEN_DESKTOP;
[nswindow setStyleMask:GetWindowStyle(window)]; SetWindowStyle(window, GetWindowStyle(window));
isFullscreenSpace = NO; isFullscreenSpace = NO;
inFullscreenTransition = YES; inFullscreenTransition = YES;
@ -1173,9 +1196,7 @@ void
Cocoa_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) Cocoa_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; if (SetWindowStyle(window, GetWindowStyle(window))) {
if ([nswindow respondsToSelector:@selector(setStyleMask:)]) {
[nswindow setStyleMask:GetWindowStyle(window)];
if (bordered) { if (bordered) {
Cocoa_SetWindowTitle(_this, window); /* this got blanked out. */ Cocoa_SetWindowTitle(_this, window); /* this got blanked out. */
} }