Bug 793125 - Crash due to popup menus left attached too long

This commit is contained in:
Milan Crha
2018-02-13 14:34:18 +01:00
parent 601d9d22d0
commit 2bfd906d26
11 changed files with 89 additions and 54 deletions

View File

@ -1884,6 +1884,16 @@ e_shell_view_update_actions_in_idle (EShellView *shell_view)
shell_view_call_update_actions_idle, shell_view);
}
static void
e_shell_view_popup_menu_deactivate (GtkMenu *popup_menu,
gpointer user_data)
{
g_return_if_fail (GTK_IS_MENU (popup_menu));
g_signal_handlers_disconnect_by_func (popup_menu, e_shell_view_popup_menu_deactivate, user_data);
gtk_menu_detach (popup_menu);
}
/**
* e_shell_view_show_popup_menu:
* @shell_view: an #EShellView
@ -1916,11 +1926,14 @@ e_shell_view_show_popup_menu (EShellView *shell_view,
menu = e_shell_window_get_managed_widget (shell_window, widget_path);
g_return_val_if_fail (GTK_IS_MENU (menu), NULL);
if (!gtk_menu_get_attach_widget (GTK_MENU (menu)))
if (!gtk_menu_get_attach_widget (GTK_MENU (menu))) {
gtk_menu_attach_to_widget (GTK_MENU (menu),
GTK_WIDGET (shell_window),
NULL);
g_signal_connect (menu, "deactivate", G_CALLBACK (e_shell_view_popup_menu_deactivate), NULL);
}
gtk_menu_popup_at_pointer (GTK_MENU (menu), button_event);
return menu;