void Interface_GUIWindow::destroy(void* kodiBase, void* handle) { CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); CGUIAddonWindow* pAddonWindow = static_cast<CGUIAddonWindow*>(handle); if (!addon || !pAddonWindow) { CLog::Log(LOGERROR, "Interface_GUIWindow::%s - invalid handler data (handle='%p') on addon '%s'", __FUNCTION__, handle, addon ? addon->ID().c_str() : "unknown"); return; } Interface_GUIGeneral::lock(); CGUIWindow *pWindow = dynamic_cast<CGUIWindow*>(g_windowManager.GetWindow(pAddonWindow->GetID())); if (pWindow) { // first change to an existing window if (g_windowManager.GetActiveWindow() == pAddonWindow->GetID() && !g_application.m_bStop) { if(g_windowManager.GetWindow(pAddonWindow->m_oldWindowId)) g_windowManager.ActivateWindow(pAddonWindow->m_oldWindowId); else // old window does not exist anymore, switch to home g_windowManager.ActivateWindow(WINDOW_HOME); } // Free any window properties pAddonWindow->ClearProperties(); // free the window's resources and unload it (free all guicontrols) pAddonWindow->FreeResources(true); g_windowManager.Remove(pAddonWindow->GetID()); } delete pAddonWindow; Interface_GUIGeneral::unlock(); }
bool Interface_GUIWindow::do_modal(void* kodiBase, void* handle) { CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); CGUIAddonWindow* pAddonWindow = static_cast<CGUIAddonWindow*>(handle); if (!addon || !pAddonWindow) { CLog::Log(LOGERROR, "Interface_GUIWindow::%s - invalid handler data (handle='%p') on addon '%s'", __FUNCTION__, handle, addon ? addon->ID().c_str() : "unknown"); return false; } if (pAddonWindow->GetID() == g_windowManager.GetActiveWindow()) return true; if (pAddonWindow->m_oldWindowId != pAddonWindow->m_windowId && pAddonWindow->m_windowId != g_windowManager.GetActiveWindow()) pAddonWindow->m_oldWindowId = g_windowManager.GetActiveWindow(); Interface_GUIGeneral::lock(); if (pAddonWindow->IsDialog()) dynamic_cast<CGUIAddonWindowDialog*>(pAddonWindow)->Show(true, true); else g_windowManager.ActivateWindow(pAddonWindow->GetID()); Interface_GUIGeneral::unlock(); return true; }
bool Interface_GUIWindow::do_modal(void* kodiBase, void* handle) { CAddonDll* addon = static_cast<CAddonDll*>(kodiBase); CGUIAddonWindow* pAddonWindow = static_cast<CGUIAddonWindow*>(handle); if (!addon || !pAddonWindow) { CLog::Log(LOGERROR, "Interface_GUIWindow::%s - invalid handler data (kodiBase='%p', handle='%p') on addon '%s'", __FUNCTION__, addon, handle, addon ? addon->ID().c_str() : "unknown"); return false; } if (pAddonWindow->GetID() != g_windowManager.GetActiveWindow()) show(kodiBase, handle); return true; }