changeset 19951:c5afab822ec7

propagate from branch 'im.pidgin.pidgin' (head 3f64b9d598e136d0f6f739c7f23ad4baed097f73) to branch 'org.maemo.garage.pidgin.pidgin.dialog-transience' (head 2010b37acce9dd62a56da92922f5e74883a9d38b)
author Gabriel Schulhof <nix@go-nix.ca>
date Fri, 17 Aug 2007 23:58:20 +0000
parents 0f5d5fff0e76 (diff) db7afbe91b63 (current diff)
children ce7569c8aa0d
files
diffstat 51 files changed, 284 insertions(+), 198 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/account.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/account.c	Fri Aug 17 23:58:20 2007 +0000
@@ -983,7 +983,7 @@
                         _("OK"), ok_cb,
                         _("Cancel"), cancel_cb,
 						account, NULL, NULL,
-                        user_data);
+                        "account", user_data);
 	g_free(primary);
 }
 
@@ -1233,7 +1233,7 @@
 						_("OK"), G_CALLBACK(change_password_cb),
 						_("Cancel"), NULL,
 						account, NULL, NULL,
-						account);
+						"account", account);
 }
 
 static void
@@ -1268,7 +1268,7 @@
 					   _("Save"), G_CALLBACK(set_user_info_cb),
 					   _("Cancel"), NULL,
 					   account, NULL, NULL,
-					   account);
+					   "account", account);
 }
 
 void
--- a/libpurple/conversation.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/conversation.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1168,7 +1168,7 @@
 
 	purple_request_action(conv, NULL, _("Send Message"), text, 0,
 						  purple_conversation_get_account(conv), NULL, conv,
-						  data, 2,
+						  "conversation", data, 2,
 						  _("_Send Message"), G_CALLBACK(purple_conv_send_confirm_cb),
 						  _("Cancel"), NULL);
 }
--- a/libpurple/ft.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/ft.c	Fri Aug 17 23:58:20 2007 +0000
@@ -312,7 +312,7 @@
 					  G_CALLBACK(purple_xfer_choose_file_ok_cb),
 					  G_CALLBACK(purple_xfer_choose_file_cancel_cb),
 					  purple_xfer_get_account(xfer), xfer->who, NULL,
-					  xfer);
+					  "xfer", xfer);
 
 	return 0;
 }
@@ -360,7 +360,7 @@
 		purple_request_accept_cancel(xfer, NULL, buf, NULL,
 								  PURPLE_DEFAULT_ACTION_NONE,
 								  xfer->account, xfer->who, NULL,
-								  xfer,
+								  "xfer", xfer,
 								  G_CALLBACK(purple_xfer_choose_file),
 								  G_CALLBACK(cancel_recv_cb));
 
@@ -403,7 +403,7 @@
 	purple_request_accept_cancel(xfer, NULL, buf, buf2,
 							   PURPLE_DEFAULT_ACTION_NONE,
 							   xfer->account, xfer->who, NULL,
-							   xfer,
+							   "xfer", xfer,
 							   G_CALLBACK(ask_accept_ok),
 							   G_CALLBACK(ask_accept_cancel));
 	g_free(buf);
--- a/libpurple/plugins/autoaccept.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/plugins/autoaccept.c	Fri Aug 17 23:58:20 2007 +0000
@@ -164,7 +164,7 @@
 						_("_Save"), G_CALLBACK(save_cb),
 						_("_Cancel"), NULL,
 						NULL, NULL, NULL,
-						node,
+						"xfer", node,
 						_("Ask"), FT_ASK,
 						_("Auto Accept"), FT_ACCEPT,
 						_("Auto Reject"), FT_REJECT,
--- a/libpurple/plugins/buddynote.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/plugins/buddynote.c	Fri Aug 17 23:58:20 2007 +0000
@@ -50,7 +50,7 @@
 					   _("Save"), G_CALLBACK(do_it_cb),
 					   _("Cancel"), G_CALLBACK(dont_do_it_cb),
 					   NULL, NULL, NULL,
-					   node);
+					   "buddy", node);
 }
 
 static void
--- a/libpurple/plugins/idle.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/plugins/idle.c	Fri Aug 17 23:58:20 2007 +0000
@@ -169,7 +169,7 @@
 			_("_Set"), G_CALLBACK(idle_action_ok),
 			_("_Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"account", NULL);
 }
 
 static void
@@ -203,7 +203,7 @@
 			_("_Unset"), G_CALLBACK(unidle_action_ok),
 			_("_Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"account", NULL);
 }
 
 static void
@@ -229,7 +229,7 @@
 			_("_Set"), G_CALLBACK(idle_all_action_ok),
 			_("_Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"account", NULL);
 }
 
 static void
--- a/libpurple/plugins/offlinemsg.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/plugins/offlinemsg.c	Fri Aug 17 23:58:20 2007 +0000
@@ -157,7 +157,7 @@
 					_("You can edit/delete the pounce from the `Buddy Pounces' dialog"),
 					1,
 					offline->account, offline->who, offline->conv,
-					offline, 2,
+					"buddy", offline, 2,
 					_("Yes"), record_pounce,
 					_("No"), cancel_poune);
 		g_free(ask);
--- a/libpurple/protocols/gg/gg.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/gg/gg.c	Fri Aug 17 23:58:20 2007 +0000
@@ -336,7 +336,7 @@
 	purple_request_file(action, _("Save buddylist..."), NULL, TRUE,
 			G_CALLBACK(ggp_callback_buddylist_save_ok), NULL,
 			purple_connection_get_account(gc), NULL, NULL,
-			gc);
+			"blist", gc);
 }
 /* }}} */
 
@@ -350,7 +350,7 @@
 	purple_request_file(action, "Load buddylist from file...", NULL, FALSE,
 			G_CALLBACK(ggp_callback_buddylist_load_ok), NULL,
 			purple_connection_get_account(gc), NULL, NULL,
-			gc);
+			"blist", gc);
 }
 /* }}} */
 
@@ -501,7 +501,7 @@
 		_("OK"), G_CALLBACK(ggp_callback_register_account_ok),
 		_("Cancel"), G_CALLBACK(ggp_callback_register_account_cancel),
 		purple_connection_get_account(gc), NULL, NULL,
-		gc);
+		"register-account", gc);
 }
 /* }}} */
 
@@ -660,7 +660,7 @@
 		_("OK"), G_CALLBACK(ggp_callback_find_buddies),
 		_("Cancel"), NULL,
 		purple_connection_get_account(gc), NULL, NULL,
-		gc);
+		"blist", gc);
 }
 /* }}} */
 
@@ -797,7 +797,7 @@
 		fields, _("OK"), G_CALLBACK(ggp_callback_change_passwd_ok),
 		_("Cancel"), NULL,
 		purple_connection_get_account(gc), NULL, NULL,
-		gc);
+		"account", gc);
 
 	g_free(msg);
 }
@@ -878,7 +878,7 @@
 			_("Add"), G_CALLBACK(ggp_callback_add_to_chat_ok),
 			_("Cancel"), NULL,
 			purple_connection_get_account(gc), NULL, NULL,			  
-			gc);
+			"buddy", gc);
 	g_free(msg);
 }
 /* }}} */
--- a/libpurple/protocols/jabber/auth.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Fri Aug 17 23:58:20 2007 +0000
@@ -296,7 +296,7 @@
 					purple_request_yes_no(js->gc, _("Plaintext Authentication"),
 							_("Plaintext Authentication"),
 							msg,
-							2, js->gc->account, NULL, NULL, js->gc->account,
+							2, js->gc->account, NULL, NULL, "account", js->gc->account,
 							allow_cyrus_plaintext_auth,
 							disallow_plaintext_auth);
 					g_free(msg);
@@ -487,8 +487,8 @@
 					msg,
 					2,
 					purple_connection_get_account(js->gc), NULL, NULL,
-					purple_connection_get_account(js->gc), allow_plaintext_auth,
-					disallow_plaintext_auth);
+					"account", purple_connection_get_account(js->gc),
+					allow_plaintext_auth, disallow_plaintext_auth);
 			g_free(msg);
 			return;
 		}
@@ -572,8 +572,8 @@
 						_("This server requires plaintext authentication over an unencrypted connection.  Allow this and continue authentication?"),
 						2,
 						purple_connection_get_account(js->gc), NULL, NULL,
-						purple_connection_get_account(js->gc), allow_plaintext_auth,
-						disallow_plaintext_auth);
+						"account", purple_connection_get_account(js->gc),
+						allow_plaintext_auth, disallow_plaintext_auth);
 				return;
 			}
 			finish_plaintext_authentication(js);
--- a/libpurple/protocols/jabber/buddy.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Fri Aug 17 23:58:20 2007 +0000
@@ -587,7 +587,7 @@
 						_("Save"), G_CALLBACK(jabber_format_info),
 						_("Cancel"), NULL,
 						purple_connection_get_account(gc), NULL, NULL,
-						gc);
+						"account", gc);
 }
 
 /*---------------------------------------*/
@@ -1825,7 +1825,7 @@
 				_("Search"), G_CALLBACK(user_search_cb),
 				_("Cancel"), G_CALLBACK(user_search_cancel_cb),
 				NULL, NULL, NULL,
-				usi);
+				"account", usi);
 
 		g_free(instructions);
 	}
@@ -1861,7 +1861,7 @@
 			_("Search Directory"), PURPLE_CALLBACK(jabber_user_search_ok),
 			_("Cancel"), NULL,
 			NULL, NULL, NULL,
-			js);
+			"account", js);
 }
 
 
--- a/libpurple/protocols/jabber/chat.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/jabber/chat.c	Fri Aug 17 23:58:20 2007 +0000
@@ -785,7 +785,7 @@
 			_("Find Rooms"), PURPLE_CALLBACK(roomlist_ok_cb),
 			_("Cancel"), PURPLE_CALLBACK(roomlist_cancel_cb),
 			purple_connection_get_account(gc), NULL, NULL,			 
-			js);
+			"chat", js);
 
 	return js->roomlist;
 }
--- a/libpurple/protocols/jabber/jabber.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Fri Aug 17 23:58:20 2007 +0000
@@ -881,7 +881,7 @@
 				_("Register"), G_CALLBACK(jabber_register_cb),
 				_("Cancel"), G_CALLBACK(jabber_register_cancel_cb),
 				purple_connection_get_account(js->gc), NULL, NULL,
