aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjmarshallnz <jmarshallnz@svn>2010-12-13 19:45:59 +0000
committerjmarshallnz <jmarshallnz@svn>2010-12-13 19:45:59 +0000
commit920da6b99de03ff5254f5a5c1f936d695b70881f (patch)
treea62979a33ed0853b890ea631f468b446512dbf88
parent64a0399c6c1768325be9d8c865fdb4e18d8892aa (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.cpp25
-rw-r--r--xbmc/GUIWindowAddonBrowser.h3
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;
};