aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPilzAdam <pilzadam@minetest.net>2013-03-25 19:13:25 +0100
committerPilzAdam <pilzadam@minetest.net>2013-04-05 02:31:58 +0200
commitb0e68060777dfb7daefc81c169e1ed4d95c4a2d6 (patch)
tree7ea5797cc99b7dfb3c989669c3f97d88e6628d59
parent76b86c036876faabe49e274e9ada4fb9d8bd6aea (diff)
downloadminetest-b0e68060777dfb7daefc81c169e1ed4d95c4a2d6.tar.gz
minetest-b0e68060777dfb7daefc81c169e1ed4d95c4a2d6.tar.bz2
minetest-b0e68060777dfb7daefc81c169e1ed4d95c4a2d6.zip
Fix nick completion
-rw-r--r--src/chat.cpp8
-rw-r--r--src/chat.h2
-rw-r--r--src/client.cpp13
-rw-r--r--src/client.h2
-rw-r--r--src/content_cao.cpp4
-rw-r--r--src/environment.h8
-rw-r--r--src/guiChatConsole.cpp2
7 files changed, 21 insertions, 18 deletions
diff --git a/src/chat.cpp b/src/chat.cpp
index 1135ccdf7..3102e194a 100644
--- a/src/chat.cpp
+++ b/src/chat.cpp
@@ -464,7 +464,7 @@ void ChatPrompt::historyNext()
}
}
-void ChatPrompt::nickCompletion(const std::list<std::wstring>& names, bool backwards)
+void ChatPrompt::nickCompletion(const std::list<std::string>& names, bool backwards)
{
// Two cases:
// (a) m_nick_completion_start == m_nick_completion_end == 0
@@ -493,13 +493,13 @@ void ChatPrompt::nickCompletion(const std::list<std::wstring>& names, bool backw
// find all names that start with the selected prefix
std::vector<std::wstring> completions;
- for (std::list<std::wstring>::const_iterator
+ for (std::list<std::string>::const_iterator
i = names.begin();
i != names.end(); ++i)
{
- if (str_starts_with(*i, prefix, true))
+ if (str_starts_with(narrow_to_wide(*i), prefix, true))
{
- std::wstring completion = *i;
+ std::wstring completion = narrow_to_wide(*i);
if (prefix_start == 0)
completion += L":";
completions.push_back(completion);
diff --git a/src/chat.h b/src/chat.h
index 8a40c7ccf..19b48456e 100644
--- a/src/chat.h
+++ b/src/chat.h
@@ -160,7 +160,7 @@ public:
void historyNext();
// Nick completion
- void nickCompletion(const std::list<std::wstring>& names, bool backwards);
+ void nickCompletion(const std::list<std::string>& names, bool backwards);
// Update console size and reformat the visible portion of the prompt
void reformat(u32 cols);
diff --git a/src/client.cpp b/src/client.cpp
index f27f95d98..1d5f8f472 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -2501,18 +2501,9 @@ void Client::printDebugInfo(std::ostream &os)
<<std::endl;*/
}
-std::list<std::wstring> Client::getConnectedPlayerNames()
+std::list<std::string> Client::getConnectedPlayerNames()
{
- std::list<Player*> players = m_env.getPlayers(true);
- std::list<std::wstring> playerNames;
- for(std::list<Player*>::iterator
- i = players.begin();
- i != players.end(); ++i)
- {
- Player *player = *i;
- playerNames.push_back(narrow_to_wide(player->getName()));
- }
- return playerNames;
+ return m_env.getPlayerNames();
}
float Client::getAnimationTime()
diff --git a/src/client.h b/src/client.h
index d476a1d51..16cdc237f 100644
--- a/src/client.h
+++ b/src/client.h
@@ -315,7 +315,7 @@ public:
// Prints a line or two of info
void printDebugInfo(std::ostream &os);
- std::list<std::wstring> getConnectedPlayerNames();
+ std::list<std::string> getConnectedPlayerNames();
float getAnimationTime();
diff --git a/src/content_cao.cpp b/src/content_cao.cpp
index 0a1a92271..8bec67c8c 100644
--- a/src/content_cao.cpp
+++ b/src/content_cao.cpp
@@ -708,11 +708,15 @@ public:
if(player && player->isLocal()){
m_is_local_player = true;
}
+ m_env->addPlayerName(m_name.c_str());
}
}
~GenericCAO()
{
+ if(m_is_player){
+ m_env->removePlayerName(m_name.c_str());
+ }
}
static ClientActiveObject* create(IGameDef *gamedef, ClientEnvironment *env)
diff --git a/src/environment.h b/src/environment.h
index 02301e5d3..7f73a5461 100644
--- a/src/environment.h
+++ b/src/environment.h
@@ -470,6 +470,13 @@ public:
ClientEnvEvent getClientEvent();
std::vector<core::vector2d<int> > attachment_list; // X is child ID, Y is parent ID
+
+ std::list<std::string> getPlayerNames()
+ { return m_player_names; }
+ void addPlayerName(std::string name)
+ { m_player_names.push_back(name); }
+ void removePlayerName(std::string name)
+ { m_player_names.remove(name); }
private:
ClientMap *m_map;
@@ -482,6 +489,7 @@ private:
Queue<ClientEnvEvent> m_client_event_queue;
IntervalLimiter m_active_object_light_update_interval;
IntervalLimiter m_lava_hurt_interval;
+ std::list<std::string> m_player_names;
};
#endif
diff --git a/src/guiChatConsole.cpp b/src/guiChatConsole.cpp
index 5fc576cf8..ec23648f8 100644
--- a/src/guiChatConsole.cpp
+++ b/src/guiChatConsole.cpp
@@ -535,7 +535,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
{
// Tab or Shift-Tab pressed
// Nick completion
- std::list<std::wstring> names = m_client->getConnectedPlayerNames();
+ std::list<std::string> names = m_client->getConnectedPlayerNames();
bool backwards = event.KeyInput.Shift;
m_chat_backend->getPrompt().nickCompletion(names, backwards);
return true;