diff --git a/src/gui/game/Favorite.cpp b/src/gui/game/Favorite.cpp index d142001740..5d54e6aafa 100644 --- a/src/gui/game/Favorite.cpp +++ b/src/gui/game/Favorite.cpp @@ -23,4 +23,4 @@ bool Favorite::IsFavorite(std::string identifier) { std::vector tempFavoritsList = *favoritesList; return std::find(tempFavoritsList.begin(), tempFavoritsList.end(), identifier) != tempFavoritsList.end(); -} \ No newline at end of file +} diff --git a/src/gui/game/GameModel.cpp b/src/gui/game/GameModel.cpp index 5e2d45bb31..e1045185a5 100644 --- a/src/gui/game/GameModel.cpp +++ b/src/gui/game/GameModel.cpp @@ -166,6 +166,8 @@ GameModel::~GameModel() for (size_t i = 0; i < menuList.size(); i++) { + if (i == SC_FAVORITES) + menuList[i]->ClearTools(); delete menuList[i]; } for (std::vector::iterator iter = extraElementTools.begin(), end = extraElementTools.end(); iter != end; ++iter) @@ -370,12 +372,12 @@ void GameModel::BuildFavoritesMenu() { menuList[SC_FAVORITES]->ClearTools(); - for (int i = 0; i < menuList.size(); i++) + for (size_t i = 0; i < menuList.size(); i++) { if (i == SC_FAVORITES) continue; - for (int j = 0; j < menuList[i]->GetToolList().size(); j++) + for (size_t j = 0; j < menuList[i]->GetToolList().size(); j++) { if (Favorite::Ref().IsFavorite(menuList[i]->GetToolList()[j]->GetIdentifier())) { diff --git a/src/gui/game/GameView.cpp b/src/gui/game/GameView.cpp index 1d847c7555..185a601546 100644 --- a/src/gui/game/GameView.cpp +++ b/src/gui/game/GameView.cpp @@ -538,11 +538,13 @@ class GameView::ToolAction: public ui::ButtonAction void ActionCallback(ui::Button * sender_) { ToolButton *sender = (ToolButton*)sender_; - if (v->ShiftBehaviour() && !v->CtrlBehaviour() && !v->AltBehaviour()) + if (v->ShiftBehaviour() && v->CtrlBehaviour() && !v->AltBehaviour()) { if (Favorite::Ref().IsFavorite(tool->GetIdentifier()) && sender->GetSelectionState() == 1) + { Favorite::Ref().GetFavoritesList()->erase(std::remove(Favorite::Ref().GetFavoritesList()->begin(), Favorite::Ref().GetFavoritesList()->end(), tool->GetIdentifier()), Favorite::Ref().GetFavoritesList()->end()); + } else if (sender->GetSelectionState() == 0) Favorite::Ref().GetFavoritesList()->push_back(tool->GetIdentifier()); else if (sender->GetSelectionState() == 2) @@ -728,7 +730,6 @@ void GameView::NotifyLastToolChanged(GameModel * sender) void GameView::NotifyToolListChanged(GameModel * sender) { - lastOffset = 0; int currentX = WINDOWW-56; for (size_t i = 0; i < menuButtons.size(); i++) { @@ -795,6 +796,11 @@ void GameView::NotifyToolListChanged(GameModel * sender) } if (sender->GetActiveMenu() != SC_DECO) lastMenu = sender->GetActiveMenu(); + + // don't reset scroll back to 0 + int origOffset = lastOffset; + lastOffset = 0; + setToolButtonOffset(origOffset); } void GameView::NotifyColourSelectorVisibilityChanged(GameModel * sender)