-				js);
+				"register-account", js);
 
 		g_free(instructions);
 	}
@@ -1382,8 +1382,8 @@
 			_("Change XMPP Password"), _("Please enter your new password"),
 			fields, _("OK"), G_CALLBACK(jabber_password_change_cb),
 			_("Cancel"), NULL,
-			purple_connection_get_account(gc), NULL, NULL,			  
-			js);
+			purple_connection_get_account(gc), NULL, NULL,
+			"account", js);
 }
 
 GList *jabber_actions(PurplePlugin *plugin, gpointer context)
--- a/libpurple/protocols/jabber/presence.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/jabber/presence.c	Fri Aug 17 23:58:20 2007 +0000
@@ -370,7 +370,7 @@
 											" accept the default settings?"),
 										/* Default Action */ 1,
 										purple_connection_get_account(js->gc), NULL, chat->conv,
-										chat, 2,
+										"chat", chat, 2,
 										_("_Configure Room"), G_CALLBACK(jabber_chat_request_room_configure),
 										_("_Accept Defaults"), G_CALLBACK(jabber_chat_create_instant_room));
 						}
--- a/libpurple/protocols/jabber/si.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/jabber/si.c	Fri Aug 17 23:58:20 2007 +0000
@@ -866,7 +866,7 @@
 
 			purple_request_fields(jsx->js->gc, _("Select a Resource"), msg, NULL, fields,
 					_("Send File"), G_CALLBACK(resource_select_ok_cb), _("Cancel"), G_CALLBACK(resource_select_cancel_cb),
-					jsx->js->gc->account, xfer->who, NULL, xfer);
+					jsx->js->gc->account, xfer->who, NULL, "xfer", xfer);
 
 			g_free(msg);
 		}
--- a/libpurple/protocols/jabber/xdata.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/jabber/xdata.c	Fri Aug 17 23:58:20 2007 +0000
@@ -336,7 +336,7 @@
 			_("OK"), G_CALLBACK(jabber_x_data_ok_cb),
 			_("Cancel"), G_CALLBACK(jabber_x_data_cancel_cb),
 			purple_connection_get_account(js->gc), /* XXX Do we have a who here? */ NULL, NULL,
-			data);
+			"account", data);
 
 	g_free(title);
 	g_free(instructions);
--- a/libpurple/protocols/msn/dialog.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/msn/dialog.c	Fri Aug 17 23:58:20 2007 +0000
@@ -129,7 +129,7 @@
 
 	purple_request_action(gc, NULL, msg, reason, PURPLE_DEFAULT_ACTION_NONE, 
 						purple_connection_get_account(gc), data->who, NULL,
-						data, 2,
+						"blist", data, 2,
 						_("Yes"), G_CALLBACK(msn_add_cb),
 						_("No"), G_CALLBACK(msn_rem_cb));
 
--- a/libpurple/protocols/msn/msn.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Fri Aug 17 23:58:20 2007 +0000
@@ -258,7 +258,7 @@
 					   _("OK"), G_CALLBACK(msn_act_id),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -275,7 +275,7 @@
 					   _("OK"), G_CALLBACK(msn_set_home_phone_cb),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -292,7 +292,7 @@
 					   _("OK"), G_CALLBACK(msn_set_work_phone_cb),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -309,7 +309,7 @@
 					   _("OK"), G_CALLBACK(msn_set_mobile_phone_cb),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -325,7 +325,7 @@
 						  "to your cell phone or other mobile device?"),
 						-1, 
 						purple_connection_get_account(gc), NULL, NULL,
-						gc, 3,
+						"account", gc, 3,
 						_("Allow"), G_CALLBACK(enable_msn_pages_cb),
 						_("Disallow"), G_CALLBACK(disable_msn_pages_cb),
 						_("Cancel"), NULL);
@@ -374,7 +374,7 @@
 					   _("Page"), G_CALLBACK(send_to_mobile_cb),
 					   _("Close"), G_CALLBACK(close_mobile_page_cb),
 					   purple_connection_get_account(gc), purple_buddy_get_name(buddy), NULL,
-					   data);
+					   "account", data);
 }
 
 static gboolean
--- a/libpurple/protocols/novell/novell.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/novell/novell.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1913,7 +1913,7 @@
 	purple_request_action(gc, title, primary, secondary,
 						PURPLE_DEFAULT_ACTION_NONE,
 						purple_connection_get_account(gc), name, NULL,
-						parms, 2,
+						"chat", parms, 2,
 						_("Yes"), G_CALLBACK(_join_conference_cb),
 						_("No"), G_CALLBACK(_reject_conference_cb));
 
--- a/libpurple/protocols/oscar/oscar.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1450,7 +1450,7 @@
 					   _("_OK"), G_CALLBACK(purple_parse_auth_securid_request_yes_cb),
 					   _("_Cancel"), G_CALLBACK(purple_parse_auth_securid_request_no_cb),
 					   account, NULL, NULL,
-					   gc);
+					   "account", gc);
 	g_free(primary);
 
 	return 1;
@@ -2242,7 +2242,7 @@
 					   _("_OK"), G_CALLBACK(purple_auth_request),
 					   _("_Cancel"), G_CALLBACK(purple_auth_dontrequest),
 					   purple_connection_get_account(gc), name, NULL,
-					   data);
+					   "blist", data);
 }
 
 
@@ -2291,7 +2291,7 @@
 					   _("_OK"), G_CALLBACK(purple_auth_dontgrant),
 					   _("_Cancel"), G_CALLBACK(oscar_free_name_data),
 					   purple_connection_get_account(data->gc), data->name, NULL,
-					   data);
+					   "blist", data);
 }
 
 /* When someone sends you buddies */
@@ -2477,7 +2477,7 @@
 										  "to your buddy list?"),
 										PURPLE_DEFAULT_ACTION_NONE,
 										purple_connection_get_account(gc), data->name, NULL,
-										data, 2,
+										"blist", data, 2,
 										_("_Add"), G_CALLBACK(purple_icq_buddyadd),
 										_("_Decline"), G_CALLBACK(oscar_free_name_data));
 					g_free(message);
@@ -5134,7 +5134,7 @@
 	purple_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg,
 						PURPLE_DEFAULT_ACTION_NONE,
 						purple_connection_get_account(gc), sn, NULL,
-						data,
+						"blist", data,
 						G_CALLBACK(purple_icq_buddyadd),
 						G_CALLBACK(oscar_free_name_data));
 	g_free(dialog_msg);
@@ -5833,7 +5833,7 @@
 					   _("_OK"), G_CALLBACK(oscar_ssi_editcomment),
 					   _("_Cancel"), G_CALLBACK(oscar_free_name_data),
 					   purple_connection_get_account(gc), data->name, NULL,
-					   data);
+					   "buddy", data);
 	g_free(title);
 
 	g_free(comment);
@@ -5884,7 +5884,7 @@
 			  "wish to continue?"),
 			0,
 			purple_connection_get_account(gc), data->who, NULL,
-			data, 2,
+			"buddy", data, 2,
 			_("C_onnect"), G_CALLBACK(oscar_ask_directim_yes_cb),
 			_("_Cancel"), G_CALLBACK(oscar_ask_directim_no_cb));
 	g_free(buf);
@@ -6041,7 +6041,7 @@
 						_("OK"), G_CALLBACK(oscar_icq_privacy_opts),
 						_("Cancel"), NULL,
 						purple_connection_get_account(gc), NULL, NULL,
-						gc);
+						"account", gc);
 }
 
 static void oscar_format_screenname(PurpleConnection *gc, const char *nick) {
@@ -6114,7 +6114,7 @@
 					   _("_OK"), G_CALLBACK(oscar_change_email),
 					   _("_Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void oscar_show_awaitingauth(PurplePluginAction *action)
@@ -6184,7 +6184,7 @@
 					   _("_Search"), G_CALLBACK(search_by_email_cb),
 					   _("_Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "buddy", gc);
 }
 
 static void oscar_show_set_info(PurplePluginAction *action)
--- a/libpurple/protocols/oscar/peer.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/oscar/peer.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1018,7 +1018,7 @@
 						  "risk."),
 						PURPLE_DEFAULT_ACTION_NONE,
 						account, sn, NULL,
-						conn, 2,
+						"buddy", conn, 2,
 						_("C_onnect"), G_CALLBACK(peer_connection_got_proposition_yes_cb),
 						_("Cancel"), G_CALLBACK(peer_connection_got_proposition_no_cb));
 	}
--- a/libpurple/protocols/qq/buddy_info.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/qq/buddy_info.c	Fri Aug 17 23:58:20 2007 +0000
@@ -483,7 +483,7 @@
 			_("Update my information"), G_CALLBACK(modify_info_ok_cb),
 			_("Cancel"), G_CALLBACK(modify_info_cancel_cb),
 			purple_connection_get_account(gc), NULL, NULL,
-			mid);
+			"account", mid);
 	}
 }
 
--- a/libpurple/protocols/qq/buddy_opt.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/qq/buddy_opt.c	Fri Aug 17 23:58:20 2007 +0000
@@ -213,7 +213,7 @@
 			   _("Sorry, you are not my type..."), TRUE, FALSE,
 			   NULL, _("Reject"), G_CALLBACK(_qq_reject_add_request_real), _("Cancel"), NULL,
 			   purple_connection_get_account(gc), nombre, NULL,
-			   g2);
+			   "buddy", g2);
 	g_free(nombre);
 }
 
@@ -410,7 +410,7 @@
 					   (_qq_send_packet_add_buddy_auth_with_gc_and_uid),
 					   _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid),
 					   purple_connection_get_account(gc), nombre, NULL,
-					   g);
+					   "buddy", g);
 			g_free(msg);
 			g_free(nombre);
 		} else {	/* add OK */
--- a/libpurple/protocols/qq/group.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/qq/group.c	Fri Aug 17 23:58:20 2007 +0000
@@ -123,7 +123,7 @@
 			   _("Search"), G_CALLBACK(_qq_group_search_callback), 
 			   _("Cancel"), G_CALLBACK(_qq_group_search_cancel_callback), 
 			   purple_connection_get_account(gc), NULL, NULL,
-			   gc);
+			   "chat", gc);
 
 	return qd->roomlist;
 }
