summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-02-29 22:44:19 +0300
committerAndrei Karas <akaras@inbox.ru>2012-02-29 22:44:19 +0300
commitb3f55809a8a56a5acf180371f05163091263cbda (patch)
treea76167c666e6085a281090bffd797883093adf1a
parentc53136fce2b1cca1bb9273255ad86f0aded747c2 (diff)
downloadmv-b3f55809a8a56a5acf180371f05163091263cbda.tar.gz
mv-b3f55809a8a56a5acf180371f05163091263cbda.tar.bz2
mv-b3f55809a8a56a5acf180371f05163091263cbda.tar.xz
mv-b3f55809a8a56a5acf180371f05163091263cbda.zip
Fix npc menu focus/defocus issue.
-rw-r--r--src/game.cpp11
-rw-r--r--src/gui/npcdialog.cpp11
-rw-r--r--src/gui/npcdialog.h2
3 files changed, 19 insertions, 5 deletions
diff --git a/src/game.cpp b/src/game.cpp
index ae8682972..a0c2a6151 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -803,12 +803,13 @@ bool Game::handleSwitchKeys(SDL_Event &event, bool &used)
used = true;
}
}
- if (dialog)
+ if (dialog && !dialog->isInputFocused())
{
- if (keyboard.isActionActive(keyboard.KEY_MOVE_UP))
- dialog->move(1);
- else if (keyboard.isActionActive(keyboard.KEY_MOVE_DOWN))
- dialog->move(-1);
+ if (keyboard.isActionActive(keyboard.KEY_MOVE_UP)
+ || keyboard.isActionActive(keyboard.KEY_MOVE_DOWN))
+ {
+ dialog->refocus();
+ }
}
}
diff --git a/src/gui/npcdialog.cpp b/src/gui/npcdialog.cpp
index 362d9db9d..1aeb76ec2 100644
--- a/src/gui/npcdialog.cpp
+++ b/src/gui/npcdialog.cpp
@@ -342,9 +342,20 @@ void NpcDialog::parseListItems(const std::string &itemString)
mItems.push_back(tmp);
if (!mItems.empty())
+ {
mItemList->setSelected(0);
+ mItemList->requestFocus();
+ }
else
+ {
mItemList->setSelected(-1);
+ }
+}
+
+void NpcDialog::refocus()
+{
+ if (!mItems.empty())
+ mItemList->requestFocus();
}
void NpcDialog::textRequest(const std::string &defaultText)
diff --git a/src/gui/npcdialog.h b/src/gui/npcdialog.h
index d4288d5c9..7bd2ee76d 100644
--- a/src/gui/npcdialog.h
+++ b/src/gui/npcdialog.h
@@ -177,6 +177,8 @@ class NpcDialog : public Window, public gcn::ActionListener,
void restoreCamera();
+ void refocus();
+
private:
typedef std::list<NpcDialog*> DialogList;
static DialogList instances;