From a4b72cc4e62e063a6a1c397f706503de3265fbd2 Mon Sep 17 00:00:00 2001 From: Dino Date: Sun, 8 Feb 2026 19:18:51 -0500 Subject: [PATCH] gtk3.22 & gtk4 clients: add zoom in/out menu items RM #943 --- client/gui-gtk-3.22/gui_main.c | 50 ++++++++++++++++------------------ client/gui-gtk-3.22/menu.c | 23 ++++++++++++++++ client/gui-gtk-4.0/gui_main.c | 4 +-- client/gui-gtk-4.0/menu.c | 37 +++++++++++++++++++++++++ client/gui-gtk-5.0/gui_main.c | 4 +-- client/gui-gtk-5.0/menu.c | 37 +++++++++++++++++++++++++ data/gtk3.22_menus.xml | 6 ++++ 7 files changed, 129 insertions(+), 32 deletions(-) diff --git a/client/gui-gtk-3.22/gui_main.c b/client/gui-gtk-3.22/gui_main.c index 9342f76200..835dfe757a 100644 --- a/client/gui-gtk-3.22/gui_main.c +++ b/client/gui-gtk-3.22/gui_main.c @@ -320,12 +320,12 @@ static gboolean toplevel_focus(GtkWidget *w, GtkDirectionType arg) case GTK_DIR_TAB_BACKWARD: if (!gtk_widget_get_can_focus(w)) { - return FALSE; + return FALSE; } if (!gtk_widget_is_focus(w)) { - gtk_widget_grab_focus(w); - return TRUE; + gtk_widget_grab_focus(w); + return TRUE; } break; @@ -385,8 +385,8 @@ static gboolean toplevel_handler(GtkWidget *w, GdkEvent *ev, gpointer data) && gtk_text_view_get_editable(GTK_TEXT_VIEW(focus)))) { /* Propagate event to currently focused entry widget. */ if (gtk_widget_event(focus, ev)) { - /* Do not propagate event to our children. */ - return TRUE; + /* Do not propagate event to our children. */ + return TRUE; } } } @@ -426,12 +426,12 @@ static gboolean key_press_map_canvas(GtkWidget *w, GdkEventKey *ev, case GDK_KEY_Page_Up: g_signal_emit_by_name(main_message_area, "move_cursor", - GTK_MOVEMENT_PAGES, -1, FALSE); + GTK_MOVEMENT_PAGES, -1, FALSE); return TRUE; case GDK_KEY_Page_Down: g_signal_emit_by_name(main_message_area, "move_cursor", - GTK_MOVEMENT_PAGES, 1, FALSE); + GTK_MOVEMENT_PAGES, 1, FALSE); return TRUE; default: @@ -473,12 +473,10 @@ static gboolean key_press_map_canvas(GtkWidget *w, GdkEventKey *ev, } if (!(ev->state & ACCL_MOD_KEY)) { switch (ev->keyval) { - case GDK_KEY_plus: case GDK_KEY_KP_Add: zoom_step_up(); return TRUE; - case GDK_KEY_minus: case GDK_KEY_KP_Subtract: zoom_step_down(); return TRUE; @@ -803,7 +801,7 @@ static void tearoff_callback(GtkWidget *b, gpointer data) gtk_window_set_position(GTK_WINDOW(w), GTK_WIN_POS_MOUSE); g_signal_connect(w, "destroy", G_CALLBACK(tearoff_destroy), box); g_signal_connect(w, "key_press_event", - G_CALLBACK(propagate_keypress), NULL); + G_CALLBACK(propagate_keypress), NULL); g_object_set_data(G_OBJECT(w), "parent", gtk_widget_get_parent(box)); g_object_set_data(G_OBJECT(w), "toggle", b); @@ -1241,28 +1239,28 @@ static void setup_widgets(void) gtk_widget_set_halign(overview_canvas, GTK_ALIGN_CENTER); gtk_widget_set_valign(overview_canvas, GTK_ALIGN_CENTER); gtk_widget_set_size_request(overview_canvas, overview_canvas_store_width, - overview_canvas_store_height); + overview_canvas_store_height); gtk_widget_set_size_request(overview_scrolled_window, overview_canvas_store_width, - overview_canvas_store_height); + overview_canvas_store_height); gtk_widget_set_hexpand(overview_canvas, TRUE); gtk_widget_set_vexpand(overview_canvas, TRUE); gtk_widget_add_events(overview_canvas, GDK_EXPOSURE_MASK - |GDK_BUTTON_PRESS_MASK - |GDK_POINTER_MOTION_MASK); + |GDK_BUTTON_PRESS_MASK + |GDK_POINTER_MOTION_MASK); gtk_container_add(GTK_CONTAINER(avbox), overview_scrolled_window); gtk_container_add(GTK_CONTAINER(overview_scrolled_window), overview_canvas); g_signal_connect(overview_canvas, "draw", - G_CALLBACK(overview_canvas_draw), NULL); + G_CALLBACK(overview_canvas_draw), NULL); g_signal_connect(overview_canvas, "motion_notify_event", - G_CALLBACK(move_overviewcanvas), NULL); + G_CALLBACK(move_overviewcanvas), NULL); g_signal_connect(overview_canvas, "button_press_event", - G_CALLBACK(butt_down_overviewcanvas), NULL); + G_CALLBACK(butt_down_overviewcanvas), NULL); /* The rest */ @@ -1611,9 +1609,9 @@ static void setup_widgets(void) sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), - GTK_SHADOW_ETCHED_IN); + GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, - GTK_POLICY_ALWAYS); + GTK_POLICY_ALWAYS); gtk_container_add(GTK_CONTAINER(vgrid), sw); label = gtk_label_new(_("Chat")); @@ -2266,7 +2264,7 @@ static gboolean get_net_input(GIOChannel *source, GIOCondition condition, Set socket writability state **************************************************************************/ static void set_wait_for_writable_socket(struct connection *pc, - bool socket_writable) + bool socket_writable) { static bool previous_state = FALSE; @@ -2352,18 +2350,18 @@ void popup_quit_dialog(void) if (!dialog) { dialog = gtk_message_dialog_new(NULL, - 0, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_YES_NO, - _("Are you sure you want to quit?")); + 0, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_YES_NO, + _("Are you sure you want to quit?")); setup_dialog(dialog, toplevel); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); g_signal_connect(dialog, "response", - G_CALLBACK(quit_dialog_response), NULL); + G_CALLBACK(quit_dialog_response), NULL); g_signal_connect(dialog, "destroy", - G_CALLBACK(gtk_widget_destroyed), &dialog); + G_CALLBACK(gtk_widget_destroyed), &dialog); } gtk_window_present(GTK_WINDOW(dialog)); diff --git a/client/gui-gtk-3.22/menu.c b/client/gui-gtk-3.22/menu.c index baa33b9459..d68337923d 100644 --- a/client/gui-gtk-3.22/menu.c +++ b/client/gui-gtk-3.22/menu.c @@ -41,6 +41,7 @@ #include "mapview_common.h" #include "options.h" #include "tilespec.h" +#include "zoom.h" /* client/gui-gtk-3.22 */ #include "chatline.h" @@ -216,6 +217,8 @@ static void toggle_fog_callback(GtkCheckMenuItem *item, gpointer data); static void scenario_properties_callback(GtkMenuItem *item, gpointer data); static void save_scenario_callback(GtkMenuItem *item, gpointer data); static void center_view_callback(GtkMenuItem *item, gpointer data); +static void zoom_in_callback(GtkMenuItem *item, gpointer data); +static void zoom_out_callback(GtkMenuItem *item, gpointer data); static void report_economy_callback(GtkMenuItem *item, gpointer data); static void report_research_callback(GtkMenuItem *item, gpointer data); static void multiplier_callback(GtkMenuItem *item, gpointer data); @@ -508,6 +511,10 @@ static struct menu_entry_info menu_entries[] = { "CENTER_VIEW", N_("_Center View"), GDK_KEY_c, 0, G_CALLBACK(center_view_callback), MGROUP_PLAYER }, + { "ZOOM_IN", N_("_Zoom in"), GDK_KEY_plus, 0, + G_CALLBACK(zoom_in_callback), MGROUP_PLAYER }, + { "ZOOM_OUT", N_("_Zoom out"), GDK_KEY_minus, 0, + G_CALLBACK(zoom_out_callback), MGROUP_PLAYER }, { "REPORT_ECONOMY", N_("_Economy"), GDK_KEY_F5, 0, G_CALLBACK(report_economy_callback), MGROUP_PLAYER }, { "REPORT_RESEARCH", N_("_Research"), GDK_KEY_F6, 0, @@ -2085,6 +2092,22 @@ static void center_view_callback(GtkMenuItem *action, gpointer data) center_on_unit(); } +/************************************************************************//** + Action "ZOOM_IN" callback. +****************************************************************************/ +static void zoom_in_callback(GtkMenuItem *action, gpointer data) +{ + zoom_step_up(); +} + +/************************************************************************//** + Action "ZOOM_OUT" callback. +****************************************************************************/ +static void zoom_out_callback(GtkMenuItem *action, gpointer data) +{ + zoom_step_down(); +} + /************************************************************************//** Action "REPORT_UNITS" callback. ****************************************************************************/ diff --git a/client/gui-gtk-4.0/gui_main.c b/client/gui-gtk-4.0/gui_main.c index cf16f348aa..62571b645b 100644 --- a/client/gui-gtk-4.0/gui_main.c +++ b/client/gui-gtk-4.0/gui_main.c @@ -468,12 +468,10 @@ static gboolean key_press_map_canvas(guint keyval, GdkModifierType state) } } else if (!(state & GDK_CONTROL_MASK)) { switch (keyval) { - case GDK_KEY_plus: case GDK_KEY_KP_Add: zoom_step_up(); return TRUE; - case GDK_KEY_minus: case GDK_KEY_KP_Subtract: zoom_step_down(); return TRUE; @@ -1279,7 +1277,7 @@ static void setup_widgets(void) gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(mc_gesture), 3); controller = GTK_EVENT_CONTROLLER(mc_gesture); g_signal_connect(controller, "pressed", - G_CALLBACK(reverse_taxrates_callback), NULL); + G_CALLBACK(reverse_taxrates_callback), NULL); gtk_widget_add_controller(econ_label[i], controller); gtk_grid_attach(GTK_GRID(table2), econ_label[i], i, 0, 1, 1); } diff --git a/client/gui-gtk-4.0/menu.c b/client/gui-gtk-4.0/menu.c index 9664de7f1d..28432985ee 100644 --- a/client/gui-gtk-4.0/menu.c +++ b/client/gui-gtk-4.0/menu.c @@ -41,6 +41,7 @@ #include "mapview_common.h" #include "options.h" #include "tilespec.h" +#include "zoom.h" /* client/gui-gtk-4.0 */ #include "chatline.h" @@ -375,6 +376,12 @@ static void full_screen_callback(GSimpleAction *action, static void center_view_callback(GSimpleAction *action, GVariant *parameter, gpointer data); +static void zoom_in_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data); +static void zoom_out_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data); static void report_economy_callback(GSimpleAction *action, GVariant *parameter, gpointer data); @@ -719,6 +726,12 @@ static struct menu_entry_info menu_entries[] = { "CENTER_VIEW", N_("_Center View"), "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR, NULL, FALSE }, + { "ZOOM_IN", N_("_Zoom in"), + "zoom_in", "plus", MGROUP_PLAYER, + NULL, FALSE }, + { "ZOOM_OUT", N_("_Zoom out"), + "zoom_out", "minus", MGROUP_PLAYER, + NULL, FALSE }, /* Select menu */ { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"), @@ -1088,6 +1101,8 @@ const GActionEntry acts[] = { { "lua_script", client_lua_script_callback }, { "center_view", center_view_callback }, + { "zoom_in", zoom_in_callback }, + { "zoom_out", zoom_out_callback }, { "select_single", select_single_callback }, { "select_all_tile", select_all_on_tile_callback }, @@ -2852,6 +2867,26 @@ static void center_view_callback(GSimpleAction *action, center_on_unit(); } +/************************************************************************//** + Action "ZOOM_IN" callback. +****************************************************************************/ +static void zoom_in_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data) +{ + zoom_step_up(); +} + +/************************************************************************//** + Action "ZOOM_OUT" callback. +****************************************************************************/ +static void zoom_out_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data) +{ + zoom_step_down(); +} + /************************************************************************//** Action "REPORT_UNITS" callback. ****************************************************************************/ @@ -3166,6 +3201,8 @@ static GMenu *setup_menus(GtkApplication *app) menu_entry_init(view_menu, "FULL_SCREEN"); menu_entry_init(view_menu, "CENTER_VIEW"); + menu_entry_init(view_menu, "ZOOM_IN"); + menu_entry_init(view_menu, "ZOOM_OUT"); submenu_append_unref(menubar, Q_("?verb:_View"), G_MENU_MODEL(view_menu)); diff --git a/client/gui-gtk-5.0/gui_main.c b/client/gui-gtk-5.0/gui_main.c index f8ca2d1bfb..ff4a42a3b5 100644 --- a/client/gui-gtk-5.0/gui_main.c +++ b/client/gui-gtk-5.0/gui_main.c @@ -469,12 +469,10 @@ static gboolean key_press_map_canvas(guint keyval, GdkModifierType state) } } else if (!(state & GDK_CONTROL_MASK)) { switch (keyval) { - case GDK_KEY_plus: case GDK_KEY_KP_Add: zoom_step_up(); return TRUE; - case GDK_KEY_minus: case GDK_KEY_KP_Subtract: zoom_step_down(); return TRUE; @@ -1280,7 +1278,7 @@ static void setup_widgets(void) gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(mc_gesture), 3); controller = GTK_EVENT_CONTROLLER(mc_gesture); g_signal_connect(controller, "pressed", - G_CALLBACK(reverse_taxrates_callback), NULL); + G_CALLBACK(reverse_taxrates_callback), NULL); gtk_widget_add_controller(econ_label[i], controller); gtk_grid_attach(GTK_GRID(table2), econ_label[i], i, 0, 1, 1); } diff --git a/client/gui-gtk-5.0/menu.c b/client/gui-gtk-5.0/menu.c index 5f782e3b66..7d00ea2001 100644 --- a/client/gui-gtk-5.0/menu.c +++ b/client/gui-gtk-5.0/menu.c @@ -41,6 +41,7 @@ #include "mapview_common.h" #include "options.h" #include "tilespec.h" +#include "zoom.h" /* client/gui-gtk-5.0 */ #include "chatline.h" @@ -375,6 +376,12 @@ static void full_screen_callback(GSimpleAction *action, static void center_view_callback(GSimpleAction *action, GVariant *parameter, gpointer data); +static void zoom_in_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data); +static void zoom_out_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data); static void report_economy_callback(GSimpleAction *action, GVariant *parameter, gpointer data); @@ -719,6 +726,12 @@ static struct menu_entry_info menu_entries[] = { "CENTER_VIEW", N_("_Center View"), "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR, NULL, FALSE }, + { "ZOOM_IN", N_("_Zoom in"), + "zoom_in", "plus", MGROUP_PLAYER, + NULL, FALSE }, + { "ZOOM_OUT", N_("_Zoom out"), + "zoom_out", "minus", MGROUP_PLAYER, + NULL, FALSE }, /* Select menu */ { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"), @@ -1088,6 +1101,8 @@ const GActionEntry acts[] = { { "lua_script", client_lua_script_callback }, { "center_view", center_view_callback }, + { "zoom_in", zoom_in_callback }, + { "zoom_out", zoom_out_callback }, { "select_single", select_single_callback }, { "select_all_tile", select_all_on_tile_callback }, @@ -2856,6 +2871,26 @@ static void center_view_callback(GSimpleAction *action, center_on_unit(); } +/************************************************************************//** + Action "ZOOM_IN" callback. +****************************************************************************/ +static void zoom_in_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data) +{ + zoom_step_up(); +} + +/************************************************************************//** + Action "ZOOM_OUT" callback. +****************************************************************************/ +static void zoom_out_callback(GSimpleAction *action, + GVariant *parameter, + gpointer data) +{ + zoom_step_down(); +} + /************************************************************************//** Action "REPORT_UNITS" callback. ****************************************************************************/ @@ -3170,6 +3205,8 @@ static GMenu *setup_menus(GtkApplication *app) menu_entry_init(view_menu, "FULL_SCREEN"); menu_entry_init(view_menu, "CENTER_VIEW"); + menu_entry_init(view_menu, "ZOOM_IN"); + menu_entry_init(view_menu, "ZOOM_OUT"); submenu_append_unref(menubar, Q_("?verb:_View"), G_MENU_MODEL(view_menu)); diff --git a/data/gtk3.22_menus.xml b/data/gtk3.22_menus.xml index 33627e42c6..8565ed4044 100644 --- a/data/gtk3.22_menus.xml +++ b/data/gtk3.22_menus.xml @@ -225,6 +225,12 @@ + + + + + + -- 2.31.0