--- a/libpurple/protocols/qq/group_im.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/qq/group_im.c	Fri Aug 17 23:58:20 2007 +0000
@@ -137,7 +137,7 @@
 			    msg, reason,
 			    2,
 				purple_connection_get_account(gc), nombre, NULL,
-				g, 3,
+				"chat", g, 3,
 			    _("Approve"),
 			    G_CALLBACK
 			    (qq_group_approve_application_with_struct),
--- a/libpurple/protocols/qq/group_join.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/qq/group_join.c	Fri Aug 17 23:58:20 2007 +0000
@@ -139,7 +139,7 @@
 			   G_CALLBACK(_qq_group_join_auth_with_gc_and_id),
 			   _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid),
 			   purple_connection_get_account(gc), group->group_name_utf8, NULL,
-			   g);
+			   "chat", g);
 	g_free(msg);
 }
 
@@ -362,7 +362,7 @@
 			    ("Note, if you are the creator, \nthis operation will eventually remove this Qun."),
 			    1,
 				purple_connection_get_account(gc), NULL, NULL,
-			    g, 2, _("Cancel"),
+			    "chat", g, 2, _("Cancel"),
 			    G_CALLBACK(qq_do_nothing_with_gc_and_uid),
 			    _("Continue"), G_CALLBACK(_qq_group_exit_with_gc_and_id));
 }
--- a/libpurple/protocols/qq/group_opt.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/qq/group_opt.c	Fri Aug 17 23:58:20 2007 +0000
@@ -123,7 +123,7 @@
 	qq_send_packet_get_info(g->gc, g->member, TRUE);	/* we want to see window */
 	purple_request_action(g->gc, NULL, _("Do you want to approve the request?"), "", 2,
 					purple_connection_get_account(g->gc), NULL, NULL,
-					g, 2,
+					"chat", g, 2,
 					_("Reject"), G_CALLBACK(qq_group_reject_application_with_struct),
 					_("Approve"), G_CALLBACK(qq_group_approve_application_with_struct));
 }
@@ -143,7 +143,7 @@
 			   _("Send"), G_CALLBACK(_qq_group_reject_application_real),
 			   _("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct),
 			   purple_connection_get_account(g->gc), nombre, NULL,
-			   g);
+			   "chat", g);
 
 	g_free(msg1);
 	g_free(msg2);
@@ -394,7 +394,7 @@
 			    ("Would you like to set up the Qun details now?"),
 			    1,
 				purple_connection_get_account(gc), NULL, NULL,
-				g, 2,
+				"chat", g, 2,
 				_("Setup"), G_CALLBACK(qq_group_setup_with_gc_and_uid),
 			    _("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid));
 }
--- a/libpurple/protocols/qq/sys_msg.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/qq/sys_msg.c	Fri Aug 17 23:58:20 2007 +0000
@@ -86,7 +86,7 @@
 	purple_request_action
 	    (gc, NULL, _("Do you want to approve the request?"), "", 2,
 		 purple_connection_get_account(gc), nombre, NULL,
-		 g, 2,
+		 "chat", g, 2,
 	     _("Reject"), G_CALLBACK(qq_reject_add_request_with_gc_and_uid),
 	     _("Approve"), G_CALLBACK(qq_approve_add_request_with_gc_and_uid));
 	g_free(nombre);
@@ -109,7 +109,7 @@
 	purple_request_action
 	    (gc, NULL, _("Do you want to add this buddy?"), "", 2,
 		 purple_connection_get_account(gc), nombre, NULL,
-		 g, 2,
+		 "buddy", g, 2,
 	     _("Cancel"), NULL,
 		 _("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid));
 	g_free(nombre);
@@ -168,7 +168,7 @@
 		purple_request_action(gc, NULL, message,
 				    _("Would like to add him?"), 2,
 					purple_connection_get_account(gc), name, NULL,
-					g, 3,
+					"buddy", g, 3,
 				    _("Cancel"), NULL,
 					_("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid),
 				    _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid));
@@ -242,7 +242,7 @@
 	purple_request_action
 	    (gc, NULL, message, reason, 2,
 		purple_connection_get_account(gc), name, NULL,
-		 g, 3,
+		 "buddy", g, 3,
 	     _("Reject"),
 	     G_CALLBACK(qq_reject_add_request_with_gc_and_uid),
 	     _("Approve"),
@@ -262,7 +262,7 @@
 		purple_request_action(gc, NULL, message,
 				    _("Would you like to add him?"), 2,
 					purple_connection_get_account(gc), name, NULL,
-					g2, 3,
+					"blist", g2, 3,
 					_("Cancel"), NULL,
 					_("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid),
 				    _("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid));
--- a/libpurple/protocols/sametime/sametime.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/sametime/sametime.c	Fri Aug 17 23:58:20 2007 +0000
@@ -3388,7 +3388,7 @@
 		      _("Create"), G_CALLBACK(conf_create_prompt_join),
 		      _("Cancel"), G_CALLBACK(conf_create_prompt_cancel),
 			  acct, purple_buddy_get_name(buddy), NULL,
-		      buddy);
+		      "chat", buddy);
   g_free(msg1);
 }
 
@@ -3474,7 +3474,7 @@
 		      _("Invite"), G_CALLBACK(conf_select_prompt_invite),
 		      _("Cancel"), G_CALLBACK(conf_select_prompt_cancel),
 			  acct, purple_buddy_get_name(buddy), NULL,
-		      buddy);
+		      "chat", buddy);
   g_free(msg);
 }
 
@@ -3645,7 +3645,7 @@
 		     _("Connect"), G_CALLBACK(prompt_host_ok_cb),
 		     _("Cancel"), G_CALLBACK(prompt_host_cancel_cb),
 			 acct, NULL, NULL,
-		     gc);
+		     "account", gc);
 
   g_free(msg);
 }
@@ -5219,7 +5219,7 @@
   purple_request_file(gc, title, NULL, FALSE,
 		    G_CALLBACK(st_import_action_cb), NULL,
 		    account, NULL, NULL,
-		    gc);
+		    "blist", gc);
 
   g_free(title);
 }
@@ -5259,7 +5259,7 @@
   purple_request_file(gc, title, NULL, TRUE,
 		    G_CALLBACK(st_export_action_cb), NULL,
 			account, NULL, NULL,
-		    gc);
+		    "blist", gc);
 
   g_free(title);
 }
@@ -5397,7 +5397,7 @@
 		      _("Add Group"), G_CALLBACK(remote_group_multi_cb),
 		      _("Cancel"), G_CALLBACK(remote_group_multi_cleanup),
 			  purple_connection_get_account(gc), result->name, NULL,
-		      pd);
+		      "blist", pd);
 
   g_free(msg);
 }
@@ -5487,7 +5487,7 @@
 		     _("Add"), G_CALLBACK(remote_group_action_cb),
 		     _("Cancel"), NULL,
 			 purple_connection_get_account(gc), NULL, NULL,
-		     gc);
+		     "blist", gc);
 }
 
 
@@ -5612,7 +5612,7 @@
 		     _("Search"), G_CALLBACK(search_action_cb),
 		     _("Cancel"), NULL,
 			 purple_connection_get_account(gc), NULL, NULL,
-			 gc);
+			 "blist", gc);
 }
 
 
--- a/libpurple/protocols/yahoo/yahoo.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1015,7 +1015,7 @@
 			_("OK"), G_CALLBACK(yahoo_buddy_add_deny_cb),
 			_("Cancel"), G_CALLBACK(yahoo_buddy_add_deny_noreason_cb),
 			purple_connection_get_account(add_req->gc), add_req->who, NULL,
-			add_req);
+			"blist", add_req);
 }
 
 static void yahoo_buddy_auth_req_15(PurpleConnection *gc, struct yahoo_packet *pkt) {
@@ -1970,7 +1970,7 @@
 					"will remove and ignore the buddy."), who);
 		purple_request_yes_no(gc, NULL, _("Ignore buddy?"), buf, 0,
 						gc->account, who, NULL,
-						b,
+						"blist", b,
 						G_CALLBACK(ignore_buddy),
 						G_CALLBACK(keep_buddy));
 		break;
@@ -3397,7 +3397,7 @@
 					   _("OK"), G_CALLBACK(yahoo_act_id),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void yahoo_show_chat_goto(PurplePluginAction *action)
@@ -3408,7 +3408,7 @@
 					   _("OK"), G_CALLBACK(yahoo_chat_goto),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "chat", gc);
 }
 
 static GList *yahoo_actions(PurplePlugin *plugin, gpointer context) {
@@ -3726,7 +3726,7 @@
 	char *group = NULL;
 	char *group2 = NULL;
 	YahooFriend *f;
-	
+
 	if (!yd->logged_in)
 		return;
 
--- a/libpurple/request.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/request.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1139,7 +1139,7 @@
 				   const char *ok_text, GCallback ok_cb,
 				   const char *cancel_text, GCallback cancel_cb,
 				   PurpleAccount *account, const char *who, PurpleConversation *conv,
-				   void *user_data)
+				   const char *ui_hint, void *user_data)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1160,7 +1160,7 @@
 											 ok_text, ok_cb,
 											 cancel_text, cancel_cb,
 											 account, who, conv,
-											 user_data);
+											 ui_hint, user_data);
 
 		handles = g_list_append(handles, info);
 
@@ -1176,7 +1176,7 @@
 					const char *ok_text, GCallback ok_cb,
 					const char *cancel_text, GCallback cancel_cb,
 					PurpleAccount *account, const char *who, PurpleConversation *conv,
-					void *user_data, ...)
+					const char *ui_hint, void *user_data, ...)
 {
 	void *ui_handle;
 	va_list args;
@@ -1188,7 +1188,7 @@
 	ui_handle = purple_request_choice_varg(handle, title, primary, secondary,
 					     default_value, ok_text, ok_cb,
 					     cancel_text, cancel_cb,
-					     account, who, conv, user_data, args);
+					     account, who, conv, ui_hint, user_data, args);
 	va_end(args);
 
 	return ui_handle;
@@ -1201,7 +1201,7 @@
 			 const char *ok_text, GCallback ok_cb,
 			 const char *cancel_text, GCallback cancel_cb,
 			 PurpleAccount *account, const char *who, PurpleConversation *conv,
-			 void *user_data, va_list choices)
+			 const char *ui_hint, void *user_data, va_list choices)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1221,7 +1221,7 @@
 						      ok_text, ok_cb,
 						      cancel_text, cancel_cb,
 							  account, who, conv,
-						      user_data, choices);
+						      ui_hint, user_data, choices);
 
 		handles = g_list_append(handles, info);
 
@@ -1235,7 +1235,7 @@
 purple_request_action(void *handle, const char *title, const char *primary,
 					const char *secondary, unsigned int default_action,
 					PurpleAccount *account, const char *who, PurpleConversation *conv,
-					void *user_data, size_t action_count, ...)
+					const char *ui_hint, void *user_data, size_t action_count, ...)
 {
 	void *ui_handle;
 	va_list args;
@@ -1245,7 +1245,7 @@
 	va_start(args, action_count);
 	ui_handle = purple_request_action_varg(handle, title, primary, secondary,
 										 default_action, account, who, conv,
-										 user_data, action_count, args);
+										 ui_hint, user_data, action_count, args);
 	va_end(args);
 
 	return ui_handle;
@@ -1256,7 +1256,7 @@
 						 const char *primary, const char *secondary,
 						 unsigned int default_action,
 						 PurpleAccount *account, const char *who, PurpleConversation *conv,
-						  void *user_data, size_t action_count, va_list actions)
+						 const char *ui_hint, void *user_data, size_t action_count, va_list actions)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1272,7 +1272,7 @@
 		info->handle    = handle;
 		info->ui_handle = ops->request_action(title, primary, secondary,
 											  default_action, account, who, conv,
-											  user_data, action_count, actions);
+											  ui_hint, user_data, action_count, actions);
 
 		handles = g_list_append(handles, info);
 
@@ -1288,7 +1288,7 @@
 					const char *ok_text, GCallback ok_cb,
 					const char *cancel_text, GCallback cancel_cb,
 					PurpleAccount *account, const char *who, PurpleConversation *conv,
-					void *user_data)
+					const char *ui_hint, void *user_data)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1308,7 +1308,7 @@
 											  fields, ok_text, ok_cb,
 											  cancel_text, cancel_cb,
 											  account, who, conv,
-											  user_data);
+											  ui_hint, user_data);
 
 		handles = g_list_append(handles, info);
 
@@ -1323,7 +1323,7 @@
 				  gboolean savedialog,
 				  GCallback ok_cb, GCallback cancel_cb,
 				  PurpleAccount *account, const char *who, PurpleConversation *conv,
-				  void *user_data)
+				  const char *ui_hint, void *user_data)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1337,7 +1337,7 @@
 		info->handle    = handle;
 		info->ui_handle = ops->request_file(title, filename, savedialog,
 											ok_cb, cancel_cb,
-											account, who, conv, user_data);
+											account, who, conv, ui_hint, user_data);
 		handles = g_list_append(handles, info);
 		return info->ui_handle;
 	}
@@ -1349,7 +1349,7 @@
 purple_request_folder(void *handle, const char *title, const char *dirname,
 				  GCallback ok_cb, GCallback cancel_cb,
 				  PurpleAccount *account, const char *who, PurpleConversation *conv,
-				  void *user_data)
+				  const char *ui_hint, void *user_data)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1364,7 +1364,7 @@
 		info->ui_handle = ops->request_folder(title, dirname,
 											ok_cb, cancel_cb,
 											account, who, conv,
-											user_data);
+											ui_hint, user_data);
 		handles = g_list_append(handles, info);
 		return info->ui_handle;
 	}
--- a/libpurple/request.h	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/request.h	Fri Aug 17 23:58:20 2007 +0000
@@ -188,33 +188,33 @@
 						   const char *ok_text, GCallback ok_cb,
 						   const char *cancel_text, GCallback cancel_cb,
 						   PurpleAccount *account, const char *who, PurpleConversation *conv,
-						   void *user_data);
+						   const char *ui_hint, void *user_data);
 	void *(*request_choice)(const char *title, const char *primary,
 							const char *secondary, unsigned int default_value,
 							const char *ok_text, GCallback ok_cb,
 							const char *cancel_text, GCallback cancel_cb,
 							PurpleAccount *account, const char *who, PurpleConversation *conv,
-							void *user_data, va_list choices);
+							const char *ui_hint, void *user_data, va_list choices);
 	void *(*request_action)(const char *title, const char *primary,
 							const char *secondary, unsigned int default_action,
 							PurpleAccount *account, const char *who, PurpleConversation *conv,
-							void *user_data, size_t action_count,
+							const char *ui_hint, void *user_data, size_t action_count,
 							va_list actions);
 	void *(*request_fields)(const char *title, const char *primary,
 							const char *secondary, PurpleRequestFields *fields,
 							const char *ok_text, GCallback ok_cb,
 							const char *cancel_text, GCallback cancel_cb,
 							PurpleAccount *account, const char *who, PurpleConversation *conv,
-							void *user_data);
+							const char *ui_hint, void *user_data);
 	void *(*request_file)(const char *title, const char *filename,
 						  gboolean savedialog, GCallback ok_cb, GCallback cancel_cb,
 						  PurpleAccount *account, const char *who, PurpleConversation *conv,
-						  void *user_data);
+						  const char *ui_hint, void *user_data);
 	void (*close_request)(PurpleRequestType type, void *ui_handle);
 	void *(*request_folder)(const char *title, const char *dirname,
 							GCallback ok_cb, GCallback cancel_cb,
 							PurpleAccount *account, const char *who, PurpleConversation *conv,
-							void *user_data);
+							const char *ui_hint, void *user_data);
 
 	void (*_purple_reserved1)(void);
 	void (*_purple_reserved2)(void);
@@ -1186,6 +1186,7 @@
  * @param account		The PurpleAccount associated with this request, or NULL if none is
  * @param who			The username of the buddy assocaited with this request, or NULL if none is
  * @param conv			The PurpleConversation associated with this request, or NULL if none is
+ * @param ui_hint       UI hint
  * @param user_data     The data to pass to the callback.
  *
  * @return A UI-specific handle.
@@ -1197,7 +1198,7 @@
 						 const char *ok_text, GCallback ok_cb,
 						 const char *cancel_text, GCallback cancel_cb,
 						 PurpleAccount *account, const char *who, PurpleConversation *conv,
-						 void *user_data);
+						 const char *ui_hint, void *user_data);
 
 /**
  * Prompts the user for multiple-choice input.
@@ -1216,6 +1217,7 @@
  * @param account		The PurpleAccount associated with this request, or NULL if none is
  * @param who			The username of the buddy assocaited with this request, or NULL if none is
  * @param conv			The PurpleConversation associated with this request, or NULL if none is 
+ * @param ui_hint       UI hint
  * @param user_data     The data to pass to the callback.
  * @param ...           The choices.  This argument list should be
  *                      terminated with a NULL parameter.
@@ -1228,7 +1230,7 @@
 						  const char *ok_text, GCallback ok_cb,
 						  const char *cancel_text, GCallback cancel_cb,
 						  PurpleAccount *account, const char *who, PurpleConversation *conv,
-						  void *user_data, ...) G_GNUC_NULL_TERMINATED;
+						  const char *ui_hint, void *user_data, ...) G_GNUC_NULL_TERMINATED;
 
 /**
  * Prompts the user for multiple-choice input.
@@ -1247,6 +1249,7 @@
  * @param account		The PurpleAccount associated with this request, or NULL if none is
  * @param who			The username of the buddy assocaited with this request, or NULL if none is
  * @param conv			The PurpleConversation associated with this request, or NULL if none is 
+ * @param ui_hint       UI hint
  * @param user_data     The data to pass to the callback.
  * @param choices       The choices.  This argument list should be
  *                      terminated with a @c NULL parameter.
@@ -1259,7 +1262,7 @@
 							   const char *ok_text, GCallback ok_cb,
 							   const char *cancel_text, GCallback cancel_cb,
 							   PurpleAccount *account, const char *who, PurpleConversation *conv,
-							   void *user_data, va_list choices);
+							   const char *ui_hint, void *user_data, va_list choices);
 
 /**
  * Prompts the user for an action.
@@ -1276,6 +1279,7 @@
  * @param account		 The PurpleAccount associated with this request, or NULL if none is
  * @param who			 The username of the buddy assocaited with this request, or NULL if none is
  * @param conv			 The PurpleConversation associated with this request, or NULL if none is 
+ * @param ui_hint        UI hint
  * @param user_data      The data to pass to the callback.
  * @param action_count   The number of actions.
  * @param ...            A list of actions.  These are pairs of
@@ -1292,7 +1296,7 @@
 						  const char *primary, const char *secondary,
 						  unsigned int default_action,
 						  PurpleAccount *account, const char *who, PurpleConversation *conv,
-						  void *user_data, size_t action_count, ...);
+						  const char *ui_hint, void *user_data, size_t action_count, ...);
 
 /**
  * Prompts the user for an action.
@@ -1309,6 +1313,7 @@
  * @param account		 The PurpleAccount associated with this request, or NULL if none is
  * @param who			 The username of the buddy assocaited with this request, or NULL if none is
  * @param conv			 The PurpleConversation associated with this request, or NULL if none is 
+ * @param ui_hint        UI hint
  * @param user_data      The data to pass to the callback.
  * @param action_count   The number of actions.
  * @param actions        A list of actions and callbacks.
@@ -1319,7 +1324,7 @@
 							   const char *primary, const char *secondary,
 							   unsigned int default_action,
 							   PurpleAccount *account, const char *who, PurpleConversation *conv,
-							   void *user_data, size_t action_count,
+							   const char *ui_hint, void *user_data, size_t action_count,
 							   va_list actions);
 
 /**
@@ -1339,6 +1344,7 @@
  * @param account	  The PurpleAccount associated with this request, or NULL if none is
  * @param who		  The username of the buddy associated with this request, or NULL if none is
  * @param conv		  The PurpleConversation associated with this request, or NULL if none is 
+ * @param ui_hint     UI hint
  * @param user_data   The data to pass to the callback.
  *
  * @return A UI-specific handle.
@@ -1349,7 +1355,7 @@
 						  const char *ok_text, GCallback ok_cb,
 						  const char *cancel_text, GCallback cancel_cb,
 						  PurpleAccount *account, const char *who, PurpleConversation *conv,
-						  void *user_data);
+						  const char *ui_hint, void *user_data);
 
 /**
  * Closes a request.
@@ -1371,9 +1377,9 @@
  */
 #define purple_request_yes_no(handle, title, primary, secondary, \
 							default_action, account, who, conv, \
