diff --git a/src/helpers.cpp b/src/helpers.cpp
index 9967ac96..3a52511b 100644
--- a/src/helpers.cpp
+++ b/src/helpers.cpp
@@ -504,7 +504,6 @@ bool GetSongInfo(Song &s)
void GetDirectory(string dir)
{
- pthread_t bolder;
browsed_dir_scroll_begin = 0;
if (browsed_dir != dir)
mBrowser->Reset();
diff --git a/src/menu.cpp b/src/menu.cpp
index da3c587a..1dfc26ed 100644
--- a/src/menu.cpp
+++ b/src/menu.cpp
@@ -73,6 +73,9 @@ void Menu::AddOption(const string &str, LOCATION location, HAVE_SEPARATOR separa
new_option->is_static = 0;
new_option->is_bold = 0;
itsOptions.push_back(new_option);
+
+ if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight)
+ NeedsRedraw.push_back(itsOptions.size()-1);
}
void Menu::AddBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR separator)
@@ -84,6 +87,9 @@ void Menu::AddBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR se
new_option->is_static = 0;
new_option->is_bold = 1;
itsOptions.push_back(new_option);
+
+ if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight)
+ NeedsRedraw.push_back(itsOptions.size()-1);
}
void Menu::AddStaticOption(const string &str, LOCATION location, HAVE_SEPARATOR separator)
@@ -96,6 +102,9 @@ void Menu::AddStaticOption(const string &str, LOCATION location, HAVE_SEPARATOR
new_option->is_bold = 0;
itsOptions.push_back(new_option);
itsStaticsNumber++;
+
+ if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight)
+ NeedsRedraw.push_back(itsOptions.size()-1);
}
void Menu::AddStaticBoldOption(const string &str, LOCATION location, HAVE_SEPARATOR separator)
@@ -108,6 +117,9 @@ void Menu::AddStaticBoldOption(const string &str, LOCATION location, HAVE_SEPARA
new_option->is_bold = 1;
itsOptions.push_back(new_option);
itsStaticsNumber++;
+
+ if (itsOptions.size() > itsBeginning && itsOptions.size() <= itsBeginning+itsHeight)
+ NeedsRedraw.push_back(itsOptions.size()-1);
}
void Menu::AddSeparator()
@@ -117,11 +129,14 @@ void Menu::AddSeparator()
void Menu::UpdateOption(int index, string str, LOCATION location, HAVE_SEPARATOR separator)
{
+ index--;
try
{
- itsOptions.at(index-1)->location = location;
- itsOptions.at(index-1)->content = str;
- itsOptions.at(index-1)->have_separator = separator;
+ itsOptions.at(index)->location = location;
+ itsOptions.at(index)->content = str;
+ itsOptions.at(index)->have_separator = separator;
+ if (index >= itsBeginning && index < itsBeginning+itsHeight)
+ NeedsRedraw.push_back(index);
}
catch (std::out_of_range)
{
@@ -130,9 +145,12 @@ void Menu::UpdateOption(int index, string str, LOCATION location, HAVE_SEPARATOR
void Menu::BoldOption(int index, IS_BOLD bold)
{
+ index--;
try
{
- itsOptions.at(index-1)->is_bold = bold;
+ itsOptions.at(index)->is_bold = bold;
+ if (index >= itsBeginning && index < itsBeginning+itsHeight)
+ NeedsRedraw.push_back(index);
}
catch (std::out_of_range)
{
@@ -141,13 +159,14 @@ void Menu::BoldOption(int index, IS_BOLD bold)
void Menu::MakeStatic(int index, IS_STATIC stat)
{
+ index--;
try
{
- if (stat && !itsOptions.at(index-1)->is_static)
+ if (stat && !itsOptions.at(index)->is_static)
itsStaticsNumber++;
- if (!stat && itsOptions.at(index-1)->is_static)
+ if (!stat && itsOptions.at(index)->is_static)
itsStaticsNumber--;
- itsOptions.at(index-1)->is_static = stat;
+ itsOptions.at(index)->is_static = stat;
}
catch (std::out_of_range)
{
@@ -191,19 +210,50 @@ void Menu::DeleteOption(int no)
}
delete itsOptions[no-1];
itsOptions.erase(itsOptions.begin()+no-1);
+
+ if (itsHighlight > itsOptions.size()-1)
+ itsHighlight = itsOptions.size()-1;
+
+ int MaxBeginning = itsOptions.size() < itsHeight ? 0 : itsOptions.size()-itsHeight;
+ if (itsBeginning > MaxBeginning)
+ {
+ itsBeginning = MaxBeginning;
+ NeedsRedraw.push_back(itsHighlight);
+ Refresh();
+ redraw_screen();
+ }
+ else
+ {
+ vector