mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-16 18:50:19 +00:00
fix: guard stale gui sessions; block re-entrant menu toggle sync crash
This commit is contained in:
@@ -926,6 +926,11 @@ menu_setting_foreach (void (*callback) (session *), int id, guint state)
|
|||||||
while (list)
|
while (list)
|
||||||
{
|
{
|
||||||
sess = list->data;
|
sess = list->data;
|
||||||
|
if (!sess || !sess->gui)
|
||||||
|
{
|
||||||
|
list = list->next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!sess->gui->is_tab || !maindone)
|
if (!sess->gui->is_tab || !maindone)
|
||||||
{
|
{
|
||||||
@@ -937,7 +942,18 @@ menu_setting_foreach (void (*callback) (session *), int id, guint state)
|
|||||||
|
|
||||||
if (menu_item != NULL)
|
if (menu_item != NULL)
|
||||||
{
|
{
|
||||||
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), state);
|
guint toggled_signal = g_signal_lookup ("toggled", G_OBJECT_TYPE (menu_item));
|
||||||
|
|
||||||
|
if (toggled_signal != 0)
|
||||||
|
{
|
||||||
|
g_signal_handlers_block_matched (menu_item, G_SIGNAL_MATCH_ID, toggled_signal, 0, NULL, NULL, NULL);
|
||||||
|
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), state);
|
||||||
|
g_signal_handlers_unblock_matched (menu_item, G_SIGNAL_MATCH_ID, toggled_signal, 0, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (callback)
|
if (callback)
|
||||||
@@ -2170,6 +2186,11 @@ menu_foreach_gui (menu_entry *me, void (*callback) (GtkWidget *, menu_entry *, c
|
|||||||
while (list)
|
while (list)
|
||||||
{
|
{
|
||||||
sess = list->data;
|
sess = list->data;
|
||||||
|
if (!sess || !sess->gui)
|
||||||
|
{
|
||||||
|
list = list->next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
/* do it only once for tab sessions, since they share a GUI */
|
/* do it only once for tab sessions, since they share a GUI */
|
||||||
if (!sess->gui->is_tab || !tabdone)
|
if (!sess->gui->is_tab || !tabdone)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user