Author: cazfi
Date: Sat Aug 20 18:55:16 2016
New Revision: 33653

URL: http://svn.gna.org/viewcvs/freeciv?rev=33653&view=rev
Log:
Do not start menu music when the client leaves game with purpose to quit 
completely.

Reported by Jacob Nevins <jtn>

See bug #24844

Modified:
    trunk/client/client_main.c
    trunk/client/client_main.h
    trunk/client/gui-gtk-2.0/gui_main.c
    trunk/client/gui-gtk-3.0/gui_main.c
    trunk/client/gui-gtk-3.x/gui_main.c
    trunk/client/gui-qt/gui_main.cpp
    trunk/client/gui-sdl2/gui_main.c
    trunk/client/gui-stub/gui_main.c

Modified: trunk/client/client_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/client_main.c?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/client_main.c  (original)
+++ trunk/client/client_main.c  Sat Aug 20 18:55:16 2016
@@ -160,6 +160,8 @@
 #ifdef FREECIV_DEBUG
 bool hackless = FALSE;
 #endif
+
+static bool client_quitting = FALSE;
 
 /**************************************************************************
   Convert a text string from the internal to the data encoding, when it
@@ -846,8 +848,10 @@
   if (oldstate == C_S_RUNNING && newstate != C_S_PREPARING) {
     stop_style_music();
 
-    /* Back to menu */
-    start_menu_music("music_menu", NULL);
+    if (!is_client_quitting()) {
+      /* Back to menu */
+      start_menu_music("music_menu", NULL);
+    }
   }
 
   civclient_state = newstate;
@@ -1447,3 +1451,19 @@
 
   return NULL;
 }
+
+/****************************************************************************
+  Is the client marked as one going down?
+****************************************************************************/
+bool is_client_quitting(void)
+{
+  return client_quitting;
+}
+
+/****************************************************************************
+  Mark client as one going to quit as soon as possible,
+****************************************************************************/
+void start_quitting(void)
+{
+  client_quitting = TRUE;
+}

Modified: trunk/client/client_main.h
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/client_main.h?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/client_main.h  (original)
+++ trunk/client/client_main.h  Sat Aug 20 18:55:16 2016
@@ -1,4 +1,4 @@
-/********************************************************************** 
+/***********************************************************************
  Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -117,6 +117,9 @@
 
 void client_exit(void);
 
+bool is_client_quitting(void);
+void start_quitting(void);
+
 /* Set in GUI code. */
 extern const char * const gui_character_encoding;
 extern const bool gui_use_transliteration;

Modified: trunk/client/gui-gtk-2.0/gui_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-2.0/gui_main.c?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/gui-gtk-2.0/gui_main.c (original)
+++ trunk/client/gui-gtk-2.0/gui_main.c Sat Aug 20 18:55:16 2016
@@ -1583,12 +1583,12 @@
   gtk_window_set_title(GTK_WINDOW (toplevel), _("Freeciv"));
 
   g_signal_connect(toplevel, "delete_event",
-      G_CALLBACK(quit_dialog_callback), NULL);
+                   G_CALLBACK(quit_dialog_callback), NULL);
 
   /* Disable GTK+ cursor key focus movement */
   sig = g_signal_lookup("focus", GTK_TYPE_WIDGET);
   g_signal_handlers_disconnect_matched(toplevel, G_SIGNAL_MATCH_ID, sig,
-                                      0, 0, 0, 0);
+                                       0, 0, 0, 0);
   g_signal_connect(toplevel, "focus", G_CALLBACK(toplevel_focus), NULL);
 
 
@@ -1625,17 +1625,17 @@
   thick_line_gc = gdk_gc_new(root_window);
   border_line_gc = gdk_gc_new(root_window);
   gdk_gc_set_line_attributes(thin_line_gc, 1,
-                            GDK_LINE_SOLID,
-                            GDK_CAP_NOT_LAST,
-                            GDK_JOIN_MITER);
+                             GDK_LINE_SOLID,
+                             GDK_CAP_NOT_LAST,
+                             GDK_JOIN_MITER);
   gdk_gc_set_line_attributes(thick_line_gc, 2,
-                            GDK_LINE_SOLID,
-                            GDK_CAP_NOT_LAST,
-                            GDK_JOIN_MITER);
+                             GDK_LINE_SOLID,
+                             GDK_CAP_NOT_LAST,
+                             GDK_JOIN_MITER);
   gdk_gc_set_line_attributes(border_line_gc, BORDER_WIDTH,
-                            GDK_LINE_ON_OFF_DASH,
-                            GDK_CAP_NOT_LAST,
-                            GDK_JOIN_MITER);
+                             GDK_LINE_ON_OFF_DASH,
+                             GDK_CAP_NOT_LAST,
+                             GDK_JOIN_MITER);
 
   fill_tile_gc = gdk_gc_new(root_window);
   gdk_gc_set_fill(fill_tile_gc, GDK_STIPPLED);
