From 8787606559178e892e385aa3cf8ab552cbdf4658 Mon Sep 17 00:00:00 2001 From: ac_stef Date: Sat, 27 Dec 2008 13:44:32 +0000 Subject: [PATCH] fix selection tracking in serverbrowser git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4072 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/serverbrowser.cpp | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/source/src/serverbrowser.cpp b/source/src/serverbrowser.cpp index 55c599ed..b013cbd5 100644 --- a/source/src/serverbrowser.cpp +++ b/source/src/serverbrowser.cpp @@ -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) {