diff --git a/cockatrice/src/chatview/chatview.cpp b/cockatrice/src/chatview/chatview.cpp index 2b205c31..f5ed721a 100644 --- a/cockatrice/src/chatview/chatview.cpp +++ b/cockatrice/src/chatview/chatview.cpp @@ -21,7 +21,7 @@ UserMessagePosition::UserMessagePosition(QTextCursor &cursor) relativePosition = cursor.position() - block.position(); } -ChatView::ChatView(const TabSupervisor *_tabSupervisor, +ChatView::ChatView(TabSupervisor *_tabSupervisor, const UserlistProxy *_userlistProxy, TabGame *_game, bool _showTimestamps, diff --git a/cockatrice/src/chatview/chatview.h b/cockatrice/src/chatview/chatview.h index 3b50f78d..e111354a 100644 --- a/cockatrice/src/chatview/chatview.h +++ b/cockatrice/src/chatview/chatview.h @@ -33,7 +33,7 @@ class ChatView : public QTextBrowser { Q_OBJECT protected: - const TabSupervisor *const tabSupervisor; + TabSupervisor *const tabSupervisor; TabGame *const game; private: @@ -83,7 +83,7 @@ private slots: void actMessageClicked(); public: - ChatView(const TabSupervisor *_tabSupervisor, + ChatView(TabSupervisor *_tabSupervisor, const UserlistProxy *_userlistProxy, TabGame *_game, bool _showTimestamps, diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 53c2c1f6..2b02ea6a 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -10,6 +10,7 @@ #include "pb/serverinfo_game.pb.h" #include "pending_command.h" #include "tab_account.h" +#include "tab_game.h" #include "tab_room.h" #include "tab_supervisor.h" @@ -26,7 +27,7 @@ #include GameSelector::GameSelector(AbstractClient *_client, - const TabSupervisor *_tabSupervisor, + TabSupervisor *_tabSupervisor, TabRoom *_room, const QMap &_rooms, const QMap &_gameTypes, @@ -239,6 +240,9 @@ void GameSelector::actJoin() if (!ind.isValid()) return; const ServerInfo_Game &game = gameListModel->getGame(ind.data(Qt::UserRole).toInt()); + if (tabSupervisor->switchToGameTabIfAlreadyExists(game.game_id())) { + return; + } bool spectator = sender() == spectateButton || game.player_count() == game.max_players(); bool overrideRestrictions = !tabSupervisor->getAdminLocked(); QString password; diff --git a/cockatrice/src/gameselector.h b/cockatrice/src/gameselector.h index e04ec905..334e32b2 100644 --- a/cockatrice/src/gameselector.h +++ b/cockatrice/src/gameselector.h @@ -38,7 +38,7 @@ signals: private: AbstractClient *client; - const TabSupervisor *tabSupervisor; + TabSupervisor *tabSupervisor; TabRoom *room; QTreeView *gameListView; @@ -52,7 +52,7 @@ private: public: GameSelector(AbstractClient *_client, - const TabSupervisor *_tabSupervisor, + TabSupervisor *_tabSupervisor, TabRoom *_room, const QMap &_rooms, const QMap &_gameTypes, diff --git a/cockatrice/src/messagelogwidget.cpp b/cockatrice/src/messagelogwidget.cpp index 232a21db..7d630b06 100644 --- a/cockatrice/src/messagelogwidget.cpp +++ b/cockatrice/src/messagelogwidget.cpp @@ -831,7 +831,7 @@ void MessageLogWidget::connectToPlayer(Player *player) SLOT(logAlwaysLookAtTopCard(Player *, CardZone *, bool))); } -MessageLogWidget::MessageLogWidget(const TabSupervisor *_tabSupervisor, +MessageLogWidget::MessageLogWidget(TabSupervisor *_tabSupervisor, const UserlistProxy *_userlistProxy, TabGame *_game, QWidget *parent) diff --git a/cockatrice/src/messagelogwidget.h b/cockatrice/src/messagelogwidget.h index f74a071a..6e2e75b5 100644 --- a/cockatrice/src/messagelogwidget.h +++ b/cockatrice/src/messagelogwidget.h @@ -102,7 +102,7 @@ public slots: public: void connectToPlayer(Player *player); - MessageLogWidget(const TabSupervisor *_tabSupervisor, + MessageLogWidget(TabSupervisor *_tabSupervisor, const UserlistProxy *_userlistProxy, TabGame *_game, QWidget *parent = nullptr); diff --git a/cockatrice/src/tab_supervisor.cpp b/cockatrice/src/tab_supervisor.cpp index c2475c21..ed7339b2 100644 --- a/cockatrice/src/tab_supervisor.cpp +++ b/cockatrice/src/tab_supervisor.cpp @@ -735,3 +735,16 @@ const ServerInfo_User *TabSupervisor::getOnlineUser(const QString &userName) con return nullptr; }; + +bool TabSupervisor::switchToGameTabIfAlreadyExists(const int gameId) +{ + bool isGameTabExists = false; + if (gameTabs.contains(gameId)) { + isGameTabExists = true; + TabGame *tabGame = gameTabs[gameId]; + const int gameTabIndex = indexOf(tabGame); + setCurrentIndex(gameTabIndex); + } + + return isGameTabExists; +} diff --git a/cockatrice/src/tab_supervisor.h b/cockatrice/src/tab_supervisor.h index 7045e4f9..1e4c0f94 100644 --- a/cockatrice/src/tab_supervisor.h +++ b/cockatrice/src/tab_supervisor.h @@ -120,6 +120,7 @@ public: bool isUserBuddy(const QString &userName) const; bool isUserIgnored(const QString &userName) const; const ServerInfo_User *getOnlineUser(const QString &userName) const; + bool switchToGameTabIfAlreadyExists(const int gameId); void actShowPopup(const QString &message); signals: void setMenu(const QList &newMenuList = QList()); diff --git a/cockatrice/src/user_context_menu.cpp b/cockatrice/src/user_context_menu.cpp index 18d0f42a..4d89f7b3 100644 --- a/cockatrice/src/user_context_menu.cpp +++ b/cockatrice/src/user_context_menu.cpp @@ -26,7 +26,7 @@ #include #include -UserContextMenu::UserContextMenu(const TabSupervisor *_tabSupervisor, QWidget *parent, TabGame *_game) +UserContextMenu::UserContextMenu(TabSupervisor *_tabSupervisor, QWidget *parent, TabGame *_game) : QObject(parent), client(_tabSupervisor->getClient()), tabSupervisor(_tabSupervisor), game(_game) { aUserName = new QAction(QString(), this); diff --git a/cockatrice/src/user_context_menu.h b/cockatrice/src/user_context_menu.h index 3612ea44..848f9ecc 100644 --- a/cockatrice/src/user_context_menu.h +++ b/cockatrice/src/user_context_menu.h @@ -21,7 +21,7 @@ class UserContextMenu : public QObject Q_OBJECT private: AbstractClient *client; - const TabSupervisor *tabSupervisor; + TabSupervisor *tabSupervisor; TabGame *game; QAction *aUserName; @@ -49,7 +49,7 @@ private slots: void gamesOfUserReceived(const Response &resp, const CommandContainer &commandContainer); public: - UserContextMenu(const TabSupervisor *_tabSupervisor, QWidget *_parent, TabGame *_game = 0); + UserContextMenu(TabSupervisor *_tabSupervisor, QWidget *_parent, TabGame *_game = 0); void retranslateUi(); void showContextMenu(const QPoint &pos, const QString &userName,