diff -r f15e97d8758e -r b5fdc251ed2e pidgin/gtkrequest.c --- a/pidgin/gtkrequest.c Tue May 14 23:20:44 2013 +0200 +++ b/pidgin/gtkrequest.c Wed May 15 19:55:09 2013 +0200 @@ -1747,6 +1747,26 @@ return (void *)data; } +#ifdef _WIN32 + +/* Not needed (yet) for non-win32, but should work everywhere. */ +static void +pidgin_window_detach_children(GtkWindow* parent) +{ + GList *it; + + g_return_if_fail(parent != NULL); + + it = gtk_window_list_toplevels(); + for (it = g_list_first(it); it != NULL; it = g_list_next(it)) { + GtkWindow *win = GTK_WINDOW(it->data); + if (gtk_window_get_transient_for(win) == parent) + gtk_window_set_transient_for(win, NULL); + } +} + +#endif + static void pidgin_close_request(PurpleRequestType type, void *ui_handle) { @@ -1754,6 +1774,11 @@ g_free(data->cbs); +#ifdef _WIN32 + /* Win32 gtk ignores gtk_window_set_destroy_with_parent(..., FALSE). */ + pidgin_window_detach_children(GTK_WINDOW(data->dialog)); +#endif + gtk_widget_destroy(data->dialog); if (type == PURPLE_REQUEST_FIELDS)