summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--README3
-rw-r--r--src/engine.cpp4
-rw-r--r--src/game.cpp91
-rw-r--r--src/gui/chat.cpp10
-rw-r--r--src/gui/chat.h8
6 files changed, 73 insertions, 44 deletions
diff --git a/ChangeLog b/ChangeLog
index c797f3e1..b5291aa4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,5 @@
0.0.11 (.... 2005)
+- Fixed get item button and chatWindow: Enter (de)focuses chat window
- Added walking with mouse by clicking where you want to go
- Chat now appears in a window
- More complete support for new map format (collision, compression)
diff --git a/README b/README
index 6322f605..a4d6c8f4 100644
--- a/README
+++ b/README
@@ -61,7 +61,8 @@ talk to them. Other keys:
- F6 toggle debug pathfinding feature
- F11 raise volume
- F12 lower volume
-- G get item
+- G get item
+- Enter focus chat window / send message
- Alt + K show skills
- Alt + S show stats
- Alt + I show inventory
diff --git a/src/engine.cpp b/src/engine.cpp
index 0359e19f..1a60e6c3 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -184,8 +184,8 @@ Engine::Engine()
screen->w - 5 - chargeDialog->getWidth(),
screen->h - chargeDialog->getHeight() - 15);
- // Give focus to chat window
- chatWindow->requestFocus();
+ // Do not focus any text field
+ gui->focusNone();
// Load the sprite sets
ResourceManager *resman = ResourceManager::getInstance();
diff --git a/src/game.cpp b/src/game.cpp
index c9d611bf..77bb83c3 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -175,6 +175,15 @@ void do_input()
{
SDL_keysym keysym = event.key.keysym;
+ if (keysym.sym == SDLK_RETURN)
+ {
+ if (!chatWindow->isFocused())
+ {
+ chatWindow->requestFocus();
+ used = true;
+ }
+ }
+
if ((keysym.sym == SDLK_F5) && action_time)
{
if (player_node->action == STAND)
@@ -250,47 +259,50 @@ void do_input()
if (keysym.sym == SDLK_g)
{
// Get the item code
-
- int id = 0;
- id = find_floor_item_by_cor(player_node->x, player_node->y);
- if (id != 0)
+ if (!chatWindow->isFocused())
{
- WFIFOW(0) = net_w_value(0x009f);
- WFIFOL(2) = net_l_value(id);
- WFIFOSET(6);
- }
- else {
- switch (player_node->direction) {
- case NORTH:
- id = find_floor_item_by_cor(player_node->x, player_node->y-1);
- break;
- case SOUTH:
- id = find_floor_item_by_cor(player_node->x, player_node->y+1);
- break;
- case WEST:
- id = find_floor_item_by_cor(player_node->x-1, player_node->y);
- break;
- case EAST:
- id = find_floor_item_by_cor(player_node->x+1, player_node->y);
- break;
- case NW:
- id = find_floor_item_by_cor(player_node->x-1, player_node->y-1);
- break;
- case NE:
- id = find_floor_item_by_cor(player_node->x+1, player_node->y-1);
- break;
- case SW:
- id = find_floor_item_by_cor(player_node->x-1, player_node->y+1);
- break;
- case SE:
- id = find_floor_item_by_cor(player_node->x+1, player_node->y+1);
- break;
- default:
- break;
+ used = true;
+ int id = 0;
+ id = find_floor_item_by_cor(player_node->x, player_node->y);
+ if (id != 0)
+ {
+ WFIFOW(0) = net_w_value(0x009f);
+ WFIFOL(2) = net_l_value(id);
+ WFIFOSET(6);
+ }
+ else {
+ switch (player_node->direction) {
+ case NORTH:
+ id = find_floor_item_by_cor(player_node->x, player_node->y-1);
+ break;
+ case SOUTH:
+ id = find_floor_item_by_cor(player_node->x, player_node->y+1);
+ break;
+ case WEST:
+ id = find_floor_item_by_cor(player_node->x-1, player_node->y);
+ break;
+ case EAST:
+ id = find_floor_item_by_cor(player_node->x+1, player_node->y);
+ break;
+ case NW:
+ id = find_floor_item_by_cor(player_node->x-1, player_node->y-1);
+ break;
+ case NE:
+ id = find_floor_item_by_cor(player_node->x+1, player_node->y-1);
+ break;
+ case SW:
+ id = find_floor_item_by_cor(player_node->x-1, player_node->y+1);
+ break;
+ case SE:
+ id = find_floor_item_by_cor(player_node->x+1, player_node->y+1);
+ break;
+ default:
+ break;
+ }
+ WFIFOW(0) = net_w_value(0x009f);
+ WFIFOL(2) = net_l_value(id);
+ WFIFOSET(6);
}
- WFIFOW(0) = net_w_value(0x009f);
- WFIFOL(2) = net_l_value(id);
- WFIFOSET(6);
}
}
@@ -415,6 +427,7 @@ void do_input()
player_node->direction = WEST;
}
else player_node->direction = WEST;
+
}
else if (keys[SDLK_RIGHT] || keys[SDLK_KP6])
{
diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp
index 253fb3f4..45c87ee8 100644
--- a/src/gui/chat.cpp
+++ b/src/gui/chat.cpp
@@ -188,6 +188,8 @@ void ChatWindow::action(const std::string& eventId)
chat_send(char_info[0].name, message.c_str());
chatInput->setText("");
}
+ gui->focusNone();
+
}
}
@@ -197,6 +199,11 @@ void ChatWindow::requestFocus()
chatInput->requestFocus();
}
+bool ChatWindow::isFocused()
+{
+ return chatInput->hasFocus();
+}
+
char *ChatWindow::chat_send(std::string nick, std::string msg)
{
short packid = 0x008c;
@@ -339,4 +346,5 @@ std::string ChatWindow::cut_string(std::string& value, unsigned int maximumLengt
}
return std::string("");
-} \ No newline at end of file
+}
+
diff --git a/src/gui/chat.h b/src/gui/chat.h
index db2d9843..ad3d5e39 100644
--- a/src/gui/chat.h
+++ b/src/gui/chat.h
@@ -136,7 +136,12 @@ class ChatWindow : public Window, public gcn::ActionListener {
* Request focus.
*/
void requestFocus();
-
+
+ /**
+ * Checks wether ChatWindow is Focused or not
+ */
+ bool isFocused();
+
/*
* Determines wether to send a command or an ordinary message, then
* contructs packets & sends them
@@ -196,3 +201,4 @@ class ChatWindow : public Window, public gcn::ActionListener {
};
#endif
+