From 0c4cb1e1c7d879228af60bbb9a2ab974670c6566 Mon Sep 17 00:00:00 2001 From: Dino Date: Sat, 12 Apr 2025 21:06:29 -0400 Subject: [PATCH] #1288, gtk3.22 & gtk4 clients, save options dlog size across runtimes using freeciv-client-rc-* file. --- client/gui-gtk-3.22/optiondlg.c | 14 +++++++- client/gui-gtk-4.0/optiondlg.c | 9 ++++- client/options.c | 62 +++++++++++++++++++++++++++++++++ client/options.h | 55 +++++++++++++++++++++++++++++ 4 files changed, 138 insertions(+), 2 deletions(-) diff --git a/client/gui-gtk-3.22/optiondlg.c b/client/gui-gtk-3.22/optiondlg.c index 34099bc1eb..adbc630d20 100644 --- a/client/gui-gtk-3.22/optiondlg.c +++ b/client/gui-gtk-3.22/optiondlg.c @@ -129,6 +129,16 @@ static void option_dialog_reponse_callback(GtkDialog *dialog, static void option_dialog_destroy_callback(GtkWidget *object, gpointer data) { struct option_dialog *pdialog = (struct option_dialog *) data; + GtkWidget* cont_area; + GtkAllocation allocation; + int baseline; + + /* Save size of the dialog. */ + cont_area = gtk_dialog_get_content_area (GTK_DIALOG(pdialog->shell)); + gtk_widget_get_allocated_size(GTK_WIDGET(cont_area), + &allocation, &baseline); + GUI_GTK_OPTION(optionsdlg_xsize) = allocation.width; + GUI_GTK_OPTION(optionsdlg_ysize) = allocation.height; if (NULL != pdialog->shell) { /* Mark as destroyed, see also option_dialog_destroy(). */ @@ -377,7 +387,9 @@ option_dialog_new(const char *name, const struct option_set *poptset) /* Shell */ setup_dialog(pdialog->shell, toplevel); gtk_window_set_position(GTK_WINDOW(pdialog->shell), GTK_WIN_POS_MOUSE); - gtk_window_set_default_size(GTK_WINDOW(pdialog->shell), -1, 480); + gtk_window_set_default_size(GTK_WINDOW(pdialog->shell), + GUI_GTK_OPTION(optionsdlg_xsize), + GUI_GTK_OPTION(optionsdlg_ysize)); g_signal_connect(pdialog->shell, "response", G_CALLBACK(option_dialog_reponse_callback), pdialog); g_signal_connect(pdialog->shell, "destroy", diff --git a/client/gui-gtk-4.0/optiondlg.c b/client/gui-gtk-4.0/optiondlg.c index 546d51f4e9..9509ddadc5 100644 --- a/client/gui-gtk-4.0/optiondlg.c +++ b/client/gui-gtk-4.0/optiondlg.c @@ -132,6 +132,11 @@ static void option_dialog_destroy_callback(GtkWidget *object, gpointer data) { struct option_dialog *pdialog = (struct option_dialog *) data; + /* Save size of the dialog. */ + gtk_window_get_default_size (GTK_WINDOW(object), + &GUI_GTK_OPTION(optionsdlg_xsize), + &GUI_GTK_OPTION(optionsdlg_ysize)); + if (NULL != pdialog->shell) { /* Mark as destroyed, see also option_dialog_destroy(). */ pdialog->shell = NULL; @@ -404,7 +409,9 @@ option_dialog_new(const char *name, const struct option_set *poptset) /* Shell */ setup_dialog(pdialog->shell, toplevel); - gtk_window_set_default_size(GTK_WINDOW(pdialog->shell), -1, 480); + gtk_window_set_default_size(GTK_WINDOW(pdialog->shell), + GUI_GTK_OPTION(optionsdlg_xsize), + GUI_GTK_OPTION(optionsdlg_ysize)); g_signal_connect(pdialog->shell, "response", G_CALLBACK(option_dialog_reponse_callback), pdialog); g_signal_connect(pdialog->shell, "destroy", diff --git a/client/options.c b/client/options.c index 3ca2952942..4857f30420 100644 --- a/client/options.c +++ b/client/options.c @@ -229,6 +229,8 @@ struct client_options gui_options = { .gui_gtk2_citydlg_ysize = GUI_GTK2_CITYDLG_DEFAULT_YSIZE, .gui_gtk2_helpdlg_xsize = GUI_GTK2_HELPDLG_DEFAULT_XSIZE, .gui_gtk2_helpdlg_ysize = GUI_GTK2_HELPDLG_DEFAULT_YSIZE, + .gui_gtk2_optionsdlg_ysize = GUI_GTK2_OPTIONSDLG_DEFAULT_YSIZE, + .gui_gtk2_optionsdlg_xsize = GUI_GTK2_OPTIONSDLG_DEFAULT_XSIZE, .gui_gtk2_popup_tech_help = GUI_POPUP_TECH_HELP_RULESET, .gui_gtk2_font_city_label = "Monospace 8", .gui_gtk2_font_notify_label = "Monospace Bold 9", @@ -263,6 +265,8 @@ struct client_options gui_options = { .gui_gtk3_citydlg_ysize = GUI_GTK3_CITYDLG_DEFAULT_YSIZE, .gui_gtk3_helpdlg_xsize = GUI_GTK3_HELPDLG_DEFAULT_XSIZE, .gui_gtk3_helpdlg_ysize = GUI_GTK3_HELPDLG_DEFAULT_YSIZE, + .gui_gtk3_optionsdlg_xsize = GUI_GTK3_OPTIONSDLG_DEFAULT_XSIZE, + .gui_gtk3_optionsdlg_ysize = GUI_GTK3_OPTIONSDLG_DEFAULT_YSIZE, .gui_gtk3_popup_tech_help = GUI_POPUP_TECH_HELP_RULESET, .gui_gtk3_governor_range_min = -20, .gui_gtk3_governor_range_max = 20, @@ -300,6 +304,8 @@ struct client_options gui_options = { .gui_gtk3_22_citydlg_ysize = GUI_GTK3_22_CITYDLG_DEFAULT_YSIZE, .gui_gtk3_22_helpdlg_xsize = GUI_GTK3_22_HELPDLG_DEFAULT_XSIZE, .gui_gtk3_22_helpdlg_ysize = GUI_GTK3_22_HELPDLG_DEFAULT_YSIZE, + .gui_gtk3_22_optionsdlg_xsize = GUI_GTK3_22_OPTIONSDLG_DEFAULT_XSIZE, + .gui_gtk3_22_optionsdlg_ysize = GUI_GTK3_22_OPTIONSDLG_DEFAULT_YSIZE, .gui_gtk3_22_popup_tech_help = GUI_POPUP_TECH_HELP_RULESET, .gui_gtk3_22_governor_range_min = -20, .gui_gtk3_22_governor_range_max = 20, @@ -337,6 +343,8 @@ struct client_options gui_options = { .gui_gtk4_citydlg_ysize = GUI_GTK4_CITYDLG_DEFAULT_YSIZE, .gui_gtk4_helpdlg_xsize = GUI_GTK4_HELPDLG_DEFAULT_XSIZE, .gui_gtk4_helpdlg_ysize = GUI_GTK4_HELPDLG_DEFAULT_YSIZE, + .gui_gtk4_optionsdlg_ysize = GUI_GTK4_OPTIONSDLG_DEFAULT_YSIZE, + .gui_gtk4_optionsdlg_xsize = GUI_GTK4_OPTIONSDLG_DEFAULT_XSIZE, .gui_gtk4_popup_tech_help = GUI_POPUP_TECH_HELP_RULESET, .gui_gtk4_governor_range_min = -20, .gui_gtk4_governor_range_max = 20, @@ -374,6 +382,8 @@ struct client_options gui_options = { .gui_gtk5_citydlg_ysize = GUI_GTK5_CITYDLG_DEFAULT_YSIZE, .gui_gtk5_helpdlg_xsize = GUI_GTK5_HELPDLG_DEFAULT_XSIZE, .gui_gtk5_helpdlg_ysize = GUI_GTK5_HELPDLG_DEFAULT_YSIZE, + .gui_gtk5_optionsdlg_xsize = GUI_GTK5_OPTIONSDLG_DEFAULT_XSIZE, + .gui_gtk5_optionsdlg_ysize = GUI_GTK5_OPTIONSDLG_DEFAULT_YSIZE, .gui_gtk5_popup_tech_help = GUI_POPUP_TECH_HELP_RULESET, .gui_gtk5_governor_range_min = -20, .gui_gtk5_governor_range_max = 20, @@ -2584,6 +2594,14 @@ static struct client_option client_options[] = { COC_INTERFACE, GUI_GTK2, GUI_GTK2_HELPDLG_DEFAULT_YSIZE, GUI_GTK2_HELPDLG_MIN_YSIZE, GUI_GTK2_HELPDLG_MAX_YSIZE, NULL), + GEN_INT_OPTION(gui_gtk2_optionsdlg_xsize, NULL, NULL, + COC_INTERFACE, GUI_GTK2, GUI_GTK2_OPTIONSDLG_DEFAULT_XSIZE, + GUI_GTK2_OPTIONSDLG_MIN_XSIZE, GUI_GTK2_OPTIONSDLG_MAX_XSIZE, + NULL), + GEN_INT_OPTION(gui_gtk2_optionsdlg_ysize, NULL, NULL, + COC_INTERFACE, GUI_GTK2, GUI_GTK2_OPTIONSDLG_DEFAULT_YSIZE, + GUI_GTK2_OPTIONSDLG_MIN_YSIZE, GUI_GTK2_OPTIONSDLG_MAX_YSIZE, + NULL), GEN_ENUM_OPTION(gui_gtk2_popup_tech_help, NULL, NULL, COC_INTERFACE, GUI_GTK2, GUI_POPUP_TECH_HELP_RULESET, @@ -2691,6 +2709,14 @@ static struct client_option client_options[] = { COC_INTERFACE, GUI_GTK3, GUI_GTK3_HELPDLG_DEFAULT_YSIZE, GUI_GTK3_HELPDLG_MIN_YSIZE, GUI_GTK3_HELPDLG_MAX_YSIZE, NULL), + GEN_INT_OPTION(gui_gtk3_optionsdlg_xsize, NULL, NULL, + COC_INTERFACE, GUI_GTK3, GUI_GTK3_OPTIONSDLG_DEFAULT_XSIZE, + GUI_GTK3_OPTIONSDLG_MIN_XSIZE, GUI_GTK3_OPTIONSDLG_MAX_XSIZE, + NULL), + GEN_INT_OPTION(gui_gtk3_optionsdlg_ysize, NULL, NULL, + COC_INTERFACE, GUI_GTK3, GUI_GTK3_OPTIONSDLG_DEFAULT_YSIZE, + GUI_GTK3_OPTIONSDLG_MIN_YSIZE, GUI_GTK3_OPTIONSDLG_MAX_YSIZE, + NULL), GEN_ENUM_OPTION(gui_gtk3_popup_tech_help, NULL, NULL, COC_INTERFACE, GUI_GTK3, GUI_POPUP_TECH_HELP_RULESET, @@ -2888,6 +2914,18 @@ static struct client_option client_options[] = { COC_INTERFACE, GUI_GTK3_22, GUI_GTK3_22_HELPDLG_DEFAULT_YSIZE, GUI_GTK3_22_HELPDLG_MIN_YSIZE, GUI_GTK3_22_HELPDLG_MAX_YSIZE, NULL), + GEN_INT_OPTION(gui_gtk3_22_optionsdlg_xsize, + N_("Width of the options dialog"), + NULL, + COC_INTERFACE, GUI_GTK3_22, GUI_GTK3_22_OPTIONSDLG_DEFAULT_XSIZE, + GUI_GTK3_22_OPTIONSDLG_MIN_XSIZE, GUI_GTK3_22_OPTIONSDLG_MAX_XSIZE, + NULL), + GEN_INT_OPTION(gui_gtk3_22_optionsdlg_ysize, + N_("Height of the options dialog"), + NULL, + COC_INTERFACE, GUI_GTK3_22, GUI_GTK3_22_OPTIONSDLG_DEFAULT_YSIZE, + GUI_GTK3_22_OPTIONSDLG_MIN_YSIZE, GUI_GTK3_22_OPTIONSDLG_MAX_YSIZE, + NULL), GEN_ENUM_OPTION(gui_gtk3_22_popup_tech_help, N_("Popup tech help when gained"), N_("Controls if tech help should be opened when " @@ -3123,6 +3161,18 @@ static struct client_option client_options[] = { COC_INTERFACE, GUI_GTK4, GUI_GTK4_HELPDLG_DEFAULT_YSIZE, GUI_GTK4_HELPDLG_MIN_YSIZE, GUI_GTK4_HELPDLG_MAX_YSIZE, NULL), + GEN_INT_OPTION(gui_gtk4_optionsdlg_xsize, + N_("Width of the options dialog"), + NULL, + COC_INTERFACE, GUI_GTK4, GUI_GTK4_OPTIONSDLG_DEFAULT_XSIZE, + GUI_GTK4_OPTIONSDLG_MIN_XSIZE, GUI_GTK4_OPTIONSDLG_MAX_XSIZE, + NULL), + GEN_INT_OPTION(gui_gtk4_optionsdlg_ysize, + N_("Height of the options dialog"), + NULL, + COC_INTERFACE, GUI_GTK4, GUI_GTK4_OPTIONSDLG_DEFAULT_YSIZE, + GUI_GTK4_OPTIONSDLG_MIN_YSIZE, GUI_GTK4_OPTIONSDLG_MAX_YSIZE, + NULL), GEN_ENUM_OPTION(gui_gtk4_popup_tech_help, N_("Popup tech help when gained"), N_("Controls if tech help should be opened when " @@ -3358,6 +3408,18 @@ static struct client_option client_options[] = { COC_INTERFACE, GUI_GTK5, GUI_GTK5_HELPDLG_DEFAULT_YSIZE, GUI_GTK5_HELPDLG_MIN_YSIZE, GUI_GTK5_HELPDLG_MAX_YSIZE, NULL), + GEN_INT_OPTION(gui_gtk5_optionsdlg_xsize, + N_("Width of the options dialog"), + NULL, + COC_INTERFACE, GUI_GTK5, GUI_GTK5_OPTIONSDLG_DEFAULT_XSIZE, + GUI_GTK5_OPTIONSDLG_MIN_XSIZE, GUI_GTK5_OPTIONSDLG_MAX_XSIZE, + NULL), + GEN_INT_OPTION(gui_gtk5_optionsdlg_ysize, + N_("Height of the options dialog"), + NULL, + COC_INTERFACE, GUI_GTK5, GUI_GTK5_OPTIONSDLG_DEFAULT_YSIZE, + GUI_GTK5_OPTIONSDLG_MIN_YSIZE, GUI_GTK5_OPTIONSDLG_MAX_YSIZE, + NULL), GEN_ENUM_OPTION(gui_gtk5_popup_tech_help, N_("Popup tech help when gained"), N_("Controls if tech help should be opened when " diff --git a/client/options.h b/client/options.h index 9cdb9a7e98..b0dba49cd3 100644 --- a/client/options.h +++ b/client/options.h @@ -249,6 +249,8 @@ struct client_options int gui_gtk2_citydlg_ysize; int gui_gtk2_helpdlg_xsize; int gui_gtk2_helpdlg_ysize; + int gui_gtk2_optionsdlg_xsize; + int gui_gtk2_optionsdlg_ysize; int gui_gtk2_popup_tech_help; char gui_gtk2_font_city_label[FONT_NAME_SIZE]; char gui_gtk2_font_notify_label[FONT_NAME_SIZE]; @@ -284,6 +286,8 @@ struct client_options int gui_gtk3_citydlg_ysize; int gui_gtk3_helpdlg_xsize; int gui_gtk3_helpdlg_ysize; + int gui_gtk3_optionsdlg_xsize; + int gui_gtk3_optionsdlg_ysize; int gui_gtk3_popup_tech_help; int gui_gtk3_governor_range_min; int gui_gtk3_governor_range_max; @@ -322,6 +326,8 @@ struct client_options int gui_gtk3_22_citydlg_ysize; int gui_gtk3_22_helpdlg_xsize; int gui_gtk3_22_helpdlg_ysize; + int gui_gtk3_22_optionsdlg_xsize; + int gui_gtk3_22_optionsdlg_ysize; int gui_gtk3_22_popup_tech_help; int gui_gtk3_22_governor_range_min; int gui_gtk3_22_governor_range_max; @@ -360,6 +366,8 @@ struct client_options int gui_gtk4_citydlg_ysize; int gui_gtk4_helpdlg_xsize; int gui_gtk4_helpdlg_ysize; + int gui_gtk4_optionsdlg_xsize; + int gui_gtk4_optionsdlg_ysize; int gui_gtk4_popup_tech_help; int gui_gtk4_governor_range_min; int gui_gtk4_governor_range_max; @@ -398,6 +406,8 @@ struct client_options int gui_gtk5_citydlg_ysize; int gui_gtk5_helpdlg_xsize; int gui_gtk5_helpdlg_ysize; + int gui_gtk5_optionsdlg_xsize; + int gui_gtk5_optionsdlg_ysize; int gui_gtk5_popup_tech_help; int gui_gtk5_governor_range_min; int gui_gtk5_governor_range_max; @@ -650,6 +660,15 @@ extern int messages_where[]; /* OR-ed MW_ values [E_COUNT] */ #define GUI_GTK2_HELPDLG_MIN_YSIZE 128 #define GUI_GTK2_HELPDLG_MAX_YSIZE 4096 +/* gui-gtk2: [xy]size of the options dialog */ +#define GUI_GTK2_OPTIONSDLG_DEFAULT_XSIZE 770 +#define GUI_GTK2_OPTIONSDLG_MIN_XSIZE 256 +#define GUI_GTK2_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK2_OPTIONSDLG_DEFAULT_YSIZE 512 +#define GUI_GTK2_OPTIONSDLG_MIN_YSIZE 128 +#define GUI_GTK2_OPTIONSDLG_MAX_YSIZE 4096 + #define GUI_GTK_OVERVIEW_MIN_XSIZE 160 #define GUI_GTK_OVERVIEW_MIN_YSIZE 100 @@ -671,6 +690,15 @@ extern int messages_where[]; /* OR-ed MW_ values [E_COUNT] */ #define GUI_GTK3_HELPDLG_MIN_YSIZE 128 #define GUI_GTK3_HELPDLG_MAX_YSIZE 4096 +/* gui-gtk3: [xy]size of the options dialog */ +#define GUI_GTK3_OPTIONSDLG_DEFAULT_XSIZE 770 +#define GUI_GTK3_OPTIONSDLG_MIN_XSIZE 256 +#define GUI_GTK3_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK3_OPTIONSDLG_DEFAULT_YSIZE 512 +#define GUI_GTK3_OPTIONSDLG_MIN_YSIZE 128 +#define GUI_GTK3_OPTIONSDLG_MAX_YSIZE 4096 + #define GUI_GTK3_GOV_RANGE_MIN_DEFAULT -20 #define GUI_GTK3_GOV_RANGE_MIN_MIN -100 #define GUI_GTK3_GOV_RANGE_MIN_MAX 0 @@ -697,6 +725,15 @@ extern int messages_where[]; /* OR-ed MW_ values [E_COUNT] */ #define GUI_GTK3_22_HELPDLG_MIN_YSIZE 128 #define GUI_GTK3_22_HELPDLG_MAX_YSIZE 4096 +/* gui-gtk3_22: [xy]size of the options dialog */ +#define GUI_GTK3_22_OPTIONSDLG_DEFAULT_XSIZE 770 +#define GUI_GTK3_22_OPTIONSDLG_MIN_XSIZE 256 +#define GUI_GTK3_22_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK3_22_OPTIONSDLG_DEFAULT_YSIZE 512 +#define GUI_GTK3_22_OPTIONSDLG_MIN_YSIZE 128 +#define GUI_GTK3_22_OPTIONSDLG_MAX_YSIZE 4096 + #define GUI_GTK3_22_GOV_RANGE_MIN_DEFAULT -20 #define GUI_GTK3_22_GOV_RANGE_MIN_MIN -100 #define GUI_GTK3_22_GOV_RANGE_MIN_MAX 0 @@ -723,6 +760,15 @@ extern int messages_where[]; /* OR-ed MW_ values [E_COUNT] */ #define GUI_GTK4_HELPDLG_MIN_YSIZE 128 #define GUI_GTK4_HELPDLG_MAX_YSIZE 4096 +/* gui-gtk4: [xy]size of the options dialog */ +#define GUI_GTK4_OPTIONSDLG_DEFAULT_XSIZE 770 +#define GUI_GTK4_OPTIONSDLG_MIN_XSIZE 256 +#define GUI_GTK4_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK4_OPTIONSDLG_DEFAULT_YSIZE 512 +#define GUI_GTK4_OPTIONSDLG_MIN_YSIZE 128 +#define GUI_GTK4_OPTIONSDLG_MAX_YSIZE 4096 + #define GUI_GTK4_GOV_RANGE_MIN_DEFAULT -20 #define GUI_GTK4_GOV_RANGE_MIN_MIN -100 #define GUI_GTK4_GOV_RANGE_MIN_MAX 0 @@ -749,6 +795,15 @@ extern int messages_where[]; /* OR-ed MW_ values [E_COUNT] */ #define GUI_GTK5_HELPDLG_MIN_YSIZE 128 #define GUI_GTK5_HELPDLG_MAX_YSIZE 4096 +/* gui-gtk5.0: [xy]size of the options dialog */ +#define GUI_GTK5_OPTIONSDLG_DEFAULT_XSIZE 770 +#define GUI_GTK5_OPTIONSDLG_MIN_XSIZE 256 +#define GUI_GTK5_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK5_OPTIONSDLG_DEFAULT_YSIZE 512 +#define GUI_GTK5_OPTIONSDLG_MIN_YSIZE 128 +#define GUI_GTK5_OPTIONSDLG_MAX_YSIZE 4096 + #define GUI_GTK5_GOV_RANGE_MIN_DEFAULT -20 #define GUI_GTK5_GOV_RANGE_MIN_MIN -100 #define GUI_GTK5_GOV_RANGE_MIN_MAX 0 -- 2.31.0