-							user_data, yes_cb, no_cb) \
+							ui_hint, user_data, yes_cb, no_cb) \
 	purple_request_action((handle), (title), (primary), (secondary), \
-						(default_action), account, who, conv, (user_data), 2, \
+						(default_action), account, who, conv, (ui_hint), (user_data), 2, \
 						_("_Yes"), (yes_cb), _("_No"), (no_cb))
 
 /**
@@ -1381,9 +1387,9 @@
  */
 #define purple_request_ok_cancel(handle, title, primary, secondary, \
 							default_action, account, who, conv, \
-						    user_data, ok_cb, cancel_cb) \
+						    ui_hint, user_data, ok_cb, cancel_cb) \
 	purple_request_action((handle), (title), (primary), (secondary), \
-						(default_action), account, who, conv, (user_data), 2, \
+						(default_action), account, who, conv, (ui_hint), (user_data), 2, \
 						_("_OK"), (ok_cb), _("_Cancel"), (cancel_cb))
 
 /**
@@ -1391,9 +1397,9 @@
  */
 #define purple_request_accept_cancel(handle, title, primary, secondary, \
 								   default_action, account, who, conv, \
-								   user_data, accept_cb, cancel_cb) \
+								   ui_hint, user_data, accept_cb, cancel_cb) \
 	purple_request_action((handle), (title), (primary), (secondary), \
-						(default_action), account, who, conv, (user_data), 2, \
+						(default_action), account, who, conv, (ui_hint), (user_data), 2, \
 						_("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb))
 
 /**
@@ -1412,6 +1418,7 @@
  * @param account	  The PurpleAccount associated with this request, or NULL if none is
  * @param who		  The username of the buddy assocaited with this request, or NULL if none is
  * @param conv		  The PurpleConversation associated with this request, or NULL if none is 
+ * @param ui_hint     UI hint
  * @param user_data   The data to pass to the callback.
  *
  * @return A UI-specific handle.
@@ -1420,7 +1427,7 @@
 						gboolean savedialog,
 						GCallback ok_cb, GCallback cancel_cb,
 						PurpleAccount *account, const char *who, PurpleConversation *conv,
-						void *user_data);
+						const char *ui_hint, void *user_data);
 
 /**
  * Displays a folder select dialog. Returns the selected filename to
@@ -1436,6 +1443,7 @@
  * @param account	  The PurpleAccount associated with this request, or NULL if none is
  * @param who		  The username of the buddy assocaited with this request, or NULL if none is
  * @param conv		  The PurpleConversation associated with this request, or NULL if none is 
+ * @param ui_hint     UI hint
  * @param user_data   The data to pass to the callback.
  *
  * @return A UI-specific handle.
@@ -1443,7 +1451,7 @@
 void *purple_request_folder(void *handle, const char *title, const char *dirname,
 						GCallback ok_cb, GCallback cancel_cb,
 						PurpleAccount *account, const char *who, PurpleConversation *conv,
-						void *user_data);
+						const char *ui_hint, void *user_data);
 
 /*@}*/
 
--- a/libpurple/server.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/libpurple/server.c	Fri Aug 17 23:58:20 2007 +0000
@@ -688,7 +688,7 @@
 
 		purple_request_accept_cancel(gc, NULL, _("Accept chat invitation?"), buf2,
 							   PURPLE_DEFAULT_ACTION_NONE, account, who, NULL,
-							   cid, G_CALLBACK(chat_invite_accept),
+							   "chat", cid, G_CALLBACK(chat_invite_accept),
 							   G_CALLBACK(chat_invite_reject));
 	}
 	else if (plugin_return > 0)
--- a/pidgin/gtkaccount.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkaccount.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1912,7 +1912,7 @@
 		purple_request_close_with_handle(account);
 		purple_request_action(account, NULL, buf, NULL, 0,
 							account, NULL, NULL,
-							account, 2,
+							"accounts", account, 2,
 							_("Delete"), delete_account_cb,
 							_("Cancel"), NULL);
 		g_free(buf);
--- a/pidgin/gtkblist.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkblist.c	Fri Aug 17 23:58:20 2007 +0000
@@ -475,7 +475,7 @@
 
 static void gtk_blist_menu_bp_cb(GtkWidget *w, PurpleBuddy *b)
 {
-	pidgin_pounce_editor_show(b->account, b->name, NULL);
+	pidgin_pounce_editor_show(GTK_WINDOW(gtkblist->window), b->account, b->name, NULL);
 }
 
 static void gtk_blist_menu_showlog_cb(GtkWidget *w, PurpleBlistNode *node)
@@ -501,7 +501,7 @@
 			name = prpl_info->get_chat_name(c->components);
 		}
 	} else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
-		pidgin_log_show_contact((PurpleContact *)node);
+		pidgin_log_show_contact(GTK_WINDOW(gtkblist->window), (PurpleContact *)node);
 		pidgin_clear_cursor(gtkblist->window);
 		return;
 	} else {
@@ -513,18 +513,13 @@
 	}
 
 	if (name && account) {
-		pidgin_log_show(type, name, account);
+		pidgin_log_show(GTK_WINDOW(gtkblist->window), type, name, account);
 		g_free(name);
 
 		pidgin_clear_cursor(gtkblist->window);
 	}
 }
 
-static void gtk_blist_show_systemlog_cb()
-{
-	pidgin_syslog_show();
-}
-
 static void gtk_blist_show_onlinehelp_cb()
 {
 	purple_notify_uri(NULL, PURPLE_WEBSITE "documentation");
@@ -2840,6 +2835,11 @@
 			!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled"));
 }
 
+static void
+pidgin_blist_show_with_parent(gpointer data1, void (*callback)(GtkWindow *parent), gpointer data3)
+{
+	callback(GTK_WINDOW(gtkblist->window));
+}
 
 /***************************************************
  *            Crap                                 *
@@ -2872,13 +2872,13 @@
 	/* Tools */
 	{ N_("/_Tools"), NULL, NULL, 0, "<Branch>", NULL },
 	{ N_("/Tools/Buddy _Pounces"), NULL, pidgin_pounces_manager_show, 0, "<Item>", NULL },
-	{ N_("/Tools/Plu_gins"), "<CTL>U", pidgin_plugin_dialog_show, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_PLUGINS },
+	{ N_("/Tools/Plu_gins"), "<CTL>U", pidgin_blist_show_with_parent, (int)pidgin_plugin_dialog_show, "<StockItem>", PIDGIN_STOCK_TOOLBAR_PLUGINS },
 	{ N_("/Tools/Pr_eferences"), "<CTL>P", pidgin_prefs_show, 0, "<StockItem>", GTK_STOCK_PREFERENCES },
 	{ N_("/Tools/Pr_ivacy"), NULL, pidgin_privacy_dialog_show, 0, "<Item>", NULL },
 	{ "/Tools/sep2", NULL, NULL, 0, "<Separator>", NULL },
 	{ N_("/Tools/_File Transfers"), "<CTL>T", pidgin_xfer_dialog_show, 0, "<Item>", NULL },
 	{ N_("/Tools/R_oom List"), NULL, pidgin_roomlist_dialog_show, 0, "<Item>", NULL },
-	{ N_("/Tools/System _Log"), NULL, gtk_blist_show_systemlog_cb, 0, "<Item>", NULL },
+	{ N_("/Tools/System _Log"), NULL, pidgin_blist_show_with_parent, (int)pidgin_syslog_show, "<Item>", NULL },
 	{ "/Tools/sep3", NULL, NULL, 0, "<Separator>", NULL },
 	{ N_("/Tools/Mute _Sounds"), "<CTL>S", pidgin_blist_mute_sounds_cb, 0, "<CheckItem>", NULL },
 	/* Help */
@@ -2886,7 +2886,7 @@
 	{ N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP },
 	{ N_("/Help/_Debug Window"), NULL, toggle_debug, 0, "<Item>", NULL },
 #if GTK_CHECK_VERSION(2,6,0)	
-	{ N_("/Help/_About"), NULL, pidgin_dialogs_about, 0,  "<StockItem>", GTK_STOCK_ABOUT },
+	{ N_("/Help/_About"), NULL, pidgin_blist_show_with_parent, (int)pidgin_dialogs_about, "<StockItem>", GTK_STOCK_ABOUT },
 #else
 	{ N_("/Help/_About"), NULL, pidgin_dialogs_about, 0,  "<Item>", NULL },
 #endif
@@ -4018,7 +4018,7 @@
 	enabled = purple_account_get_enabled(account, purple_core_get_ui());
 	purple_request_action(account, _("Connection Error"), primary, text, 2,
 						account, NULL, NULL,
-						account, 3,
+						"account", account, 3,
 						_("OK"), NULL,
 						_("Modify Account"), PURPLE_CALLBACK(ce_modify_account_cb),
 						enabled ? _("Connect") : _("Re-enable Account"),
@@ -5924,7 +5924,7 @@
 					   _("Add"), G_CALLBACK(add_group_cb),
 					   _("Cancel"), NULL,
 					   NULL, NULL, NULL,
-					   NULL);
+					   "blist", NULL);
 }
 
 void
--- a/pidgin/gtkconv.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkconv.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1004,7 +1004,7 @@
 					  buf,
 					  TRUE, G_CALLBACK(savelog_writefile_cb), NULL,
 					  NULL, NULL, conv,
-					  conv);
+					  "conversation", conv);
 
 	g_free(buf);
 }
@@ -1052,7 +1052,7 @@
 		PurpleBlistNode *node = cur->data;
 		if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL)))
 		{
-			pidgin_log_show_contact((PurpleContact *)node->parent);
+			pidgin_log_show_contact(GTK_WINDOW(win->window), (PurpleContact *)node->parent);
 			g_slist_free(buddies);
 			gdk_window_set_cursor(gtkblist->window->window, NULL);
 			gdk_window_set_cursor(win->window->window, NULL);
@@ -1061,7 +1061,7 @@
 	}
 	g_slist_free(buddies);
 
-	pidgin_log_show(type, name, account);
+	pidgin_log_show(GTK_WINDOW(win->window), type, name, account);
 
 	gdk_window_set_cursor(gtkblist->window->window, NULL);
 	gdk_window_set_cursor(win->window->window, NULL);
@@ -1210,7 +1210,7 @@
 
 	conv = pidgin_conv_window_get_active_gtkconv(win)->active_conv;
 
