From cffc2fbfb037ca2fa97d935f70f5f7ab13651a74 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Wed, 1 Dec 2021 19:18:43 +0200 Subject: [PATCH 37/37] gtk3x: Replace gtk_container_get_children() calls gtk_container_get_children() goes away in gtk-3.98.4. Replace its uses in gtk3x-client with modern constructs. See osdn #43305 Signed-off-by: Marko Lindqvist --- client/gui-gtk-4.0/cityrep.c | 7 +-- client/gui-gtk-4.0/gui_stuff.c | 37 +++++------ client/gui-gtk-4.0/menu.c | 111 ++++++++++++++++++--------------- 3 files changed, 76 insertions(+), 79 deletions(-) diff --git a/client/gui-gtk-4.0/cityrep.c b/client/gui-gtk-4.0/cityrep.c index 64d91eff08..abd78e7385 100644 --- a/client/gui-gtk-4.0/cityrep.c +++ b/client/gui-gtk-4.0/cityrep.c @@ -1763,7 +1763,6 @@ static void popup_next_to_last_menu(GtkMenuShell *menu, gpointer data) static void recreate_sell_menu(void) { int n; - GList *children; GtkWidget *menu; n = gtk_tree_selection_count_selected_rows(city_selection); @@ -1777,11 +1776,9 @@ static void recreate_sell_menu(void) n); menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(city_sell_command)); - children = gtk_container_get_children(GTK_CONTAINER(menu)); - n = g_list_length(children); - gtk_widget_set_sensitive(city_sell_command, n > 0); - g_list_free(children); + gtk_widget_set_sensitive(city_sell_command, + gtk_widget_get_first_child(menu) != NULL); } /************************************************************************//** diff --git a/client/gui-gtk-4.0/gui_stuff.c b/client/gui-gtk-4.0/gui_stuff.c index 8c01d634f9..d268d1c6fd 100644 --- a/client/gui-gtk-4.0/gui_stuff.c +++ b/client/gui-gtk-4.0/gui_stuff.c @@ -735,25 +735,20 @@ GtkWidget *gui_dialog_add_action_widget(struct gui_dialog *dlg, void gui_dialog_set_response_sensitive(struct gui_dialog *dlg, int response, bool setting) { - GList *children; - GList *list; + GtkWidget *iter; - children = gtk_container_get_children(GTK_CONTAINER(dlg->actions)); - - for (list = children; list; list = g_list_next(list)) { - GtkWidget *button = list->data; - - if (GTK_IS_BUTTON(button)) { - gpointer data = g_object_get_data(G_OBJECT(button), + for (iter = gtk_widget_get_first_child(dlg->actions); + iter != NULL; + iter = gtk_widget_get_next_sibling(iter)) { + if (GTK_IS_BUTTON(iter)) { + gpointer data = g_object_get_data(G_OBJECT(iter), "gui-dialog-response-data"); if (response == GPOINTER_TO_INT(data)) { - gtk_widget_set_sensitive(button, setting); + gtk_widget_set_sensitive(iter, setting); } } } - - g_list_free(children); } /**********************************************************************//** @@ -772,19 +767,16 @@ void gui_dialog_show_all(struct gui_dialog *dlg) gtk_widget_show(dlg->grid); if (dlg->type == GUI_DIALOG_TAB) { - GList *children; - GList *list; + GtkWidget *iter; gint num_visible = 0; - children = gtk_container_get_children(GTK_CONTAINER(dlg->actions)); - - for (list = children; list; list = g_list_next(list)) { - GtkWidget *button = list->data; - - if (!GTK_IS_BUTTON(button)) { + for (iter = gtk_widget_get_first_child(dlg->actions); + iter != NULL; + iter = gtk_widget_get_next_sibling(iter)) { + if (!GTK_IS_BUTTON(iter)) { num_visible++; } else { - gpointer data = g_object_get_data(G_OBJECT(button), + gpointer data = g_object_get_data(G_OBJECT(iter), "gui-dialog-response-data"); int response = GPOINTER_TO_INT(data); @@ -792,11 +784,10 @@ void gui_dialog_show_all(struct gui_dialog *dlg) && response != GTK_RESPONSE_CANCEL) { num_visible++; } else { - gtk_widget_hide(button); + gtk_widget_hide(iter); } } } - g_list_free(children); if (num_visible == 0) { gtk_widget_hide(dlg->actions); diff --git a/client/gui-gtk-4.0/menu.c b/client/gui-gtk-4.0/menu.c index 83414ca68f..14584b50fa 100644 --- a/client/gui-gtk-4.0/menu.c +++ b/client/gui-gtk-4.0/menu.c @@ -2234,23 +2234,23 @@ void real_menus_update(void) #ifdef MENUS_GTK3 /* Set government sensitivity. */ if ((menu = find_menu("/GOVERNMENT"))) { - GList *list, *iter; + GtkWidget *iter; struct government *pgov; - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - pgov = g_object_get_data(G_OBJECT(iter->data), "government"); + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; + iter = gtk_widget_get_next_sibling(iter)) { + pgov = g_object_get_data(G_OBJECT(iter), "government"); if (NULL != pgov) { - gtk_widget_set_sensitive(GTK_WIDGET(iter->data), + gtk_widget_set_sensitive(GTK_WIDGET(iter), can_change_to_government(client_player(), pgov)); } else { /* Revolution without target government */ - gtk_widget_set_sensitive(GTK_WIDGET(iter->data), + gtk_widget_set_sensitive(GTK_WIDGET(iter), untargeted_revolution_allowed()); } } - g_list_free(list); } #endif /* MENUS_GTK3 */ @@ -2263,43 +2263,43 @@ void real_menus_update(void) #ifdef MENUS_GTK3 /* Set base sensitivity. */ if ((menu = find_menu("/BUILD_BASE"))) { - GList *list, *iter; + GtkWidget *iter; struct extra_type *pextra; - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - pextra = g_object_get_data(G_OBJECT(iter->data), "base"); + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; + iter = gtk_widget_get_next_sibling(iter)) { + pextra = g_object_get_data(G_OBJECT(iter), "base"); if (NULL != pextra) { - gtk_widget_set_sensitive(GTK_WIDGET(iter->data), + gtk_widget_set_sensitive(GTK_WIDGET(iter), can_units_do_activity_targeted(punits, ACTIVITY_BASE, pextra)); } } - g_list_free(list); } /* Set road sensitivity. */ if ((menu = find_menu("/BUILD_PATH"))) { - GList *list, *iter; + GtkWidget *iter; struct extra_type *pextra; - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - pextra = g_object_get_data(G_OBJECT(iter->data), "road"); + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; + iter = gtk_widget_get_next_sibling(iter)) { + pextra = g_object_get_data(G_OBJECT(iter), "road"); if (NULL != pextra) { - gtk_widget_set_sensitive(GTK_WIDGET(iter->data), + gtk_widget_set_sensitive(GTK_WIDGET(iter), can_units_do_activity_targeted(punits, ACTIVITY_GEN_ROAD, pextra)); } } - g_list_free(list); } /* Set Go to and... action visibility. */ if ((menu = find_menu("/GOTO_AND"))) { - GList *list, *iter; + GtkWidget *iter; struct action *paction; bool can_do_something = FALSE; @@ -2308,22 +2308,22 @@ void real_menus_update(void) * selected units can perform it. Checking if the action can be performed * at the current tile is pointless since it should be performed at the * target tile. */ - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - paction = g_object_get_data(G_OBJECT(iter->data), "end_action"); + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; + iter = gtk_widget_get_next_sibling(iter)) { + paction = g_object_get_data(G_OBJECT(iter), "end_action"); if (NULL != paction) { if (units_can_do_action(get_units_in_focus(), paction->id, TRUE)) { - gtk_widget_set_visible(GTK_WIDGET(iter->data), TRUE); - gtk_widget_set_sensitive(GTK_WIDGET(iter->data), TRUE); + gtk_widget_set_visible(GTK_WIDGET(iter), TRUE); + gtk_widget_set_sensitive(GTK_WIDGET(iter), TRUE); can_do_something = TRUE; } else { - gtk_widget_set_visible(GTK_WIDGET(iter->data), FALSE); - gtk_widget_set_sensitive(GTK_WIDGET(iter->data), FALSE); + gtk_widget_set_visible(GTK_WIDGET(iter), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(iter), FALSE); } } } - g_list_free(list); /* Only sensitive if an action may be possible. */ menu_entry_set_sensitive("MENU_GOTO_AND", can_do_something); @@ -2657,18 +2657,21 @@ static void menu_unit_goto_and_add_accel(GtkWidget *item, action_id act_id, ****************************************************************************/ static void menu_remove_previous_entries(GtkMenu *menu) { - GList *list, *iter; + GtkWidget *iter; GtkWidget *sub_menu; - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - if ((sub_menu = gtk_menu_item_get_submenu(iter->data)) != NULL) { + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; ) { + GtkWidget *cur; + + if ((sub_menu = gtk_menu_item_get_submenu(iter)) != NULL) { menu_remove_previous_entries(GTK_MENU(sub_menu)); gtk_widget_destroy(sub_menu); } - gtk_widget_destroy(GTK_WIDGET(iter->data)); + cur = iter; + iter = gtk_widget_get_next_sibling(iter); + gtk_widget_destroy(GTK_WIDGET(cur)); } - g_list_free(list); } #endif /* MENUS_GTK3 */ @@ -2709,19 +2712,21 @@ void real_menus_init(void) menus_rename("BUILD_AIRBASE", Q_(terrain_control.gui_type_base1)); if ((menu = find_menu("/GOVERNMENT"))) { - GList *list, *iter; + GtkWidget *iter; GtkWidget *item; char buf[256]; /* Remove previous government entries. */ - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - if (g_object_get_data(G_OBJECT(iter->data), "government") != NULL - || GTK_IS_SEPARATOR_MENU_ITEM(iter->data)) { - gtk_widget_destroy(GTK_WIDGET(iter->data)); + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; ) { + GtkWidget *cur = iter; + + iter = gtk_widget_get_next_sibling(iter); + if (g_object_get_data(G_OBJECT(cur), "government") != NULL + || GTK_IS_SEPARATOR_MENU_ITEM(cur)) { + gtk_widget_destroy(GTK_WIDGET(cur)); } } - g_list_free(list); /* Add new government entries. */ item = gtk_separator_menu_item_new(); @@ -2744,15 +2749,17 @@ void real_menus_init(void) } if ((menu = find_menu("/BUILD_BASE"))) { - GList *list, *iter; + GtkWidget *iter; GtkWidget *item; /* Remove previous base entries. */ - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - gtk_widget_destroy(GTK_WIDGET(iter->data)); + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; ) { + GtkWidget *cur = iter; + + iter = gtk_widget_get_next_sibling(iter); + gtk_widget_destroy(GTK_WIDGET(cur)); } - g_list_free(list); /* Add new base entries. */ extra_type_by_cause_iterate(EC_BASE, pextra) { @@ -2767,15 +2774,17 @@ void real_menus_init(void) } if ((menu = find_menu("/BUILD_PATH"))) { - GList *list, *iter; + GtkWidget *iter; GtkWidget *item; /* Remove previous road entries. */ - list = gtk_container_get_children(GTK_CONTAINER(menu)); - for (iter = list; NULL != iter; iter = g_list_next(iter)) { - gtk_widget_destroy(GTK_WIDGET(iter->data)); + for (iter = gtk_widget_get_first_child(menu); + iter != NULL; ) { + GtkWidget *cur = iter; + + iter = gtk_widget_get_next_sibling(iter); + gtk_widget_destroy(GTK_WIDGET(cur)); } - g_list_free(list); /* Add new road entries. */ extra_type_by_cause_iterate(EC_ROAD, pextra) { -- 2.33.0