tGTK+ client now uses non-blocking code for metaserver. Relevant menus now use "..." suffix - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit bce5d9d56bd8cd0ef9bdb81fac746430140d34da
 (DIR) parent 82bba80eb18e42f467ac48c59d6222711170cb70
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sun,  9 Sep 2001 21:39:43 +0000
       
       GTK+ client now uses non-blocking code for metaserver. Relevant menus now use "..." suffix
       
       
       Diffstat:
         M po/de.po                            |      48 ++++++++++++++++----------------
         M po/fr.po                            |      46 ++++++++++++++++----------------
         M po/pl.po                            |      48 ++++++++++++++++----------------
         M po/pt_BR.po                         |      48 ++++++++++++++++----------------
         M src/gtk_client.c                    |     101 ++++++++++++++++++++++---------
       
       5 files changed, 169 insertions(+), 122 deletions(-)
       ---
 (DIR) diff --git a/po/de.po b/po/de.po
       t@@ -1654,68 +1654,68 @@ msgid "/_Game"
        msgstr "/_Spiel"
        
        #: src/gtk_client.c:147
       -msgid "/Game/_New"
       -msgstr "/Spiel/_Neu"
       +msgid "/Game/_New..."
       +msgstr "/Spiel/_Neu..."
        
        #: src/gtk_client.c:148
       -msgid "/Game/_Quit"
       -msgstr "/Spiel/_Ende"
       +msgid "/Game/_Quit..."
       +msgstr "/Spiel/_Ende..."
        
        #: src/gtk_client.c:149
        msgid "/_Talk"
        msgstr "/_Mitteilung"
        
        #: src/gtk_client.c:150
       -msgid "/Talk/To _All"
       -msgstr "/Mitteilung/An _Alle"
       +msgid "/Talk/To _All..."
       +msgstr "/Mitteilung/An _Alle..."
        
        #: src/gtk_client.c:151
       -msgid "/Talk/To _Player"
       -msgstr "/Mitteilung/An _Spieler"
       +msgid "/Talk/To _Player..."
       +msgstr "/Mitteilung/An _Spieler..."
        
        #: src/gtk_client.c:152
        msgid "/_List"
        msgstr "/_Anzeigen"
        
        #: src/gtk_client.c:153
       -msgid "/List/_Players"
       -msgstr "/Anzeigen/der _Spieler"
       +msgid "/List/_Players..."
       +msgstr "/Anzeigen/der _Spieler..."
        
        #: src/gtk_client.c:154
       -msgid "/List/_Scores"
       -msgstr "/Anzeigen/der _Punkte"
       +msgid "/List/_Scores..."
       +msgstr "/Anzeigen/der _Punkte..."
        
        #: src/gtk_client.c:155
       -msgid "/List/_Inventory"
       -msgstr "/Anzeigen/des _Inventars"
       +msgid "/List/_Inventory..."
       +msgstr "/Anzeigen/des _Inventars..."
        
        #: src/gtk_client.c:156
        msgid "/_Errands"
        msgstr "/_Aktionen"
        
        #: src/gtk_client.c:157
       -msgid "/Errands/_Spy"
       -msgstr "/Aktionen/_Spionieren"
       +msgid "/Errands/_Spy..."
       +msgstr "/Aktionen/_Spionieren..."
        
        #: src/gtk_client.c:158
       -msgid "/Errands/_Tipoff"
       -msgstr "/Aktionen/_Verpfeifen"
       +msgid "/Errands/_Tipoff..."
       +msgstr "/Aktionen/_Verpfeifen..."
        
        #: src/gtk_client.c:159
       -msgid "/Errands/Sack _Bitch"
       -msgstr "/Aktionen/Töte _Hure"
       +msgid "/Errands/Sack _Bitch..."
       +msgstr "/Aktionen/Töte _Hure..."
        
        #: src/gtk_client.c:160
       -msgid "/Errands/_Get spy reports"
       -msgstr "/Aktionen/_Lese Spionagereport"
       +msgid "/Errands/_Get spy reports..."
       +msgstr "/Aktionen/_Lese Spionagereport..."
        
        #: src/gtk_client.c:161
        msgid "/_Help"
        msgstr "/_Hilfe"
        
        #: src/gtk_client.c:162
       -msgid "/Help/_About"
       -msgstr "/Hilfe/_Ueber"
       +msgid "/Help/_About..."
       +msgstr "/Hilfe/_Ueber..."
        
        #. Titles of the message boxes for warnings and errors
        #: src/gtk_client.c:174
 (DIR) diff --git a/po/fr.po b/po/fr.po
       t@@ -1660,11 +1660,11 @@ msgid "/_Game"
        msgstr "/_Jeu"
        
        #: src/gtk_client.c:147
       -msgid "/Game/_New"
       -msgstr "/Jeu/_Nouveau"
       +msgid "/Game/_New..."
       +msgstr "/Jeu/_Nouveau..."
        
        #: src/gtk_client.c:148
       -msgid "/Game/_Quit"
       +msgid "/Game/_Quit..."
        msgstr "/Jeu/_Quitter"
        
        #: src/gtk_client.c:149
       t@@ -1672,56 +1672,56 @@ msgid "/_Talk"
        msgstr "/_Parler"
        
        #: src/gtk_client.c:150
       -msgid "/Talk/To _All"
       -msgstr "/Parler/A _Tous"
       +msgid "/Talk/To _All..."
       +msgstr "/Parler/A _Tous..."
        
        #: src/gtk_client.c:151
       -msgid "/Talk/To _Player"
       -msgstr "/Parler/A _joueur"
       +msgid "/Talk/To _Player..."
       +msgstr "/Parler/A _joueur..."
        
        #: src/gtk_client.c:152
        msgid "/_List"
        msgstr "/_Liste"
        
        #: src/gtk_client.c:153
       -msgid "/List/_Players"
       -msgstr "/Liste/_Joueurs"
       +msgid "/List/_Players..."
       +msgstr "/Liste/_Joueurs..."
        
        #: src/gtk_client.c:154
       -msgid "/List/_Scores"
       -msgstr "/Liste/_Scores"
       +msgid "/List/_Scores..."
       +msgstr "/Liste/_Scores..."
        
        #: src/gtk_client.c:155
       -msgid "/List/_Inventory"
       -msgstr "/Liste/_Inventaire"
       +msgid "/List/_Inventory..."
       +msgstr "/Liste/_Inventaire..."
        
        #: src/gtk_client.c:156
        msgid "/_Errands"
        msgstr "/_Taches"
        
        #: src/gtk_client.c:157
       -msgid "/Errands/_Spy"
       -msgstr "/Taches/_Espionner"
       +msgid "/Errands/_Spy..."
       +msgstr "/Taches/_Espionner..."
        
        #: src/gtk_client.c:158
       -msgid "/Errands/_Tipoff"
       -msgstr "/Taches/_Balancer"
       +msgid "/Errands/_Tipoff..."
       +msgstr "/Taches/_Balancer..."
        
        #: src/gtk_client.c:159
       -msgid "/Errands/Sack _Bitch"
       -msgstr "/Taches/Balancer _Salope"
       +msgid "/Errands/Sack _Bitch..."
       +msgstr "/Taches/Balancer _Salope..."
        
        #: src/gtk_client.c:160
       -msgid "/Errands/_Get spy reports"
       -msgstr "/Taches/_Rapports des espions"
       +msgid "/Errands/_Get spy reports..."
       +msgstr "/Taches/_Rapports des espions..."
        
        #: src/gtk_client.c:161
        msgid "/_Help"
        msgstr "/_Aide"
        
        #: src/gtk_client.c:162
       -msgid "/Help/_About"
       -msgstr "/Aide/_A propos"
       +msgid "/Help/_About..."
       +msgstr "/Aide/_A propos..."
        
        #. Titles of the message boxes for warnings and errors
        #: src/gtk_client.c:174
 (DIR) diff --git a/po/pl.po b/po/pl.po
       t@@ -1651,68 +1651,68 @@ msgid "/_Game"
        msgstr "/_Gra"
        
        #: src/gtk_client.c:147
       -msgid "/Game/_New"
       -msgstr "/Gra/_Nowa"
       +msgid "/Game/_New..."
       +msgstr "/Gra/_Nowa..."
        
        #: src/gtk_client.c:148
       -msgid "/Game/_Quit"
       -msgstr "/Gra/_Wyjście"
       +msgid "/Game/_Quit..."
       +msgstr "/Gra/_Wyjście..."
        
        #: src/gtk_client.c:149
        msgid "/_Talk"
        msgstr "/_Rozmowa"
        
        #: src/gtk_client.c:150
       -msgid "/Talk/To _All"
       -msgstr "/Rozmowa/Ze _Wszystkimi"
       +msgid "/Talk/To _All..."
       +msgstr "/Rozmowa/Ze _Wszystkimi..."
        
        #: src/gtk_client.c:151
       -msgid "/Talk/To _Player"
       -msgstr "/Rozmowa/Z _Graczem"
       +msgid "/Talk/To _Player..."
       +msgstr "/Rozmowa/Z _Graczem..."
        
        #: src/gtk_client.c:152
        msgid "/_List"
        msgstr "/Z_obacz"
        
        #: src/gtk_client.c:153
       -msgid "/List/_Players"
       -msgstr "/Zobacz/_Graczy"
       +msgid "/List/_Players..."
       +msgstr "/Zobacz/_Graczy..."
        
        #: src/gtk_client.c:154
       -msgid "/List/_Scores"
       -msgstr "/Zobacz/_Wynik"
       +msgid "/List/_Scores..."
       +msgstr "/Zobacz/_Wynik..."
        
        #: src/gtk_client.c:155
       -msgid "/List/_Inventory"
       -msgstr "/Zobacz/_Plecak"
       +msgid "/List/_Inventory..."
       +msgstr "/Zobacz/_Plecak..."
        
        #: src/gtk_client.c:156
        msgid "/_Errands"
        msgstr "/_Zlecenia"
        
        #: src/gtk_client.c:157
       -msgid "/Errands/_Spy"
       -msgstr "/Zlecenia/_Szpiegowanie"
       +msgid "/Errands/_Spy..."
       +msgstr "/Zlecenia/_Szpiegowanie..."
        
        #: src/gtk_client.c:158
       -msgid "/Errands/_Tipoff"
       -msgstr "/Zlecenia/_Zasadzka"
       +msgid "/Errands/_Tipoff..."
       +msgstr "/Zlecenia/_Zasadzka..."
        
        #: src/gtk_client.c:159
       -msgid "/Errands/Sack _Bitch"
       -msgstr "/Zlecenia/Zwolnij _dziwkę"
       +msgid "/Errands/Sack _Bitch..."
       +msgstr "/Zlecenia/Zwolnij _dziwkę..."
        
        #: src/gtk_client.c:160
       -msgid "/Errands/_Get spy reports"
       -msgstr "/Zlecenia/_Raport szpiegowski"
       +msgid "/Errands/_Get spy reports..."
       +msgstr "/Zlecenia/_Raport szpiegowski..."
        
        #: src/gtk_client.c:161
        msgid "/_Help"
        msgstr "/_Pomoc"
        
        #: src/gtk_client.c:162
       -msgid "/Help/_About"
       -msgstr "/Pomoc/_O programie"
       +msgid "/Help/_About..."
       +msgstr "/Pomoc/_O programie..."
        
        #. Titles of the message boxes for warnings and errors
        #: src/gtk_client.c:174
 (DIR) diff --git a/po/pt_BR.po b/po/pt_BR.po
       t@@ -1662,68 +1662,68 @@ msgid "/_Game"
        msgstr "/_Jogo"
        
        #: src/gtk_client.c:147
       -msgid "/Game/_New"
       -msgstr "/Jogo/_Novo"
       +msgid "/Game/_New..."
       +msgstr "/Jogo/_Novo..."
        
        #: src/gtk_client.c:148
       -msgid "/Game/_Quit"
       -msgstr "/Jogo/_Sair"
       +msgid "/Game/_Quit..."
       +msgstr "/Jogo/_Sair..."
        
        #: src/gtk_client.c:149
        msgid "/_Talk"
        msgstr "/_Falar"
        
        #: src/gtk_client.c:150
       -msgid "/Talk/To _All"
       -msgstr "/Falar/Para _Todos"
       +msgid "/Talk/To _All..."
       +msgstr "/Falar/Para _Todos..."
        
        #: src/gtk_client.c:151
       -msgid "/Talk/To _Player"
       -msgstr "/Falar/Para um _Jogador"
       +msgid "/Talk/To _Player..."
       +msgstr "/Falar/Para um _Jogador..."
        
        #: src/gtk_client.c:152
        msgid "/_List"
        msgstr "/_Listar"
        
        #: src/gtk_client.c:153
       -msgid "/List/_Players"
       -msgstr "/Listar/_Jogadores"
       +msgid "/List/_Players..."
       +msgstr "/Listar/_Jogadores..."
        
        #: src/gtk_client.c:154
       -msgid "/List/_Scores"
       -msgstr "/Listar/_Pontuaçőes"
       +msgid "/List/_Scores..."
       +msgstr "/Listar/_Pontuaçőes..."
        
        #: src/gtk_client.c:155
       -msgid "/List/_Inventory"
       -msgstr "/Listar/_Inventório"
       +msgid "/List/_Inventory..."
       +msgstr "/Listar/_Inventório..."
        
        #: src/gtk_client.c:156
        msgid "/_Errands"
        msgstr "/_Trabalhos"
        
        #: src/gtk_client.c:157
       -msgid "/Errands/_Spy"
       -msgstr "/Trabalhos/_Espionar"
       +msgid "/Errands/_Spy..."
       +msgstr "/Trabalhos/_Espionar..."
        
        #: src/gtk_client.c:158
       -msgid "/Errands/_Tipoff"
       -msgstr "/Trabalhos/_Atrair"
       +msgid "/Errands/_Tipoff..."
       +msgstr "/Trabalhos/_Atrair..."
        
        #: src/gtk_client.c:159
       -msgid "/Errands/Sack _Bitch"
       -msgstr "/Trabalhos/Demitir _Puta"
       +msgid "/Errands/Sack _Bitch..."
       +msgstr "/Trabalhos/Demitir _Puta..."
        
        #: src/gtk_client.c:160
       -msgid "/Errands/_Get spy reports"
       -msgstr "/Trabalhos/_Pegar informaçőes de espionagem"
       +msgid "/Errands/_Get spy reports..."
       +msgstr "/Trabalhos/_Pegar informaçőes de espionagem..."
        
        #: src/gtk_client.c:161
        msgid "/_Help"
        msgstr "/_Ajudar"
        
        #: src/gtk_client.c:162
       -msgid "/Help/_About"
       -msgstr "/Ajudar/_Sobre"
       +msgid "/Help/_About..."
       +msgstr "/Ajudar/_Sobre..."
        
        #. Titles of the message boxes for warnings and errors
        #: src/gtk_client.c:174
 (DIR) diff --git a/src/gtk_client.c b/src/gtk_client.c
       t@@ -74,9 +74,9 @@ struct ClientDataStruct {
        static struct ClientDataStruct ClientData;
        static gboolean InGame=FALSE;
        
       -#ifdef NETWORKING
       +/*#ifdef NETWORKING
        static gboolean MetaServerRead=FALSE;
       -#endif
       +#endif*/
        
        static GtkWidget *FightDialog=NULL,*SpyReportsDialog;
        static gboolean IsShowingPlayerList=FALSE,IsShowingTalkList=FALSE,
       t@@ -144,22 +144,22 @@ static void DisplaySpyReports(Player *Play);
        static GtkItemFactoryEntry menu_items[] = {
        /* The names of the the menus and their items in the GTK+ client */
           { N_("/_Game"),NULL,NULL,0,"<Branch>" },
       -   { N_("/Game/_New"),"<control>N",NewGame,0,NULL },
       -   { N_("/Game/_Quit"),"<control>Q",QuitGame,0,NULL },
       +   { N_("/Game/_New..."),"<control>N",NewGame,0,NULL },
       +   { N_("/Game/_Quit..."),"<control>Q",QuitGame,0,NULL },
           { N_("/_Talk"),NULL,NULL,0,"<Branch>" },
       -   { N_("/Talk/To _All"),NULL,TalkToAll,0,NULL },
       -   { N_("/Talk/To _Player"),NULL,TalkToPlayers,0,NULL },
       +   { N_("/Talk/To _All..."),NULL,TalkToAll,0,NULL },
       +   { N_("/Talk/To _Player..."),NULL,TalkToPlayers,0,NULL },
           { N_("/_List"),NULL,NULL,0,"<Branch>" },
       -   { N_("/List/_Players"),NULL,ListPlayers,0,NULL },
       -   { N_("/List/_Scores"),NULL,ListScores,0,NULL },
       -   { N_("/List/_Inventory"),NULL,ListInventory,0,NULL },
       +   { N_("/List/_Players..."),NULL,ListPlayers,0,NULL },
       +   { N_("/List/_Scores..."),NULL,ListScores,0,NULL },
       +   { N_("/List/_Inventory..."),NULL,ListInventory,0,NULL },
           { N_("/_Errands"),NULL,NULL,0,"<Branch>" },
       -   { N_("/Errands/_Spy"),NULL,SpyOnPlayer,0,NULL },
       -   { N_("/Errands/_Tipoff"),NULL,TipOff,0,NULL },
       -   { N_("/Errands/Sack _Bitch"),NULL,SackBitch,0,NULL },
       -   { N_("/Errands/_Get spy reports"),NULL,GetSpyReports,0,NULL },
       +   { N_("/Errands/_Spy..."),NULL,SpyOnPlayer,0,NULL },
       +   { N_("/Errands/_Tipoff..."),NULL,TipOff,0,NULL },
       +   { N_("/Errands/Sack _Bitch..."),NULL,SackBitch,0,NULL },
       +   { N_("/Errands/_Get spy reports..."),NULL,GetSpyReports,0,NULL },
           { N_("/_Help"),NULL,NULL,0,"<LastBranch>" },
       -   { N_("/Help/_About"),"F1",display_intro,0,NULL }
       +   { N_("/Help/_About..."),"F1",display_intro,0,NULL }
        };
        
        static gchar *MenuTranslate(const gchar *path,gpointer func_data) {
       t@@ -282,6 +282,7 @@ void GetClientMessage(gpointer data,gint socket,
                 g_warning(_("Connection to server lost - switching to "
                           "single player mode"));
                 SwitchToSinglePlayer(ClientData.Play);
       +         UpdateMenus();
              }
           }
        }
       t@@ -327,12 +328,14 @@ void HandleClientMessage(char *pt,Player *Play) {
        /* The server admin has asked us to leave - so warn the user, and do so */
                 g_warning(_("You have been pushed from the server."));
                 SwitchToSinglePlayer(Play);
       +         UpdateMenus();
                 break;
              case C_QUIT:
                 if (Network) gdk_input_remove(ClientData.GdkInputTag);
        /* The server has sent us notice that it is shutting down */
                 g_warning(_("The server has terminated."));
                 SwitchToSinglePlayer(Play);
       +         UpdateMenus();
                 break;
              case C_NEWNAME:
                 NewNameDialog(); break;
       t@@ -381,7 +384,7 @@ void HandleClientMessage(char *pt,Player *Play) {
                 break;
              case C_ENDLIST:
                 MenuItem=gtk_item_factory_get_widget(ClientData.Menu,
       -                                              "<main>/Errands/Spy");
       +                                              "<main>/Errands/Spy...");
        
        /* Text to update the Errands/Spy menu item with the price for spying */
                 text=dpg_strdup_printf(_("_Spy\t(%P)"),Prices.Spy);
       t@@ -391,7 +394,7 @@ void HandleClientMessage(char *pt,Player *Play) {
        /* Text to update the Errands/Tipoff menu item with the price for a tipoff */
                 text=dpg_strdup_printf(_("_Tipoff\t(%P)"),Prices.Tipoff);
                 MenuItem=gtk_item_factory_get_widget(ClientData.Menu,
       -                                              "<main>/Errands/Tipoff");
       +                                              "<main>/Errands/Tipoff...");
                 SetAccelerator(MenuItem,text,NULL,NULL,NULL);
                 g_free(text);
                 if (FirstClient->next) ListPlayers(NULL,NULL);
       t@@ -1597,17 +1600,17 @@ void UpdateMenus() {
           gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu,
                                    "<main>/List"),InGame);
           gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu,
       -                            "<main>/List/Players"),InGame && Network);
       +                            "<main>/List/Players..."),InGame && Network);
           gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu,
                                    "<main>/Errands"),InGame);
           gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu,
       -                            "<main>/Errands/Spy"),InGame && MultiPlayer);
       +                            "<main>/Errands/Spy..."),InGame && MultiPlayer);
           gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu,
       -                            "<main>/Errands/Tipoff"),InGame && MultiPlayer);
       +                            "<main>/Errands/Tipoff..."),InGame && MultiPlayer);
           gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu,
       -                            "<main>/Errands/Sack Bitch"),Bitches>0);
       +                            "<main>/Errands/Sack Bitch..."),Bitches>0);
           gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu,
       -                            "<main>/Errands/Get spy reports"),
       +                            "<main>/Errands/Get spy reports..."),
                                    InGame && MultiPlayer);
        }
        
       t@@ -1881,7 +1884,8 @@ _("\nFor information on the command line options, type dopewars -h at your\n"
        
        struct StartGameStruct {
           GtkWidget *dialog,*name,*hostname,*port,*antique,*status,*metaserv;
       -   gint ConnectTag;
       +   gint ConnectTag,MetaTag;
       +   HttpConnection *MetaConn;
        };
        
        #ifdef NETWORKING
       t@@ -1976,11 +1980,47 @@ static void FillMetaServerList(struct StartGameStruct *widgets) {
           gtk_clist_thaw(GTK_CLIST(metaserv));
        }
        
       +static void HandleMetaSock(gpointer data,gint socket,
       +                           GdkInputCondition condition) {
       +   struct StartGameStruct *widgets;
       +   gboolean DoneOK;
       +
       +   widgets=(struct StartGameStruct *)data;
       +   if (!widgets->MetaConn) return;
       +
       +   if (NetBufHandleNetwork(&widgets->MetaConn->NetBuf,condition&GDK_INPUT_READ,
       +                           condition&GDK_INPUT_WRITE,&DoneOK)) {
       +      while (HandleWaitingMetaServerData(widgets->MetaConn)) {}
       +   }
       +   if (!DoneOK) {
       +      g_print("Metaserver communicated closed\n");
       +      gdk_input_remove(widgets->MetaTag);
       +      CloseHttpConnection(widgets->MetaConn);
       +      widgets->MetaTag=0; widgets->MetaConn=NULL;
       +      FillMetaServerList(widgets);
       +   }
       +}
       +
        static void UpdateMetaServerList(GtkWidget *widget,
                                         struct StartGameStruct *widgets) {
       -   char *MetaError;
       -   int HttpSock;
       -   MetaError=OpenMetaServerConnection(&HttpSock);
       +/* char *MetaError;
       +   int HttpSock;*/
       +
       +   if (widgets->MetaTag) {
       +      gdk_input_remove(widgets->MetaTag);
       +      CloseHttpConnection(widgets->MetaConn);
       +      widgets->MetaTag=0; widgets->MetaConn=NULL;
       +   }
       +
       +   widgets->MetaConn = OpenMetaHttpConnection();
       +
       +   if (widgets->MetaConn) {
       +      widgets->MetaTag = gdk_input_add(widgets->MetaConn->NetBuf.fd,
       +                                       GDK_INPUT_READ|GDK_INPUT_WRITE,
       +                                       HandleMetaSock,(gpointer)widgets);
       +   }
       +
       +/* MetaError=OpenMetaServerConnection(&HttpSock);
        
           if (MetaError) {
              return;
       t@@ -1988,7 +2028,7 @@ static void UpdateMetaServerList(GtkWidget *widget,
           ReadMetaServerData(HttpSock);
           CloseMetaServerConnection(HttpSock);
           MetaServerRead=TRUE;
       -   FillMetaServerList(widgets);
       +   FillMetaServerList(widgets);*/
        }
        
        static void MetaServerConnect(GtkWidget *widget,
       t@@ -2028,11 +2068,16 @@ static void StartSinglePlayer(GtkWidget *widget,
        static void CloseNewGameDia(GtkWidget *widget,
                                    struct StartGameStruct *widgets) {
        #ifdef NETWORKING
       -   if (widgets->ConnectTag!=0) {
       +   if (widgets->ConnectTag) {
              gdk_input_remove(widgets->ConnectTag);
              CloseSocket(ClientSock);
              widgets->ConnectTag=0;
           }
       +   if (widgets->MetaTag) {
       +      gdk_input_remove(widgets->MetaTag);
       +      CloseHttpConnection(widgets->MetaConn);
       +      widgets->MetaTag=0; widgets->MetaConn=NULL;
       +   }
        #endif
        }
        
       t@@ -2056,6 +2101,8 @@ void NewGameDialog() {
        #endif /* NETWORKING */
        
           widgets.ConnectTag=0;
       +   widgets.MetaTag=0; widgets.MetaConn=NULL;
       +
           widgets.dialog=dialog=gtk_window_new(GTK_WINDOW_DIALOG);
           gtk_signal_connect(GTK_OBJECT(dialog),"destroy",
                              GTK_SIGNAL_FUNC(CloseNewGameDia),