-	pidgin_pounce_editor_show(purple_conversation_get_account(conv),
+	pidgin_pounce_editor_show(GTK_WINDOW(win->window), purple_conversation_get_account(conv),
 								purple_conversation_get_name(conv), NULL);
 }
 
@@ -2603,7 +2603,7 @@
 	purple_request_file(gtkconv, _("Save Icon"), buf, TRUE,
 					 G_CALLBACK(saveicon_writefile_cb), NULL,
 					conv->account, NULL, conv,
-					gtkconv);
+					"conversation", gtkconv);
 
 	g_free(buf);
 }
--- a/pidgin/gtkdebug.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkdebug.c	Fri Aug 17 23:58:20 2007 +0000
@@ -233,7 +233,7 @@
 	purple_request_file(win, _("Save Debug Log"), "purple-debug.log", TRUE,
 					  G_CALLBACK(save_writefile_cb), NULL,
 					  NULL, NULL, NULL,
-					  win);
+					  "blist", win);
 }
 
 static void
--- a/pidgin/gtkdialogs.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkdialogs.c	Fri Aug 17 23:58:20 2007 +0000
@@ -317,7 +317,7 @@
 	g_object_unref(G_OBJECT(pixmap));
 }
 
-void pidgin_dialogs_about()
+void pidgin_dialogs_about(GtkWindow *parent)
 {
 	GtkWidget *hbox;
 	GtkWidget *vbox;
@@ -334,11 +334,15 @@
 	GdkPixbuf *pixbuf;
 
 	if (about != NULL) {
+		if (parent)
+			gtk_window_set_transient_for(GTK_WINDOW(about), parent);
 		gtk_window_present(GTK_WINDOW(about));
 		return;
 	}
 
 	PIDGIN_DIALOG(about);
+	if (parent)
+		gtk_window_set_transient_for(GTK_WINDOW(about), parent);
 	tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME);
 	gtk_window_set_title(GTK_WINDOW(about), tmp);
 	g_free(tmp);
@@ -749,7 +753,7 @@
 						_("OK"), G_CALLBACK(pidgin_dialogs_im_cb),
 						_("Cancel"), NULL,
 						NULL, NULL, NULL,
-						NULL);
+						"blist", NULL);
 }
 
 void
@@ -887,7 +891,7 @@
 						_("OK"), G_CALLBACK(pidgin_dialogs_info_cb),
 						_("Cancel"), NULL,
 						NULL, NULL, NULL,
-						NULL);
+						"blist", NULL);
 }
 
 static void
@@ -915,7 +919,7 @@
 			PurpleBlistNode *node = cur->data;
 			if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL)))
 			{
-				pidgin_log_show_contact((PurpleContact *)node->parent);
+				pidgin_log_show_contact(GTK_WINDOW(gtkblist->window), (PurpleContact *)node->parent);
 				g_slist_free(buddies);
 				pidgin_clear_cursor(gtkblist->window);
 				g_free(username);
@@ -924,7 +928,7 @@
 		}
 		g_slist_free(buddies);
 
-		pidgin_log_show(PURPLE_LOG_IM, username, account);
+		pidgin_log_show(GTK_WINDOW(gtkblist->window), PURPLE_LOG_IM, username, account);
 
 		pidgin_clear_cursor(gtkblist->window);
 	}
@@ -979,7 +983,7 @@
 						_("OK"), G_CALLBACK(pidgin_dialogs_log_cb),
 						_("Cancel"), NULL,
 						NULL, NULL, NULL,
-						NULL);
+						"blist", NULL);
 }
 
 static void
@@ -999,7 +1003,7 @@
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_contact_cb),
 					   _("Cancel"), NULL,
 					   NULL, purple_contact_get_alias(contact), NULL,
-					   contact);
+					   "blist", contact);
 }
 
 static void
@@ -1023,7 +1027,7 @@
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_buddy_cb),
 					   _("Cancel"), NULL,
 					   purple_buddy_get_account(buddy), purple_buddy_get_name(buddy), NULL,
-					   buddy);
+					   "blist", buddy);
 
 	g_free(secondary);
 }
@@ -1045,7 +1049,7 @@
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_chat_cb),
 					   _("Cancel"), NULL,
 					   chat->account, NULL, NULL,
-					   chat);
+					   "blist", chat);
 }
 
 static void
@@ -1089,7 +1093,7 @@
 
 		purple_request_action(contact, NULL, _("Remove Contact"), text, 0,
 				NULL, purple_contact_get_alias(contact), NULL,
-				contact, 2,
+				"blist", contact, 2,
 				_("_Remove Contact"), G_CALLBACK(pidgin_dialogs_remove_contact_cb),
 				_("Cancel"),
 				NULL);
@@ -1130,7 +1134,7 @@
 	
 	purple_request_action(source, NULL, _("Merge Groups"), text, 0,
 			NULL, NULL, NULL,
-			ggp, 2,
+			"blist", ggp, 2,
 			_("_Merge Groups"), G_CALLBACK(pidgin_dialogs_merge_groups_cb),
 			_("Cancel"), G_CALLBACK(free_ggmo));
 
@@ -1186,7 +1190,7 @@
 
 	purple_request_action(group, NULL, _("Remove Group"), text, 0,
 						NULL, NULL, NULL,
-						group, 2,
+						"blist", group, 2,
 						_("_Remove Group"), G_CALLBACK(pidgin_dialogs_remove_group_cb),
 						_("Cancel"), NULL);
 
@@ -1225,7 +1229,7 @@
 
 	purple_request_action(buddy, NULL, _("Remove Buddy"), text, 0,
 						purple_buddy_get_account(buddy), purple_buddy_get_name(buddy), NULL,
-						buddy, 2,
+						"blist", buddy, 2,
 						_("_Remove Buddy"), G_CALLBACK(pidgin_dialogs_remove_buddy_cb),
 						_("Cancel"), NULL);
 
@@ -1252,7 +1256,7 @@
 
 	purple_request_action(chat, NULL, _("Remove Chat"), text, 0,
 						chat->account, NULL, NULL,
-						chat, 2,
+						"blist", chat, 2,
 						_("_Remove Chat"), G_CALLBACK(pidgin_dialogs_remove_chat_cb),
 						_("Cancel"), NULL);
 
--- a/pidgin/gtkdialogs.h	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkdialogs.h	Fri Aug 17 23:58:20 2007 +0000
@@ -31,8 +31,8 @@
 
 /* Functions in gtkdialogs.c (these should actually stay in this file) */
 void pidgin_dialogs_destroy_all(void);
-void pidgin_dialogs_about(void);
-void pidgin_dialogs_im(void);
+void pidgin_dialogs_about(GtkWindow *parent);
+void pidgin_dialogs_im();
 void pidgin_dialogs_im_with_user(PurpleAccount *, const char *);
 void pidgin_dialogs_info(void);
 void pidgin_dialogs_log(void);
--- a/pidgin/gtkimhtmltoolbar.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Fri Aug 17 23:58:20 2007 +0000
@@ -174,6 +174,8 @@
 			g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize",
 							 G_CALLBACK(realize_toolbar_font), toolbar);
 		}
+		gtk_window_set_transient_for(GTK_WINDOW(toolbar->font_dialog),
+		    GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(toolbar))));
 		gtk_window_present(GTK_WINDOW(toolbar->font_dialog));
 	} else {
 		cancel_toolbar_font(font, toolbar);
@@ -424,7 +426,7 @@
 					    _("_Insert"), G_CALLBACK(do_insert_link_cb),
 					    _("Cancel"), G_CALLBACK(cancel_link_cb),
 						NULL, NULL, NULL,
-					    toolbar);
+					    "conversation", toolbar);
 		g_free(msg);
 		g_free(desc);
 	} else {
@@ -688,6 +690,8 @@
 	gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
 	gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog");
 	gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE);
+	gtk_window_set_transient_for(GTK_WINDOW(dialog),
+	    GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(toolbar))));
 
 	if (unique_smileys != NULL) {
 		struct smiley_button_list *ls, *it, *it_tmp;
--- a/pidgin/gtklog.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtklog.c	Fri Aug 17 23:58:20 2007 +0000
@@ -322,7 +322,7 @@
 	data2[2] = log;
 	purple_request_action(lv, NULL, "Delete Log?", tmp, 0, 
 						NULL, NULL, NULL,
-						data2, 2,
+						"log_viewer", data2, 2,
 						_("Delete"), delete_log_cb,
 						_("Cancel"), delete_log_cleanup_cb);
 	g_free(tmp);
@@ -522,7 +522,7 @@
 	}
 }
 
