diff options
author | Steve Kondik <shade@chemlab.org> | 2012-11-18 15:47:18 -0800 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2012-11-18 15:47:18 -0800 |
commit | a546c7006355a7bd1df4267ee53d0bfa2c017c8c (patch) | |
tree | 01be0bf6c0d6968e1468ec9661fd52110f9b05a7 /distrib/sdl-1.2.15/src/main/beos/SDL_BeApp.cc | |
parent | baf3d7830396202df5cc47bd7bcee109c319cdb3 (diff) | |
parent | 0f809250987b64f491bd3b4b73c0f0d33036a786 (diff) | |
download | external_qemu-a546c7006355a7bd1df4267ee53d0bfa2c017c8c.zip external_qemu-a546c7006355a7bd1df4267ee53d0bfa2c017c8c.tar.gz external_qemu-a546c7006355a7bd1df4267ee53d0bfa2c017c8c.tar.bz2 |
Merge branch 'jb-mr1-release' of https://android.googlesource.com/platform/external/qemu into mr1-staging
Change-Id: I8a4a71ac65b08e6e17f26c942f67a15b85211115
Diffstat (limited to 'distrib/sdl-1.2.15/src/main/beos/SDL_BeApp.cc')
-rw-r--r-- | distrib/sdl-1.2.15/src/main/beos/SDL_BeApp.cc | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/distrib/sdl-1.2.15/src/main/beos/SDL_BeApp.cc b/distrib/sdl-1.2.15/src/main/beos/SDL_BeApp.cc new file mode 100644 index 0000000..8b79377 --- /dev/null +++ b/distrib/sdl-1.2.15/src/main/beos/SDL_BeApp.cc @@ -0,0 +1,111 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +/* Handle the BeApp specific portions of the application */ + +#include <AppKit.h> +#include <storage/Path.h> +#include <storage/Entry.h> +#include <unistd.h> + +#include "SDL_BeApp.h" +#include "SDL_thread.h" +#include "SDL_timer.h" +#include "SDL_error.h" + +/* Flag to tell whether or not the Be application is active or not */ +int SDL_BeAppActive = 0; +static SDL_Thread *SDL_AppThread = NULL; + +static int StartBeApp(void *unused) +{ + if(!be_app) { + BApplication *App; + + App = new BApplication("application/x-SDL-executable"); + + App->Run(); + delete App; + } + return(0); +} + +/* Initialize the Be Application, if it's not already started */ +int SDL_InitBeApp(void) +{ + /* Create the BApplication that handles appserver interaction */ + if ( SDL_BeAppActive <= 0 ) { + SDL_AppThread = SDL_CreateThread(StartBeApp, NULL); + if ( SDL_AppThread == NULL ) { + SDL_SetError("Couldn't create BApplication thread"); + return(-1); + } + + /* Change working to directory to that of executable */ + app_info info; + if (B_OK == be_app->GetAppInfo(&info)) { + entry_ref ref = info.ref; + BEntry entry; + if (B_OK == entry.SetTo(&ref)) { + BPath path; + if (B_OK == path.SetTo(&entry)) { + if (B_OK == path.GetParent(&path)) { + chdir(path.Path()); + } + } + } + } + + do { + SDL_Delay(10); + } while ( (be_app == NULL) || be_app->IsLaunching() ); + + /* Mark the application active */ + SDL_BeAppActive = 0; + } + + /* Increment the application reference count */ + ++SDL_BeAppActive; + + /* The app is running, and we're ready to go */ + return(0); +} + +/* Quit the Be Application, if there's nothing left to do */ +void SDL_QuitBeApp(void) +{ + /* Decrement the application reference count */ + --SDL_BeAppActive; + + /* If the reference count reached zero, clean up the app */ + if ( SDL_BeAppActive == 0 ) { + if ( SDL_AppThread != NULL ) { + if ( be_app != NULL ) { /* Not tested */ + be_app->PostMessage(B_QUIT_REQUESTED); + } + SDL_WaitThread(SDL_AppThread, NULL); + SDL_AppThread = NULL; + } + /* be_app should now be NULL since be_app has quit */ + } +} |