Fix some internal logic mishaps wrt new lobby client side room part handling.

This commit is contained in:
Tomasz Śniatowski 2009-11-14 01:25:42 +01:00
parent f8bc4aa7db
commit 2f15ad254f
2 changed files with 9 additions and 1 deletions

View file

@ -475,6 +475,7 @@ void tlobby_main::update_gamelist()
void tlobby_main::update_playerlist()
{
DBG_LB << "Playerlist update: " << lobby_info_.users().size() << "\n";
lobby_info_.update_user_statuses(selected_game_id_, active_window_room());
lobby_info_.sort_users(player_list_.sort_by_name->get_value(), player_list_.sort_by_relation->get_value());
@ -865,6 +866,7 @@ void tlobby_main::active_window_changed()
void tlobby_main::close_active_window()
{
DBG_LB << "Close window button clicked\n";
return close_window(active_window_);
}
@ -872,6 +874,7 @@ void tlobby_main::close_window(size_t idx)
{
const tlobby_chat_window& t = open_windows_[idx];
bool active_changed = idx == active_window_;
DBG_LB << "Close window " << idx << " - " << t.name << "\n";
if (t.name == "lobby" && t.whisper == false) return;
if (open_windows_.size() == 1) return;
if (t.whisper == false) {
@ -984,6 +987,7 @@ void tlobby_main::process_room_join(const config &data)
const std::string& room = data["room"];
const std::string& player = data["player"];
room_info* r = lobby_info_.get_room(room);
DBG_LB << "room join: " << room << " " << player << " " << (void*)r << "\n";
if (r) {
if (player == preferences::login()) {
@ -1022,9 +1026,13 @@ void tlobby_main::process_room_part(const config &data)
//todo close room window when the part message is sent
const std::string& room = data["room"];
const std::string& player = data["player"];
DBG_LB << "Room part: " << room << " " << player << "\n";
room_info* r = lobby_info_.get_room(room);
if (r) {
r->remove_member(player);
if (active_window_room() == r) {
update_playerlist();
}
} else {
LOG_LB << "Discarding part info for a room the player is not in\n";
}

View file

@ -114,7 +114,7 @@ void user_info::update_state(int selected_game_id, const room_info* current_room
} else {
state = GAME;
}
} else if (state == LOBBY) {
} else {
if (current_room != NULL && current_room->is_member(name)) {
state = SEL_ROOM;
} else {