Simple Directmedia Layer
Go to file
Sam Lantinga 704d9bd30d Fixed bug 2525 - Keyboard focus crash
Todd Seiler

Call Stack:
#0  0x0000000101c29291 in Cocoa_StartTextInput at /Users/Todd/Desktop/codes/sources/SDL/src/video/cocoa/SDL_cocoakeyboard.m:512
#1  0x0000000101c110c5 in SDL_SetKeyboardFocus at /Users/Todd/Desktop/codes/sources/SDL/src/events/SDL_keyboard.c:643
#2  0x0000000101c32be4 in SetupWindowData at /Users/Todd/Desktop/codes/sources/SDL/src/video/cocoa/SDL_cocoawindow.m:981
#3  0x0000000101c32d2a in Cocoa_CreateWindowFrom at /Users/Todd/Desktop/codes/sources/SDL/src/video/cocoa/SDL_cocoawindow.m:1092
#4  0x0000000101c99999 in SDL_CreateWindowFrom_REAL at /Users/Todd/Desktop/codes/sources/SDL/src/video/SDL_video.c:1338
#5  0x0000000101ce1484 in SDL_CreateWindowFrom at /Users/Todd/Desktop/codes/sources/SDL/src/dynapi/SDL_dynapi_procs.h:547
#6  0x0000000100018a5e in SceneRenderer at /Users/Todd/Desktop/codes/sources/tseiler_Todds-MacBook-Pro_3405/AppName/src/SceneRenderer.cpp:138
#7  0x0000000100017ca5 in SceneRenderer at /Users/Todd/Desktop/codes/sources/tseiler_Todds-MacBook-Pro_3405/AppName/src/SceneRenderer.cpp:145
#8  0x000000010000cd96 in App::execute(int, char**) at /Users/Todd/Desktop/codes/sources/tseiler_Todds-MacBook-Pro_3405/AppName/src/App.cpp:28
#9  0x0000000100004402 in main at /Users/Todd/Desktop/codes/sources/tseiler_Todds-MacBook-Pro_3405/AppName/src/main.cpp:8


This issue occurred when using Ogre3D Graphics engine on Mac (cocoa) to create the window. Then handing the window handle off to SDL_CreateWindowFrom().

In Ogre3D application you do the following:
        window_ = root_->initialise(true, "Ogre Window 2");
        loadOgreResources();
        Ogre::WindowEventUtilities::addWindowEventListener(window_, this);

#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
        NSWindow* Data = 0;
        window_->getCustomAttribute("WINDOW", &Data);
        sdl_window_ = SDL_CreateWindowFrom((void*)Data);
#endif

It results in a crash in this function:
SDL_cocoakeyboard.m

void
Cocoa_StartTextInput(_THIS)
{
    SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    SDL_Window *window = SDL_GetKeyboardFocus();
    NSWindow *nswindow = nil;
    if (window)
        nswindow = ((SDL_WindowData*)window->driverdata)->nswindow;

    // ...
}

The crash occurred because "driverdata" was nil. Before this function call, a call to SetupWindowData is called:

SDL_cocoawindow.m

static int
SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created)
{
    // ...

    if ([nswindow isKeyWindow]) {
        window->flags |= SDL_WINDOW_INPUT_FOCUS;
        SDL_SetKeyboardFocus(data->window);
    }

    /* Prevents the window's "window device" from being destroyed when it is
     * hidden. See http://www.mikeash.com/pyblog/nsopenglcontext-and-one-shot.html
     */
    [nswindow setOneShot:NO];

    /* All done! */
    [pool release];
    window->driverdata = data;
    return 0;
}

