summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gui/char_select.cpp20
-rw-r--r--src/gui/char_select.h2
-rw-r--r--src/main.cpp17
3 files changed, 25 insertions, 14 deletions
diff --git a/src/gui/char_select.cpp b/src/gui/char_select.cpp
index c52f73a9..6da0f64d 100644
--- a/src/gui/char_select.cpp
+++ b/src/gui/char_select.cpp
@@ -228,6 +228,26 @@ void CharSelectDialog::logic()
updatePlayerInfo();
}
+bool CharSelectDialog::selectByName(const std::string &name)
+{
+ if (mCharInfo->isLocked())
+ return false;
+
+ unsigned int oldPos = mCharInfo->getPos();
+
+ mCharInfo->select(0);
+ do {
+ LocalPlayer *player = mCharInfo->getEntry();
+
+ if (player && player->getName() == name)
+ return true;
+ } while (mCharInfo->getPos());
+
+ mCharInfo->select(oldPos);
+
+ return false;
+}
+
std::string CharSelectDialog::getName()
{
return mNameLabel->getCaption();
diff --git a/src/gui/char_select.h b/src/gui/char_select.h
index 6784c073..0a1b5eac 100644
--- a/src/gui/char_select.h
+++ b/src/gui/char_select.h
@@ -57,6 +57,8 @@ class CharSelectDialog : public Window, public gcn::ActionListener
void logic();
+ bool selectByName(const std::string &name);
+
/**
* Returns name of selected player
*/
diff --git a/src/main.cpp b/src/main.cpp
index 127b2a84..0d4b54d7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -654,20 +654,9 @@ int main(int argc, char *argv[])
currentDialog = new CharSelectDialog(network, &charInfo,
1 - loginData.sex);
- if (options.playername != "") {
- charInfo.select(0);
- do {
- LocalPlayer *player = charInfo.getEntry();
-
- if (player && player->getName() ==
- options.playername) {
- options.chooseDefault = true;
- break;
- }
-
- charInfo.next();
- } while (charInfo.getPos());
- }
+ if (((CharSelectDialog*)currentDialog)->
+ selectByName(options.playername))
+ options.chooseDefault = true;
if (options.chooseDefault)
((CharSelectDialog*)currentDialog)->action("ok", NULL);