From 55964d3111d12d07eefe355f859d8dd32f63f737 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sun, 22 Sep 2024 02:48:58 +0300 Subject: [PATCH 35/35] Protocol: Communicate about city worklist cancel behavior See osdn #48217 Signed-off-by: Marko Lindqvist --- client/gui-gtk-3.22/citydlg.c | 3 ++- client/gui-gtk-4.0/citydlg.c | 3 ++- client/gui-qt/citydlg.cpp | 3 ++- client/gui-sdl2/citydlg.c | 8 +++++--- client/gui-sdl3/citydlg.c | 8 +++++--- client/packhand.c | 1 + common/networking/packets.def | 8 +++++--- server/cityhand.c | 4 +++- server/citytools.c | 1 + 9 files changed, 26 insertions(+), 13 deletions(-) diff --git a/client/gui-gtk-3.22/citydlg.c b/client/gui-gtk-3.22/citydlg.c index 2ba1d95304..10db8206f3 100644 --- a/client/gui-gtk-3.22/citydlg.c +++ b/client/gui-gtk-3.22/citydlg.c @@ -3412,7 +3412,8 @@ static void cityopt_callback(GtkWidget * w, gpointer data) BV_SET(new_options, CITYO_GOLD_SPECIALISTS); } - dsend_packet_city_options_req(&client.conn, pcity->id,new_options); + dsend_packet_city_options_req(&client.conn, pcity->id, new_options, + pcity->wlcb); } } diff --git a/client/gui-gtk-4.0/citydlg.c b/client/gui-gtk-4.0/citydlg.c index 799ea9c47d..a47d4f1275 100644 --- a/client/gui-gtk-4.0/citydlg.c +++ b/client/gui-gtk-4.0/citydlg.c @@ -3527,7 +3527,8 @@ static void cityopt_callback(GtkWidget *w, gpointer data) BV_SET(new_options, CITYO_GOLD_SPECIALISTS); } - dsend_packet_city_options_req(&client.conn, pcity->id,new_options); + dsend_packet_city_options_req(&client.conn, pcity->id, new_options, + pcity->wlcb); } } diff --git a/client/gui-qt/citydlg.cpp b/client/gui-qt/citydlg.cpp index 1778ab71b6..62545d4bbc 100644 --- a/client/gui-qt/citydlg.cpp +++ b/client/gui-qt/citydlg.cpp @@ -2750,7 +2750,8 @@ void city_dialog::disband_state_changed(bool allow_disband) } if (!client_is_observer()) { - dsend_packet_city_options_req(&client.conn, dlgcity->id, new_options); + dsend_packet_city_options_req(&client.conn, dlgcity->id, + new_options, dlgcity->wlcb); } } diff --git a/client/gui-sdl2/citydlg.c b/client/gui-sdl2/citydlg.c index 1c12c02d06..78bdb10766 100644 --- a/client/gui-sdl2/citydlg.c +++ b/client/gui-sdl2/citydlg.c @@ -963,7 +963,8 @@ static int misc_panel_city_dlg_callback(struct widget *pwidget) break; } - dsend_packet_city_options_req(&client.conn, pcity_dlg->pcity->id, new_options); + dsend_packet_city_options_req(&client.conn, pcity_dlg->pcity->id, + new_options, pcity_dlg->pcity->wlcb); } return -1; @@ -986,8 +987,9 @@ static void create_city_options_widget_list(struct city *pcity) pstr->fgcol = *get_theme_color(COLOR_THEME_CHECKBOX_LABEL_TEXT); buf = - create_textcheckbox(pwindow->dst, BV_ISSET(pcity->city_options, CITYO_DISBAND), pstr, - WF_RESTORE_BACKGROUND); + create_textcheckbox(pwindow->dst, + BV_ISSET(pcity->city_options, CITYO_DISBAND), + pstr, WF_RESTORE_BACKGROUND); set_wstate(buf, FC_WS_NORMAL); buf->action = misc_panel_city_dlg_callback; add_to_gui_list(MAX_ID - 0x10, buf); diff --git a/client/gui-sdl3/citydlg.c b/client/gui-sdl3/citydlg.c index 0c75eff8a6..55c0ce36ea 100644 --- a/client/gui-sdl3/citydlg.c +++ b/client/gui-sdl3/citydlg.c @@ -959,7 +959,8 @@ static int misc_panel_city_dlg_callback(struct widget *pwidget) break; } - dsend_packet_city_options_req(&client.conn, pcity_dlg->pcity->id, new_options); + dsend_packet_city_options_req(&client.conn, pcity_dlg->pcity->id, + new_options, pcity_dlg->pcity->wlcb); } return -1; @@ -982,8 +983,9 @@ static void create_city_options_widget_list(struct city *pcity) pstr->fgcol = *get_theme_color(COLOR_THEME_CHECKBOX_LABEL_TEXT); buf = - create_textcheckbox(pwindow->dst, BV_ISSET(pcity->city_options, CITYO_DISBAND), pstr, - WF_RESTORE_BACKGROUND); + create_textcheckbox(pwindow->dst, + BV_ISSET(pcity->city_options, CITYO_DISBAND), + pstr, WF_RESTORE_BACKGROUND); set_wstate(buf, FC_WS_NORMAL); buf->action = misc_panel_city_dlg_callback; add_to_gui_list(MAX_ID - 0x10, buf); diff --git a/client/packhand.c b/client/packhand.c index 7dd6f3615b..19f6be47cd 100644 --- a/client/packhand.c +++ b/client/packhand.c @@ -790,6 +790,7 @@ void handle_city_info(const struct packet_city_info *packet) pcity->city_radius_sq = packet->city_radius_sq; pcity->city_options = packet->city_options; + pcity->wlcb = packet->wl_cb; if (pcity->surplus[O_SCIENCE] != packet->surplus[O_SCIENCE] || pcity->surplus[O_SCIENCE] != packet->surplus[O_SCIENCE] diff --git a/common/networking/packets.def b/common/networking/packets.def index 4fc04a5aa7..64f401a55d 100644 --- a/common/networking/packets.def +++ b/common/networking/packets.def @@ -267,8 +267,9 @@ type CAPITAL = uint8(enum capital_type) type WONDER_VISIB = uint8(enum wonder_visib_type) type TRANSP_DEF_TYPE = uint8(enum transp_def_type) type AI_LEVEL = uint8(enum ai_level) -type COUNTER_TARGET = uint8(enum counter_target) -type COUNTER_BEHAVIOUR = uint8(enum counter_behaviour) +type COUNTER_TARGET = uint8(enum counter_target) +type COUNTER_BEHAVIOUR = uint8(enum counter_behaviour) +type CITY_WL_CB = uint8(enum city_wl_cancel_behavior) # typedefs for bit vectors type BV_ACTIONS = bitvector(bv_actions) @@ -774,6 +775,7 @@ PACKET_CITY_INFO = 31; sc, lsend, is-game-info, force, cancel(PACKET_CITY_SHORT_ BV_IMPRS improvements; BV_CITY_OPTIONS city_options; + CITY_WL_CB wl_cb; ESTRING name[MAX_LEN_CITYNAME]; end @@ -863,6 +865,7 @@ end PACKET_CITY_OPTIONS_REQ = 41; cs, dsend, handle-via-fields CITY city_id; BV_CITY_OPTIONS options; + CITY_WL_CB wl_cb; end PACKET_CITY_REFRESH = 42; cs, dsend, handle-via-fields @@ -2328,7 +2331,6 @@ PACKET_EDIT_CITY = 213; cs, handle-per-conn SINT32 built[B_LAST]; diff UINT8 production_kind; UINT8 production_value; - BV_CITY_OPTIONS city_options; end PACKET_EDIT_PLAYER_CREATE = 214; cs, handle-per-conn, dsend, handle-via-fields diff --git a/server/cityhand.c b/server/cityhand.c index c828ca6045..df7fe4c92d 100644 --- a/server/cityhand.c +++ b/server/cityhand.c @@ -507,7 +507,8 @@ void handle_city_rename(struct player *pplayer, int city_id, given city be changed. **************************************************************************/ void handle_city_options_req(struct player *pplayer, int city_id, - bv_city_options options) + bv_city_options options, + enum city_wl_cancel_behavior wlcb) { struct city *pcity = player_city_by_number(pplayer, city_id); @@ -516,6 +517,7 @@ void handle_city_options_req(struct player *pplayer, int city_id, } pcity->city_options = options; + pcity->wlcb = wlcb; send_city_info(pplayer, pcity); } diff --git a/server/citytools.c b/server/citytools.c index 66027d768f..90e92483b7 100644 --- a/server/citytools.c +++ b/server/citytools.c @@ -2649,6 +2649,7 @@ void package_city(struct city *pcity, struct packet_city_info *packet, packet->pollution = pcity->pollution; packet->illness_trade = pcity->illness_trade; packet->city_options = pcity->city_options; + packet->wl_cb = pcity->wlcb; packet->production_kind = pcity->production.kind; packet->production_value = universal_number(&pcity->production); -- 2.45.2