summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Dywan <christian@twotoasts.de>2013-03-10 23:44:54 +0100
committerChristian Dywan <christian@twotoasts.de>2013-03-10 23:44:54 +0100
commit980f7ce1df2ef6e4b332c40ec43d5d95b52bebfa (patch)
tree3de2b2ad6d6fe5f88e99efd4dbe472db852c3dce
parentcdc16c7aee4953f7ff52adead91641bd1792befa (diff)
downloadmidori-980f7ce1df2ef6e4b332c40ec43d5d95b52bebfa.tar.gz
Entangle destroy/ free of transfers
Fixes: https://bugs.launchpad.net/midori/+bug/1153130
-rw-r--r--toolbars/midori-transferbar.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/toolbars/midori-transferbar.c b/toolbars/midori-transferbar.c
index c4db8615..34abb726 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);
}
}