diff --git a/binaries/data/mods/mod/gui/gui.rnc b/binaries/data/mods/mod/gui/gui.rnc
index bd075eebae..55e182ad86 100644
--- a/binaries/data/mods/mod/gui/gui.rnc
+++ b/binaries/data/mods/mod/gui/gui.rnc
@@ -47,6 +47,7 @@ base_settings =
# Defaults are not put in here, because it ruins the concept of styles.
ex_settings =
attribute anchor { valign }?&
+ attribute auto_scroll { bool }?&
attribute buffer_zone { xsd:decimal }?&
attribute buffer_width { xsd:decimal }?&
attribute button_width { xsd:decimal }?&
diff --git a/binaries/data/mods/mod/gui/gui.rng b/binaries/data/mods/mod/gui/gui.rng
index 974c95ca96..c1c8338a7e 100644
--- a/binaries/data/mods/mod/gui/gui.rng
+++ b/binaries/data/mods/mod/gui/gui.rng
@@ -174,6 +174,11 @@
+
+
+
+
+
diff --git a/binaries/data/mods/mod/gui/modmod/modmod.xml b/binaries/data/mods/mod/gui/modmod/modmod.xml
index 5108e7d5ef..765295fa96 100644
--- a/binaries/data/mods/mod/gui/modmod/modmod.xml
+++ b/binaries/data/mods/mod/gui/modmod/modmod.xml
@@ -62,6 +62,7 @@
selected_column_order="1"
size="0 25 100%-2 100%"
font="sans-stroke-13"
+ auto_scroll="true"
>
showModDescription(this.name);
applyFilters();
@@ -113,6 +114,7 @@
size="0 25 96%-5 100%"
font="sans-stroke-13"
tooltip_style="pgToolTip"
+ auto_scroll="true"
>
showModDescription(this.name);
disableMod();
diff --git a/binaries/data/mods/public/gui/loadgame/load.xml b/binaries/data/mods/public/gui/loadgame/load.xml
index 2b5b34480f..4e5811d2ae 100644
--- a/binaries/data/mods/public/gui/loadgame/load.xml
+++ b/binaries/data/mods/public/gui/loadgame/load.xml
@@ -22,6 +22,7 @@
sortable="true"
size="24 4 100%-24 100%-70"
type="olist"
+ auto_scroll="true"
>
selectionChanged();
init();
diff --git a/binaries/data/mods/public/gui/lobby/lobby.js b/binaries/data/mods/public/gui/lobby/lobby.js
index 6f9bbbc697..b41fdfac47 100644
--- a/binaries/data/mods/public/gui/lobby/lobby.js
+++ b/binaries/data/mods/public/gui/lobby/lobby.js
@@ -801,6 +801,7 @@ function selectGameFromPlayername()
if (g_SelectedPlayer != splitRatingFromNick(player.Name).nick)
continue;
+ gameList.auto_scroll = true;
if (player.Team == "observer")
{
foundAsObserver = true;
@@ -1084,6 +1085,8 @@ function updateGameList()
// Change these last, otherwise crash
gamesBox.list = list;
gamesBox.list_data = list_data;
+
+ gamesBox.auto_scroll = false;
gamesBox.selected = selectedGameIndex;
updateGameSelection();
diff --git a/binaries/data/mods/public/gui/replaymenu/replay_menu.xml b/binaries/data/mods/public/gui/replaymenu/replay_menu.xml
index 280e1b34fb..90917ba079 100644
--- a/binaries/data/mods/public/gui/replaymenu/replay_menu.xml
+++ b/binaries/data/mods/public/gui/replaymenu/replay_menu.xml
@@ -57,6 +57,7 @@
selected_column="months"
selected_column_order="-1"
font="sans-stroke-13"
+ auto_scroll="true"
>
displayReplayDetails();
diff --git a/source/gui/CList.cpp b/source/gui/CList.cpp
index 03c8cbd56a..74ea7135f9 100644
--- a/source/gui/CList.cpp
+++ b/source/gui/CList.cpp
@@ -45,6 +45,7 @@ CList::CList()
AddSetting(GUIST_CColor, "textcolor");
AddSetting(GUIST_CColor, "textcolor_selected");
AddSetting(GUIST_int, "selected"); // Index selected. -1 is none.
+ AddSetting(GUIST_bool, "auto_scroll");
AddSetting(GUIST_int, "hovered");
AddSetting(GUIST_CStrW, "tooltip");
AddSetting(GUIST_CStr, "tooltip_style");
@@ -56,6 +57,7 @@ CList::CList()
GUI::SetSetting(this, "scrollbar", false);
GUI::SetSetting(this, "selected", -1);
GUI::SetSetting(this, "hovered", -1);
+ GUI::SetSetting(this, "auto_scroll", false);
// Add scroll-bar
CGUIScrollBarVertical* bar = new CGUIScrollBarVertical();
@@ -161,7 +163,12 @@ void CList::HandleMessage(SGUIMessage& Message)
{
// TODO: Check range
- UpdateAutoScroll();
+ bool auto_scroll;
+
+ GUI::GetSetting(this, "auto_scroll", auto_scroll);
+
+ if (auto_scroll)
+ UpdateAutoScroll();
// TODO only works if lower-case, shouldn't it be made case sensitive instead?
ScriptEvent("selectionchange");