Updating branch refs/heads/master to 02e52bf2ec58a251125bfde0fbd1686c653c6bae (commit) from c9e1c7cd5f90765634bafb555ffb464ba08eca83 (commit)
commit 02e52bf2ec58a251125bfde0fbd1686c653c6bae Author: Christian Dywan <christ...@twotoasts.de> Date: Sun Mar 10 23:44:54 2013 +0100 Entangle destroy/ free of transfers Fixes: https://bugs.launchpad.net/midori/+bug/1153130 toolbars/midori-transferbar.c | 27 +++++++++++++-------------- 1 files changed, 13 insertions(+), 14 deletions(-) diff --git a/toolbars/midori-transferbar.c b/toolbars/midori-transferbar.c index c4db861..34abb72 100644 --- a/toolbars/midori-transferbar.c +++ b/toolbars/midori-transferbar.c @@ -47,27 +47,26 @@ typedef struct } TransferInfo; static gboolean -midori_transferbar_info_free (gpointer data) +midori_transferbar_info_free (TransferInfo* info) { - TransferInfo* info = data; MidoriTransferbar* transferbar = info->transferbar; transferbar->infos = g_list_remove (transferbar->infos, info); g_object_unref (info->download); - gtk_widget_destroy (info->toolitem); g_slice_free (TransferInfo, info); - if (!transferbar->infos || !g_list_nth_data (transferbar->infos, 0)) - gtk_widget_hide (GTK_WIDGET (transferbar->clear)); - return FALSE; } static void -midori_transferbar_button_destroy_cb (GtkWidget* button, - TransferInfo* info) +midori_transferbar_info_destroy (TransferInfo* info) { - g_idle_add (midori_transferbar_info_free, info); + MidoriTransferbar* transferbar = info->transferbar; + + gtk_widget_destroy (info->toolitem); + + if (!transferbar->infos || !g_list_nth_data (transferbar->infos, 0)) + gtk_widget_hide (GTK_WIDGET (transferbar->clear)); } static void @@ -133,7 +132,7 @@ midori_transferbar_download_button_clicked_cb (GtkWidget* button, { WebKitDownload* download = info->download; if (midori_download_action_clear (download, button, NULL)) - gtk_widget_destroy (button); + midori_transferbar_info_destroy (info); } void @@ -157,7 +156,7 @@ midori_transferbar_check_size (GtkWidget* statusbar, TransferInfo* info = list->data; if (midori_download_is_finished (info->download) || webkit_download_get_status (info->download) == WEBKIT_DOWNLOAD_STATUS_STARTED) - gtk_widget_destroy (info->button); + midori_transferbar_info_destroy (info); } } #endif @@ -208,8 +207,8 @@ midori_transferbar_add_download_item (MidoriTransferbar* transferbar, info->button = button; info->toolitem = GTK_WIDGET (toolitem); info->transferbar = transferbar; - g_signal_connect (button, "destroy", - G_CALLBACK (midori_transferbar_button_destroy_cb), info); + g_signal_connect_swapped (button, "destroy", + G_CALLBACK (midori_transferbar_info_free), info); transferbar->infos = g_list_prepend (transferbar->infos, info); g_signal_connect (download, "notify::progress", @@ -231,7 +230,7 @@ midori_transferbar_clear_clicked_cb (GtkWidget* button, { TransferInfo* info = list->data; if (midori_download_is_finished (info->download)) - gtk_widget_destroy (info->button); + midori_transferbar_info_destroy (info); } } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits