fix selection tracking in serverbrowser

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4072 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
ac_stef
2008-12-27 13:44:32 +00:00
parent b8bd958ed2
commit 8787606559
+13 -15
View File
@@ -639,20 +639,11 @@ void refreshservers(void *menu, bool init)
checkresolver();
checkpings();
if((init && issearch) || totalmillis - lastinfo >= (servpingrate * (issearch ? 2 : 1))/(maxservpings ? (servers.length() + maxservpings - 1) / maxservpings : 1)) pingservers(issearch, menu == NULL);
if(!oldsel && menu && servers.inrange(((gmenu *)menu)->menusel) && (usedselect || ((gmenu *)menu)->menusel > 0)) oldsel = servers[((gmenu *)menu)->menusel];
servers.sort(sicompare);
int cursel = -1;
if(oldsel)
if(!init && menu && servers.inrange(((gmenu *)menu)->menusel) && (usedselect || ((gmenu *)menu)->menusel > 0))
{
loopv(servers) if(servers[i] == oldsel)
{
((gmenu *)menu)->menusel = i;
usedselect = true;
servers[i]->getnames = shownamesinbrowser ? 1 : 0;
cursel = i;
break;
}
loopv(servers) if(servers[i]->menuline == ((gmenu *)menu)->menusel) oldsel = servers[i];
}
servers.sort(sicompare);
if(menu)
{
static const char *titles[NUMSERVSORT] =
@@ -668,11 +659,10 @@ void refreshservers(void *menu, bool init)
};
bool showmr = showminremain || serversort == SBS_MINREM;
s_sprintf(title)(titles[serversort], issearch ? " search results for \f3" : " (F1: Help)", issearch ? cursearch : "");
serverinfo *curserver = getconnectedserverinfo();
menutitle(menu, title);
menureset(menu);
string text;
int curnl = 0;
int curnl = 0, showedservers = 0;
bool sbconnectexists = identexists("sbconnect");
loopv(servers)
{
@@ -727,7 +717,14 @@ void refreshservers(void *menu, bool init)
}
else s_sprintf(si.cmd)("connect %s %d", si.name, si.port);
menumanual(menu, si.full, si.cmd, NULL, si.description);
if((shownamesinbrowser && cursel == i && si.playernames.length()) || issearch)
if(!issearch && servers[i] == oldsel)
{
((gmenu *)menu)->menusel = showedservers;
usedselect = true;
si.getnames = shownamesinbrowser ? 1 : 0;
}
si.menuline = showedservers++;
if((shownamesinbrowser && servers[i] == oldsel && si.playernames.length()) || issearch)
{
int cur = 0;
char *t = NULL;
@@ -754,6 +751,7 @@ void refreshservers(void *menu, bool init)
if(cur) menumanual(menu, t, NULL, NULL, NULL);
}
}
else si.menuline = -1;
}
if(issearch && curnl == 0)
{