-static PidginLogViewer *display_log_viewer(struct log_viewer_hash_t *ht, GList *logs,
+static PidginLogViewer *display_log_viewer(GtkWindow *parent, struct log_viewer_hash_t *ht, GList *logs,
 						const char *title, GtkWidget *icon, int log_size)
 {
 	PidginLogViewer *lv;
@@ -568,7 +568,7 @@
 		g_hash_table_insert(log_viewers, ht, lv);
 
 	/* Window ***********/
-	lv->window = gtk_dialog_new_with_buttons(title, NULL, 0,
+	lv->window = gtk_dialog_new_with_buttons(title, parent, 0,
 					     GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
 #ifdef _WIN32
 	/* Steal the "HELP" response and use it to trigger browsing to the logs folder */
@@ -674,7 +674,7 @@
 	return lv;
 }
 
-void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) {
+void pidgin_log_show(GtkWindow *parent, PurpleLogType type, const char *screenname, PurpleAccount *account) {
 	struct log_viewer_hash_t *ht;
 	PidginLogViewer *lv = NULL;
 	const char *name = screenname;
@@ -716,13 +716,13 @@
 		title = g_strdup_printf(_("Conversations with %s"), name);
 	}
 
-	display_log_viewer(ht, purple_log_get_logs(type, screenname, account),
+	display_log_viewer(parent, ht, purple_log_get_logs(type, screenname, account),
 			title, gtk_image_new_from_pixbuf(pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM)), 
 			purple_log_get_total_size(type, screenname, account));
 	g_free(title);
 }
 
-void pidgin_log_show_contact(PurpleContact *contact) {
+void pidgin_log_show_contact(GtkWindow *parent, PurpleContact *contact) {
 	struct log_viewer_hash_t *ht = g_new0(struct log_viewer_hash_t, 1);
 	PurpleBlistNode *child;
 	PidginLogViewer *lv = NULL;
@@ -776,11 +776,11 @@
 	}
 
 	title = g_strdup_printf(_("Conversations with %s"), name);
-	display_log_viewer(ht, logs, title, image, total_log_size);
+	display_log_viewer(parent, ht, logs, title, image, total_log_size);
 	g_free(title);
 }
 
-void pidgin_syslog_show()
+void pidgin_syslog_show(GtkWindow *parent)
 {
 	GList *accounts = NULL;
 	GList *logs = NULL;
@@ -800,7 +800,7 @@
 	}
 	logs = g_list_sort(logs, purple_log_compare);
 
-	syslog_viewer = display_log_viewer(NULL, logs, _("System Log"), NULL, 0);
+	syslog_viewer = display_log_viewer(parent, NULL, logs, _("System Log"), NULL, 0);
 }
 
 /****************************************************************************
--- a/pidgin/gtklog.h	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtklog.h	Fri Aug 17 23:58:20 2007 +0000
@@ -51,10 +51,10 @@
 
 
 
-void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account);
-void pidgin_log_show_contact(PurpleContact *contact);
+void pidgin_log_show(GtkWindow *parent, PurpleLogType type, const char *screenname, PurpleAccount *account);
+void pidgin_log_show_contact(GtkWindow *parent, PurpleContact *contact);
 
-void pidgin_syslog_show(void);
+void pidgin_syslog_show(GtkWindow *parent);
 
 /**************************************************************************/
 /** @name GTK+ Log Subsystem                                              */
--- a/pidgin/gtkplugin.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkplugin.c	Fri Aug 17 23:58:20 2007 +0000
@@ -283,7 +283,7 @@
 			                    _("Multiple plugins will be unloaded."),
 			                    tmp->str, 0,
 								NULL, NULL, NULL,
-								cb_data, 2,
+								"plugins", cb_data, 2,
 			                    _("Unload Plugins"), G_CALLBACK(plugin_unload_confirm_cb),
 			                    _("Cancel"), g_free);
 			g_string_free(tmp, TRUE);
@@ -513,7 +513,7 @@
 	plugin_dialog_response_cb(dialog, PIDGIN_RESPONSE_CONFIGURE, sel);
 }
 
-void pidgin_plugin_dialog_show()
+void pidgin_plugin_dialog_show(GtkWindow *parent)
 {
 	GtkWidget *sw;
 	GtkWidget *event_view;
@@ -523,6 +523,8 @@
 	GtkTreeSelection *sel;
 
 	if (plugin_dialog != NULL) {
+		if (parent)
+			gtk_window_set_transient_for(GTK_WINDOW(plugin_dialog), parent);
 		gtk_window_present(GTK_WINDOW(plugin_dialog));
 		return;
 	}
@@ -531,6 +533,8 @@
 						    NULL,
 						    GTK_DIALOG_NO_SEPARATOR,
 						    NULL);
+	if (parent)
+		gtk_window_set_transient_for(GTK_WINDOW(plugin_dialog), parent);
 	pref_button = gtk_dialog_add_button(GTK_DIALOG(plugin_dialog),
 						_("Configure Pl_ugin"), PIDGIN_RESPONSE_CONFIGURE);
 	gtk_dialog_add_button(GTK_DIALOG(plugin_dialog),
--- a/pidgin/gtkplugin.h	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkplugin.h	Fri Aug 17 23:58:20 2007 +0000
@@ -74,6 +74,6 @@
 /**
  * Shows the Plugins dialog
  */
-void pidgin_plugin_dialog_show(void);
+void pidgin_plugin_dialog_show(GtkWindow *parent);
 
 #endif /* _PIDGINPLUGIN_H_ */
--- a/pidgin/gtkpounce.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkpounce.c	Fri Aug 17 23:58:20 2007 +0000
@@ -156,7 +156,7 @@
 	purple_request_file(entry, _("Select a file"), name, FALSE,
 					  G_CALLBACK(pounce_update_entry_fields), NULL,
 					  NULL, NULL, NULL,
-					  entry);
+					  "buddy_pounce", entry);
 	g_signal_connect_swapped(G_OBJECT(entry), "destroy",
 			G_CALLBACK(purple_request_close_with_handle), entry);
 }
@@ -461,7 +461,7 @@
 }
 
 void
-pidgin_pounce_editor_show(PurpleAccount *account, const char *name,
+pidgin_pounce_editor_show(GtkWindow *parent, PurpleAccount *account, const char *name,
 							PurplePounce *cur_pounce)
 {
 	PidginPounceDialog *dialog;
@@ -516,6 +516,7 @@
 	dialog->window = window = pidgin_create_window((cur_pounce == NULL ? _("New Buddy Pounce") : _("Edit Buddy Pounce")),
 		PIDGIN_HIG_BORDER, "buddy_pounce", FALSE) ;
 	gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+	gtk_window_set_transient_for(GTK_WINDOW(window), parent);
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
 					 G_CALLBACK(delete_win_cb), dialog);
@@ -1057,7 +1058,7 @@
 static void
 pounces_manager_add_cb(GtkButton *button, gpointer user_data)
 {
-	pidgin_pounce_editor_show(NULL, NULL, NULL);
+	pidgin_pounce_editor_show(GTK_WINDOW(pounces_manager->window), NULL, NULL, NULL);
 }
 
 static void
@@ -1067,7 +1068,7 @@
 	PurplePounce *pounce;
 
 	gtk_tree_model_get(model, iter, POUNCES_MANAGER_COLUMN_POUNCE, &pounce, -1);
-	pidgin_pounce_editor_show(NULL, NULL, pounce);
+	pidgin_pounce_editor_show(GTK_WINDOW(pounces_manager->window), NULL, NULL, pounce);
 }
 
 static void
@@ -1110,7 +1111,7 @@
 	buf = g_strdup_printf(_("Are you sure you want to delete the pounce on %s for %s?"), pouncee, pouncer);
 	purple_request_action(pounce, NULL, buf, NULL, 0,
 						account, pouncee, NULL,
-						pounce, 2,
+						"pounces", pounce, 2,
 						_("Delete"), pounces_manager_delete_confirm_cb,
 						_("Cancel"), NULL);
 	g_free(buf);
@@ -1167,7 +1168,7 @@
 	if ((pounce != NULL) && (event->button == 1) &&
 		(event->type == GDK_2BUTTON_PRESS))
 	{
-		pidgin_pounce_editor_show(NULL, NULL, pounce);
+		pidgin_pounce_editor_show(GTK_WINDOW(pounces_manager->window), NULL, NULL, pounce);
 		return TRUE;
 	}
 
@@ -1316,7 +1317,7 @@
 }
 
 void
-pidgin_pounces_manager_show(void)
+pidgin_pounces_manager_show(GtkWindow *parent)
 {
 	PouncesManager *dialog;
 	GtkWidget *bbox;
@@ -1328,6 +1329,7 @@
 
 	if (pounces_manager != NULL) {
 		gtk_window_present(GTK_WINDOW(pounces_manager->window));
+		gtk_window_set_transient_for(GTK_WINDOW(pounces_manager->window), parent);
 		return;
 	}
 
@@ -1338,6 +1340,7 @@
 
 	dialog->window = win = pidgin_create_window(_("Buddy Pounces"), PIDGIN_HIG_BORDER, "pounces", TRUE);
 	gtk_window_set_default_size(GTK_WINDOW(win), width, height);
+	gtk_window_set_transient_for(GTK_WINDOW(win), parent);
 
 	g_signal_connect(G_OBJECT(win), "delete_event",
 					 G_CALLBACK(pounces_manager_destroy_cb), dialog);
--- a/pidgin/gtkpounce.h	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkpounce.h	Fri Aug 17 23:58:20 2007 +0000
@@ -34,13 +34,13 @@
  * @param name       The optional name to pounce on.
  * @param cur_pounce The current buddy pounce, if editing an existing one.
  */
-void pidgin_pounce_editor_show(PurpleAccount *account, const char *name,
+void pidgin_pounce_editor_show(GtkWindow *parent, PurpleAccount *account, const char *name,
 								PurplePounce *cur_pounce);
 
 /**
  * Shows the pounces manager window.
  */
-void pidgin_pounces_manager_show(void);
+void pidgin_pounces_manager_show(GtkWindow *parent);
 
 /**
  * Hides the pounces manager window.
--- a/pidgin/gtkprefs.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkprefs.c	Fri Aug 17 23:58:20 2007 +0000
@@ -640,7 +640,8 @@
 static void
 add_theme_button_clicked_cb(GtkWidget *widget, gpointer null)
 {
-	purple_request_file(NULL, _("Install Theme"), NULL, FALSE, (GCallback)request_theme_file_name_cb, NULL, NULL, NULL, NULL, NULL) ;
+	purple_request_file(NULL, _("Install Theme"), NULL, FALSE,
+	    (GCallback)request_theme_file_name_cb, NULL, NULL, NULL, NULL, "preferences", NULL) ;
 }
 
 static void
@@ -1621,7 +1622,7 @@
 
 	purple_request_file(prefs, _("Sound Selection"), filename, FALSE,
 					  G_CALLBACK(sound_chosen_cb), NULL, 
-					  NULL, NULL, NULL,
+					  NULL, NULL, NULL, "preferences",
 					  GINT_TO_POINTER(sound_row_sel));
 }
 
--- a/pidgin/gtkprivacy.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkprivacy.c	Fri Aug 17 23:58:20 2007 +0000
@@ -561,7 +561,7 @@
 			_("_Permit"), G_CALLBACK(add_permit_block_cb),
 			_("Cancel"), G_CALLBACK(destroy_request_data),
 			account, name, NULL,
-			data);
+			"privacy", data);
 	}
 	else {
 		char *primary = g_strdup_printf(_("Allow %s to contact you?"), name);
@@ -573,7 +573,7 @@
 		purple_request_action(account, _("Permit User"), primary, secondary,
 							0,
 							account, name, NULL,
-							data, 2,
+							"privacy", data, 2,
 							_("_Permit"), G_CALLBACK(confirm_permit_block_cb),
 							_("Cancel"), G_CALLBACK(destroy_request_data));
 
@@ -602,7 +602,7 @@
 			_("_Block"), G_CALLBACK(add_permit_block_cb),
 			_("Cancel"), G_CALLBACK(destroy_request_data),
 			account, name, NULL,
-			data);
+			"privacy", data);
 	}
 	else {
 		char *primary = g_strdup_printf(_("Block %s?"), name);
@@ -612,7 +612,7 @@
 		purple_request_action(account, _("Block User"), primary, secondary,
 							0,
 							account, name, NULL,
-							data, 2,
+							"privacy", data, 2,
 							_("_Block"), G_CALLBACK(confirm_permit_block_cb),
 							_("Cancel"), G_CALLBACK(destroy_request_data));
 
--- a/pidgin/gtkrequest.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkrequest.c	Fri Aug 17 23:58:20 2007 +0000
@@ -33,6 +33,7 @@
 #include "gtkrequest.h"
 #include "gtkutils.h"
 #include "pidginstock.h"
+#include "gtkblist.h"
 
 #include <gdk/gdkkeysyms.h>
 
@@ -78,6 +79,55 @@
 
 } PidginRequestData;
 
+static GtkWindow *
+find_toplevel(GList *ll_toplevels, const char *role)
+{
+	const char *window_role = NULL;
+	GList *ll_itr = NULL;
+
+	for (ll_itr = ll_toplevels ; ll_itr ; ll_itr = ll_itr->next) {
+		if ((window_role = gtk_window_get_role(GTK_WINDOW(ll_itr->data))) != NULL) {
+			if (!strcmp(window_role, role))
+				return GTK_WINDOW(ll_itr->data);
+		}
+	}
+
+	return NULL;
+}
+
+static GtkWindow *
+get_request_parent(const char *ui_hint, PidginConversation *convo)
+{
+	GtkWindow *toplevel = NULL;
+	PidginBuddyList *blist = NULL;
+
+	if (convo)
+		return GTK_WINDOW(convo->win->window);
+
+	if (strcmp(ui_hint, "blist")) {
+		GList *ll_toplevels = NULL;
+
+		ll_toplevels = gtk_window_list_toplevels();
+
+		if (!(toplevel = find_toplevel(ll_toplevels, ui_hint))) {
+			if (!strcmp(ui_hint, "register-account"))
+				toplevel = find_toplevel(ll_toplevels, "account");
+			else
+			if (!strcmp(ui_hint, "xfer"))
+				toplevel = find_toplevel(ll_toplevels, "file transfer");
+		}
+		
+		g_list_free(ll_toplevels);
+	}
+
+	/* Takes care of "pidgin-statusbox" as well */
+	if (!toplevel)
+		if ((blist = pidgin_blist_get_default_gtk_blist()) != NULL)
+			return GTK_WINDOW(blist->window);
+
+	return toplevel;
+}
+
 static void
 generic_response_start(PidginRequestData *data)
 {
@@ -286,7 +336,7 @@
 					   const char *ok_text, GCallback ok_cb,
 					   const char *cancel_text, GCallback cancel_cb,
 					   PurpleAccount *account, const char *who, PurpleConversation *conv,
-					   void *user_data)
+					   const char *ui_hint, void *user_data)
 {
 	PidginRequestData *data;
 	GtkWidget *dialog;
@@ -311,7 +361,7 @@
 
 	/* Create the dialog. */
 	dialog = gtk_dialog_new_with_buttons(title ? title : PIDGIN_ALERT_TITLE,
-					     NULL, 0,
+					     get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL), 0,
 					     text_to_stock(cancel_text), 1,
 					     text_to_stock(ok_text),     0,
 					     NULL);