As you can see: "window->driverdata = data" is performed after the "SDL_SetKeyboardFocus()" call, which eventually leads to "Cocoa_StartTextInput()" where the crash occurs.
2014-06-25 02:08:37 -07:00
acinclude Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
android-project Merged changes from Alexey Petruchik to support Android obb files 2014-06-21 20:35:36 -07:00
build-scripts Removed references to Raspberry Pi 2014-06-21 11:16:26 -07:00
cmake Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
debian Added libibus-1.0-dev build dependency 2014-06-21 17:31:36 -07:00
include Fixed bug 2603 - iOS: update joystick accelerometer code to use CoreMotion instead of the deprecated UIAccelerometer 2014-06-25 00:20:21 -07:00
premake Fixed bug 2603 - iOS: update joystick accelerometer code to use CoreMotion instead of the deprecated UIAccelerometer 2014-06-25 00:20:21 -07:00
src Fixed bug 2525 - Keyboard focus crash 2014-06-25 02:08:37 -07:00
test Don't redefine standard macros, use SDL specific macros instead to avoid compiler warnings 2014-06-23 11:06:50 -07:00
VisualC Added names for some theme related windows messages 2014-06-23 10:09:13 -07:00
VisualC-WinRT WinRT: made Win[Phone] 8.1 projects be structured like their 8.0 counterparts 2014-05-06 20:31:10 -04:00
visualtest Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
Xcode Added OpenGL ES headers to public headers 2014-06-21 11:42:46 -07:00
Xcode-iOS Fixed bug 2603 - iOS: update joystick accelerometer code to use CoreMotion instead of the deprecated UIAccelerometer 2014-06-25 00:20:21 -07:00
.hgignore Ignore Visual Studio test data files 2014-06-08 11:59:36 -07:00
Android.mk Fixed Android error on static lib build, if relative NDK_MODULE_PATH used 2014-06-15 13:01:10 -07:00
autogen.sh Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
BUGS.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
cmake_uninstall.cmake.in Add suport for "make uninstall" to cmake. 2014-06-16 10:58:09 -03:00
CMakeLists.txt Partial fix for bug 2556 - add compilation flag -Wshadow 2014-06-22 11:02:56 -07:00
configure Fixed bug 2556 - add compilation flag -Wshadow 2014-06-25 00:43:10 -07:00
configure.in Fixed bug 2556 - add compilation flag -Wshadow 2014-06-25 00:43:10 -07:00
COPYING.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
CREDITS.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
INSTALL.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
Makefile.in Make autoconf-based build quiet by default. 2014-06-19 00:40:09 -04:00
Makefile.minimal Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
Makefile.pandora Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
Makefile.psp Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
Makefile.wiz Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-android.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-cmake.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-directfb.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-dynapi.txt Minor change to a README to test Mercurial server. 2014-04-12 17:40:55 -04:00
README-gesture.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-hg.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-ios.txt Updated iOS deployment target to iOS 5.1 2014-05-10 12:34:16 -07:00
README-linux.txt Corrected package list for Wayland/Mir support (was missing libxkbcommon-dev). 2014-06-05 01:55:52 -04:00
README-macosx.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-nacl.txt Initialize nacl_io, removes SDL_NaClMount/Umount 2014-06-20 10:59:51 -03:00
README-pandora.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-platforms.txt Added NaCl to the supported platforms list 2014-06-21 11:50:18 -07:00
README-porting.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-psp.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-raspberrypi.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-SDL.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-touch.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-wince.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-windows.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README-winrt.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
README.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
sdl2-config.in Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
sdl2.m4 Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
sdl2.pc.in Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
SDL2.spec.in Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
TODO.txt Added a README file regarding WinRT support 2014-04-09 21:29:19 -04:00
VisualC.html Fixed nesting of HTML elements in documentation. 2014-06-09 17:37:59 +02:00
WhatsNew.txt Chrome's Native Client backend implementation 2014-06-06 15:45:59 -03:00

                         Simple DirectMedia Layer

                                  (SDL)

                                Version 2.0

---
http://www.libsdl.org/

Simple DirectMedia Layer is a cross-platform development library designed
to provide low level access to audio, keyboard, mouse, joystick, and graphics
hardware via OpenGL and Direct3D. It is used by video playback software,
emulators, and popular games including Valve's award winning catalog
and many Humble Bundle games.

SDL officially supports Windows, Mac OS X, Linux, iOS, and Android.
Support for other platforms may be found in the source code.

SDL is written in C, works natively with C++, and there are bindings 
available for several other languages, including C# and Python.

This library is distributed under the zlib license, which can be found
in the file "COPYING.txt".

The best way to learn how to use SDL is to check out the header files in
the "include" subdirectory and the programs in the "test" subdirectory.
The header files and test programs are well commented and always up to date.
More documentation and FAQs are available online at:
	http://wiki.libsdl.org/

If you need help with the library, or just want to discuss SDL related
issues, you can join the developers mailing list:
	http://www.libsdl.org/mailing-list.php

If you want to report bugs or contribute patches, please submit them to
bugzilla:
    http://bugzilla.libsdl.org/

Enjoy!
	Sam Lantinga				(slouken@libsdl.org)