Author: sveinung Date: Tue Mar 8 15:27:39 2016 New Revision: 32204 URL: http://svn.gna.org/viewcvs/freeciv?rev=32204&view=rev Log: action_decision_taken() does too much. Split it.
action_decision_taken() does 3 things. Split it in 3 functions so each thing can be done independently. Don't call all 3 functions where it doesn't make sense. See patch #7034 Modified: branches/S2_6/client/control.c branches/S2_6/client/control.h branches/S2_6/client/gui-gtk-2.0/action_dialog.c branches/S2_6/client/gui-gtk-3.0/action_dialog.c branches/S2_6/client/gui-qt/dialogs.cpp branches/S2_6/client/gui-sdl/action_dialog.c branches/S2_6/client/gui-sdl2/action_dialog.c branches/S2_6/client/gui-xaw/action_dialog.c branches/S2_6/client/packhand.c Modified: branches/S2_6/client/control.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/control.c?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/control.c (original) +++ branches/S2_6/client/control.c Tue Mar 8 15:27:39 2016 @@ -970,12 +970,11 @@ } /************************************************************************** - The player made a decision about what to do. -**************************************************************************/ -void action_decision_taken(const int old_actor_id) -{ - struct unit *old; - + The action selection process is no longer in progres for the specified + unit. It is safe to let another unit enter it. +**************************************************************************/ +void action_selection_no_longer_in_progress(const int old_actor_id) +{ /* IDENTITY_NUMBER_ZERO is accepted for cases where the unit is gone * without a trace. */ fc_assert_msg(old_actor_id == action_selection_in_progress_for @@ -985,12 +984,31 @@ /* Stop objecting to allowing the next unit to ask. */ action_selection_in_progress_for = IDENTITY_NUMBER_ZERO; +} + +/************************************************************************** + Have the server record that a decision no longer is wanted for the + specified unit. +**************************************************************************/ +void action_decision_clear_want(const int old_actor_id) +{ + struct unit *old; if ((old = game_unit_by_number(old_actor_id))) { /* Have the server record that a decision no longer is wanted. */ request_do_action(ACTION_COUNT, old_actor_id, IDENTITY_NUMBER_ZERO, ACTSIG_UNQUEUE); } +} + +/************************************************************************** + Move on to the next unit in focus that needs an action decision. +**************************************************************************/ +void action_selection_next_in_focus(const int old_actor_id) +{ + struct unit *old; + + old = game_unit_by_number(old_actor_id); /* Go to the next unit in focus that needs a decision. */ unit_list_iterate(get_units_in_focus(), funit) { Modified: branches/S2_6/client/control.h URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/control.h?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/control.h (original) +++ branches/S2_6/client/control.h Tue Mar 8 15:27:39 2016 @@ -183,7 +183,9 @@ double blink_turn_done_button(void); bool should_ask_server_for_actions(struct unit *punit); -void action_decision_taken(const int old_actor_id); +void action_selection_no_longer_in_progress(const int old_actor_id); +void action_decision_clear_want(const int old_actor_id); +void action_selection_next_in_focus(const int old_actor_id); void action_decision_request(struct unit *actor_unit); void key_cancel_action(void); Modified: branches/S2_6/client/gui-gtk-2.0/action_dialog.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-gtk-2.0/action_dialog.c?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/gui-gtk-2.0/action_dialog.c (original) +++ branches/S2_6/client/gui-gtk-2.0/action_dialog.c Tue Mar 8 15:27:39 2016 @@ -107,7 +107,11 @@ static void diplomat_queue_handle_primary(void) { if (!is_more_user_input_needed) { - action_decision_taken(actor_unit_id); + /* The client isn't waiting for information for any unanswered follow + * up questions. */ + action_selection_no_longer_in_progress(actor_unit_id); + action_decision_clear_want(actor_unit_id); + action_selection_next_in_focus(actor_unit_id); } } Modified: branches/S2_6/client/gui-gtk-3.0/action_dialog.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-gtk-3.0/action_dialog.c?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/gui-gtk-3.0/action_dialog.c (original) +++ branches/S2_6/client/gui-gtk-3.0/action_dialog.c Tue Mar 8 15:27:39 2016 @@ -107,7 +107,11 @@ static void diplomat_queue_handle_primary(void) { if (!is_more_user_input_needed) { - action_decision_taken(actor_unit_id); + /* The client isn't waiting for information for any unanswered follow + * up questions. */ + action_selection_no_longer_in_progress(actor_unit_id); + action_decision_clear_want(actor_unit_id); + action_selection_next_in_focus(actor_unit_id); } } Modified: branches/S2_6/client/gui-qt/dialogs.cpp URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-qt/dialogs.cpp?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/gui-qt/dialogs.cpp (original) +++ branches/S2_6/client/gui-qt/dialogs.cpp Tue Mar 8 15:27:39 2016 @@ -1205,10 +1205,14 @@ Move the queue of diplomats that need user input forward unless the current diplomat will need more input. **************************************************************************/ -static void diplomat_queue_handle_primary(int actor_id) +static void diplomat_queue_handle_primary(int actor_unit_id) { if (!is_more_user_input_needed) { - action_decision_taken(actor_id); + /* The client isn't waiting for information for any unanswered follow + * up questions. */ + action_selection_no_longer_in_progress(actor_unit_id); + action_decision_clear_want(actor_unit_id); + action_selection_next_in_focus(actor_unit_id); } } Modified: branches/S2_6/client/gui-sdl/action_dialog.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-sdl/action_dialog.c?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/gui-sdl/action_dialog.c (original) +++ branches/S2_6/client/gui-sdl/action_dialog.c Tue Mar 8 15:27:39 2016 @@ -76,9 +76,11 @@ static void act_sel_done_primary(int actor_unit_id) { if (!is_more_user_input_needed) { - /* The client isn't waiting for more information about the selected - * action. */ - action_decision_taken(actor_unit_id); + /* The client isn't waiting for information for any unanswered follow + * up questions. */ + action_selection_no_longer_in_progress(actor_unit_id); + action_decision_clear_want(actor_unit_id); + action_selection_next_in_focus(actor_unit_id); } } Modified: branches/S2_6/client/gui-sdl2/action_dialog.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-sdl2/action_dialog.c?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/gui-sdl2/action_dialog.c (original) +++ branches/S2_6/client/gui-sdl2/action_dialog.c Tue Mar 8 15:27:39 2016 @@ -77,9 +77,11 @@ static void act_sel_done_primary(int actor_unit_id) { if (!is_more_user_input_needed) { - /* The client isn't waiting for more information about the selected - * action. */ - action_decision_taken(actor_unit_id); + /* The client isn't waiting for information for any unanswered follow + * up questions. */ + action_selection_no_longer_in_progress(actor_unit_id); + action_decision_clear_want(actor_unit_id); + action_selection_next_in_focus(actor_unit_id); } } Modified: branches/S2_6/client/gui-xaw/action_dialog.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-xaw/action_dialog.c?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/gui-xaw/action_dialog.c (original) +++ branches/S2_6/client/gui-xaw/action_dialog.c Tue Mar 8 15:27:39 2016 @@ -73,6 +73,11 @@ static Widget diplomat_dialog; int diplomat_id; int diplomat_target_id[ATK_COUNT]; + +#define action_decision_taken(actor_id) \ + action_selection_no_longer_in_progress(actor_id); \ + action_decision_clear_want(actor_id); \ + action_selection_next_in_focus(actor_id); /************************************************************************** User selected enter market place from caravan dialog Modified: branches/S2_6/client/packhand.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/packhand.c?rev=32204&r1=32203&r2=32204&view=diff ============================================================================== --- branches/S2_6/client/packhand.c (original) +++ branches/S2_6/client/packhand.c Tue Mar 8 15:27:39 2016 @@ -408,8 +408,9 @@ /* Close diplomat dialog if the diplomat is lost */ if (action_selection_actor_unit() == punit->id) { action_selection_close(); - /* Open another diplomat dialog if there are other diplomats waiting */ - action_decision_taken(unit_id); + /* Open another action selection dialog if there are other actors in the + * current selection that want a decision. */ + action_selection_next_in_focus(unit_id); } need_economy_report_update = (0 < punit->upkeep[O_GOLD]); @@ -4079,14 +4080,17 @@ log_error("handle_unit_action_answer() the action %d doesn't exist.", action_type); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_decision_clear_want(diplomat_id); + action_selection_next_in_focus(diplomat_id); return; } if (!pdiplomat) { log_debug("Bad actor %d.", diplomat_id); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_selection_next_in_focus(diplomat_id); return; } @@ -4100,7 +4104,9 @@ popup_bribe_dialog(pdiplomat, punit, cost); } else { log_debug("Bad target %d.", target_id); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_decision_clear_want(diplomat_id); + action_selection_next_in_focus(diplomat_id); } break; case ACTION_SPY_INCITE_CITY: @@ -4112,17 +4118,23 @@ popup_incite_dialog(pdiplomat, pcity, cost); } else { log_debug("Bad target %d.", target_id); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_decision_clear_want(diplomat_id); + action_selection_next_in_focus(diplomat_id); } break; case ACTION_COUNT: log_debug("Server didn't respond to query."); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_decision_clear_want(diplomat_id); + action_selection_next_in_focus(diplomat_id); break; default: log_error("handle_unit_action_answer() invalid action_type (%d).", action_type); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_decision_clear_want(diplomat_id); + action_selection_next_in_focus(diplomat_id); break; }; } @@ -4165,8 +4177,10 @@ target_city, target_unit, target_tile, act_prob); } else if (disturb_player) { - /* Nothing to do. Go to the next queued dipomat */ - action_decision_taken(packet->actor_unit_id); + /* Nothing to do. */ + action_selection_no_longer_in_progress(packet->actor_unit_id); + action_decision_clear_want(packet->actor_unit_id); + action_selection_next_in_focus(packet->actor_unit_id); } else { /* This was a background request. */ @@ -4192,14 +4206,17 @@ if (!pdiplomat) { log_debug("Bad diplomat %d.", diplomat_id); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_selection_next_in_focus(diplomat_id); return; } if (!pcity) { log_debug("Bad city %d.", city_id); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_decision_clear_want(diplomat_id); + action_selection_next_in_focus(diplomat_id); return; } @@ -4216,7 +4233,8 @@ popup_sabotage_dialog(pdiplomat, pcity); } else { log_debug("Can't issue orders"); - action_decision_taken(diplomat_id); + action_selection_no_longer_in_progress(diplomat_id); + action_decision_clear_want(diplomat_id); } } _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits