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

Commit

Permalink
Browse files Browse the repository at this point in the history
Mac: Better mouse-grab if you define SDL_MAC_NO_SANDBOX.
This uses a better mouse grab if you define SDL_MAC_NO_SANDBOX. This
mouse grab uses CGEventTapCreate, which you cannot access if you have
sandboxing enabled.
  • Loading branch information
jorgenpt committed Aug 7, 2013
1 parent ab950b4 commit 4804438
Show file tree
Hide file tree
Showing 6 changed files with 320 additions and 0 deletions.
19 changes: 19 additions & 0 deletions Xcode/SDL/SDL.xcodeproj/project.pbxproj
Expand Up @@ -516,6 +516,12 @@
AADA5B8716CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; };
AADA5B8816CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; };
BBFC088D164C6647003E6A99 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */; };
D55A1B81179F262300625D7C /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */; };
D55A1B82179F262300625D7C /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */; };
D55A1B83179F263500625D7C /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */; };
D55A1B84179F263600625D7C /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */; };
D55A1B85179F278E00625D7C /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */; };
D55A1B86179F278F00625D7C /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */; };
DB313F7417554B71006C0E22 /* SDL_diskaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD8912E6671700899322 /* SDL_diskaudio.h */; };
DB313F7517554B71006C0E22 /* SDL_dummyaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFD9512E6671700899322 /* SDL_dummyaudio.h */; };
DB313F7617554B71006C0E22 /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFDA112E6671700899322 /* SDL_coreaudio.h */; };
Expand Down Expand Up @@ -1044,6 +1050,8 @@
BECDF66C0761BA81005FE872 /* SDL2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BECDF6B30761BA81005FE872 /* libSDL2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2.a; sourceTree = BUILT_PRODUCTS_DIR; };
BECDF6BE0761BA81005FE872 /* Standard DMG */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Standard DMG"; sourceTree = BUILT_PRODUCTS_DIR; };
D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamousetap.h; sourceTree = "<group>"; };
D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamousetap.m; sourceTree = "<group>"; };
DB31407717554B71006C0E22 /* libSDL2.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libSDL2.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
F59C70FF00D5CB5801000001 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMe.txt; sourceTree = "<group>"; };
F59C710000D5CB5801000001 /* Welcome.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Welcome.txt; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1534,6 +1542,8 @@
04BDFEC912E6671800899322 /* SDL_cocoamodes.m */,
04BDFECA12E6671800899322 /* SDL_cocoamouse.h */,
04BDFECB12E6671800899322 /* SDL_cocoamouse.m */,
D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */,
D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */,
04BDFECC12E6671800899322 /* SDL_cocoaopengl.h */,
04BDFECD12E6671800899322 /* SDL_cocoaopengl.m */,
04BDFECE12E6671800899322 /* SDL_cocoashape.h */,
Expand Down Expand Up @@ -1611,8 +1621,11 @@
BEC562FE0761C0E800A33029 /* Linked Frameworks */,
);
comments = "To build Universal Binaries, we have experimented with a variety of different options.\nThe complication is that we must retain compatibility with at least 10.2. \nThe Universal Binary defaults only work for > 10.3.9\n\nSo far, we have found:\ngcc 4.0.0 with Xcode 2.1 always links against libgcc_s. gcc 4.0.1 from Xcode 2.2 fixes this problem.\n\nBut gcc 4.0 will not work with < 10.3.9 because we continue to get an undefined symbol to _fprintf$LDBL128.\nSo we must use gcc 3.3 on PPC to accomplish 10.2 support. (But 4.0 is required for i386.)\n\nSetting the deployment target to 10.4 will disable prebinding, so for PPC, we set it less than 10.4 to preserve prebinding for legacy support.\n\nSetting the PPC SDKROOT to /Developers/SDKs/MacOSX10.2.8.sdk will link to 63.0.0 libSystem.B.dylib. Leaving it at current or 10.4u links to 88.1.2. However, as long as we are using gcc 3.3, it doesn't seem to matter as testing has demonstrated both will run. We have decided not to invoke the 10.2.8 SDK because it is not a default installed component with Xcode which will probably cause most people problems. However, rather than deleting the SDKROOT_ppc entry entirely, we have mapped it to 10.4u in case we decide we need to change this setting.\n\nTo use Altivec or SSE, we needed architecture specific flags:\nOTHER_CFLAGS_ppc\nOTHER_CFLAGS_i386\nOTHER_CFLAGS=$(OTHER_CFLAGS_($CURRENT_ARCH))\n\nThe general OTHER_CFLAGS needed to be manually mapped to architecture specific options because Xcode didn't do this automatically for us.\n\n\n";
indentWidth = 4;
name = SDLFramework;
sourceTree = "<group>";
tabWidth = 4;
usesTabs = 0;
};
089C1665FE841158C02AAC07 /* Resources */ = {
isa = PBXGroup;
Expand Down Expand Up @@ -1842,6 +1855,7 @@
AA628AD3159367F2005138DD /* SDL_x11xinput2.h in Headers */,
AABCC38D164063D200AB8930 /* SDL_cocoamessagebox.h in Headers */,
AADA5B8716CCAB3000107CF7 /* SDL_bits.h in Headers */,
D55A1B81179F262300625D7C /* SDL_cocoamousetap.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1985,6 +1999,7 @@
AABCC38E164063D200AB8930 /* SDL_cocoamessagebox.h in Headers */,
A77E6EB5167AB0A90010E40B /* SDL_gamecontroller.h in Headers */,
AADA5B8816CCAB3000107CF7 /* SDL_bits.h in Headers */,
D55A1B85179F278E00625D7C /* SDL_cocoamousetap.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -2128,6 +2143,7 @@
DB313FFA17554B71006C0E22 /* SDL_cocoamessagebox.h in Headers */,
DB313FFB17554B71006C0E22 /* SDL_gamecontroller.h in Headers */,
DB313FFC17554B71006C0E22 /* SDL_bits.h in Headers */,
D55A1B86179F278F00625D7C /* SDL_cocoamousetap.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -2410,6 +2426,7 @@
AABCC38F164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */,
AA0AD09D16648D1700CE5896 /* SDL_gamecontroller.c in Sources */,
AA0F8491178D5ECC00823F9D /* SDL_systls.c in Sources */,
D55A1B82179F262300625D7C /* SDL_cocoamousetap.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -2526,6 +2543,7 @@
AA9E4094163BE51E007A2AD0 /* SDL_x11messagebox.c in Sources */,
AABCC390164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */,
AA0F8492178D5ECC00823F9D /* SDL_systls.c in Sources */,
D55A1B84179F263600625D7C /* SDL_cocoamousetap.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -2642,6 +2660,7 @@
DB31406917554B71006C0E22 /* SDL_x11messagebox.c in Sources */,
DB31406A17554B71006C0E22 /* SDL_cocoamessagebox.m in Sources */,
AA0F8493178D5ECC00823F9D /* SDL_systls.c in Sources */,
D55A1B83179F263500625D7C /* SDL_cocoamousetap.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
1 change: 1 addition & 0 deletions src/video/cocoa/SDL_cocoamouse.h
Expand Up @@ -33,6 +33,7 @@ extern void Cocoa_QuitMouse(_THIS);
typedef struct {
int deltaXOffset;
int deltaYOffset;
void *tapdata;
} SDL_MouseData;

@interface NSCursor (InvisibleCursor)
Expand Down
9 changes: 9 additions & 0 deletions src/video/cocoa/SDL_cocoamouse.m
Expand Up @@ -25,6 +25,7 @@
#include "SDL_assert.h"
#include "SDL_events.h"
#include "SDL_cocoamouse.h"
#include "SDL_cocoamousetap.h"

#include "../../events/SDL_mouse_c.h"

Expand Down Expand Up @@ -94,6 +95,8 @@ + (NSCursor *)invisibleCursor
cursor = SDL_calloc(1, sizeof(*cursor));
if (cursor) {
cursor->driverdata = nscursor;
} else {
[nscursor release];
}
}

Expand Down Expand Up @@ -266,6 +269,8 @@ + (NSCursor *)invisibleCursor
mouse->SetRelativeMouseMode = Cocoa_SetRelativeMouseMode;

SDL_SetDefaultCursor(Cocoa_CreateDefaultCursor());

Cocoa_InitMouseEventTap(mouse->driverdata);
}

void
Expand Down Expand Up @@ -313,6 +318,10 @@ + (NSCursor *)invisibleCursor
{
SDL_Mouse *mouse = SDL_GetMouse();
if (mouse) {
if (mouse->driverdata) {
Cocoa_QuitMouseEventTap(((SDL_MouseData*)mouse->driverdata));
}

SDL_free(mouse->driverdata);
}
}
Expand Down
33 changes: 33 additions & 0 deletions src/video/cocoa/SDL_cocoamousetap.h
@@ -0,0 +1,33 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "SDL_config.h"

#ifndef _SDL_cocoamousetap_h
#define _SDL_cocoamousetap_h

#include "SDL_cocoamouse.h"

extern void Cocoa_InitMouseEventTap(SDL_MouseData *driverdata);
extern void Cocoa_QuitMouseEventTap(SDL_MouseData *driverdata);

#endif /* _SDL_cocoamousetap_h */

/* vi: set ts=4 sw=4 expandtab: */

0 comments on commit 4804438

Please sign in to comment.