@@ -1652,7 +1652,7 @@
 
   {
     GdkColor pixel;
-    
+
     mask_bitmap = gdk_pixmap_new(root_window, 1, 1, 1);
 
     mask_fg_gc = gdk_gc_new(mask_bitmap);
@@ -1696,13 +1696,14 @@
 
   /* assumes toplevel showing */
   set_client_state(C_S_DISCONNECTED);
-  
+
   /* assumes client_state is set */
   timer_id = g_timeout_add(TIMER_INTERVAL, timer_callback, NULL);
 
   gui_up = TRUE;
   gtk_main();
   gui_up = FALSE;
+  start_quitting();
 
   destroy_server_scans();
   free_mapcanvas_and_overview();

Modified: trunk/client/gui-gtk-3.0/gui_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.0/gui_main.c?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.0/gui_main.c (original)
+++ trunk/client/gui-gtk-3.0/gui_main.c Sat Aug 20 18:55:16 2016
@@ -1759,16 +1759,16 @@
   if (GUI_GTK_OPTION(fullscreen)) {
     gtk_window_fullscreen(GTK_WINDOW(toplevel));
   }
-  
+
   gtk_window_set_title(GTK_WINDOW (toplevel), _("Freeciv"));
 
   g_signal_connect(toplevel, "delete_event",
-      G_CALLBACK(quit_dialog_callback), NULL);
+                   G_CALLBACK(quit_dialog_callback), NULL);
 
   /* Disable GTK+ cursor key focus movement */
   sig = g_signal_lookup("focus", GTK_TYPE_WIDGET);
   g_signal_handlers_disconnect_matched(toplevel, G_SIGNAL_MATCH_ID, sig,
-                                      0, 0, 0, 0);
+                                       0, 0, 0, 0);
   g_signal_connect(toplevel, "focus", G_CALLBACK(toplevel_focus), NULL);
 
 
@@ -1831,13 +1831,14 @@
 
   /* assumes toplevel showing */
   set_client_state(C_S_DISCONNECTED);
-  
+
   /* assumes client_state is set */
   timer_id = g_timeout_add(TIMER_INTERVAL, timer_callback, NULL);
 
   gui_up = TRUE;
   gtk_main();
   gui_up = FALSE;
+  start_quitting();
 
   destroy_server_scans();
   free_mapcanvas_and_overview();

Modified: trunk/client/gui-gtk-3.x/gui_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-gtk-3.x/gui_main.c?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/gui-gtk-3.x/gui_main.c (original)
+++ trunk/client/gui-gtk-3.x/gui_main.c Sat Aug 20 18:55:16 2016
@@ -1759,16 +1759,16 @@
   if (GUI_GTK_OPTION(fullscreen)) {
     gtk_window_fullscreen(GTK_WINDOW(toplevel));
   }
-  
+
   gtk_window_set_title(GTK_WINDOW (toplevel), _("Freeciv"));
 
   g_signal_connect(toplevel, "delete_event",
-      G_CALLBACK(quit_dialog_callback), NULL);
+                   G_CALLBACK(quit_dialog_callback), NULL);
 
   /* Disable GTK+ cursor key focus movement */
   sig = g_signal_lookup("focus", GTK_TYPE_WIDGET);
   g_signal_handlers_disconnect_matched(toplevel, G_SIGNAL_MATCH_ID, sig,
-                                      0, 0, 0, 0);
+                                       0, 0, 0, 0);
   g_signal_connect(toplevel, "focus", G_CALLBACK(toplevel_focus), NULL);
 
 
@@ -1831,13 +1831,14 @@
 
   /* assumes toplevel showing */
   set_client_state(C_S_DISCONNECTED);
-  
+
   /* assumes client_state is set */
   timer_id = g_timeout_add(TIMER_INTERVAL, timer_callback, NULL);
 
   gui_up = TRUE;
   gtk_main();
   gui_up = FALSE;
+  start_quitting();
 
   destroy_server_scans();
   free_mapcanvas_and_overview();

Modified: trunk/client/gui-qt/gui_main.cpp
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/gui_main.cpp?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/gui-qt/gui_main.cpp    (original)
+++ trunk/client/gui-qt/gui_main.cpp    Sat Aug 20 18:55:16 2016
@@ -182,6 +182,7 @@
 
     freeciv_qt = new fc_client();
     freeciv_qt->main(qapp);
+    start_quitting();
   }
 }
 

Modified: trunk/client/gui-sdl2/gui_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-sdl2/gui_main.c?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/gui-sdl2/gui_main.c    (original)
+++ trunk/client/gui-sdl2/gui_main.c    Sat Aug 20 18:55:16 2016
@@ -992,6 +992,7 @@
   gui_event_loop(NULL, NULL, main_key_down_handler, main_key_up_handler, NULL,
                  main_mouse_button_down_handler, main_mouse_button_up_handler,
                  main_mouse_motion_handler);
+  start_quitting();
 }
 
 /**************************************************************************

Modified: trunk/client/gui-stub/gui_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-stub/gui_main.c?rev=33653&r1=33652&r2=33653&view=diff
==============================================================================
--- trunk/client/gui-stub/gui_main.c    (original)
+++ trunk/client/gui-stub/gui_main.c    Sat Aug 20 18:55:16 2016
@@ -111,6 +111,10 @@
 
   /* PORTME */
   fc_fprintf(stderr, "Freeciv rules!\n");
+
+  /* Main loop here */
+
+  start_quitting();
 }
 
 /****************************************************************************


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to