Skip to content
This repository has been archived by the owner on Apr 15, 2023. It is now read-only.

Commit

Permalink
fixed: xbmc#10876 - skin addon (auto-)update when using the same skin…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
jmarshallnz committed Dec 13, 2010
1 parent 64a0399 commit 920da6b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
25 changes: 20 additions & 5 deletions xbmc/GUIWindowAddonBrowser.cpp
Expand Up @@ -71,6 +71,7 @@ CGUIWindowAddonBrowser::CGUIWindowAddonBrowser(void)
: CGUIMediaWindow(WINDOW_ADDON_BROWSER, "AddonBrowser.xml")
{
m_thumbLoader.SetNumOfWorkers(1);
m_promptReload = false;
}

CGUIWindowAddonBrowser::~CGUIWindowAddonBrowser()
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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");
Expand Down
3 changes: 2 additions & 1 deletion xbmc/GUIWindowAddonBrowser.h
Expand Up @@ -106,7 +106,7 @@ class CGUIWindowAddonBrowser :
*/
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);
Expand All @@ -122,5 +122,6 @@ class CGUIWindowAddonBrowser :
CPictureThumbLoader m_thumbLoader;

ADDON::AddonPtr m_prompt;
bool m_promptReload;
};

0 comments on commit 920da6b

Please sign in to comment.