From 55b6ea94218629b9d70d9669ea951822e8a2fec8 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Thu, 28 Sep 2023 08:00:54 +0300 Subject: [PATCH 55/55] Add support for "leave_game" sound tag See osdn #47614 Signed-off-by: Marko Lindqvist --- client/client_main.c | 4 ++-- client/clinet.c | 7 ++++++- client/clinet.h | 4 ++-- client/gui-gtk-3.22/gui_main.c | 2 +- client/gui-gtk-3.22/menu.c | 4 ++-- client/gui-gtk-3.22/pages.c | 2 +- client/gui-gtk-4.0/gui_main.c | 2 +- client/gui-gtk-4.0/menu.c | 4 ++-- client/gui-gtk-4.0/pages.c | 2 +- client/gui-qt/fc_client.cpp | 4 ++-- client/gui-qt/gui_main.cpp | 2 +- client/gui-qt/menu.cpp | 4 ++-- client/gui-sdl2/chatline.c | 2 +- client/gui-sdl2/connectdlg.c | 2 +- client/gui-sdl2/optiondlg.c | 4 ++-- data/stdsounds.soundspec | 1 + 16 files changed, 28 insertions(+), 22 deletions(-) diff --git a/client/client_main.c b/client/client_main.c index 1c2a1f8443..03c8159b61 100644 --- a/client/client_main.c +++ b/client/client_main.c @@ -785,10 +785,10 @@ void client_packet_input(void *packet, int type) && PACKET_SERVER_INFO != type) { log_error("Received packet %s (%d) before establishing connection!", packet_name(type), type); - disconnect_from_server(); + disconnect_from_server(FALSE); } else if (!client_handle_packet(type, packet)) { log_error("Received unknown packet (type %d) from server!", type); - disconnect_from_server(); + disconnect_from_server(FALSE); } } diff --git a/client/clinet.c b/client/clinet.c index c62496c132..ef4c3293b4 100644 --- a/client/clinet.c +++ b/client/clinet.c @@ -74,6 +74,7 @@ /* client */ #include "agents.h" #include "attribute.h" +#include "audio.h" #include "chatline_g.h" #include "client_main.h" #include "climisc.h" @@ -302,7 +303,7 @@ void make_connection(int sock, const char *username) Get rid of server connection. This also kills internal server if it's used. **************************************************************************/ -void disconnect_from_server(void) +void disconnect_from_server(bool leaving_sound) { const bool force = !client.conn.used; @@ -321,6 +322,10 @@ void disconnect_from_server(void) } output_window_append(ftc_client, _("Disconnected from server.")); + if (leaving_sound) { + audio_play_sound("e_leave_game", NULL); + } + if (gui_options.save_options_on_exit) { options_save(NULL); } diff --git a/client/clinet.h b/client/clinet.h index 7af6bd60ae..11f87c1424 100644 --- a/client/clinet.h +++ b/client/clinet.h @@ -25,7 +25,7 @@ void make_connection(int socket, const char *username); void input_from_server(int fd); void input_from_server_till_request_got_processed(int fd, int expected_request_id); -void disconnect_from_server(void); +void disconnect_from_server(bool leaving_sound); double try_to_autoconnect(void); void start_autoconnecting_to_server(void); @@ -34,4 +34,4 @@ void start_autoconnecting_to_server(void); } #endif /* __cplusplus */ -#endif /* FC__CLINET_H */ +#endif /* FC__CLINET_H */ diff --git a/client/gui-gtk-3.22/gui_main.c b/client/gui-gtk-3.22/gui_main.c index fe11c5a876..5231890b16 100644 --- a/client/gui-gtk-3.22/gui_main.c +++ b/client/gui-gtk-3.22/gui_main.c @@ -2347,7 +2347,7 @@ static void quit_dialog_response(GtkWidget *dialog, gint response) if (response == GTK_RESPONSE_YES) { start_quitting(); if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(FALSE); } quit_gtk_main(); } diff --git a/client/gui-gtk-3.22/menu.c b/client/gui-gtk-3.22/menu.c index a1a2e11cb9..42cc5a653a 100644 --- a/client/gui-gtk-3.22/menu.c +++ b/client/gui-gtk-3.22/menu.c @@ -718,7 +718,7 @@ static void leave_local_game_response(GtkWidget *dialog, gint response) /* It might be killed already */ if (client.conn.used) { /* It will also kill the server */ - disconnect_from_server(); + disconnect_from_server(TRUE); } } } @@ -739,7 +739,7 @@ static void leave_callback(GtkMenuItem *item, gpointer data) G_CALLBACK(leave_local_game_response), NULL); gtk_window_present(GTK_WINDOW(dialog)); } else { - disconnect_from_server(); + disconnect_from_server(TRUE); } } diff --git a/client/gui-gtk-3.22/pages.c b/client/gui-gtk-3.22/pages.c index 93cdc74910..fdc90212f2 100644 --- a/client/gui-gtk-3.22/pages.c +++ b/client/gui-gtk-3.22/pages.c @@ -151,7 +151,7 @@ static void main_callback(GtkWidget *w, gpointer data) enum client_pages page = PAGE_MAIN; if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(TRUE); } if (page != get_client_page()) { set_client_page(page); diff --git a/client/gui-gtk-4.0/gui_main.c b/client/gui-gtk-4.0/gui_main.c index 7f4c3c0036..6198a16ccb 100644 --- a/client/gui-gtk-4.0/gui_main.c +++ b/client/gui-gtk-4.0/gui_main.c @@ -2340,7 +2340,7 @@ static void quit_dialog_response(GtkWidget *dialog, gint response) if (response == GTK_RESPONSE_YES) { start_quitting(); if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(FALSE); } quit_gtk_main(); } diff --git a/client/gui-gtk-4.0/menu.c b/client/gui-gtk-4.0/menu.c index 325fd769e4..4c46205d2d 100644 --- a/client/gui-gtk-4.0/menu.c +++ b/client/gui-gtk-4.0/menu.c @@ -1310,7 +1310,7 @@ static void leave_local_game_response(GtkWidget *dialog, gint response) /* It might be killed already */ if (client.conn.used) { /* It will also kill the server */ - disconnect_from_server(); + disconnect_from_server(TRUE); } } } @@ -1332,7 +1332,7 @@ static void leave_callback(GSimpleAction *action, G_CALLBACK(leave_local_game_response), NULL); gtk_window_present(GTK_WINDOW(dialog)); } else { - disconnect_from_server(); + disconnect_from_server(TRUE); } } diff --git a/client/gui-gtk-4.0/pages.c b/client/gui-gtk-4.0/pages.c index a2ccae6a96..c1b8fc0f33 100644 --- a/client/gui-gtk-4.0/pages.c +++ b/client/gui-gtk-4.0/pages.c @@ -155,7 +155,7 @@ static void main_callback(GtkWidget *w, gpointer data) enum client_pages page = PAGE_MAIN; if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(TRUE); } if (page != get_client_page()) { set_client_page(page); diff --git a/client/gui-qt/fc_client.cpp b/client/gui-qt/fc_client.cpp index c7d23a48f6..1bb036483e 100644 --- a/client/gui-qt/fc_client.cpp +++ b/client/gui-qt/fc_client.cpp @@ -415,7 +415,7 @@ void fc_client::switch_page(int new_pg) break; default: if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(TRUE); } set_client_page(PAGE_MAIN); break; @@ -539,7 +539,7 @@ void fc_client::quit() void fc_client::slot_disconnect() { if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(TRUE); } switch_page(PAGE_MAIN); diff --git a/client/gui-qt/gui_main.cpp b/client/gui-qt/gui_main.cpp index e2502d51d9..72af5fe587 100644 --- a/client/gui-qt/gui_main.cpp +++ b/client/gui-qt/gui_main.cpp @@ -573,7 +573,7 @@ void popup_quit_dialog() QObject::connect(ask, &hud_message_box::accepted, [=]() { start_quitting(); if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(FALSE); } gui()->write_settings(); qapp->quit(); diff --git a/client/gui-qt/menu.cpp b/client/gui-qt/menu.cpp index 90e7ef34c8..66ab36147d 100644 --- a/client/gui-qt/menu.cpp +++ b/client/gui-qt/menu.cpp @@ -3879,12 +3879,12 @@ void mr_menu::back_to_menu() connect(ask, &hud_message_box::accepted, [=]() { if (client.conn.used) { - disconnect_from_server(); + disconnect_from_server(TRUE); } }); ask->show(); } else { - disconnect_from_server(); + disconnect_from_server(TRUE); } } diff --git a/client/gui-sdl2/chatline.c b/client/gui-sdl2/chatline.c index 75f2452459..3ee9a920c3 100644 --- a/client/gui-sdl2/chatline.c +++ b/client/gui-sdl2/chatline.c @@ -433,7 +433,7 @@ static int disconnect_conn_callback(struct widget *pwidget) if (PRESSED_EVENT(main_data.event)) { popdown_conn_list_dialog(); flush_dirty(); - disconnect_from_server(); + disconnect_from_server(TRUE); } return -1; diff --git a/client/gui-sdl2/connectdlg.c b/client/gui-sdl2/connectdlg.c index 79c9a243a1..f9028e5816 100644 --- a/client/gui-sdl2/connectdlg.c +++ b/client/gui-sdl2/connectdlg.c @@ -771,7 +771,7 @@ static int cancel_passwd_callback(struct widget *pwidget) { memset(fc_password, 0, MAX_LEN_NAME); fc_password[0] = '\0'; - disconnect_from_server(); + disconnect_from_server(TRUE); return cancel_connect_dlg_callback(pwidget); } diff --git a/client/gui-sdl2/optiondlg.c b/client/gui-sdl2/optiondlg.c index 7db5145ff8..55cb5bb76a 100644 --- a/client/gui-sdl2/optiondlg.c +++ b/client/gui-sdl2/optiondlg.c @@ -390,7 +390,7 @@ static int disconnect_callback(struct widget *pwidget) if (PRESSED_EVENT(main_data.event)) { popdown_optiondlg(TRUE); enable_options_button(); - disconnect_from_server(); + disconnect_from_server(TRUE); } return -1; @@ -403,7 +403,7 @@ static int exit_callback(struct widget *pwidget) { if (PRESSED_EVENT(main_data.event)) { popdown_optiondlg(TRUE); - disconnect_from_server(); + disconnect_from_server(FALSE); force_exit_from_event_loop(); } diff --git a/data/stdsounds.soundspec b/data/stdsounds.soundspec index f083ffc82f..eec0f10801 100644 --- a/data/stdsounds.soundspec +++ b/data/stdsounds.soundspec @@ -341,4 +341,5 @@ e_log_fatal = "stdsounds/LrgExpl.ogg" ; [warzone] ; Those pseudo-events are only used in the sound system. ;e_client_quit = "" +;e_leave_game = "" e_player_wake = "stdsounds/wakeup.ogg" ; [jt] -- 2.40.1