diff -Nur -Xdiff_ignore ../now/client/gui-gtk/gamedlgs.c ./client/gui-gtk/gamedlgs.c --- ../now/client/gui-gtk/gamedlgs.c Thu Jun 13 09:57:29 2002 +++ ./client/gui-gtk/gamedlgs.c Sat Jul 13 11:02:43 2002 @@ -370,7 +370,9 @@ static GtkWidget *option_dialog_shell; /************************************************************************** -... + Callback for closing the options dialog. Restore the button states in the + options variable. Close the dialog. Call show_hide_map_scrollbars just + in case the map_has_scrollbars option has been changed. **************************************************************************/ static void option_ok_command_callback(GtkWidget *widget, gpointer data) { @@ -391,6 +393,9 @@ gtk_widget_set_sensitive(top_vbox, TRUE); gtk_widget_destroy(option_dialog_shell); + + /* just in case map_has_scrollbars has changed */ + show_hide_map_scrollbars(); } diff -Nur -Xdiff_ignore ../now/client/gui-gtk/gui_main.c ./client/gui-gtk/gui_main.c --- ../now/client/gui-gtk/gui_main.c Thu Jul 11 10:08:02 2002 +++ ./client/gui-gtk/gui_main.c Sat Jul 13 13:31:35 2002 @@ -73,8 +73,12 @@ GtkWidget *map_canvas; /* GtkDrawingArea */ GtkWidget *map_horizontal_scrollbar; GtkWidget *map_vertical_scrollbar; +GtkWidget *table; GdkPixmap *map_canvas_store; /* this pixmap acts as a backing store * for the map_canvas widget */ +bool map_has_scrollbars_now; /* to reflect the state */ + /* whether the main map */ + /* actually has scrollbars */ int map_canvas_store_twidth = 1; int map_canvas_store_theight = 1; @@ -433,13 +437,43 @@ } /************************************************************************** + Create or destroy the scrollbars for the main map, according to + "map_has_scrollbars" option. To be called whenever map_has_scrollbars may + have changed. +**************************************************************************/ +void show_hide_map_scrollbars(void) +{ + if(!map_has_scrollbars_now && map_has_scrollbars) { + + /* create scrollbars for main map */ + map_horizontal_scrollbar = gtk_hscrollbar_new(NULL); + map_vertical_scrollbar = gtk_vscrollbar_new(NULL); + gtk_table_attach(GTK_TABLE(table), map_horizontal_scrollbar, 0, 1, 1, 2, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), map_vertical_scrollbar, 1, 2, 0, 1, + 0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0); + + map_has_scrollbars_now = TRUE; + gtk_widget_show_all(table); + } + + if(map_has_scrollbars_now && !map_has_scrollbars) { + + /* destroy main map scrollbars */ + map_has_scrollbars_now = FALSE; + gtk_widget_destroy(map_horizontal_scrollbar); + gtk_widget_destroy(map_vertical_scrollbar); + } +} + +/************************************************************************** do the heavy lifting for the widget setup. **************************************************************************/ static void setup_widgets(void) { GtkWidget *box, *ebox, *hbox, *vbox; GtkWidget *avbox, *ahbox; - GtkWidget *frame, *table, *paned, *menubar, *text; + GtkWidget *frame, *paned, *menubar, *text; GtkStyle *text_style, *style; int i; @@ -651,14 +685,9 @@ gtk_drawing_area_size(GTK_DRAWING_AREA(map_canvas), 510, 300); gtk_container_add(GTK_CONTAINER(frame), map_canvas); - map_horizontal_scrollbar = gtk_hscrollbar_new(NULL); - gtk_table_attach(GTK_TABLE(table), map_horizontal_scrollbar, 0, 1, 1, 2, - GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); - - map_vertical_scrollbar = gtk_vscrollbar_new(NULL); - gtk_table_attach(GTK_TABLE(table), map_vertical_scrollbar, 1, 2, 0, 1, - 0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0); - + map_has_scrollbars_now = FALSE; + show_hide_map_scrollbars(); + gtk_signal_connect(GTK_OBJECT(map_canvas), "expose_event", GTK_SIGNAL_FUNC(map_canvas_expose), NULL); diff -Nur -Xdiff_ignore ../now/client/gui-gtk/gui_main.h ./client/gui-gtk/gui_main.h --- ../now/client/gui-gtk/gui_main.h Sun Jul 7 12:56:06 2002 +++ ./client/gui-gtk/gui_main.h Sat Jul 13 10:53:42 2002 @@ -56,8 +56,14 @@ extern GtkWidget * turn_done_button; extern GtkWidget * unit_info_label; extern GtkWidget * unit_info_frame; +extern GtkWidget * table; extern GtkWidget * map_horizontal_scrollbar; extern GtkWidget * map_vertical_scrollbar; +extern bool map_has_scrollbars_now; /* to reflect the state */ + /* whether the main map */ + /* actually has scrollbars */ extern GdkWindow * root_window; + +void show_hide_map_scrollbars(void); #endif /* FC__GUI_MAIN_H */ diff -Nur -Xdiff_ignore ../now/client/gui-gtk/mapview.c ./client/gui-gtk/mapview.c --- ../now/client/gui-gtk/mapview.c Sun Jul 7 12:56:06 2002 +++ ./client/gui-gtk/mapview.c Fri Jul 12 20:50:13 2002 @@ -1695,6 +1695,9 @@ **************************************************************************/ void update_map_canvas_scrollbars(void) { + if (!map_has_scrollbars_now) { + return; + } gtk_adjustment_set_value(GTK_ADJUSTMENT(map_hadj), map_view_x0); gtk_adjustment_set_value(GTK_ADJUSTMENT(map_vadj), map_view_y0); } @@ -1704,6 +1707,10 @@ **************************************************************************/ void update_map_canvas_scrollbars_size(void) { + if (!map_has_scrollbars_now) { + return; + } + map_hadj=gtk_adjustment_new(-1, 0, map.xsize, 1, map_canvas_store_twidth, map_canvas_store_twidth); map_vadj=gtk_adjustment_new(-1, 0, map.ysize+EXTRA_BOTTOM_ROW, 1, @@ -1733,6 +1740,10 @@ if(get_client_state()!=CLIENT_GAME_RUNNING_STATE) return; + + if (!map_has_scrollbars_now) { + return; + } last_map_view_x0=map_view_x0; last_map_view_y0=map_view_y0; diff -Nur -Xdiff_ignore ../now/client/options.c ./client/options.c --- ../now/client/options.c Thu Jun 13 09:57:19 2002 +++ ./client/options.c Sat Jul 13 10:44:00 2002 @@ -53,6 +53,7 @@ bool concise_city_production = FALSE; bool auto_turn_done = FALSE; bool meta_accelerators = TRUE; +bool map_has_scrollbars = TRUE; #define GEN_INT_OPTION(name, desc) { #name, desc, COT_INT, &name, NULL, NULL } #define GEN_BOOL_OPTION(name, desc) { #name, desc, COT_BOOL, NULL, &name, NULL } @@ -74,6 +75,7 @@ GEN_BOOL_OPTION(concise_city_production, N_("Concise City Production")), GEN_BOOL_OPTION(auto_turn_done, N_("End Turn when done moving")), GEN_BOOL_OPTION(meta_accelerators, N_("Use Alt/Meta for accelerators (GTK only)")), + GEN_BOOL_OPTION(map_has_scrollbars, N_("Show Scrollbars with Map (GTK only)")), GEN_OPTION_TERMINATOR }; #undef GEN_INT_OPTION diff -Nur -Xdiff_ignore ../now/client/options.h ./client/options.h --- ../now/client/options.h Mon Jun 3 10:50:29 2002 +++ ./client/options.h Sat Jul 13 10:43:26 2002 @@ -35,6 +35,7 @@ extern bool concise_city_production; extern bool auto_turn_done; extern bool meta_accelerators; +extern bool map_has_scrollbars; enum client_option_type { COT_BOOL,