diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/civclient.c freeciv-work/client/civclient.c --- freeciv-orig/client/civclient.c Thu Sep 26 14:22:22 2002 +++ freeciv-work/client/civclient.c Sat Sep 28 16:37:30 2002 @@ -583,24 +583,7 @@ bool connect_error = (client_state == CLIENT_PRE_GAME_STATE) && (newstate == CLIENT_PRE_GAME_STATE); - /* - * We are currently ignoring the CLIENT_GAME_OVER_STATE state - * because the client hasen't been changed to take care of it. So it - * breaks the show-whole-map-at-the-end-of-the-game. Nevertheless - * the server is so kind and sends the client this information. And - * in the future the client can/should take advantage of this - * information. - * - * FIXME: audit all client code to that it copes with - * CLIENT_GAME_OVER_STATE and implement specific - * CLIENT_GAME_OVER_STATE actions like history browsing. Then remove - * the kludge below. - */ - if (newstate == CLIENT_GAME_OVER_STATE) { - newstate = CLIENT_GAME_RUNNING_STATE; - } - - if(client_state!=newstate) { + if (client_state!=newstate) { /* If changing from pre-game state to _either_ select race or running state, then we have finished getting ruleset data, @@ -617,7 +600,7 @@ client_state=newstate; - if(client_state==CLIENT_GAME_RUNNING_STATE) { + if (client_state==CLIENT_GAME_RUNNING_STATE) { load_ruleset_specific_options(); create_event(-1, -1, E_GAME_START, _("Game started.")); update_research(game.player_ptr); @@ -625,7 +608,7 @@ boot_help_texts(); /* reboot */ update_unit_focus(); } - else if(client_state==CLIENT_PRE_GAME_STATE) { + else if (client_state==CLIENT_PRE_GAME_STATE) { popdown_all_city_dialogs(); close_all_diplomacy_dialogs(); client_remove_all_cli_conn(); @@ -765,3 +748,21 @@ flip = !flip; } + +/************************************************************************** + Can the client now issue orders. +**************************************************************************/ +bool can_client_issue_orders() +{ + return (!client_is_observer() + && get_client_state() == CLIENT_GAME_RUNNING_STATE); +} + +/************************************************************************** + Can the client now change the view. +**************************************************************************/ +bool can_client_change_view() +{ + return (get_client_state() == CLIENT_GAME_RUNNING_STATE + || get_client_state() == CLIENT_GAME_OVER_STATE); +} diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/civclient.h freeciv-work/client/civclient.h --- freeciv-orig/client/civclient.h Sat Aug 24 16:37:33 2002 +++ freeciv-work/client/civclient.h Thu Sep 26 15:52:15 2002 @@ -57,5 +57,7 @@ void wait_till_request_got_processed(int request_id); bool client_is_observer(void); void real_timer_callback(void); +bool can_client_issue_orders(void); +bool can_client_change_view(void); #endif /* FC__CIVCLIENT_H */ diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/climisc.c freeciv-work/client/climisc.c --- freeciv-orig/client/climisc.c Thu Sep 19 23:27:27 2002 +++ freeciv-work/client/climisc.c Sat Sep 28 16:16:22 2002 @@ -490,7 +490,7 @@ struct city *pcity; struct unit *punit; - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { return; } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/control.c freeciv-work/client/control.c --- freeciv-orig/client/control.c Wed Sep 11 19:04:39 2002 +++ freeciv-work/client/control.c Sun Sep 29 17:41:16 2002 @@ -363,8 +363,8 @@ int i; - if(punit) { - if(punit->type != prev_unit_type + if (punit && get_client_state()!=CLIENT_GAME_OVER_STATE) { + if (punit->type != prev_unit_type || punit->activity != prev_activity || punit->hp != prev_hp) { set_unit_icon(-1, punit); @@ -910,7 +910,9 @@ **************************************************************************/ void request_toggle_map_grid(void) { - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) return; + if (!can_client_change_view()) { + return; + } draw_map_grid^=1; update_map_canvas_visible(); @@ -921,8 +923,9 @@ **************************************************************************/ void request_toggle_city_names(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_city_names ^= 1; update_map_canvas_visible(); @@ -933,8 +936,9 @@ **************************************************************************/ void request_toggle_city_productions(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_city_productions ^= 1; update_map_canvas_visible(); @@ -945,8 +949,9 @@ **************************************************************************/ void request_toggle_terrain(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_terrain ^= 1; update_map_canvas_visible(); @@ -957,8 +962,9 @@ **************************************************************************/ void request_toggle_coastline(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_coastline ^= 1; update_map_canvas_visible(); @@ -969,8 +975,9 @@ **************************************************************************/ void request_toggle_roads_rails(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_roads_rails ^= 1; update_map_canvas_visible(); @@ -981,8 +988,9 @@ **************************************************************************/ void request_toggle_irrigation(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_irrigation ^= 1; update_map_canvas_visible(); @@ -993,8 +1001,9 @@ **************************************************************************/ void request_toggle_mines(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_mines ^= 1; update_map_canvas_visible(); @@ -1005,8 +1014,9 @@ **************************************************************************/ void request_toggle_fortress_airbase(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_fortress_airbase ^= 1; update_map_canvas_visible(); @@ -1017,8 +1027,9 @@ **************************************************************************/ void request_toggle_specials(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_specials ^= 1; update_map_canvas_visible(); @@ -1029,8 +1040,9 @@ **************************************************************************/ void request_toggle_pollution(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_pollution ^= 1; update_map_canvas_visible(); @@ -1041,8 +1053,9 @@ **************************************************************************/ void request_toggle_cities(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_cities ^= 1; update_map_canvas_visible(); @@ -1053,8 +1066,9 @@ **************************************************************************/ void request_toggle_units(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_units ^= 1; update_map_canvas_visible(); @@ -1065,8 +1079,9 @@ **************************************************************************/ void request_toggle_focus_unit(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_focus_unit ^= 1; update_map_canvas_visible(); @@ -1077,8 +1092,9 @@ **************************************************************************/ void request_toggle_fog_of_war(void) { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } draw_fog_of_war ^= 1; update_map_canvas_visible(); diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/citydlg.c freeciv-work/client/gui-gtk/citydlg.c --- freeciv-orig/client/gui-gtk/citydlg.c Wed Aug 7 13:21:40 2002 +++ freeciv-work/client/gui-gtk/citydlg.c Sat Sep 28 12:56:40 2002 @@ -33,6 +33,7 @@ #include "shared.h" #include "support.h" +#include "civclient.h" #include "cityrep.h" #include "cma_fe.h" #include "cma_fec.h" @@ -403,12 +404,17 @@ refresh_cma_dialog(pdialog->pcity, REFRESH_ALL); gtk_widget_set_sensitive(pdialog->unit.activate_command, + can_client_issue_orders() && have_present_units); gtk_widget_set_sensitive(pdialog->unit.sentry_all_command, + can_client_issue_orders() && have_present_units); gtk_widget_set_sensitive(pdialog->unit.show_units_command, + can_client_issue_orders() && have_present_units); gtk_widget_set_sensitive(pdialog->overview.sell_command, FALSE); + gtk_widget_set_sensitive(pdialog->overview.change_command, + can_client_issue_orders()); } else { /* Set the buttons we do not want live while a Diplomat investigates */ gtk_widget_set_sensitive(pdialog->overview.buy_command, FALSE); @@ -1361,6 +1367,8 @@ gtk_signal_connect(GTK_OBJECT(pdialog->misc.rename_command), "clicked", GTK_SIGNAL_FUNC(rename_callback), pdialog); + gtk_widget_set_sensitive(pdialog->misc.rename_command, + can_client_issue_orders()); /* next is the next-time-open radio group in the right column */ frame = gtk_frame_new(_("Next time open")); @@ -1882,9 +1890,10 @@ gfloat pct; int cost; - gtk_widget_set_sensitive(pdialog->overview.buy_command, !pcity->did_buy); + gtk_widget_set_sensitive(pdialog->overview.buy_command, + can_client_issue_orders() && !pcity->did_buy); gtk_widget_set_sensitive(pdialog->overview.sell_command, - !pcity->did_sell); + can_client_issue_orders() && !pcity->did_sell); get_city_dialog_production(pcity, buf, sizeof(buf)); @@ -2465,7 +2474,7 @@ (pcity = find_city_by_id(punit->homecity)) && (pdialog = get_city_dialog(pcity))) { - if (ev->button == 2 || ev->button == 3) + if (ev->button == 2 || ev->button == 3 || !can_client_issue_orders()) return FALSE; popup_message_dialog(pdialog->shell, /* "supported unit popup" */ @@ -2496,7 +2505,7 @@ (pcity = map_get_city(punit->x, punit->y)) && (pdialog = get_city_dialog(pcity))) { - if (ev->button == 2 || ev->button == 3) + if (ev->button == 2 || ev->button == 3 || !can_client_issue_orders()) return FALSE; wd = popup_message_dialog(pdialog->shell, /* "present unit popup" */ @@ -2546,8 +2555,8 @@ if ((punit = player_find_unit_by_id(game.player_ptr, (size_t) data)) && (pcity = map_get_city(punit->x, punit->y)) && - (pdialog = get_city_dialog(pcity)) && (ev->button == 2 - || ev->button == 3)) { + (pdialog = get_city_dialog(pcity)) && can_client_issue_orders() && + (ev->button == 2 || ev->button == 3)) { activate_unit(punit); if (ev->button == 2) close_city_dialog(pdialog); @@ -2569,8 +2578,8 @@ if ((punit = player_find_unit_by_id(game.player_ptr, (size_t) data)) && (pcity = find_city_by_id(punit->homecity)) && - (pdialog = get_city_dialog(pcity)) && (ev->button == 2 - || ev->button == 3)) { + (pdialog = get_city_dialog(pcity)) && can_client_issue_orders() && + (ev->button == 2 || ev->button == 3)) { activate_unit(punit); if (ev->button == 2) close_city_dialog(pdialog); @@ -3221,7 +3230,8 @@ improvement_value(id)); gtk_set_label(GTK_BUTTON(pdialog->overview.sell_command)->child, buf); - gtk_widget_set_sensitive(pdialog->overview.sell_command, TRUE); + gtk_widget_set_sensitive(pdialog->overview.sell_command, + can_client_issue_orders()); } } } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/cityrep.c freeciv-work/client/gui-gtk/cityrep.c --- freeciv-orig/client/gui-gtk/cityrep.c Thu Sep 26 14:22:22 2002 +++ freeciv-work/client/gui-gtk/cityrep.c Thu Sep 26 16:12:25 2002 @@ -32,6 +32,7 @@ #include "support.h" #include "unit.h" +#include "civclient.h" #include "chatline.h" #include "citydlg.h" #include "cityrepdata.h" @@ -668,11 +669,12 @@ *****************************************************************/ static void city_list_callback(GtkWidget *w, gint row, gint column) { + gtk_widget_set_sensitive(city_change_command, can_client_issue_orders()); + gtk_widget_set_sensitive(city_select_command, can_client_issue_orders()); if (GTK_CLIST(city_list)->selection) { - gtk_widget_set_sensitive(city_change_command, TRUE); gtk_widget_set_sensitive(city_center_command, TRUE); gtk_widget_set_sensitive(city_popup_command, TRUE); - gtk_widget_set_sensitive(city_buy_command, TRUE); + gtk_widget_set_sensitive(city_buy_command, can_client_issue_orders()); } else { gtk_widget_set_sensitive(city_center_command, FALSE); gtk_widget_set_sensitive(city_popup_command, FALSE); diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/dialogs.c freeciv-work/client/gui-gtk/dialogs.c --- freeciv-orig/client/gui-gtk/dialogs.c Wed Aug 7 13:21:41 2002 +++ freeciv-work/client/gui-gtk/dialogs.c Thu Sep 26 15:55:30 2002 @@ -2221,9 +2221,10 @@ size_t i; int delta=10; struct packet_player_request packet; - - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + + if (!can_client_issue_orders()) { return; + } i= (size_t)data; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/gotodlg.c freeciv-work/client/gui-gtk/gotodlg.c --- freeciv-orig/client/gui-gtk/gotodlg.c Wed Jun 12 09:24:35 2002 +++ freeciv-work/client/gui-gtk/gotodlg.c Thu Sep 26 15:55:25 2002 @@ -74,9 +74,7 @@ GtkWidget *scrolled; GtkAccelGroup *accel=gtk_accel_group_new(); - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; - if (!get_unit_in_focus()) { + if (!can_client_issue_orders() || !get_unit_in_focus()) { return; } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/gui_main.c freeciv-work/client/gui-gtk/gui_main.c --- freeciv-orig/client/gui-gtk/gui_main.c Sat Aug 24 16:37:39 2002 +++ freeciv-work/client/gui-gtk/gui_main.c Sat Sep 28 10:39:03 2002 @@ -923,6 +923,11 @@ w = unit_below_pixmap[idx]; unit_ids[idx] = punit ? punit->id : 0; } + + if (get_client_state() == CLIENT_GAME_OVER_STATE) { + gtk_pixcomm_clear(GTK_PIXCOMM(w), TRUE); + return; + } if (punit) { gtk_pixcomm_clear(GTK_PIXCOMM(w), FALSE); diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/mapctrl.c freeciv-work/client/gui-gtk/mapctrl.c --- freeciv-orig/client/gui-gtk/mapctrl.c Wed Sep 11 19:04:40 2002 +++ freeciv-work/client/gui-gtk/mapctrl.c Thu Sep 26 15:55:15 2002 @@ -278,8 +278,7 @@ int xtile, ytile; /* when you get a + pow! */ - if (get_client_state() != CLIENT_GAME_RUNNING_STATE - || !(ev->state & GDK_SHIFT_MASK)) { + if (!can_client_issue_orders() || (ev->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) { return TRUE; } @@ -296,10 +295,8 @@ { int xtile, ytile; - if(get_client_state() != CLIENT_GAME_RUNNING_STATE) - return TRUE; - - if ((ev->button == 1) && (ev->state & GDK_SHIFT_MASK)) { + if (can_client_issue_orders() && ev->button == 1 + && (ev->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) { adjust_workers(w, ev); return TRUE; } @@ -309,10 +306,13 @@ if (ev->button == 1) { do_map_click(xtile, ytile); gtk_widget_grab_focus(turn_done_button); - } else if ((ev->button == 2) || (ev->state & GDK_CONTROL_MASK)) { - popit(ev, xtile, ytile); - } else { - center_tile_mapcanvas(xtile, ytile); + } else if (can_client_change_view()) { + if (ev->button == 2 + || (ev->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK) { + popit(ev, xtile, ytile); + } else { + center_tile_mapcanvas(xtile, ytile); + } } return TRUE; } @@ -366,7 +366,7 @@ struct packet_city_request packet; enum city_tile_type wrk; - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) { + if (!can_client_issue_orders()) { return; } @@ -420,14 +420,12 @@ } ytile = ev->y / 2; - if(get_client_state() != CLIENT_GAME_RUNNING_STATE) - return TRUE; - - if (ev->button == 1) { - do_unit_goto(xtile, ytile); - } else if (ev->button == 3) { + if (can_client_change_view() && ev->button == 3) { center_tile_mapcanvas(xtile, ytile); + } else if (can_client_issue_orders() && ev->button == 1) { + do_unit_goto(xtile, ytile); } + return TRUE; } @@ -447,7 +445,7 @@ int x,y; struct city *pcity; - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { return; } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/mapview.c freeciv-work/client/gui-gtk/mapview.c --- freeciv-orig/client/gui-gtk/mapview.c Sun Aug 25 13:20:56 2002 +++ freeciv-work/client/gui-gtk/mapview.c Sun Sep 29 17:28:56 2002 @@ -422,7 +422,7 @@ **************************************************************************/ void update_unit_info_label(struct unit *punit) { - if(punit) { + if (punit && get_client_state() != CLIENT_GAME_OVER_STATE) { char buffer[512]; struct city *pcity = player_find_city_by_id(game.player_ptr, punit->homecity); @@ -760,7 +760,7 @@ **************************************************************************/ gint overview_canvas_expose(GtkWidget *w, GdkEventExpose *ev) { - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { if(radar_gfx_sprite) gdk_draw_pixmap(overview_canvas->window, civ_gc, radar_gfx_sprite->pixmap, ev->area.x, ev->area.y, @@ -939,7 +939,7 @@ map_resized=TRUE; } - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { if (!intro_gfx_sprite) { load_intro_gfx(); } @@ -1733,8 +1733,9 @@ gfloat percent=adj->value; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; + if (!can_client_change_view()) { + return; + } last_map_view_x0=map_view_x0; last_map_view_y0=map_view_y0; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/menu.c freeciv-work/client/gui-gtk/menu.c --- freeciv-orig/client/gui-gtk/menu.c Sun Jun 23 18:06:24 2002 +++ freeciv-work/client/gui-gtk/menu.c Sat Sep 28 14:40:07 2002 @@ -959,7 +959,7 @@ *****************************************************************/ void update_menus(void) { - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { menus_set_sensitive("
/_Reports", FALSE); menus_set_sensitive("
/_Kingdom", FALSE); menus_set_sensitive("
/_View", FALSE); @@ -969,12 +969,11 @@ menus_set_sensitive("
/_Reports", TRUE); menus_set_sensitive("
/_Kingdom", TRUE); menus_set_sensitive("
/_View", TRUE); - menus_set_sensitive("
/_Orders", !client_is_observer()); + menus_set_sensitive("
/_Orders", can_client_issue_orders()); - menus_set_sensitive("
/_Kingdom/_Tax Rates", !client_is_observer()); - menus_set_sensitive("
/_Kingdom/Work_lists", !client_is_observer()); - menus_set_sensitive("
/_Kingdom/_Revolution", - !client_is_observer()); + menus_set_sensitive("
/_Kingdom/_Tax Rates", can_client_issue_orders()); + menus_set_sensitive("
/_Kingdom/Work_lists", can_client_issue_orders()); + menus_set_sensitive("
/_Kingdom/_Revolution", can_client_issue_orders()); menus_set_sensitive("
/_Reports/S_paceship", (game.player_ptr->spaceship.state!=SSHIP_NONE)); @@ -999,7 +998,7 @@ /* Remaining part of this function: Update Orders menu */ - if (client_is_observer()) { + if (!can_client_issue_orders()) { return; } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/plrdlg.c freeciv-work/client/gui-gtk/plrdlg.c --- freeciv-orig/client/gui-gtk/plrdlg.c Fri Aug 9 00:10:18 2002 +++ freeciv-work/client/gui-gtk/plrdlg.c Thu Sep 26 17:16:08 2002 @@ -29,6 +29,7 @@ #include "player.h" #include "support.h" +#include "civclient.h" #include "chatline.h" #include "climisc.h" #include "clinet.h" @@ -469,18 +470,18 @@ gtk_widget_set_sensitive(players_war_command, FALSE); break; default: - gtk_widget_set_sensitive(players_war_command, + gtk_widget_set_sensitive(players_war_command, can_client_issue_orders() && game.player_idx != player_index); } - gtk_widget_set_sensitive(players_vision_command, + gtk_widget_set_sensitive(players_vision_command, can_client_issue_orders() && gives_shared_vision(game.player_ptr, pplayer)); if (pplayer->is_alive && pplayer != game.player_ptr && player_has_embassy(game.player_ptr, pplayer)) { if (pplayer->is_connected) - gtk_widget_set_sensitive(players_meet_command, TRUE); + gtk_widget_set_sensitive(players_meet_command, can_client_issue_orders()); else gtk_widget_set_sensitive(players_meet_command, FALSE); gtk_widget_set_sensitive(players_int_command, TRUE); diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk/repodlgs.c freeciv-work/client/gui-gtk/repodlgs.c --- freeciv-orig/client/gui-gtk/repodlgs.c Thu Jun 27 02:59:15 2002 +++ freeciv-work/client/gui-gtk/repodlgs.c Thu Sep 26 17:11:01 2002 @@ -625,8 +625,8 @@ i=economy_improvement_type[row]; if(i>=0 && i #include +#include "civclient.h" #include "city.h" #include "fcintl.h" #include "game.h" @@ -909,7 +910,7 @@ int row_selected; struct worklist_editor *peditor = (struct worklist_editor *) data; - if (ev && ev->type == GDK_2BUTTON_PRESS) { + if (can_client_issue_orders() && ev && ev->type == GDK_2BUTTON_PRESS) { /* Double-click to remove item from worklist */ worklist_remove_item(peditor); return; @@ -917,8 +918,10 @@ row_selected = (GTK_CLIST(peditor->worklist)->selection != NULL); - gtk_widget_set_sensitive(peditor->btn_up, row_selected && row > 0); - gtk_widget_set_sensitive(peditor->btn_down, row_selected && + gtk_widget_set_sensitive(peditor->btn_up, can_client_issue_orders() && + row_selected && row > 0 ); + gtk_widget_set_sensitive(peditor->btn_down, can_client_issue_orders() && + row_selected && row < GTK_CLIST(peditor->worklist)->rows - 1); } @@ -928,7 +931,7 @@ static void targets_select_callback(GtkWidget * w, gint row, gint column, GdkEvent * ev, gpointer data) { - if (ev && ev->type == GDK_2BUTTON_PRESS) { + if (can_client_issue_orders() && ev && ev->type == GDK_2BUTTON_PRESS) { struct worklist_editor *peditor = (struct worklist_editor *) data; /* Double-click to insert item in worklist */ worklist_insert_item(peditor); diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk-2.0/dialogs.c freeciv-work/client/gui-gtk-2.0/dialogs.c --- freeciv-orig/client/gui-gtk-2.0/dialogs.c Sat Aug 10 18:35:12 2002 +++ freeciv-work/client/gui-gtk-2.0/dialogs.c Fri Sep 27 15:14:54 2002 @@ -2220,8 +2220,9 @@ int delta=10; struct packet_player_request packet; - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_issue_orders()) { return TRUE; + } i= (size_t)data; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk-2.0/gotodlg.c freeciv-work/client/gui-gtk-2.0/gotodlg.c --- freeciv-orig/client/gui-gtk-2.0/gotodlg.c Wed Jun 12 09:24:37 2002 +++ freeciv-work/client/gui-gtk-2.0/gotodlg.c Fri Sep 27 15:14:58 2002 @@ -74,9 +74,7 @@ GtkWidget *scrolled; GtkAccelGroup *accel=gtk_accel_group_new(); - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; - if (!get_unit_in_focus()) { + if (!can_client_issue_orders() || !get_unit_in_focus()) { return; } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk-2.0/mapctrl.c freeciv-work/client/gui-gtk-2.0/mapctrl.c --- freeciv-orig/client/gui-gtk-2.0/mapctrl.c Wed Sep 11 19:04:40 2002 +++ freeciv-work/client/gui-gtk-2.0/mapctrl.c Sat Sep 28 14:42:20 2002 @@ -270,8 +270,7 @@ int xtile, ytile; /* when you get a + pow! */ - if (get_client_state() != CLIENT_GAME_RUNNING_STATE - || !(ev->state & GDK_SHIFT_MASK)) { + if (!can_client_issue_orders() || (ev->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) { return TRUE; } @@ -287,11 +286,9 @@ gboolean butt_down_mapcanvas(GtkWidget *w, GdkEventButton *ev, gpointer data) { int xtile, ytile; - - if(get_client_state() != CLIENT_GAME_RUNNING_STATE) - return TRUE; - - if ((ev->button == 1) && (ev->state & GDK_SHIFT_MASK)) { + + if (can_client_issue_orders() && ev->button == 1 + && (ev->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) { adjust_workers(w, ev); return TRUE; } @@ -301,10 +298,12 @@ if (ev->button == 1) { do_map_click(xtile, ytile); gtk_widget_grab_focus(turn_done_button); - } else if ((ev->button == 2) || (ev->state & GDK_CONTROL_MASK)) { - popit(ev, xtile, ytile); - } else { - center_tile_mapcanvas(xtile, ytile); + } else if (can_client_change_view()) { + if ((ev->button == 2) || (ev->state & GDK_CONTROL_MASK)) { + popit(ev, xtile, ytile); + } else if () { + center_tile_mapcanvas(xtile, ytile); + } } return TRUE; } @@ -358,7 +357,7 @@ struct packet_city_request packet; enum city_tile_type wrk; - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) { + if (!can_client_issue_orders()) { return; } @@ -411,15 +410,13 @@ (map_view_x0 + map_canvas_store_twidth / 2)); } ytile = ev->y / 2; - - if(get_client_state() != CLIENT_GAME_RUNNING_STATE) - return TRUE; - if (ev->button == 1) { - do_unit_goto(xtile, ytile); - } else if (ev->button == 3) { + if (can_client_change_view() && ev->button == 3) { center_tile_mapcanvas(xtile, ytile); + } else if (can_client_issue_orders() && ev->button == 1) { + do_unit_goto(xtile, ytile); } + return TRUE; } @@ -439,7 +436,7 @@ int x,y; struct city *pcity; - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { return; } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk-2.0/mapview.c freeciv-work/client/gui-gtk-2.0/mapview.c --- freeciv-orig/client/gui-gtk-2.0/mapview.c Sun Aug 25 13:20:57 2002 +++ freeciv-work/client/gui-gtk-2.0/mapview.c Sun Sep 29 17:40:28 2002 @@ -761,11 +761,12 @@ **************************************************************************/ gboolean overview_canvas_expose(GtkWidget *w, GdkEventExpose *ev, gpointer data) { - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { - if(radar_gfx_sprite) + if (!can_client_change_view()) { + if (radar_gfx_sprite) { gdk_draw_pixmap(overview_canvas->window, civ_gc, radar_gfx_sprite->pixmap, ev->area.x, ev->area.y, ev->area.x, ev->area.y, ev->area.width, ev->area.height); + } return TRUE; } @@ -932,7 +933,7 @@ update_map_canvas_scrollbars_size(); } - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { if (!intro_gfx_sprite) { load_intro_gfx(); } @@ -964,7 +965,7 @@ { static bool cleared = FALSE; - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { if (scaled_intro_sprite) { gdk_draw_pixmap(map_canvas->window, civ_gc, scaled_intro_sprite->pixmap, @@ -1778,8 +1779,9 @@ gfloat percent=adj->value; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; + if (!can_client_change_view()) { + return; + } last_map_view_x0=map_view_x0; last_map_view_y0=map_view_y0; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-gtk-2.0/menu.c freeciv-work/client/gui-gtk-2.0/menu.c --- freeciv-orig/client/gui-gtk-2.0/menu.c Thu Jun 13 04:18:20 2002 +++ freeciv-work/client/gui-gtk-2.0/menu.c Sat Sep 28 14:40:09 2002 @@ -954,7 +954,7 @@ *****************************************************************/ void update_menus(void) { - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { menus_set_sensitive("
/_Reports", FALSE); menus_set_sensitive("
/_Kingdom", FALSE); menus_set_sensitive("
/_View", FALSE); @@ -964,7 +964,11 @@ menus_set_sensitive("
/_Reports", TRUE); menus_set_sensitive("
/_Kingdom", TRUE); menus_set_sensitive("
/_View", TRUE); - menus_set_sensitive("
/_Orders", TRUE); + menus_set_sensitive("
/_Orders", can_client_issue_orders()); + + menus_set_sensitive("
/_Kingdom/_Tax Rates", can_client_issue_orders()); + menus_set_sensitive("
/_Kingdom/Work_lists", can_client_issue_orders()); + menus_set_sensitive("
/_Kingdom/_Revolution", can_client_issue_orders()); menus_set_sensitive("
/_Reports/S_paceship", (game.player_ptr->spaceship.state!=SSHIP_NONE)); @@ -987,6 +991,12 @@ menus_set_sensitive("
/_View/Focus Unit", !draw_units); menus_set_active("
/_View/Fog of War", draw_fog_of_war); + /* Remaining part of this function: Update Orders menu */ + + if (!can_client_issue_orders()) { + return; + } + if((punit=get_unit_in_focus())) { char *irrfmt = _("Change to %s (_I)"); char *minfmt = _("Change to %s (_M)"); diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-mui/gui_main.c freeciv-work/client/gui-mui/gui_main.c --- freeciv-orig/client/gui-mui/gui_main.c Sat Aug 24 16:37:44 2002 +++ freeciv-work/client/gui-mui/gui_main.c Sat Sep 28 15:03:19 2002 @@ -412,8 +412,7 @@ } break; case END_TURN: - if (get_client_state() == CLIENT_GAME_RUNNING_STATE) - key_end_turn(); + key_end_turn(); break; case NEXT_UNIT: advance_unit_focus(); /*focus_to_next_unit(); */ @@ -727,7 +726,7 @@ int delta = 10; struct packet_player_request packet; - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_issue_orders()) return; i = (size_t) * number; @@ -1183,7 +1182,7 @@ **************************************************************************/ void update_menus(void) /* from menu.c */ { - if (get_client_state() != CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { menu_title_sensitive(MENU_REPORT, FALSE); menu_title_sensitive(MENU_ORDER, FALSE); @@ -1207,13 +1206,17 @@ } menu_title_sensitive(MENU_REPORT, TRUE); - menu_title_sensitive(MENU_ORDER, punit ? TRUE : FALSE); + menu_title_sensitive(MENU_ORDER, punit ? can_client_issue_orders() : FALSE); menu_title_sensitive(MENU_VIEW, TRUE); menu_title_sensitive(MENU_KINGDOM, TRUE); + menu_title_sensitive(MENU_KINGDOM_TAX_RATE, can_client_issue_orders()); + menu_title_sensitive(MENU_KINGDOM_WORKLISTS, can_client_issue_orders()); + menu_title_sensitive(MENU_KINGDOM_REVOLUTION, can_client_issue_orders()); + menu_entry_sensitive(MENU_REPORT_SPACESHIP, (game.player_ptr->spaceship.state != SSHIP_NONE)); - if (punit) + if (punit && can_client_issue_orders()) { const char *chgfmt = _("Change to %s"); static char irrtext[64]; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-mui/mapclass.c freeciv-work/client/gui-mui/mapclass.c --- freeciv-orig/client/gui-mui/mapclass.c Sun Mar 17 11:48:58 2002 +++ freeciv-work/client/gui-mui/mapclass.c Sat Sep 28 15:21:37 2002 @@ -775,7 +775,7 @@ } } - if (redraw && get_client_state() == CLIENT_GAME_RUNNING_STATE) + if (redraw && can_client_change_view()) { data->old_horiz_first = data->horiz_first; data->old_vert_first = data->vert_first; @@ -1075,7 +1075,7 @@ DoSuperMethodA(cl, o, (Msg) msg); - if (get_client_state() == CLIENT_GAME_RUNNING_STATE) + if (can_client_change_view()) { BOOL drawmap = FALSE; if (msg->flags & MADF_DRAWUPDATE) @@ -1645,7 +1645,7 @@ } - if (msg->imsg && (get_client_state() == CLIENT_GAME_RUNNING_STATE)) + if (msg->imsg && can_client_change_view()) { UWORD qual = msg->imsg->Qualifier; @@ -1724,7 +1724,7 @@ if (data->context_menu) MUI_DisposeObject(data->context_menu); - if (get_client_state() == CLIENT_GAME_RUNNING_STATE) + if (can_client_change_view()) { if (_isinobject(msg->mx, msg->my)) { diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-mui/overviewclass.c freeciv-work/client/gui-mui/overviewclass.c --- freeciv-orig/client/gui-mui/overviewclass.c Wed Jan 9 19:44:48 2002 +++ freeciv-work/client/gui-mui/overviewclass.c Sat Sep 28 15:22:22 2002 @@ -448,7 +448,7 @@ MUI_RequestIDCMP(o, IDCMP_MOUSEBUTTONS); - if (get_client_state() == CLIENT_GAME_RUNNING_STATE) + if (can_client_change_view()) { Overview_FillBuffer(data); } @@ -509,7 +509,7 @@ DoSuperMethodA(cl, o, (Msg) msg); - if (get_client_state() == CLIENT_GAME_RUNNING_STATE) + if (can_client_change_view()) { LONG scalex = data->ov_ScaleX; LONG scaley = data->ov_ScaleY; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-win32/gotodlg.c freeciv-work/client/gui-win32/gotodlg.c --- freeciv-orig/client/gui-win32/gotodlg.c Sat Jul 13 15:33:06 2002 +++ freeciv-work/client/gui-win32/gotodlg.c Sat Sep 28 15:48:16 2002 @@ -139,7 +139,7 @@ struct fcwin_box *vbox; if (goto_dialog) return; - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) return; if (get_unit_in_focus()==0) return; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-win32/gui_main.c freeciv-work/client/gui-win32/gui_main.c --- freeciv-orig/client/gui-win32/gui_main.c Sat Aug 24 16:37:46 2002 +++ freeciv-work/client/gui-win32/gui_main.c Sat Sep 28 15:48:49 2002 @@ -458,7 +458,7 @@ static VOID CALLBACK blink_timer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { - if (get_client_state() == CLIENT_GAME_RUNNING_STATE) { + if (can_client_change_view()) { check_mapstore(); } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-win32/mapctrl.c freeciv-work/client/gui-win32/mapctrl.c --- freeciv-orig/client/gui-win32/mapctrl.c Sun Jul 28 16:19:31 2002 +++ freeciv-work/client/gui-win32/mapctrl.c Sat Sep 28 15:47:01 2002 @@ -272,7 +272,7 @@ case WM_CREATE: break; case WM_LBUTTONDOWN: - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) break; SetFocus(root_window); get_map_xy(LOWORD(lParam),HIWORD(lParam),&xtile,&ytile); @@ -286,13 +286,13 @@ } break; case WM_MBUTTONDOWN: - if (get_client_state() == CLIENT_GAME_RUNNING_STATE) { + if (can_client_change_view()) { get_map_xy(LOWORD(lParam), HIWORD(lParam), &xtile, &ytile); popit(LOWORD(lParam), HIWORD(lParam), xtile, ytile); } break; case WM_RBUTTONDOWN: - if (get_client_state()==CLIENT_GAME_RUNNING_STATE) { + if (can_client_change_view()) { get_map_xy(LOWORD(lParam),HIWORD(lParam),&xtile,&ytile); if (wParam&MK_CONTROL) { popit(LOWORD(lParam),HIWORD(lParam),xtile,ytile); @@ -314,7 +314,7 @@ } break; case WM_MOUSEMOVE: - if (get_client_state()==CLIENT_GAME_RUNNING_STATE) { + if (can_client_change_view()) { map_handle_move(LOWORD(lParam),HIWORD(lParam)); } break; @@ -364,8 +364,9 @@ ytile=y/2; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return ; + if (!can_client_change_view()) { + return; + } center_tile_mapcanvas(xtile,ytile); } diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-win32/mapview.c freeciv-work/client/gui-win32/mapview.c --- freeciv-orig/client/gui-win32/mapview.c Sat Aug 24 16:37:47 2002 +++ freeciv-work/client/gui-win32/mapview.c Sat Sep 28 15:43:00 2002 @@ -125,7 +125,7 @@ map_view_width=(map_win_width+NORMAL_TILE_WIDTH-1)/NORMAL_TILE_WIDTH; map_view_height=(map_win_height+NORMAL_TILE_HEIGHT-1)/NORMAL_TILE_HEIGHT; update_map_canvas_scrollbars_size(); - if ((get_client_state()==CLIENT_GAME_RUNNING_STATE)&&(map.xsize)) + if (can_client_change_view() && (map.xsize != 0)) { update_map_canvas_visible(); update_map_canvas_scrollbars(); @@ -162,7 +162,7 @@ HBITMAP bmsave; HDC introgfxdc; - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { if (!intro_gfx_sprite) load_intro_gfx(); if (!intro_gfx) intro_gfx=BITMAP2HBITMAP(&intro_gfx_sprite->bmp); @@ -1370,7 +1370,7 @@ HBITMAP old; HBITMAP bmp; int i; - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { if (!radar_gfx_sprite) { load_intro_gfx(); @@ -1436,7 +1436,7 @@ **************************************************************************/ void map_handle_hscroll(int pos) { - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) return; map_view_x=pos; update_map_canvas_visible(); @@ -1448,7 +1448,7 @@ **************************************************************************/ void map_handle_vscroll(int pos) { - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) return; map_view_y=pos; map_view_y=(map_view_y<0)?0:map_view_y; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-win32/menu.c freeciv-work/client/gui-win32/menu.c --- freeciv-orig/client/gui-win32/menu.c Thu Jun 27 20:30:01 2002 +++ freeciv-work/client/gui-win32/menu.c Sat Sep 28 15:39:27 2002 @@ -859,7 +859,7 @@ enum MenuID id; HMENU menu; menu=GetMenu(root_window); - if (get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_issue_orders()) { for(id=IDM_KINGDOM_MENU+1;idcities)); - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_issue_orders()) { return; + } if(get_unit_in_focus()==0) return; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-xaw/mapctrl.c freeciv-work/client/gui-xaw/mapctrl.c --- freeciv-orig/client/gui-xaw/mapctrl.c Wed Sep 11 19:04:41 2002 +++ freeciv-work/client/gui-xaw/mapctrl.c Sat Sep 28 16:08:17 2002 @@ -241,8 +241,9 @@ int map_x, map_y, is_real; XButtonEvent *ev=&event->xbutton; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } map_x = map_view_x0 + ev->x / NORMAL_TILE_WIDTH; map_y = map_view_y0 + ev->y / NORMAL_TILE_HEIGHT; @@ -260,8 +261,9 @@ int x, y; XButtonEvent *ev=&event->xbutton; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } get_map_xy(ev->x, ev->y, &x, &y); @@ -326,8 +328,9 @@ struct packet_city_request packet; enum city_tile_type wrk; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } map_x = map_view_x0 + ev->x / NORMAL_TILE_WIDTH; map_y = map_view_y0 + ev->y / NORMAL_TILE_HEIGHT; @@ -367,8 +370,9 @@ XButtonEvent *ev=&event->xbutton; struct city *pcity; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) + if (!can_client_change_view()) { return; + } x = map_view_x0 + ev->x / NORMAL_TILE_WIDTH; y = map_view_y0 + ev->y / NORMAL_TILE_HEIGHT; @@ -394,8 +398,9 @@ xtile=ev->x/2-(map.xsize/2-(map_view_x0+map_canvas_store_twidth/2)); ytile=ev->y/2; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; + if (!can_client_change_view()) { + return; + } if(ev->button==Button1) do_unit_goto(xtile,ytile); diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-xaw/mapview.c freeciv-work/client/gui-xaw/mapview.c --- freeciv-orig/client/gui-xaw/mapview.c Sat Aug 24 16:37:48 2002 +++ freeciv-work/client/gui-xaw/mapview.c Sat Sep 28 16:10:53 2002 @@ -481,8 +481,8 @@ { Dimension height, width; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { - if(radar_gfx_sprite) + if (!can_client_change_view()) { + if (radar_gfx_sprite) XCopyArea(display, radar_gfx_sprite->pixmap, XtWindow(overview_canvas), civ_gc, event->xexpose.x, event->xexpose.y, @@ -597,10 +597,12 @@ tile_width=(width+NORMAL_TILE_WIDTH-1)/NORMAL_TILE_WIDTH; tile_height=(height+NORMAL_TILE_HEIGHT-1)/NORMAL_TILE_HEIGHT; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { - if(!intro_gfx_sprite) load_intro_gfx(); - if(height!=scaled_intro_pixmap_height || width!=scaled_intro_pixmap_width) { - if(scaled_intro_pixmap) + if (!can_client_change_view()) { + if (!intro_gfx_sprite) { + load_intro_gfx(); + } + if (height!=scaled_intro_pixmap_height || width!=scaled_intro_pixmap_width) { + if (scaled_intro_pixmap) XFreePixmap(display, scaled_intro_pixmap); scaled_intro_pixmap=x_scale_pixmap(intro_gfx_sprite->pixmap, @@ -1144,8 +1146,9 @@ { float percent=*(float*)percent_ptr; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; + if (!can_client_change_view()) { + return; + } if(w==map_horizontal_scrollbar) map_view_x0=percent*map.xsize; @@ -1173,9 +1176,9 @@ { int position = XTPOINTER_TO_INT(position_val), is_real; - - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) - return; + if (!can_client_change_view()) { + return; + } if(w==map_horizontal_scrollbar) { if(position>0) diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/gui-xaw/menu.c freeciv-work/client/gui-xaw/menu.c --- freeciv-orig/client/gui-xaw/menu.c Mon Feb 11 14:55:48 2002 +++ freeciv-work/client/gui-xaw/menu.c Sun Sep 29 17:45:32 2002 @@ -243,7 +243,7 @@ *****************************************************************/ void update_menus(void) { - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { XtSetSensitive(menus[MENU_REPORT]->button, False); XtSetSensitive(menus[MENU_ORDER]->button, False); XtSetSensitive(menus[MENU_VIEW]->button, False); @@ -272,10 +272,17 @@ } XtSetSensitive(menus[MENU_REPORT]->button, True); - XtSetSensitive(menus[MENU_ORDER]->button, (punit != NULL)); + XtSetSensitive(menus[MENU_ORDER]->button, (punit != NULL) && can_client_issue_orders()); XtSetSensitive(menus[MENU_VIEW]->button, True); XtSetSensitive(menus[MENU_KINGDOM]->button, True); + menu_entry_sensitive(MENU_KINGDOM, MENU_KINGDOM_RATES, + can_client_issue_orders()); + menu_entry_sensitive(MENU_KINGDOM, MENU_KINGDOM_WORKLISTS, + can_client_issue_orders()); + menu_entry_sensitive(MENU_KINGDOM, MENU_KINGDOM_REVOLUTION, + can_client_issue_orders()); + menu_entry_sensitive(MENU_VIEW, MENU_VIEW_SHOW_TERRAIN, 1); menu_entry_sensitive(MENU_VIEW, MENU_VIEW_SHOW_COASTLINE, !draw_terrain); menu_entry_sensitive(MENU_VIEW, MENU_VIEW_SHOW_ROADS_RAILS, 1); @@ -301,7 +308,7 @@ menu_entry_sensitive(MENU_REPORT, MENU_REPORT_SPACESHIP, (game.player_ptr->spaceship.state!=SSHIP_NONE)); - if(punit) { + if (punit && can_client_issue_orders()) { enum tile_terrain_type ttype; struct tile_type * tinfo; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/mapctrl_common.c freeciv-work/client/mapctrl_common.c --- freeciv-orig/client/mapctrl_common.c Sat Aug 24 16:37:34 2002 +++ freeciv-work/client/mapctrl_common.c Sat Sep 28 16:45:16 2002 @@ -51,10 +51,9 @@ turn_done_state); } - new_state = (get_client_state() == CLIENT_GAME_RUNNING_STATE + new_state = (can_client_issue_orders() && !game.player_ptr->turn_done && !agents_busy() && (!game.player_ptr->ai.control || ai_manual_turn_done) - && !client_is_observer() && !turn_done_sent); if (new_state == turn_done_state) { return; diff -urN -Xfreeciv-orig/diff_ignore freeciv-orig/client/packhand.c freeciv-work/client/packhand.c --- freeciv-orig/client/packhand.c Thu Sep 26 14:22:22 2002 +++ freeciv-work/client/packhand.c Sat Sep 28 16:43:10 2002 @@ -274,7 +274,7 @@ **************************************************************************/ void handle_game_state(struct packet_generic_integer *packet) { - if(get_client_state()==CLIENT_SELECT_RACE_STATE && + if (get_client_state()==CLIENT_SELECT_RACE_STATE && packet->value==CLIENT_GAME_RUNNING_STATE && game.player_ptr->nation == MAX_NUM_NATIONS) { popdown_races_dialog(); @@ -282,7 +282,7 @@ set_client_state(packet->value); - if(get_client_state()==CLIENT_GAME_RUNNING_STATE) { + if (get_client_state()==CLIENT_GAME_RUNNING_STATE) { refresh_overview_canvas(); refresh_overview_viewrect(); player_set_unit_focus_status(game.player_ptr); @@ -297,6 +297,15 @@ free_intro_radar_sprites(); agents_game_start(); } + + if (get_client_state() == CLIENT_GAME_OVER_STATE) { + refresh_overview_canvas(); + refresh_overview_viewrect(); + + update_info_label(); + update_unit_focus(); + update_unit_info_label(NULL); + } } /************************************************************************** @@ -438,7 +447,7 @@ &need_effect_update); } impr_type_iterate_end; - popup = (city_is_new && get_client_state()==CLIENT_GAME_RUNNING_STATE && + popup = (city_is_new && can_client_change_view() && pcity->owner==game.player_idx) || packet->diplomat_investigate; if (city_is_new && !city_has_changed_owner) { @@ -477,7 +486,7 @@ } } - if (draw_map_grid && get_client_state() == CLIENT_GAME_RUNNING_STATE) { + if (draw_map_grid && can_client_change_view()) { queue_mapview_update(); } else { refresh_tile_mapcanvas(pcity->x, pcity->y, TRUE); @@ -1061,7 +1070,7 @@ game.heating=pinfo->heating; game.nuclearwinter=pinfo->nuclearwinter; game.cooling=pinfo->cooling; - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { + if (!can_client_change_view()) { improvement_status_init(game.improvements, ARRAY_SIZE(game.improvements)); @@ -1095,9 +1104,8 @@ /* Only update effects if a new wonder appeared or was destroyed */ try_update_effects(need_effect_update); - if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) { - if(get_client_state()==CLIENT_SELECT_RACE_STATE) - popdown_races_dialog(); + if (get_client_state() == CLIENT_SELECT_RACE_STATE) { + popdown_races_dialog(); } game.techpenalty=pinfo->techpenalty; game.foodbox=pinfo->foodbox; @@ -1105,7 +1113,7 @@ game.unhappysize = pinfo->unhappysize; game.cityfactor = pinfo->cityfactor; - boot_help = (get_client_state() == CLIENT_GAME_RUNNING_STATE + boot_help = (can_client_change_view() && game.spacerace != pinfo->spacerace); game.spacerace=pinfo->spacerace; if (game.timeout != 0) { @@ -1192,7 +1200,7 @@ pplayer->future_tech=pinfo->future_tech; pplayer->ai.tech_goal=pinfo->tech_goal; - if(get_client_state()==CLIENT_GAME_RUNNING_STATE && pplayer==game.player_ptr) { + if(can_client_change_view() && pplayer==game.player_ptr) { if(poptechup) { if(!game.player_ptr->ai.control || ai_popup_windows) popup_science_dialog(TRUE); @@ -1230,7 +1238,7 @@ (pplayer->revolution < 1 || pplayer->revolution > 5) && pplayer->government == game.government_when_anarchy && (!game.player_ptr->ai.control || ai_popup_windows) && - (get_client_state() == CLIENT_GAME_RUNNING_STATE)) { + can_client_change_view()) { create_event(-1, -1, E_REVOLT_DONE, _("Game: Revolution finished")); popup_government_dialog(); } @@ -1238,8 +1246,7 @@ update_players_dialog(); update_worklist_report_dialog(); - if (pplayer == game.player_ptr - && get_client_state() == CLIENT_GAME_RUNNING_STATE) { + if (pplayer == game.player_ptr && can_client_change_view()) { update_info_label(); } } @@ -1560,7 +1567,7 @@ } /* refresh tiles */ - if(get_client_state()==CLIENT_GAME_RUNNING_STATE) { + if (can_client_change_view()) { int x = packet->x, y = packet->y; /* the tile itself */