From 8ab796946439a8ac2d5fd487f833434b892f42c6 Mon Sep 17 00:00:00 2001 From: Dino Date: Tue, 3 Jun 2025 00:25:21 -0400 Subject: [PATCH] #1288, gtk3.22, gtk4, gtk5 clients, save options dlog size across runtimes using freeciv-client-rc-* file. Also do migrate_options_from_gtk...() --- client/gui-gtk-3.22/optiondlg.c | 14 ++++++++++- client/gui-gtk-4.0/gui_main.c | 2 ++ client/gui-gtk-4.0/optiondlg.c | 9 ++++++- client/gui-gtk-5.0/gui_main.c | 4 ++++ client/gui-gtk-5.0/optiondlg.c | 9 ++++++- client/options.c | 42 +++++++++++++++++++++++++++++++++ client/options.h | 33 ++++++++++++++++++++++++++ 7 files changed, 110 insertions(+), 3 deletions(-) diff --git a/client/gui-gtk-3.22/optiondlg.c b/client/gui-gtk-3.22/optiondlg.c index 34099bc1eb..ddb15ca747 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/gui_main.c b/client/gui-gtk-4.0/gui_main.c index 99d52da8f7..cf16f348aa 100644 --- a/client/gui-gtk-4.0/gui_main.c +++ b/client/gui-gtk-4.0/gui_main.c @@ -1873,6 +1873,8 @@ static void migrate_options_from_gtk3_22(void) MIGRATE_OPTION(citydlg_ysize); MIGRATE_OPTION(helpdlg_xsize); MIGRATE_OPTION(helpdlg_ysize); + MIGRATE_OPTION(optionsdlg_xsize); + MIGRATE_OPTION(optionsdlg_ysize); MIGRATE_OPTION(popup_tech_help); MIGRATE_STR_OPTION(font_city_label); diff --git a/client/gui-gtk-4.0/optiondlg.c b/client/gui-gtk-4.0/optiondlg.c index 546d51f4e9..72544598bf 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/gui-gtk-5.0/gui_main.c b/client/gui-gtk-5.0/gui_main.c index f1a8f14720..f8ca2d1bfb 100644 --- a/client/gui-gtk-5.0/gui_main.c +++ b/client/gui-gtk-5.0/gui_main.c @@ -1874,6 +1874,8 @@ static void migrate_options_from_gtk3_22(void) MIGRATE_OPTION(citydlg_ysize); MIGRATE_OPTION(helpdlg_xsize); MIGRATE_OPTION(helpdlg_ysize); + MIGRATE_OPTION(optionsdlg_xsize); + MIGRATE_OPTION(optionsdlg_ysize); MIGRATE_OPTION(popup_tech_help); MIGRATE_STR_OPTION(font_city_label); @@ -1927,6 +1929,8 @@ static void migrate_options_from_gtk4(void) MIGRATE_OPTION(citydlg_ysize); MIGRATE_OPTION(helpdlg_xsize); MIGRATE_OPTION(helpdlg_ysize); + MIGRATE_OPTION(optionsdlg_xsize); + MIGRATE_OPTION(optionsdlg_ysize); MIGRATE_OPTION(popup_tech_help); MIGRATE_STR_OPTION(font_city_label); diff --git a/client/gui-gtk-5.0/optiondlg.c b/client/gui-gtk-5.0/optiondlg.c index f369eedc73..3e3b75ff4f 100644 --- a/client/gui-gtk-5.0/optiondlg.c +++ b/client/gui-gtk-5.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 dc37c05e50..b25595e47a 100644 --- a/client/options.c +++ b/client/options.c @@ -296,6 +296,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, @@ -333,6 +335,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, @@ -370,6 +374,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, @@ -2868,6 +2874,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 " @@ -3103,6 +3121,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 " @@ -3338,6 +3368,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 b29ef29e6c..07a231cf88 100644 --- a/client/options.h +++ b/client/options.h @@ -318,6 +318,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; @@ -356,6 +358,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; @@ -394,6 +398,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; @@ -675,6 +681,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 128 +#define GUI_GTK3_22_OPTIONSDLG_MIN_XSIZE 128 +#define GUI_GTK3_22_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK3_22_OPTIONSDLG_DEFAULT_YSIZE 400 +#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 @@ -701,6 +716,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 128 +#define GUI_GTK4_OPTIONSDLG_MIN_XSIZE 128 +#define GUI_GTK4_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK4_OPTIONSDLG_DEFAULT_YSIZE 480 +#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 @@ -727,6 +751,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 128 +#define GUI_GTK5_OPTIONSDLG_MIN_XSIZE 128 +#define GUI_GTK5_OPTIONSDLG_MAX_XSIZE 4096 + +#define GUI_GTK5_OPTIONSDLG_DEFAULT_YSIZE 480 +#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