diff --git a/direct/src/plugin/p3dInstance.cxx b/direct/src/plugin/p3dInstance.cxx index 4402bcbbbb..be8ec36db5 100644 --- a/direct/src/plugin/p3dInstance.cxx +++ b/direct/src/plugin/p3dInstance.cxx @@ -1361,6 +1361,15 @@ uninstall_packages() { package->uninstall(); } } + + // Also clean up the start directory, if we have a custom start dir. + string start_dir_suffix = get_start_dir_suffix(); + if (!start_dir_suffix.empty()) { + P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr(); + string start_dir = inst_mgr->get_root_dir() + "/start" + start_dir_suffix; + nout << "Cleaning up start directory " << start_dir << "\n"; + inst_mgr->delete_directory_recursively(start_dir); + } } //////////////////////////////////////////////////////////////////// @@ -2000,6 +2009,46 @@ get_host_info(P3DHost *host) { // Didn't find an entry for this host; oh well. } +//////////////////////////////////////////////////////////////////// +// Function: P3DInstance::get_start_dir_suffix +// Access: Public +// Description: Determines the local path to the appropriate start +// directory for this instance, within the generic +// "start" directory. Returns empty string if this +// instance doesn't specify a custom start directory. +// +// If this is nonempty, it will begin with a slash--the +// intention is to append this to the end of the generic +// start_dir path. +//////////////////////////////////////////////////////////////////// +string P3DInstance:: +get_start_dir_suffix() const { + string start_dir_suffix; + + string start_dir = get_fparams().lookup_token("start_dir"); + if (start_dir.empty()) { + start_dir = _start_dir; + + if (!start_dir.empty()) { + // If the start_dir is taken from the p3d file (and not from the + // HTML tokens), then we also append the alt_host name to the + // start_dir, so that each alt_host variant will run in a + // different directory. + string alt_host = get_fparams().lookup_token("alt_host"); + if (!alt_host.empty()) { + start_dir += "_"; + start_dir += alt_host; + } + } + } + if (!start_dir.empty()) { + P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr(); + inst_mgr->append_safe_dir(start_dir_suffix, start_dir); + } + + return start_dir_suffix; +} + //////////////////////////////////////////////////////////////////// // Function: P3DInstance::send_browser_script_object // Access: Private diff --git a/direct/src/plugin/p3dInstance.h b/direct/src/plugin/p3dInstance.h index 293a12797e..9536a03861 100644 --- a/direct/src/plugin/p3dInstance.h +++ b/direct/src/plugin/p3dInstance.h @@ -175,6 +175,7 @@ private: void add_packages(); string find_alt_host_url(const string &host_url, const string &alt_host); void get_host_info(P3DHost *host); + string get_start_dir_suffix() const; void send_browser_script_object(); P3D_request *make_p3d_request(TiXmlElement *xrequest); diff --git a/direct/src/plugin/p3dSession.cxx b/direct/src/plugin/p3dSession.cxx index aaac6ec47a..db64c218e4 100644 --- a/direct/src/plugin/p3dSession.cxx +++ b/direct/src/plugin/p3dSession.cxx @@ -132,7 +132,7 @@ shutdown() { #ifdef _WIN32 // Wait for a certain amount of time for the process to stop by // itself. - if (WaitForSingleObject(_p3dpython_handle, max_wait_ms) == WAIT_TIMEOUT) { + while (WaitForSingleObject(_p3dpython_handle, max_wait_ms) == WAIT_TIMEOUT) { // It didn't shut down cleanly, so kill it the hard way. nout << "Force-killing python process.\n"; TerminateProcess(_p3dpython_handle, 2); @@ -713,28 +713,7 @@ start_p3dpython(P3DInstance *inst) { _keep_user_env = true; } if (!_keep_user_env) { - _start_dir = inst_mgr->get_root_dir() + "/start"; - - string start_dir = inst->get_fparams().lookup_token("start_dir"); - if (start_dir.empty()) { - start_dir = inst->_start_dir; - - if (!start_dir.empty()) { - // If the start_dir is taken from the p3d file (and not from the - // HTML tokens), then we also append the alt_host name to the - // start_dir, so that each alt_host variant will run in a - // different directory. - string alt_host = inst->get_fparams().lookup_token("alt_host"); - if (!alt_host.empty()) { - start_dir += "_"; - start_dir += alt_host; - } - } - } - if (!start_dir.empty()) { - inst_mgr->append_safe_dir(_start_dir, start_dir); - } - + _start_dir = inst_mgr->get_root_dir() + "/start" + inst->get_start_dir_suffix(); mkdir_complete(_start_dir, nout); } diff --git a/direct/src/plugin/p3dWinSplashWindow.cxx b/direct/src/plugin/p3dWinSplashWindow.cxx index d80e024000..5acdb39331 100755 --- a/direct/src/plugin/p3dWinSplashWindow.cxx +++ b/direct/src/plugin/p3dWinSplashWindow.cxx @@ -445,8 +445,8 @@ make_window() { int y = _wparams.get_win_y(); if (x == -1) x = CW_USEDEFAULT; if (y == -1) y = CW_USEDEFAULT; - if (x == -2) x = 0.5 * (GetSystemMetrics(SM_CXBORDER) - width); - if (y == -2) y = 0.5 * (GetSystemMetrics(SM_CYBORDER) - height); + if (x == -2) x = (int)(0.5 * (GetSystemMetrics(SM_CXBORDER) - width)); + if (y == -2) y = (int)(0.5 * (GetSystemMetrics(SM_CYBORDER) - height)); if (_wparams.get_window_type() == P3D_WT_embedded) { // Create an embedded window.