From d0d2ac4fa05bafa701057777010da8b231546176 Mon Sep 17 00:00:00 2001 From: David Rose Date: Wed, 18 Nov 2009 19:36:45 +0000 Subject: [PATCH] explicit window_handle type for win32 --- direct/src/plugin/p3dInstance.cxx | 1 + direct/src/plugin/p3dWinSplashWindow.cxx | 4 +++- direct/src/plugin/p3dWindowParams.cxx | 3 ++- direct/src/plugin_activex/PPInstance.cpp | 4 +++- direct/src/plugin_npapi/ppInstance.cxx | 7 ++++--- direct/src/plugin_standalone/panda3d.cxx | 11 ++++++++--- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/direct/src/plugin/p3dInstance.cxx b/direct/src/plugin/p3dInstance.cxx index 8f85444615..5d82086775 100644 --- a/direct/src/plugin/p3dInstance.cxx +++ b/direct/src/plugin/p3dInstance.cxx @@ -195,6 +195,7 @@ P3DInstance(P3D_request_ready_func *func, (_fparams.lookup_token_int("width") == 0 || _fparams.lookup_token_int("height") == 0)) { P3D_window_handle dummy_handle; + memset(&dummy_handle, 0, sizeof(dummy_handle)); P3DWindowParams wparams(P3D_WT_hidden, 0, 0, 0, 0, dummy_handle); set_wparams(wparams); } diff --git a/direct/src/plugin/p3dWinSplashWindow.cxx b/direct/src/plugin/p3dWinSplashWindow.cxx index e14b372ede..3d6578f398 100755 --- a/direct/src/plugin/p3dWinSplashWindow.cxx +++ b/direct/src/plugin/p3dWinSplashWindow.cxx @@ -430,7 +430,9 @@ make_window() { DWORD window_style = WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; - HWND parent_hwnd = _wparams.get_parent_window()._hwnd; + const P3D_window_handle &handle = _wparams.get_parent_window(); + assert(handle._window_handle_type == P3D_WHT_win_hwnd); + HWND parent_hwnd = handle._handle._win_hwnd._hwnd; _hwnd = CreateWindow("panda3d_splash", "Panda3D", window_style, diff --git a/direct/src/plugin/p3dWindowParams.cxx b/direct/src/plugin/p3dWindowParams.cxx index 6b6d60577b..92e0b7b0d2 100644 --- a/direct/src/plugin/p3dWindowParams.cxx +++ b/direct/src/plugin/p3dWindowParams.cxx @@ -78,7 +78,8 @@ make_xml(P3DInstance *inst) { xwparams->SetAttribute("win_width", _win_width); xwparams->SetAttribute("win_height", _win_height); #ifdef _WIN32 - xwparams->SetAttribute("parent_hwnd", (int)_parent_window._hwnd); + assert(_parent_window._window_handle_type == P3D_WHT_win_hwnd); + xwparams->SetAttribute("parent_hwnd", (int)_parent_window._handle._win_hwnd._hwnd); #elif defined(__APPLE__) xwparams->SetAttribute("subprocess_window", inst->_shared_filename); diff --git a/direct/src/plugin_activex/PPInstance.cpp b/direct/src/plugin_activex/PPInstance.cpp index 9c7789f6a2..26a52cf0ac 100644 --- a/direct/src/plugin_activex/PPInstance.cpp +++ b/direct/src/plugin_activex/PPInstance.cpp @@ -493,7 +493,9 @@ int PPInstance::Start( const std::string& p3dFilename ) m_eventStop.ResetEvent(); P3D_window_handle parent_window; - parent_window._hwnd = m_parentCtrl.m_hWnd; + memset(&parent_window, 0, sizeof(parent_window)); + parent_window._window_handle_type = P3D_WHT_win_hwnd; + parent_window._handle._win_hwnd._hwnd = m_parentCtrl.m_hWnd; RECT rect; GetClientRect( m_parentCtrl.m_hWnd, &rect ); diff --git a/direct/src/plugin_npapi/ppInstance.cxx b/direct/src/plugin_npapi/ppInstance.cxx index 040fb51d09..43dd2d4f94 100644 --- a/direct/src/plugin_npapi/ppInstance.cxx +++ b/direct/src/plugin_npapi/ppInstance.cxx @@ -1301,7 +1301,8 @@ send_window() { // (0, 0), since the window we were given is already placed in the // right spot. #ifdef _WIN32 - parent_window._hwnd = (HWND)(_window.window); + parent_window._window_handle_type = P3D_WHT_win_hwnd; + parent_window._handle._win_hwnd._hwnd = (HWND)(_window.window); x = 0; y = 0; @@ -1327,11 +1328,11 @@ send_window() { // We have a "windowless" plugin. Parent our window directly to // the browser window. #ifdef _WIN32 - parent_window._hwnd = 0; HWND hwnd; if (browser->getvalue(_npp_instance, NPNVnetscapeWindow, &hwnd) == NPERR_NO_ERROR) { - parent_window._hwnd = hwnd; + parent_window._window_handle_type = P3D_WHT_win_hwnd; + parent_window._handle._win_hwnd._hwnd = hwnd; } #elif defined(__APPLE__) diff --git a/direct/src/plugin_standalone/panda3d.cxx b/direct/src/plugin_standalone/panda3d.cxx index a547a1b777..e34441e425 100644 --- a/direct/src/plugin_standalone/panda3d.cxx +++ b/direct/src/plugin_standalone/panda3d.cxx @@ -241,8 +241,11 @@ run_command_line(int argc, char *argv[]) { // Center the child window(s) within the parent window. #ifdef _WIN32 + assert(_parent_window._window_handle_type == P3D_WHT_win_hwnd); + HWND parent_hwnd = _parent_window._handle._win_hwnd._hwnd; + RECT rect; - GetClientRect(_parent_window._hwnd, &rect); + GetClientRect(parent_hwnd, &rect); _win_x = (int)(rect.right * 0.1); _win_y = (int)(rect.bottom * 0.1); @@ -936,8 +939,10 @@ make_parent_window() { } ShowWindow(toplevel_window, SW_SHOWNORMAL); - - _parent_window._hwnd = toplevel_window; + + memset(&_parent_window, 0, sizeof(_parent_window)); + _parent_window._window_handle_type = P3D_WHT_win_hwnd; + _parent_window._handle._win_hwnd._hwnd = toplevel_window; } #else