From 146d72a7390d40a5daca1a6a34432786c300e1bd Mon Sep 17 00:00:00 2001 From: Dees_Troy Date: Mon, 11 Mar 2013 17:46:19 +0000 Subject: Remove mutex from file seselector mutex would, in some rare cases fail to lock and cause a freeze of the GUI. Also restored some code that was removed before and should not have been removed to fix a bug with folder selection where you select the same file or folder twice (e.g. select a backup on the restore page, press back, then select that backup again.) --- gui/fileselector.cpp | 16 ++++------------ gui/objects.hpp | 1 - 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp index 37eeed2ca..8b5804494 100644 --- a/gui/fileselector.cpp +++ b/gui/fileselector.cpp @@ -391,20 +391,14 @@ int GUIFileSelector::Render(void) } // Update the file list if needed - pthread_mutex_lock(&updateFileListmutex); if (updateFileList) { - pthread_mutex_unlock(&updateFileListmutex); string value; DataManager::GetValue(mPathVar, value); if (GetFileList(value) == 0) { - pthread_mutex_lock(&updateFileListmutex); updateFileList = false; - pthread_mutex_unlock(&updateFileListmutex); } else { return 0; } - } else { - pthread_mutex_unlock(&updateFileListmutex); } // This tells us how many lines we can actually render @@ -562,11 +556,9 @@ int GUIFileSelector::Render(void) } // If a change came in during the render then we need to do another redraw so leave mUpdate alone if updateFileList is true. - pthread_mutex_lock(&updateFileListmutex); if (!updateFileList) { mUpdate = 0; } - pthread_mutex_unlock(&updateFileListmutex); return 0; } @@ -846,6 +838,10 @@ int GUIFileSelector::NotifyTouch(TOUCH_STATE state, int x, int y) int GUIFileSelector::NotifyVarChange(std::string varName, std::string value) { + if (varName.empty()) { + // Always clear the data variable so we know to use it + DataManager::SetValue(mVariable, ""); + } if (!mHeaderIsStatic) { std::string newValue = gui_parse_text(mHeaderText); if (mLastValue != newValue) { @@ -861,9 +857,7 @@ int GUIFileSelector::NotifyVarChange(std::string varName, std::string value) if (varName == mSortVariable) { DataManager::GetValue(mSortVariable, mSortOrder); } - pthread_mutex_lock(&updateFileListmutex); updateFileList = true; - pthread_mutex_unlock(&updateFileListmutex); mStart = 0; scrollingY = 0; scrollingSpeed = 0; @@ -1004,9 +998,7 @@ void GUIFileSelector::SetPageFocus(int inFocus) { if (inFocus) { - pthread_mutex_lock(&updateFileListmutex); updateFileList = true; - pthread_mutex_unlock(&updateFileListmutex); scrollingY = 0; scrollingSpeed = 0; mUpdate = 1; diff --git a/gui/objects.hpp b/gui/objects.hpp index 047b66b63..3a39fe565 100644 --- a/gui/objects.hpp +++ b/gui/objects.hpp @@ -496,7 +496,6 @@ protected: COLOR mFontHighlightColor; int startSelection; bool updateFileList; - pthread_mutex_t updateFileListmutex; }; class GUIListBox : public RenderObject, public ActionObject -- cgit v1.2.3