From b9cb911d3da939236d860c2af10dbeaa7b390e8e Mon Sep 17 00:00:00 2001 From: Dino Date: Sat, 22 Nov 2025 17:32:14 -0500 Subject: [PATCH] #1435 - gtk4: fix for letters get blocked in chat --- client/gui-gtk-4.0/chatline.c | 2 +- client/gui-gtk-4.0/menu.c | 103 ++++++++++++++++++++-------------- client/gui-gtk-4.0/menu.h | 1 + 3 files changed, 62 insertions(+), 44 deletions(-) diff --git a/client/gui-gtk-4.0/chatline.c b/client/gui-gtk-4.0/chatline.c index 452c94d01e..b0f616f31d 100644 --- a/client/gui-gtk-4.0/chatline.c +++ b/client/gui-gtk-4.0/chatline.c @@ -107,7 +107,7 @@ static gboolean il_lost_focus(GtkEventControllerFocus *controller, static gboolean il_gained_focus(GtkEventControllerFocus *controller, gpointer data) { - menus_disable_unit_commands(); + menus_disable_char_commands(); return TRUE; } diff --git a/client/gui-gtk-4.0/menu.c b/client/gui-gtk-4.0/menu.c index a905664a52..3f85611ebd 100644 --- a/client/gui-gtk-4.0/menu.c +++ b/client/gui-gtk-4.0/menu.c @@ -77,8 +77,13 @@ static GMenu *setup_menus(GtkApplication *app); static void view_menu_update_sensitivity(GActionMap *map); -enum menu_entry_grouping { MGROUP_SAFE, MGROUP_EDIT, MGROUP_PLAYING, - MGROUP_UNIT, MGROUP_PLAYER, MGROUP_ALL }; +enum menu_entry_grouping { MGROUP_SAFE = 0B00000001, + MGROUP_EDIT = 0B00000010, + MGROUP_PLAYING = 0B00000100, + MGROUP_UNIT = 0B00001000, + MGROUP_PLAYER = 0B00010000, + MGROUP_CHAR = 0B00100000, + MGROUP_ALL = 0B11111111 }; static GMenu *options_menu = NULL; static GMenu *edit_menu = NULL; @@ -582,10 +587,10 @@ static struct menu_entry_info menu_entries[] = "save_mapimg_as", NULL, MGROUP_SAFE, NULL, FALSE }, { "VOLUME_UP", N_("Volume Up"), - "volume_up", "greater", MGROUP_SAFE, + "volume_up", "greater", MGROUP_SAFE | MGROUP_CHAR, NULL, FALSE }, { "VOLUME_DOWN", N_("Volume Down"), - "volume_down", "less", MGROUP_SAFE, + "volume_down", "less", MGROUP_SAFE | MGROUP_CHAR, NULL, FALSE }, { "LEAVE", N_("_Leave"), "leave", NULL, MGROUP_SAFE, @@ -710,24 +715,24 @@ static struct menu_entry_info menu_entries[] = "full_screen", ACCL_MOD_KEY"F11", MGROUP_SAFE, full_screen_callback, FALSE }, { "CENTER_VIEW", N_("_Center View"), - "center_view", "c", MGROUP_PLAYER, + "center_view", "c", MGROUP_PLAYER | MGROUP_CHAR, NULL, FALSE }, /* Select menu */ { "SELECT_SINGLE", N_("_Single Unit (Unselect Others)"), - "select_single", "z", MGROUP_UNIT, + "select_single", "z", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "SELECT_ALL_ON_TILE", N_("_All On Tile"), - "select_all_tile", "v", MGROUP_UNIT, + "select_all_tile", "v", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "SELECT_SAME_TYPE_TILE", N_("Same Type on _Tile"), - "select_same_type_tile", "v", MGROUP_UNIT, + "select_same_type_tile", "v", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "SELECT_SAME_TYPE_CONT", N_("Same Type on _Continent"), - "select_same_type_cont", "c", MGROUP_UNIT, + "select_same_type_cont", "c", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "SELECT_SAME_TYPE", N_("Same Type _Everywhere"), - "select_same_type", "x", MGROUP_UNIT, + "select_same_type", "x", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "SELECT_DLG", N_("Unit Selection Dialog"), "select_dlg", NULL, MGROUP_UNIT, @@ -735,84 +740,84 @@ static struct menu_entry_info menu_entries[] = /* Unit menu */ { "UNIT_GOTO", N_("_Go to"), - "goto", "g", MGROUP_UNIT, + "goto", "g", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_GOTO_CITY", N_("Go _to/Airlift to City..."), - "goto_city", "t", MGROUP_UNIT, + "goto_city", "t", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_RETURN", N_("_Return to Nearest City"), - "return", "g", MGROUP_UNIT, + "return", "g", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_EXPLORE", N_("Auto E_xplore"), - "explore", "x", MGROUP_UNIT, + "explore", "x", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_PATROL", N_("_Patrol"), - "patrol", "q", MGROUP_UNIT, + "patrol", "q", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_TELEPORT", N_("_Teleport"), "teleport", NULL, MGROUP_UNIT, NULL, FALSE }, { "UNIT_SENTRY", N_("_Sentry"), - "sentry", "s", MGROUP_UNIT, + "sentry", "s", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNSENTRY_ALL", N_("Uns_entry All On Tile"), - "unsentry_all", "s", MGROUP_UNIT, + "unsentry_all", "s", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_BOARD", N_("_Load"), - "board", "l", MGROUP_UNIT, + "board", "l", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_DEBOARD", N_("_Unload"), - "deboard", "u", MGROUP_UNIT, + "deboard", "u", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_UNLOAD_TRANSPORTER", N_("U_nload All From Transporter"), - "unload_transporter", "t", MGROUP_UNIT, + "unload_transporter", "t", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_HOMECITY", N_("Set _Home City"), - "homecity", "h", MGROUP_UNIT, + "homecity", "h", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_UPGRADE", N_("Upgr_ade"), - "upgrade", "u", MGROUP_UNIT, + "upgrade", "u", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_CONVERT", N_("C_onvert"), - "convert", "o", MGROUP_UNIT, + "convert", "o", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_DISBAND", N_("_Disband"), - "disband", "d", MGROUP_UNIT, + "disband", "d", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "DO_ACTION", N_("_Do..."), - "do_action", "d", MGROUP_UNIT, + "do_action", "d", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_WAIT", N_("_Wait"), - "wait", "w", MGROUP_UNIT, + "wait", "w", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "UNIT_DONE", N_("_Done"), - "done", "space", MGROUP_UNIT, + "done", "space", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, /* Work menu */ { "BUILD_CITY", N_("_Build City"), - "build_city", "b", MGROUP_UNIT, + "build_city", "b", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "AUTO_SETTLER", N_("_Auto Settler"), - "auto_settle", "a", MGROUP_UNIT, + "auto_settle", "a", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "BUILD_ROAD", N_("Build _Road"), - "build_road", "r", MGROUP_UNIT, + "build_road", "r", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "BUILD_IRRIGATION", N_("Build _Irrigation"), - "build_irrigation", "i", MGROUP_UNIT, + "build_irrigation", "i", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "BUILD_MINE", N_("Build _Mine"), - "build_mine", "m", MGROUP_UNIT, + "build_mine", "m", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "CULTIVATE", N_("Cultivate"), - "cultivate", "i", MGROUP_UNIT, + "cultivate", "i", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "PLANT", N_("Plant"), - "plant", "m", MGROUP_UNIT, + "plant", "m", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "TRANSFORM_TERRAIN", N_("Transf_orm Terrain"), - "transform_terrain", "o", MGROUP_UNIT, + "transform_terrain", "o", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "CONNECT_ROAD", N_("Connect With Roa_d"), "connect_road", ACCL_MOD_KEY"r", MGROUP_UNIT, @@ -827,24 +832,24 @@ static struct menu_entry_info menu_entries[] = "connect_irrigation", ACCL_MOD_KEY"i", MGROUP_UNIT, NULL, FALSE }, { "CLEAN", N_("_Clean"), - "clean", "p", MGROUP_UNIT, + "clean", "p", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, /* Combat menu */ { "FORTIFY", N_("Fortify"), - "fortify", "f", MGROUP_UNIT, + "fortify", "f", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "BUILD_FORTRESS", N_("Build Fortress"), - "build_base_fortress", "f", MGROUP_UNIT, + "build_base_fortress", "f", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "BUILD_AIRBASE", N_("Build Airbase"), - "build_base_airbase", "e", MGROUP_UNIT, + "build_base_airbase", "e", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "PARADROP", N_("P_aradrop"), - "paradrop", "j", MGROUP_UNIT, + "paradrop", "j", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, { "PILLAGE", N_("_Pillage"), - "pillage", "p", MGROUP_UNIT, + "pillage", "p", MGROUP_UNIT | MGROUP_CHAR, NULL, FALSE }, /* Civilization */ @@ -893,7 +898,7 @@ static struct menu_entry_info menu_entries[] = "report_spaceship", "F12", MGROUP_SAFE, NULL, FALSE }, { "REPORT_ACHIEVEMENTS", N_("_Achievements"), - "report_achievements", "asterisk", MGROUP_SAFE, + "report_achievements", "asterisk", MGROUP_SAFE | MGROUP_CHAR, NULL, FALSE }, /* Battle Groups menu */ @@ -3373,7 +3378,7 @@ static void menu_entry_group_set_sensitive(GActionMap *map, int i; for (i = 0; menu_entries[i].key != NULL; i++) { - if (menu_entries[i].grouping == group || group == MGROUP_ALL) { + if (menu_entries[i].grouping & group) { menu_entry_set_sensitive_info(map, &(menu_entries[i]), is_enabled); } } @@ -3763,6 +3768,10 @@ void real_menus_update(void) && can_client_issue_orders() && !editor_is_active()); + menu_entry_set_sensitive(map, "CENTER_VIEW", can_client_issue_orders()); + menu_entry_set_sensitive(map, "VOLUME_UP", TRUE); + menu_entry_set_sensitive(map, "VOLUME_DOWN", TRUE); + menu_entry_set_sensitive(map, "GAME_SAVE_AS", can_client_access_hack() && C_S_RUNNING <= client_state()); menu_entry_set_sensitive(map, "GAME_SAVE", @@ -4209,3 +4218,11 @@ void menus_disable_unit_commands(void) { menu_entry_group_set_sensitive(G_ACTION_MAP(gui_app()), MGROUP_UNIT, FALSE); } + +/**********************************************************************//** + Disable all char commands. +**************************************************************************/ +void menus_disable_char_commands(void) +{ + menu_entry_group_set_sensitive(G_ACTION_MAP(gui_app()), MGROUP_CHAR, FALSE); +} diff --git a/client/gui-gtk-4.0/menu.h b/client/gui-gtk-4.0/menu.h index 88a5029369..12e8aef8f0 100644 --- a/client/gui-gtk-4.0/menu.h +++ b/client/gui-gtk-4.0/menu.h @@ -22,5 +22,6 @@ void enable_menus(bool enable); void menus_set_initial_toggle_values(void); void menus_disable_unit_commands(void); +void menus_disable_char_commands(void); #endif /* FC__MENU_H */ -- 2.31.0