From 0f7a1f80715f52c68cd0422053b70bfb46ac5ed4 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Wed, 7 Jun 2023 07:06:21 +0300 Subject: [PATCH 45/45] gtk: Apply changes to 'fullscreen' option changes immediately When 'fullscreen' option was changed via options dialog, it was taken to use only after a client restart. Add an option changed callback to gtk-clients that apply the change immediately. Reported by onluntuva See osdn #47531 Signed-off-by: Marko Lindqvist --- client/gui-gtk-3.22/gui_main.c | 14 ++++++++++++++ client/gui-gtk-3.22/gui_main.h | 3 +++ client/gui-gtk-3.22/menu.c | 6 +----- client/gui-gtk-4.0/gui_main.c | 14 ++++++++++++++ client/gui-gtk-4.0/gui_main.h | 3 +++ client/gui-gtk-4.0/menu.c | 6 +----- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/client/gui-gtk-3.22/gui_main.c b/client/gui-gtk-3.22/gui_main.c index 180ba586e9..d13e9e75ca 100644 --- a/client/gui-gtk-3.22/gui_main.c +++ b/client/gui-gtk-3.22/gui_main.c @@ -2446,6 +2446,18 @@ static void allied_chat_only_callback(struct option *poption) option_bool_get(poption)); } +/**********************************************************************//** + Option callback for the 'fullscreen' gtk-gui option. +**************************************************************************/ +void fullscreen_opt_refresh(struct option *poption) +{ + if (GUI_GTK_OPTION(fullscreen)) { + gtk_window_fullscreen(GTK_WINDOW(toplevel)); + } else { + gtk_window_unfullscreen(GTK_WINDOW(toplevel)); + } +} + /**********************************************************************//** Change the city names font. **************************************************************************/ @@ -2497,6 +2509,8 @@ void options_extra_init(void) option_var_set_callback(allied_chat_only, allied_chat_only_callback); + option_var_set_callback(fullscreen, + fullscreen_opt_refresh); option_var_set_callback(font_city_names, apply_city_names_font); diff --git a/client/gui-gtk-3.22/gui_main.h b/client/gui-gtk-3.22/gui_main.h index 8e3976829c..cca6107fe0 100644 --- a/client/gui-gtk-3.22/gui_main.h +++ b/client/gui-gtk-3.22/gui_main.h @@ -17,6 +17,7 @@ /* client */ #include "gui_main_g.h" +#include "options.h" #define GUI_GTK_OPTION(optname) gui_options.gui_gtk3_22_##optname #define GUI_GTK_OPTION_STR(optname) "gui_gtk3_22_" #optname @@ -83,6 +84,8 @@ int screen_width(void); int screen_height(void); struct video_mode *resolution_request_get(void); +void fullscreen_opt_refresh(struct option *poption); + bool is_gui_up(void); gboolean fc_lost_focus(GtkWidget *w, GdkEventKey *ev, gpointer data); diff --git a/client/gui-gtk-3.22/menu.c b/client/gui-gtk-3.22/menu.c index 6f192fcefc..ca912fce8f 100644 --- a/client/gui-gtk-3.22/menu.c +++ b/client/gui-gtk-3.22/menu.c @@ -1452,11 +1452,7 @@ static void full_screen_callback(GtkCheckMenuItem *item, gpointer data) if (GUI_GTK_OPTION(fullscreen) ^ gtk_check_menu_item_get_active(item)) { GUI_GTK_OPTION(fullscreen) ^= 1; - if (GUI_GTK_OPTION(fullscreen)) { - gtk_window_fullscreen(GTK_WINDOW(toplevel)); - } else { - gtk_window_unfullscreen(GTK_WINDOW(toplevel)); - } + fullscreen_opt_refresh(NULL); } } diff --git a/client/gui-gtk-4.0/gui_main.c b/client/gui-gtk-4.0/gui_main.c index e06cb34692..92ab4db0f8 100644 --- a/client/gui-gtk-4.0/gui_main.c +++ b/client/gui-gtk-4.0/gui_main.c @@ -2448,6 +2448,18 @@ static void allied_chat_only_callback(struct option *poption) option_bool_get(poption)); } +/**********************************************************************//** + Option callback for the 'fullscreen' gtk-gui option. +**************************************************************************/ +void fullscreen_opt_refresh(struct option *poption) +{ + if (GUI_GTK_OPTION(fullscreen)) { + gtk_window_fullscreen(GTK_WINDOW(toplevel)); + } else { + gtk_window_unfullscreen(GTK_WINDOW(toplevel)); + } +} + /**********************************************************************//** Change the city names font. **************************************************************************/ @@ -2498,6 +2510,8 @@ void options_extra_init(void) option_var_set_callback(allied_chat_only, allied_chat_only_callback); + option_var_set_callback(fullscreen, + fullscreen_opt_refresh); option_var_set_callback(font_city_names, apply_city_names_font); diff --git a/client/gui-gtk-4.0/gui_main.h b/client/gui-gtk-4.0/gui_main.h index d75c4cd50f..3837a7a301 100644 --- a/client/gui-gtk-4.0/gui_main.h +++ b/client/gui-gtk-4.0/gui_main.h @@ -17,6 +17,7 @@ /* client */ #include "gui_main_g.h" +#include "options.h" #define GUI_GTK_OPTION(optname) gui_options.gui_gtk4_##optname #define GUI_GTK_OPTION_STR(optname) "gui_gtk4_" #optname @@ -77,6 +78,8 @@ int screen_width(void); int screen_height(void); struct video_mode *resolution_request_get(void); +void fullscreen_opt_refresh(struct option *poption); + GtkApplication *gui_app(void); bool is_gui_up(void); diff --git a/client/gui-gtk-4.0/menu.c b/client/gui-gtk-4.0/menu.c index ed0462a0ea..5cd1959e7b 100644 --- a/client/gui-gtk-4.0/menu.c +++ b/client/gui-gtk-4.0/menu.c @@ -2064,11 +2064,7 @@ static void full_screen_callback(GSimpleAction *action, GVariant *parameter, info->state ^= 1; GUI_GTK_OPTION(fullscreen) = info->state; - if (GUI_GTK_OPTION(fullscreen)) { - gtk_window_fullscreen(GTK_WINDOW(toplevel)); - } else { - gtk_window_unfullscreen(GTK_WINDOW(toplevel)); - } + fullscreen_opt_refresh(NULL); g_menu_remove(view_menu, VMENU_FULL_SCREEN); -- 2.39.2