@@ -446,7 +496,7 @@
 			const char *ok_text, GCallback ok_cb,
 			const char *cancel_text, GCallback cancel_cb,
 			PurpleAccount *account, const char *who, PurpleConversation *conv,
-			void *user_data, va_list args)
+			const char *ui_hint, void *user_data, va_list args)
 {
 	PidginRequestData *data;
 	GtkWidget *dialog;
@@ -470,6 +520,8 @@
 
 	/* Create the dialog. */
 	data->dialog = dialog = gtk_dialog_new();
+	gtk_window_set_transient_for(GTK_WINDOW(dialog),
+		get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL));
 
 	if (title != NULL)
 		gtk_window_set_title(GTK_WINDOW(dialog), title);
@@ -550,7 +602,7 @@
 pidgin_request_action(const char *title, const char *primary,
 						const char *secondary, unsigned int default_action,
 					    PurpleAccount *account, const char *who, PurpleConversation *conv,
-						void *user_data, size_t action_count, va_list actions)
+						const char *ui_hint, void *user_data, size_t action_count, va_list actions)
 {
 	PidginRequestData *data;
 	GtkWidget *dialog;
@@ -580,6 +632,8 @@
 
 	/* Create the dialog. */
 	data->dialog = dialog = gtk_dialog_new();
+	gtk_window_set_transient_for(GTK_WINDOW(dialog),
+		get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL));
 
 #if GTK_CHECK_VERSION(2,10,0)
 	gtk_window_set_deletable(GTK_WINDOW(data->dialog), FALSE);
@@ -1048,7 +1102,7 @@
 						const char *ok_text, GCallback ok_cb,
 						const char *cancel_text, GCallback cancel_cb,
 					    PurpleAccount *account, const char *who, PurpleConversation *conv,
-						void *user_data)
+						const char *ui_hint, void *user_data)
 {
 	PidginRequestData *data;
 	GtkWidget *win;
@@ -1089,6 +1143,8 @@
 #else /* !_WIN32 */
 	data->dialog = win = pidgin_create_window(title, PIDGIN_HIG_BORDER, "multifield", TRUE) ;
 #endif /* _WIN32 */
+	gtk_window_set_transient_for(GTK_WINDOW(win),
+		get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL));
 
 	g_signal_connect(G_OBJECT(win), "delete_event",
 					 G_CALLBACK(destroy_multifield_cb), data);
@@ -1504,7 +1560,7 @@
 		purple_request_action(data, NULL, _("That file already exists"),
 							_("Would you like to overwrite it?"), 0,
 							NULL, NULL, NULL,
-							data, 2,
+							"pidgin-request-file", data, 2,
 							_("Overwrite"), G_CALLBACK(file_yes_no_cb),
 							_("Choose New Name"), G_CALLBACK(file_yes_no_cb));
 	} else
@@ -1529,7 +1585,7 @@
 					  gboolean savedialog,
 					  GCallback ok_cb, GCallback cancel_cb,
 					  PurpleAccount *account, const char *who, PurpleConversation *conv,
-					  void *user_data)
+					  const char *ui_hint, void *user_data)
 {
 	PidginRequestData *data;
 	GtkWidget *filesel;
@@ -1617,6 +1673,9 @@
 	g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked",
 					 G_CALLBACK(file_ok_check_if_exists_cb), data);
 #endif /* FILECHOOSER */
+	gtk_window_set_role(GTK_WINDOW(filesel), "pidgin-request-file");
+	gtk_window_set_transient_for(GTK_WINDOW(filesel),
+		get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL));
 
 	data->dialog = filesel;
 	gtk_widget_show(filesel);
@@ -1628,7 +1687,7 @@
 pidgin_request_folder(const char *title, const char *dirname,
 					  GCallback ok_cb, GCallback cancel_cb,
 					  PurpleAccount *account, const char *who, PurpleConversation *conv,
-					  void *user_data)
+					  const char *ui_hint, void *user_data)
 {
 	PidginRequestData *data;
 	GtkWidget *dirsel;
@@ -1667,6 +1726,9 @@
 	g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dirsel)->ok_button), "clicked",
 					 G_CALLBACK(file_ok_check_if_exists_cb), data);
 #endif
+	gtk_window_set_role(GTK_WINDOW(dirsel), "pidgin-request-dir");
+	gtk_window_set_transient_for(GTK_WINDOW(dirsel),
+		get_request_parent(ui_hint, conv ? PIDGIN_CONVERSATION(conv) : NULL));
 
 	data->dialog = dirsel;
 	gtk_widget_show(dirsel);
--- a/pidgin/gtksavedstatuses.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtksavedstatuses.c	Fri Aug 17 23:58:20 2007 +0000
@@ -339,7 +339,7 @@
 
 	purple_request_action(handle, NULL, title, NULL, 0,
 		 NULL, NULL, NULL,
-		 sel_titles, 2,
+		 "statuses", sel_titles, 2,
 		_("Delete"), status_window_delete_confirm_cb,
 		_("Cancel"), status_window_delete_cancel_cb);
 
--- a/pidgin/gtkstatusbox.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1567,7 +1567,7 @@
 
 	purple_request_action(saved, NULL, msg, NULL, 0,
 		NULL, NULL, NULL,
-		data, 2,
+		"pidgin-statusbox", data, 2,
 		_("Delete"), tree_view_delete_current_selection_cb,
 		_("Cancel"), NULL);
 
--- a/pidgin/gtkutils.c	Fri Aug 17 23:15:49 2007 +0000
+++ b/pidgin/gtkutils.c	Fri Aug 17 23:58:20 2007 +0000
@@ -1523,7 +1523,7 @@
 						    DND_FILE_TRANSFER, "OK", (GCallback)dnd_image_ok_callback,
 						    "Cancel", (GCallback)dnd_image_cancel_callback,
 							account, who, NULL,
-							data,
+							"conversation", data,
 							_("Set as buddy icon"), DND_BUDDY_ICON,
 						    _("Send image file"), DND_FILE_TRANSFER,
 						    _("Insert in message"), DND_IM_IMAGE,
@@ -1533,7 +1533,7 @@
 							_("Would you like to set it as the buddy icon for this user?"),
 							0,
 							account, who, NULL,
-							data, (GCallback)dnd_set_icon_ok_cb, (GCallback)dnd_set_icon_cancel_cb);
+							"conversation", data, (GCallback)dnd_set_icon_ok_cb, (GCallback)dnd_set_icon_cancel_cb);
 			else
 				purple_request_choice(NULL, NULL,
 						    _("You have dragged an image"),
@@ -1543,7 +1543,7 @@
 							"OK", (GCallback)dnd_image_ok_callback,
 						    "Cancel", (GCallback)dnd_image_cancel_callback,
 							account, who, NULL,
-							data,
+							"conversation", data,
 						    _("Set as buddy icon"), DND_BUDDY_ICON,
 						    (ft ? _("Send image file") : _("Insert in message")), (ft ? DND_FILE_TRANSFER : DND_IM_IMAGE),
 							NULL);