diff options
author | jmarshallnz <jmarshallnz@svn> | 2010-12-13 19:45:59 +0000 |
---|---|---|
committer | jmarshallnz <jmarshallnz@svn> | 2010-12-13 19:45:59 +0000 |
commit | 920da6b99de03ff5254f5a5c1f936d695b70881f (patch) | |
tree | a62979a33ed0853b890ea631f468b446512dbf88 | |
parent | 64a0399c6c1768325be9d8c865fdb4e18d8892aa (diff) |
fixed: #10876 - skin addon (auto-)update when using the same skin causes funkiness on win32. We now unload the skin prior to install.
(cherry picked from commit 0d58f4ce1e8c3a48a5c36131e860d02cb7812858)
git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/branches/Dharma@35634 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
-rw-r--r-- | xbmc/GUIWindowAddonBrowser.cpp | 25 | ||||
-rw-r--r-- | xbmc/GUIWindowAddonBrowser.h | 3 |
2 files changed, 22 insertions, 6 deletions
diff --git a/xbmc/GUIWindowAddonBrowser.cpp b/xbmc/GUIWindowAddonBrowser.cpp index 03bc2ca5e1..ff0c974bf7 100644 --- a/xbmc/GUIWindowAddonBrowser.cpp +++ b/xbmc/GUIWindowAddonBrowser.cpp @@ -71,6 +71,7 @@ CGUIWindowAddonBrowser::CGUIWindowAddonBrowser(void) : CGUIMediaWindow(WINDOW_ADDON_BROWSER, "AddonBrowser.xml") { m_thumbLoader.SetNumOfWorkers(1); + m_promptReload = false; } CGUIWindowAddonBrowser::~CGUIWindowAddonBrowser() @@ -442,6 +443,17 @@ unsigned int CGUIWindowAddonBrowser::AddJob(const CStdString& path) return false; } list.Add(CFileItemPtr(new CFileItem(archivedFiles[0]->m_strPath,true))); + // check whether this is an active skin - we need to unload it if so + CURL url(archivedFiles[0]->m_strPath); + CStdString addon = url.GetFileName(); + CUtil::RemoveSlashAtEnd(addon); + if (g_guiSettings.GetString("lookandfeel.skin") == addon) + { // we're updating the current skin - we have to unload it first + CSingleLock lock(m_critSection); + CAddonMgr::Get().GetAddon(addon, m_prompt); + m_promptReload = true; + g_application.getApplicationMessenger().ExecBuiltIn("UnloadSkin", true); + } dest = "special://home/addons/"; } else @@ -474,23 +486,26 @@ void CGUIWindowAddonBrowser::UnRegisterJob(unsigned int jobID) m_downloadJobs.erase(i); AddonPtr prompt; + bool reload = false; if (m_downloadJobs.empty() && m_prompt) { prompt = m_prompt; + reload = m_promptReload; m_prompt.reset(); + m_promptReload = false; } lock.Leave(); - PromptForActivation(prompt); + PromptForActivation(prompt, reload); } -void CGUIWindowAddonBrowser::PromptForActivation(const AddonPtr &prompt) +void CGUIWindowAddonBrowser::PromptForActivation(const AddonPtr &addon, bool dontPrompt) { - if (prompt && prompt->Type() == ADDON_SKIN) + if (addon && addon->Type() == ADDON_SKIN) { - if (CGUIDialogYesNo::ShowAndGetInput(prompt->Name(), + if (dontPrompt || CGUIDialogYesNo::ShowAndGetInput(addon->Name(), g_localizeStrings.Get(24099),"","")) { - g_guiSettings.SetString("lookandfeel.skin",prompt->ID().c_str()); + g_guiSettings.SetString("lookandfeel.skin",addon->ID().c_str()); g_application.m_guiDialogKaiToast.ResetTimer(); g_application.m_guiDialogKaiToast.Close(true); g_application.getApplicationMessenger().ExecBuiltIn("ReloadSkin"); diff --git a/xbmc/GUIWindowAddonBrowser.h b/xbmc/GUIWindowAddonBrowser.h index ef2704d881..fc7562ac19 100644 --- a/xbmc/GUIWindowAddonBrowser.h +++ b/xbmc/GUIWindowAddonBrowser.h @@ -106,7 +106,7 @@ protected: */ bool CheckHash(const CStdString& addonZip, const CStdString& hash); - void PromptForActivation(const ADDON::AddonPtr &prompt); + void PromptForActivation(const ADDON::AddonPtr &addon, bool dontPrompt); void RegisterJob(const CStdString& id, unsigned int jobid, const CStdString& hash=""); void UnRegisterJob(unsigned int jobID); @@ -122,5 +122,6 @@ private: CPictureThumbLoader m_thumbLoader; ADDON::AddonPtr m_prompt; + bool m_promptReload; }; |