changeset 21069:fdefa5eb46e2

propagate from branch 'im.pidgin.pidgin' (head 1757e82b3ed17d8ad45db9d2c62f0187a8bee93d) to branch 'org.maemo.garage.pidgin.pidgin.dialog-transience' (head a7af6ce1e8f29eb0eb1bffc0ebb72813c4c5fdbf)
author Gabriel Schulhof <nix@go-nix.ca>
date Sat, 06 Oct 2007 15:55:47 +0000
parents 366204358e93 (current diff) ced0666ab950 (diff)
children d2ab6076ad87
files finch/gntblist.c finch/gntconn.c finch/gntplugin.c finch/gntpounce.c finch/gntrequest.c libpurple/certificate.c libpurple/protocols/jabber/jabber.c libpurple/protocols/jabber/presence.c libpurple/protocols/msn/msn.c libpurple/protocols/oscar/oscar.c libpurple/protocols/yahoo/yahoo.c pidgin/gtkblist.c pidgin/gtkconv.c pidgin/gtkdialogs.c pidgin/gtkimhtmltoolbar.c pidgin/gtkpounce.c pidgin/gtkprefs.c pidgin/gtksavedstatuses.c pidgin/gtkstatusbox.c pidgin/gtkutils.c po/sr@Latn.po
diffstat 85 files changed, 909 insertions(+), 414 deletions(-) [+]
line wrap: on
line diff
--- a/finch/gntaccount.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntaccount.c	Sat Oct 06 15:55:47 2007 +0000
@@ -632,8 +632,8 @@
 	prompt = g_strdup_printf(_("Are you sure you want to delete %s?"),
 			purple_account_get_username(account));
 
-	purple_request_action(account, _("Delete Account"), prompt, NULL, 0,
-						  account, NULL, NULL, account, 2,
+	purple_request_action_with_hint(account, _("Delete Account"), prompt, NULL, 0,
+						  account, NULL, NULL, "accounts", account, 2,
 						  _("Delete"), really_delete_account,
 						  _("Cancel"), NULL);
 	g_free(prompt);
@@ -881,10 +881,10 @@
 	data->alias    = (alias != NULL ? g_strdup(alias) : NULL);
 
 	buffer = make_info(account, gc, remote_user, id, alias, msg);
-	purple_request_action(NULL, NULL, _("Add buddy to your list?"),
+	purple_request_action_with_hint(NULL, NULL, _("Add buddy to your list?"),
 	                    buffer, PURPLE_DEFAULT_ACTION_NONE,
 						account, remote_user, NULL,
-						data, 2,
+						"blist", data, 2,
 	                    _("Add"),    G_CALLBACK(add_user_cb),
 	                    _("Cancel"), G_CALLBACK(free_add_user_data));
 	g_free(buffer);
@@ -969,10 +969,10 @@
 		gnt_box_set_title(GNT_BOX(uihandle), _("Authorize buddy?"));
 		gnt_box_set_pad(GNT_BOX(uihandle), 0);
 
-		widget = purple_request_action(NULL, _("Authorize buddy?"), buffer, NULL,
+		widget = purple_request_action_with_hint(NULL, _("Authorize buddy?"), buffer, NULL,
 			PURPLE_DEFAULT_ACTION_NONE,
 			account, remote_user, NULL,
-			aa, 2,
+			"blist", aa, 2,
 			_("Authorize"), authorize_and_add_cb,
 			_("Deny"), deny_no_add_cb);
 		gnt_screen_release(widget);
@@ -996,10 +996,10 @@
 
 		g_signal_connect_swapped(G_OBJECT(uihandle), "destroy", G_CALLBACK(free_auth_and_add), aa);
 	} else {
-		uihandle = purple_request_action(NULL, _("Authorize buddy?"), buffer, NULL,
+		uihandle = purple_request_action_with_hint(NULL, _("Authorize buddy?"), buffer, NULL,
 			PURPLE_DEFAULT_ACTION_NONE,
 			account, remote_user, NULL,
-			user_data, 2,
+			"blist", user_data, 2,
 			_("Authorize"), auth_cb,
 			_("Deny"), deny_cb);
 	}
--- a/finch/gntblist.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntblist.c	Sat Oct 06 15:55:47 2007 +0000
@@ -338,12 +338,12 @@
 		purple_request_field_account_set_value(field, account);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."),
+	purple_request_fields_with_hint(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."),
 			fields,
 			_("Add"), G_CALLBACK(add_buddy_cb),
 			_("Cancel"), NULL,
 			account, NULL, NULL,
-			NULL);
+			"blist", NULL);
 }
 
 static void
@@ -416,11 +416,11 @@
 	field = purple_request_field_bool_new("autojoin", _("Auto-join"), FALSE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(NULL, _("Add Chat"), NULL,
+	purple_request_fields_with_hint(NULL, _("Add Chat"), NULL,
 			_("You can edit more information from the context menu later."),
 			fields, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"blist", NULL);
 }
 
 static void
@@ -451,11 +451,11 @@
 static void
 finch_request_add_group()
 {
-	purple_request_input(NULL, _("Add Group"), NULL, _("Enter the name of the group"),
+	purple_request_input_with_hint(NULL, _("Add Group"), NULL, _("Enter the name of the group"),
 			NULL, FALSE, FALSE, NULL,
 			_("Add"), G_CALLBACK(add_group_cb), _("Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"blist", NULL);
 }
 
 static PurpleBlistUiOps blist_ui_ops =
@@ -799,10 +799,10 @@
 
 	g_list_free(parts);
 
-	purple_request_fields(NULL, _("Edit Chat"), NULL, _("Please Update the necessary fields."),
+	purple_request_fields_with_hint(NULL, _("Edit Chat"), NULL, _("Please Update the necessary fields."),
 			fields, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL,
 			NULL, NULL, NULL,
-			chat);
+			"blist", chat);
 }
 
 static void
@@ -1000,11 +1000,11 @@
 	prompt = g_strdup_printf(_("Please enter the new name for %s"), name);
 
 	text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Set Alias");
-	purple_request_input(node, text, prompt, _("Enter empty string to reset the name."),
+	purple_request_input_with_hint(node, text, prompt, _("Enter empty string to reset the name."),
 			name, FALSE, FALSE, NULL, text, G_CALLBACK(rename_blist_node),
 			_("Cancel"), NULL,
 			NULL, NULL, NULL,
-			node);
+			"blist", node);
 
 	g_free(prompt);
 }
@@ -1092,11 +1092,11 @@
 	primary = g_strdup_printf(_("Are you sure you want to remove %s?"), name);
 
 	/* XXX: anything to do with the returned ui-handle? */
-	purple_request_action(node, _("Confirm Remove"),
+	purple_request_action_with_hint(node, _("Confirm Remove"),
 			primary, sec,
 			1,
 			account, name, NULL,
-			node, 2,
+			"blist", node, 2,
 			_("Remove"), finch_blist_remove_node,
 			_("Cancel"), NULL);
 	g_free(primary);
@@ -2215,7 +2215,7 @@
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(purple_get_blist(), _("New Instant Message"),
+	purple_request_fields_with_hint(purple_get_blist(), _("New Instant Message"),
 						NULL,
 						_("Please enter the screen name or alias of the person "
 						  "you would like to IM."),
@@ -2286,7 +2286,7 @@
 						_("Join"), G_CALLBACK(join_chat_select_cb),
 						_("Cancel"), NULL,
 						NULL, NULL, NULL,
-						NULL);
+						"blist", NULL);
 }
 
 static void
--- a/finch/gntcertmgr.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntcertmgr.c	Sat Oct 06 15:55:47 2007 +0000
@@ -82,7 +82,7 @@
 	if (crt != NULL) {
 		gchar *default_hostname;
 		default_hostname = purple_certificate_get_subject_name(crt);
-		purple_request_input(NULL,
+		purple_request_input_with_hint(NULL,
 				_("Certificate Import"),
 				_("Specify a hostname"),
 				_("Type the host name this certificate is for."),
@@ -90,7 +90,7 @@
 				_("OK"), G_CALLBACK(tls_peers_mgmt_import_ok2_cb),
 				_("Cancel"), G_CALLBACK(tls_peers_mgmt_import_cancel2_cb),
 				NULL, NULL, NULL,
-				crt);
+				"certmgr", crt);
 		g_free(default_hostname);
 	} else {
 		gchar * secondary;
@@ -106,13 +106,13 @@
 static void
 add_cert_cb(GntWidget *button, gpointer null)
 {
-	purple_request_file(NULL,
+	purple_request_file_with_hint(NULL,
 			_("Select a PEM certificate"),
 			"certificate.pem",
 			FALSE,
 			G_CALLBACK(tls_peers_mgmt_import_ok_cb),
 			NULL,
-			NULL, NULL, NULL, NULL );
+			NULL, NULL, NULL, "certmgr", NULL );
 }
 
 /* Save certs in some file */
@@ -155,13 +155,13 @@
 		return;
 	}
 
-	purple_request_file((void*)key,
+	purple_request_file_with_hint((void*)key,
 			_("PEM X.509 Certificate Export"),
 			"certificate.pem", TRUE,
 			G_CALLBACK(tls_peers_mgmt_export_ok_cb),
 			G_CALLBACK(purple_certificate_destroy),
 			NULL, NULL, NULL,
-			crt);
+			"certmgr", crt);
 }
 
 /* Show information about a cert */
@@ -233,10 +233,10 @@
 	primary = g_strdup_printf(_("Really delete certificate for %s?"), key);
 
 	purple_request_close_with_handle((void *)key);
-	purple_request_yes_no((void *)key, _("Confirm certificate delete"),
+	purple_request_yes_no_with_hint((void *)key, _("Confirm certificate delete"),
 			primary, NULL,
 			2,
-			NULL, NULL, NULL,
+			NULL, NULL, NULL, "certmgr",
 			g_strdup(key),
 			tls_peers_mgmt_delete_confirm_cb,
 			g_free);
--- a/finch/gntconn.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntconn.c	Sat Oct 06 15:55:47 2007 +0000
@@ -130,9 +130,9 @@
 				"Finch will not attempt to reconnect the account until you "
 				"correct the error and re-enable the account."), text);
 
-		purple_request_action(account, NULL, primary, secondary, 2,
+		purple_request_action_with_hint(account, NULL, primary, secondary, 2,
 							account, NULL, NULL,
-							account, 3,
+							"blist", account, 3,
 							_("OK"), NULL,
 							_("Modify Account"), PURPLE_CALLBACK(ce_modify_account_cb),
 							_("Re-enable Account"), PURPLE_CALLBACK(ce_enable_account_cb));
--- a/finch/gntplugin.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntplugin.c	Sat Oct 06 15:55:47 2007 +0000
@@ -468,9 +468,9 @@
 		}
 	}
 
-	return purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
+	return purple_request_fields_with_hint(NULL, _("Preferences"), NULL, NULL, fields,
 			_("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"plugins", NULL);
 }
 
--- a/finch/gntpounce.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntpounce.c	Sat Oct 06 15:55:47 2007 +0000
@@ -660,9 +660,9 @@
 	pouncer = purple_account_get_username(account);
 	pouncee = purple_pounce_get_pouncee(pounce);
 	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,
+	purple_request_action_with_hint(pounce, NULL, buf, NULL, 0,
 						account, pouncee, NULL,
-						pounce, 2,
+						"pounces", pounce, 2,
 						_("Delete"), pounces_manager_delete_confirm_cb,
 						_("Cancel"), NULL);
 	g_free(buf);
--- a/finch/gntprefs.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntprefs.c	Sat Oct 06 15:55:47 2007 +0000
@@ -261,9 +261,9 @@
 	add_pref_group(fields, _("Idle"), idle);
 
 	pref_request.showing = TRUE;
-	pref_request.window = purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
+	pref_request.window = purple_request_fields_with_hint(NULL, _("Preferences"), NULL, NULL, fields,
 			_("Save"), G_CALLBACK(save_cb), _("Cancel"), free_strings,
 			NULL, NULL, NULL,
-			NULL);
+			"preferences", NULL);
 }
 
--- a/finch/gntrequest.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntrequest.c	Sat Oct 06 15:55:47 2007 +0000
@@ -148,7 +148,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)
 {
 	GntWidget *window, *box, *entry;
 
@@ -205,7 +205,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)
 {
 	GntWidget *window, *combo, *box;
 	const char *text;
@@ -249,7 +249,7 @@
 finch_request_action(const char *title, const char *primary,
 		const char *secondary, int default_value,
 		PurpleAccount *account, const char *who, PurpleConversation *conv,
-		void *user_data, size_t actioncount,
+		const char *ui_hint, void *user_data, size_t actioncount,
 		va_list actions)
 {
 	GntWidget *window, *box, *button;
@@ -393,7 +393,7 @@
 		const char *ok, GCallback ok_cb,
 		const char *cancel, GCallback cancel_cb,
 		PurpleAccount *account, const char *who, PurpleConversation *conv,
-		void *userdata)
+		const char *ui_hint, void *userdata)
 {
 	GntWidget *window, *box;
 	GList *grlist;
@@ -645,7 +645,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)
 {
 	GntWidget *window = gnt_file_sel_new();
 	GntFileSel *sel = GNT_FILE_SEL(window);
--- a/finch/gntstatus.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/finch/gntstatus.c	Sat Oct 06 15:55:47 2007 +0000
@@ -138,9 +138,9 @@
 	ask = g_strdup_printf(_("Are you sure you want to delete \"%s\""),
 			purple_savedstatus_get_title(saved));
 
-	purple_request_action(saved, _("Delete Status"), ask, NULL, 0,
+	purple_request_action_with_hint(saved, _("Delete Status"), ask, NULL, 0,
 			NULL, NULL, NULL,
-			saved, 2,
+			"statuses", saved, 2,
 			_("Delete"), really_delete_status,
 			_("Cancel"), NULL);
 	g_free(ask);
--- a/libpurple/account.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/account.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1004,7 +1004,7 @@
 	field = purple_request_field_bool_new("remember", _("Save password"), FALSE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(account,
+	purple_request_fields_with_hint(account,
                         NULL,
                         primary,
                         NULL,
@@ -1012,7 +1012,7 @@
                         _("OK"), ok_cb,
                         _("Cancel"), cancel_cb,
 						account, NULL, NULL,
-                        user_data);
+                        "account", user_data);
 	g_free(primary);
 }
 
@@ -1253,7 +1253,7 @@
 
 	/* I'm sticking this somewhere in the code: bologna */
 
-	purple_request_fields(purple_account_get_connection(account),
+	purple_request_fields_with_hint(purple_account_get_connection(account),
 						NULL,
 						primary,
 						_("Please enter your current password and your "
@@ -1262,7 +1262,7 @@
 						_("OK"), G_CALLBACK(change_password_cb),
 						_("Cancel"), NULL,
 						account, NULL, NULL,
-						account);
+						"account", account);
 }
 
 static void
@@ -1290,14 +1290,14 @@
 			   _("Change user information for %s"),
 			   purple_account_get_username(account));
 
-	purple_request_input(gc, _("Set User Info"), primary, NULL,
+	purple_request_input_with_hint(gc, _("Set User Info"), primary, NULL,
 					   purple_account_get_user_info(account),
 					   TRUE, FALSE, ((gc != NULL) &&
 					   (gc->flags & PURPLE_CONNECTION_HTML) ? "html" : NULL),
 					   _("Save"), G_CALLBACK(set_user_info_cb),
 					   _("Cancel"), NULL,
 					   account, NULL, NULL,
-					   account);
+					   "account", account);
 }
 
 void
--- a/libpurple/certificate.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/certificate.c	Sat Oct 06 15:55:47 2007 +0000
@@ -563,7 +563,7 @@
 	secondary = g_strdup_printf(_("Common name: %s %s\nFingerprint (SHA1): %s"), cn, cn_match, sha_asc);
 	
 	/* Make a semi-pretty display */
-	purple_request_accept_cancel(
+	purple_request_accept_cancel_with_hint(
 		vrq->cb_data, /* TODO: Find what the handle ought to be */
 		_("Single-use Certificate Verification"),
 		primary,
@@ -572,6 +572,7 @@
 		NULL,         /* No account */
 		NULL,         /* No other user */
 		NULL,         /* No associated conversation */
+		"blist",
 		vrq,
 		x509_singleuse_verify_cb,
 		x509_singleuse_verify_cb );
@@ -1185,7 +1186,7 @@
 				  vrq->subject_name);
 		
 	/* Make a semi-pretty display */
-	purple_request_action(
+	purple_request_action_with_hint(
 		vrq->cb_data, /* TODO: Find what the handle ought to be */
 		_("SSL Certificate Verification"),
 		primary,
@@ -1194,6 +1195,7 @@
 		NULL,         /* No account */
 		NULL,         /* No other user */
 		NULL,         /* No associated conversation */
+		"blist",
 		x509_tls_cached_ua_ctx_new(vrq, reason),
 		3,            /* Number of actions */
 		_("Accept"), x509_tls_cached_user_auth_accept_cb,
--- a/libpurple/conversation.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/conversation.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1208,9 +1208,9 @@
 	data[0] = conv;
 	data[1] = (gpointer)message;
 
-	purple_request_action(conv, NULL, _("Send Message"), text, 0,
+	purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/ft.c	Sat Oct 06 15:55:47 2007 +0000
@@ -309,12 +309,12 @@
 static int
 purple_xfer_choose_file(PurpleXfer *xfer)
 {
-	purple_request_file(xfer, NULL, purple_xfer_get_filename(xfer),
+	purple_request_file_with_hint(xfer, NULL, purple_xfer_get_filename(xfer),
 					  (purple_xfer_get_type(xfer) == PURPLE_XFER_RECEIVE),
 					  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;
 }
@@ -359,10 +359,10 @@
 			serv_got_im(purple_account_get_connection(xfer->account),
 								 xfer->who, xfer->message, 0, time(NULL));
 
-		purple_request_accept_cancel(xfer, NULL, buf, NULL,
+		purple_request_accept_cancel_with_hint(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));
 
@@ -402,10 +402,10 @@
 					 "Remote host: %s\nRemote port: %d"),
 					   purple_xfer_get_remote_ip(xfer),
 					   purple_xfer_get_remote_port(xfer));
-	purple_request_accept_cancel(xfer, NULL, buf, buf2,
+	purple_request_accept_cancel_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/plugins/autoaccept.c	Sat Oct 06 15:55:47 2007 +0000
@@ -159,12 +159,12 @@
 
 	message = g_strdup_printf(_("When a file-transfer request arrives from %s"), 
 					purple_contact_get_alias((PurpleContact *)node));
-	purple_request_choice(plugin, _("Set Autoaccept Setting"), message,
+	purple_request_choice_with_hint(plugin, _("Set Autoaccept Setting"), message,
 						NULL, purple_blist_node_get_int(node, "autoaccept"),
 						_("_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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/plugins/buddynote.c	Sat Oct 06 15:55:47 2007 +0000
@@ -43,14 +43,14 @@
 
 	note = purple_blist_node_get_string(node, "notes");
 
-	purple_request_input(node, _("Notes"),
+	purple_request_input_with_hint(node, _("Notes"),
 					   _("Enter your notes below..."),
 					   NULL,
 					   note, TRUE, FALSE, "html",
 					   _("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/plugins/idle.c	Sat Oct 06 15:55:47 2007 +0000
@@ -161,7 +161,7 @@
 	request = purple_request_fields_new();
 	purple_request_fields_add_group(request, group);
 
-	purple_request_fields(action->plugin,
+	purple_request_fields_with_hint(action->plugin,
 			N_("I'dle Mak'er"),
 			_("Set Account Idle Time"),
 			NULL,
@@ -169,7 +169,7 @@
 			_("_Set"), G_CALLBACK(idle_action_ok),
 			_("_Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"account", NULL);
 }
 
 static void
@@ -195,7 +195,7 @@
 	request = purple_request_fields_new();
 	purple_request_fields_add_group(request, group);
 
-	purple_request_fields(action->plugin,
+	purple_request_fields_with_hint(action->plugin,
 			N_("I'dle Mak'er"),
 			_("Unset Account Idle Time"),
 			NULL,
@@ -203,7 +203,7 @@
 			_("_Unset"), G_CALLBACK(unidle_action_ok),
 			_("_Cancel"), NULL,
 			NULL, NULL, NULL,
-			NULL);
+			"account", NULL);
 }
 
 static void
@@ -221,7 +221,7 @@
 	request = purple_request_fields_new();
 	purple_request_fields_add_group(request, group);
 
-	purple_request_fields(action->plugin,
+	purple_request_fields_with_hint(action->plugin,
 			N_("I'dle Mak'er"),
 			_("Set Idle Time for All Accounts"),
 			NULL,
@@ -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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/plugins/offlinemsg.c	Sat Oct 06 15:55:47 2007 +0000
@@ -157,11 +157,11 @@
 						"rest of the messages in a pounce and automatically send them "
 						"when \"%s\" logs back in?"), who, who);
 	
-		purple_request_action(handle, _("Offline Message"), ask,
+		purple_request_action_with_hint(handle, _("Offline Message"), ask,
 					_("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/plugins/perl/common/Request.xs	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/plugins/perl/common/Request.xs	Sat Oct 06 15:55:47 2007 +0000
@@ -141,7 +141,38 @@
 	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
 	g_free(basename);
 
-	RETVAL = purple_request_input(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr);
+	RETVAL = purple_request_input_with_hint(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, "blist", gpr);
+OUTPUT:
+	RETVAL
+
+void *
+purple_request_input_with_hint(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, ok_cb, cancel_text, cancel_cb, ui_hint)
+	Purple::Plugin handle
+	const char * title
+	const char * primary
+	const char * secondary
+	const char * default_value
+	gboolean multiline
+	gboolean masked
+	gchar * hint
+	const char * ok_text
+	SV * ok_cb
+	const char * cancel_text
+	SV * cancel_cb
+	const char * ui_hint
+CODE:
+	PurplePerlRequestData *gpr;
+	STRLEN len;
+	char *basename;
+
+	basename = g_path_get_basename(handle->path);
+	purple_perl_normalize_script_name(basename);
+	gpr = g_new(PurplePerlRequestData, 1);
+	gpr->ok_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(ok_cb, len));
+	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
+	g_free(basename);
+
+	RETVAL = purple_request_input_with_hint(handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, ui_hint, gpr);
 OUTPUT:
 	RETVAL
 
@@ -165,7 +196,32 @@
 	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
 	g_free(basename);
 
-	RETVAL = purple_request_file(handle, title, filename, savedialog, G_CALLBACK(purple_perl_request_ok_cb), G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr);
+	RETVAL = purple_request_file_with_hint(handle, title, filename, savedialog, G_CALLBACK(purple_perl_request_ok_cb), G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, "blist", gpr);
+OUTPUT:
+	RETVAL
+
+void *
+purple_request_file_with_hint(handle, title, filename, savedialog, ok_cb, cancel_cb, ui_hint)
+	Purple::Plugin handle
+	const char * title
+	const char * filename
+	gboolean savedialog
+	SV * ok_cb
+	SV * cancel_cb
+	const char * ui_hint
+CODE:
+	PurplePerlRequestData *gpr;
+	STRLEN len;
+	char *basename;
+
+	basename = g_path_get_basename(handle->path);
+	purple_perl_normalize_script_name(basename);
+	gpr = g_new(PurplePerlRequestData, 1);
+	gpr->ok_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(ok_cb, len));
+	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
+	g_free(basename);
+
+	RETVAL = purple_request_file_with_hint(handle, title, filename, savedialog, G_CALLBACK(purple_perl_request_ok_cb), G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, ui_hint, gpr);
 OUTPUT:
 	RETVAL
 
@@ -192,7 +248,35 @@
 	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
 	g_free(basename);
 
-	RETVAL = purple_request_fields(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, gpr);
+	RETVAL = purple_request_fields_with_hint(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, "blist", gpr);
+OUTPUT:
+	RETVAL
+
+void *
+purple_request_fields_with_hint(handle, title, primary, secondary, fields, ok_text, ok_cb, cancel_text, cancel_cb, ui_hint)
+	Purple::Plugin handle
+	const char * title
+	const char * primary
+	const char * secondary
+	Purple::Request::Fields fields
+	const char * ok_text
+	SV * ok_cb
+	const char * cancel_text
+	SV * cancel_cb
+	const char *ui_hint
+CODE:
+	PurplePerlRequestData *gpr;
+	STRLEN len;
+	char *basename;
+
+	basename = g_path_get_basename(handle->path);
+	purple_perl_normalize_script_name(basename);
+	gpr = g_new(PurplePerlRequestData, 1);
+	gpr->ok_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(ok_cb, len));
+	gpr->cancel_cb = g_strdup_printf("Purple::Script::%s::%s", basename, SvPV(cancel_cb, len));
+	g_free(basename);
+
+	RETVAL = purple_request_fields_with_hint(handle, title, primary, secondary, fields, ok_text, G_CALLBACK(purple_perl_request_ok_cb), cancel_text, G_CALLBACK(purple_perl_request_cancel_cb), NULL, NULL, NULL, ui_hint, gpr);
 OUTPUT:
 	RETVAL
 
--- a/libpurple/protocols/gg/gg.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/gg/gg.c	Sat Oct 06 15:55:47 2007 +0000
@@ -333,10 +333,10 @@
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
 
-	purple_request_file(action, _("Save buddylist..."), NULL, TRUE,
+	purple_request_file_with_hint(action, _("Save buddylist..."), NULL, TRUE,
 			G_CALLBACK(ggp_callback_buddylist_save_ok), NULL,
 			purple_connection_get_account(gc), NULL, NULL,
-			gc);
+			"blist", gc);
 }
 /* }}} */
 
@@ -347,10 +347,10 @@
 {
 	PurpleConnection *gc = (PurpleConnection *)action->context;
 
-	purple_request_file(action, "Load buddylist from file...", NULL, FALSE,
+	purple_request_file_with_hint(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);
 }
 /* }}} */
 
@@ -498,7 +498,7 @@
 			_("Current token"), token->data, token->size);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(account,
+	purple_request_fields_with_hint(account,
 		_("Register New Gadu-Gadu Account"),
 		_("Register New Gadu-Gadu Account"),
 		_("Please, fill in the following fields"),
@@ -506,7 +506,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);
 }
 /* }}} */
 
@@ -657,7 +657,7 @@
 			_("Only online"), FALSE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(gc,
+	purple_request_fields_with_hint(gc,
 		_("Find buddies"),
 		_("Find buddies"),
 		_("Please, enter your search criteria below"),
@@ -665,7 +665,7 @@
 		_("OK"), G_CALLBACK(ggp_callback_find_buddies),
 		_("Cancel"), NULL,
 		purple_connection_get_account(gc), NULL, NULL,
-		gc);
+		"blist", gc);
 }
 /* }}} */
 
@@ -795,14 +795,14 @@
 		_("Please, enter your current password and your new password for UIN: "),
 		ggp_get_uin(purple_connection_get_account(gc)));
 
-	purple_request_fields(gc,
+	purple_request_fields_with_hint(gc,
 		_("Change Gadu-Gadu Password"),
 		_("Change Gadu-Gadu Password"),
 		msg,
 		fields, _("OK"), G_CALLBACK(ggp_callback_change_passwd_ok),
 		_("Cancel"), NULL,
 		purple_connection_get_account(gc), NULL, NULL,
-		gc);
+		"account", gc);
 
 	g_free(msg);
 }
@@ -875,7 +875,7 @@
 
 	msg = g_strdup_printf(_("Select a chat for buddy: %s"),
 			      purple_buddy_get_alias(buddy));
-	purple_request_fields(gc,
+	purple_request_fields_with_hint(gc,
 			_("Add to chat..."),
 			_("Add to chat..."),
 			msg,
@@ -883,7 +883,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Sat Oct 06 15:55:47 2007 +0000
@@ -318,10 +318,10 @@
 				} else if (!plaintext) {
 					char *msg = g_strdup_printf(_("%s requires plaintext authentication over an unencrypted connection.  Allow this and continue authentication?"),
 							js->gc->account->username);
-					purple_request_yes_no(js->gc, _("Plaintext Authentication"),
+					purple_request_yes_no_with_hint(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);
@@ -507,13 +507,13 @@
 		if(js->gsc == NULL && !purple_account_get_bool(js->gc->account, "auth_plain_in_clear", FALSE)) {
 			char *msg = g_strdup_printf(_("%s requires plaintext authentication over an unencrypted connection.  Allow this and continue authentication?"),
 					js->gc->account->username);
-			purple_request_yes_no(js->gc, _("Plaintext Authentication"),
+			purple_request_yes_no_with_hint(js->gc, _("Plaintext Authentication"),
 					_("Plaintext Authentication"),
 					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;
 		}
@@ -595,13 +595,13 @@
 		} else if(xmlnode_get_child(query, "password")) {
 			if(js->gsc == NULL && !purple_account_get_bool(js->gc->account,
 						"auth_plain_in_clear", FALSE)) {
-				purple_request_yes_no(js->gc, _("Plaintext Authentication"),
+				purple_request_yes_no_with_hint(js->gc, _("Plaintext Authentication"),
 						_("Plaintext Authentication"),
 						_("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/buddy.c	Sat Oct 06 15:55:47 2007 +0000
@@ -719,7 +719,7 @@
 	if(x_vc_data != NULL)
 		xmlnode_free(x_vc_data);
 
-	purple_request_fields(gc, _("Edit XMPP vCard"),
+	purple_request_fields_with_hint(gc, _("Edit XMPP vCard"),
 						_("Edit XMPP vCard"),
 						_("All items below are optional. Enter only the "
 						  "information with which you feel comfortable."),
@@ -727,7 +727,7 @@
 						_("Save"), G_CALLBACK(jabber_format_info),
 						_("Cancel"), NULL,
 						purple_connection_get_account(gc), NULL, NULL,
-						gc);
+						"account", gc);
 }
 
 /*---------------------------------------*/
@@ -2410,12 +2410,12 @@
 		usi->js = js;
 		usi->directory_server = g_strdup(from);
 
-		purple_request_fields(js->gc, _("Search for XMPP users"),
+		purple_request_fields_with_hint(js->gc, _("Search for XMPP users"),
 				_("Search for XMPP users"), instructions, fields,
 				_("Search"), G_CALLBACK(user_search_cb),
 				_("Cancel"), G_CALLBACK(user_search_cancel_cb),
 				purple_connection_get_account(js->gc), NULL, NULL,
-				usi);
+				"account", usi);
 
 		g_free(instructions);
 	}
@@ -2444,14 +2444,14 @@
 	PurpleConnection *gc = (PurpleConnection *) action->context;
 	JabberStream *js = gc->proto_data;
 
-	purple_request_input(gc, _("Enter a User Directory"), _("Enter a User Directory"),
+	purple_request_input_with_hint(gc, _("Enter a User Directory"), _("Enter a User Directory"),
 			_("Select a user directory to search"),
 			js->user_directories ? js->user_directories->data : NULL,
 			FALSE, FALSE, NULL,
 			_("Search Directory"), PURPLE_CALLBACK(jabber_user_search),
 			_("Cancel"), NULL,
 			NULL, NULL, NULL,
-			js);
+			"account", js);
 }
 
 
--- a/libpurple/protocols/jabber/chat.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/chat.c	Sat Oct 06 15:55:47 2007 +0000
@@ -778,14 +778,14 @@
 	purple_roomlist_set_fields(js->roomlist, fields);
 
 
-	purple_request_input(gc, _("Enter a Conference Server"), _("Enter a Conference Server"),
+	purple_request_input_with_hint(gc, _("Enter a Conference Server"), _("Enter a Conference Server"),
 			_("Select a conference server to query"),
 			js->chat_servers ? js->chat_servers->data : NULL,
 			FALSE, FALSE, NULL,
 			_("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1002,21 +1002,21 @@
 	cbdata->who = g_strdup(from);
 
 	if(js->registration)
-		purple_request_fields(js->gc, _("Register New XMPP Account"),
+		purple_request_fields_with_hint(js->gc, _("Register New XMPP Account"),
 				_("Register New XMPP Account"), instructions, fields,
 				_("Register"), G_CALLBACK(jabber_register_cb),
 				_("Cancel"), G_CALLBACK(jabber_register_cancel_cb),
 				purple_connection_get_account(js->gc), NULL, NULL,
-				cbdata);
+				"register-account", cbdata);
 	else {
 		char *title = registered?g_strdup_printf(_("Change Account Registration at %s"), from)
 								:g_strdup_printf(_("Register New Account at %s"), from);
-		purple_request_fields(js->gc, title,
+		purple_request_fields_with_hint(js->gc, title,
 			  title, instructions, fields,
 			  registered?_("Change Registration"):_("Register"), G_CALLBACK(jabber_register_cb),
 			  _("Cancel"), G_CALLBACK(jabber_register_cancel_cb),
 			  purple_connection_get_account(js->gc), NULL, NULL,
-			  cbdata);
+			  "register-account", cbdata);
 		g_free(title);
 	}
 
@@ -1731,12 +1731,12 @@
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(js->gc, _("Change XMPP Password"),
+	purple_request_fields_with_hint(js->gc, _("Change XMPP Password"),
 			_("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);
+			"account", js);
 }
 
 GList *jabber_actions(PurplePlugin *plugin, gpointer context)
--- a/libpurple/protocols/jabber/presence.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sat Oct 06 15:55:47 2007 +0000
@@ -500,7 +500,7 @@
 						if((chat = jabber_chat_find(js, jid->node, jid->domain))) {
 							chat->config_dialog_type = PURPLE_REQUEST_ACTION;
 							chat->config_dialog_handle =
-								purple_request_action(js->gc,
+								purple_request_action_with_hint(js->gc,
 										_("Create New Room"),
 										_("Create New Room"),
 										_("You are creating a new room.  Would"
@@ -508,7 +508,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/si.c	Sat Oct 06 15:55:47 2007 +0000
@@ -870,9 +870,9 @@
 
 			purple_request_fields_add_group(fields, group);
 
-			purple_request_fields(jsx->js->gc, _("Select a Resource"), msg, NULL, fields,
+			purple_request_fields_with_hint(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/usermood.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/usermood.c	Sat Oct 06 15:55:47 2007 +0000
@@ -176,14 +176,14 @@
 											FALSE);
 	purple_request_field_group_add_field(group, field);
 	
-	purple_request_fields(gc, _("Edit User Mood"),
+	purple_request_fields_with_hint(gc, _("Edit User Mood"),
 						  _("Edit User Mood"),
 						  _("Please select your mood from the list."),
 						  fields,
 						  _("Set"), G_CALLBACK(do_mood_set_from_fields),
 						  _("Cancel"), NULL,
 						  purple_connection_get_account(gc), NULL, NULL,
-						  gc);
+						  "blist", gc);
 	
 }
 
--- a/libpurple/protocols/jabber/usernick.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/usernick.c	Sat Oct 06 15:55:47 2007 +0000
@@ -73,10 +73,10 @@
 			oldnickname = xmlnode_get_data(nick);
 	}
 	
-	purple_request_input(js->gc, _("Set User Nickname"), _("Please specify a new nickname for you."),
+	purple_request_input_with_hint(js->gc, _("Set User Nickname"), _("Please specify a new nickname for you."),
 		_("This information is visible to all contacts on your contact list, so choose something appropriate."),
 		oldnickname, FALSE, FALSE, NULL, _("Set"), PURPLE_CALLBACK(do_nick_set), _("Cancel"), NULL,
-		purple_connection_get_account(js->gc), NULL, NULL, js);
+		purple_connection_get_account(js->gc), NULL, NULL, "blist", js);
 	g_free(oldnickname);
 }
 
--- a/libpurple/protocols/jabber/xdata.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/jabber/xdata.c	Sat Oct 06 15:55:47 2007 +0000
@@ -395,11 +395,11 @@
 	if((x = xmlnode_get_child(packet, "instructions")))
 		instructions = xmlnode_get_data(x);
 
-	handle = purple_request_fields(js->gc, title, title, instructions, fields,
+	handle = purple_request_fields_with_hint(js->gc, title, title, instructions, fields,
 			_("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/msn/dialog.c	Sat Oct 06 15:55:47 2007 +0000
@@ -135,9 +135,9 @@
 								 passport);
 	}
 
-	purple_request_action(gc, NULL, msg, reason, PURPLE_DEFAULT_ACTION_NONE, 
+	purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Sat Oct 06 15:55:47 2007 +0000
@@ -282,14 +282,14 @@
 
 	gc = (PurpleConnection *) action->context;
 
-	purple_request_input(gc, NULL, _("Set your friendly name."),
+	purple_request_input_with_hint(gc, NULL, _("Set your friendly name."),
 					   _("This is the name that other MSN buddies will "
 						 "see you as."),
 					   purple_connection_get_display_name(gc), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_act_id),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -301,12 +301,12 @@
 	gc = (PurpleConnection *) action->context;
 	session = gc->proto_data;
 
-	purple_request_input(gc, NULL, _("Set your home phone number."), NULL,
+	purple_request_input_with_hint(gc, NULL, _("Set your home phone number."), NULL,
 					   msn_user_get_home_phone(session->user), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_set_home_phone_cb),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -318,12 +318,12 @@
 	gc = (PurpleConnection *) action->context;
 	session = gc->proto_data;
 
-	purple_request_input(gc, NULL, _("Set your work phone number."), NULL,
+	purple_request_input_with_hint(gc, NULL, _("Set your work phone number."), NULL,
 					   msn_user_get_work_phone(session->user), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_set_work_phone_cb),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -335,12 +335,12 @@
 	gc = (PurpleConnection *) action->context;
 	session = gc->proto_data;
 
-	purple_request_input(gc, NULL, _("Set your mobile phone number."), NULL,
+	purple_request_input_with_hint(gc, NULL, _("Set your mobile phone number."), NULL,
 					   msn_user_get_mobile_phone(session->user), FALSE, FALSE, NULL,
 					   _("OK"), G_CALLBACK(msn_set_mobile_phone_cb),
 					   _("Cancel"), NULL,
 					   purple_connection_get_account(gc), NULL, NULL,
-					   gc);
+					   "account", gc);
 }
 
 static void
@@ -350,13 +350,13 @@
 
 	gc = (PurpleConnection *) action->context;
 
-	purple_request_action(gc, NULL, _("Allow MSN Mobile pages?"),
+	purple_request_action_with_hint(gc, NULL, _("Allow MSN Mobile pages?"),
 						_("Do you want to allow or disallow people on "
 						  "your buddy list to send you MSN Mobile pages "
 						  "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);
@@ -400,12 +400,12 @@
 	data->gc = gc;
 	data->passport = buddy->name;
 
-	purple_request_input(gc, NULL, _("Send a mobile message."), NULL,
+	purple_request_input_with_hint(gc, NULL, _("Send a mobile message."), NULL,
 					   NULL, TRUE, FALSE, NULL,
 					   _("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/novell/novell.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1912,10 +1912,10 @@
 
 	/* Prompt the user */
 	gc = purple_account_get_connection(user->client_data);
-	purple_request_action(gc, title, primary, secondary,
+	purple_request_action_with_hint(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));
 
@@ -2165,7 +2165,7 @@
 	if (server == NULL || *server == '\0') {
 
 		/* TODO: Would be nice to prompt if not set!
-		 *  purple_request_fields(gc, _("Server Address"),...);
+		 *  purple_request_fields_with_hint(gc, _("Server Address"),...);
 		 */
 
 		/* ...but for now just error out with a nice message. */
--- a/libpurple/protocols/oscar/oscar.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/oscar/oscar.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1446,13 +1446,13 @@
 	purple_debug_info("oscar", "Got SecurID request\n");
 
 	primary = g_strdup_printf("Enter the SecurID key for %s.", purple_account_get_username(account));
-	purple_request_input(gc, NULL, _("Enter SecurID"), primary,
+	purple_request_input_with_hint(gc, NULL, _("Enter SecurID"), primary,
 					   _("Enter the 6 digit number from the digital display."),
 					   FALSE, FALSE, NULL,
 					   _("_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;
@@ -2241,12 +2241,12 @@
 	data->gc = gc;
 	data->name = g_strdup(name);
 
-	purple_request_input(data->gc, NULL, _("Authorization Request Message:"),
+	purple_request_input_with_hint(data->gc, NULL, _("Authorization Request Message:"),
 					   NULL, _("Please authorize me!"), TRUE, FALSE, NULL,
 					   _("_OK"), G_CALLBACK(purple_auth_request),
 					   _("_Cancel"), G_CALLBACK(purple_auth_dontrequest),
 					   purple_connection_get_account(gc), name, NULL,
-					   data);
+					   "blist", data);
 }
 
 
@@ -2290,12 +2290,12 @@
 purple_auth_dontgrant_msgprompt(gpointer cbdata)
 {
 	struct name_data *data = cbdata;
-	purple_request_input(data->gc, NULL, _("Authorization Denied Message:"),
+	purple_request_input_with_hint(data->gc, NULL, _("Authorization Denied Message:"),
 					   NULL, _("No reason given."), TRUE, FALSE, NULL,
 					   _("_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 */
@@ -2476,12 +2476,12 @@
 					data->name = g_strdup(text[i*2+1]);
 					data->nick = g_strdup(text[i*2+2]);
 
-					purple_request_action(gc, NULL, message,
+					purple_request_action_with_hint(gc, NULL, message,
 										_("Do you want to add this buddy "
 										  "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);
@@ -5233,10 +5233,10 @@
 	data->name = g_strdup(sn);
 	data->nick = (buddy ? g_strdup(purple_buddy_get_alias_only(buddy)) : NULL);
 
-	purple_request_yes_no(gc, NULL, _("Authorization Given"), dialog_msg,
+	purple_request_yes_no_with_hint(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);
@@ -5932,12 +5932,12 @@
 	data->nick = g_strdup(purple_buddy_get_alias_only(buddy));
 
 	title = g_strdup_printf(_("Buddy Comment for %s"), data->name);
-	purple_request_input(gc, title, _("Buddy Comment:"), NULL,
+	purple_request_input_with_hint(gc, title, _("Buddy Comment:"), NULL,
 					   comment_utf8, TRUE, FALSE, NULL,
 					   _("_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);
@@ -5982,13 +5982,13 @@
 	buf = g_strdup_printf(_("You have selected to open a Direct IM connection with %s."),
 			buddy->name);
 
-	purple_request_action(gc, NULL, buf,
+	purple_request_action_with_hint(gc, NULL, buf,
 			_("Because this reveals your IP address, it "
 			  "may be considered a security risk.  Do you "
 			  "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);
@@ -6140,12 +6140,12 @@
 
 	purple_request_fields_add_group(fields, g);
 
-	purple_request_fields(gc, _("ICQ Privacy Options"), _("ICQ Privacy Options"),
+	purple_request_fields_with_hint(gc, _("ICQ Privacy Options"), _("ICQ Privacy Options"),
 						NULL, fields,
 						_("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) {
@@ -6213,12 +6213,12 @@
 static void oscar_show_change_email(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *) action->context;
-	purple_request_input(gc, NULL, _("Change Address To:"), NULL, NULL,
+	purple_request_input_with_hint(gc, NULL, _("Change Address To:"), NULL, NULL,
 					   FALSE, FALSE, NULL,
 					   _("_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)
@@ -6280,7 +6280,7 @@
 static void oscar_show_find_email(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *) action->context;
-	purple_request_input(gc, _("Find Buddy by E-Mail"),
+	purple_request_input_with_hint(gc, _("Find Buddy by E-Mail"),
 					   _("Search for a buddy by e-mail address"),
 					   _("Type the e-mail address of the buddy you are "
 						 "searching for."),
@@ -6288,7 +6288,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/oscar/peer.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1033,7 +1033,7 @@
 		buf = g_strdup_printf(_("%s has just asked to directly connect to %s"),
 				sn, purple_account_get_username(account));
 
-		purple_request_action(conn, NULL, buf,
+		purple_request_action_with_hint(conn, NULL, buf,
 						_("This requires a direct connection between "
 						  "the two computers and is necessary for IM "
 						  "Images.  Because your IP address will be "
@@ -1041,7 +1041,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/buddy_info.c	Sat Oct 06 15:55:47 2007 +0000
@@ -478,12 +478,12 @@
 		mid->info->qq_show = g_strdup(info->qq_show);
 		mid->info->unknown6 = g_strdup(info->unknown6);
 
-		purple_request_fields(gc, _("Modify my information"),
+		purple_request_fields_with_hint(gc, _("Modify my information"),
 			_("Modify my information"), NULL, fields,
 			_("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/buddy_opt.c	Sat Oct 06 15:55:47 2007 +0000
@@ -209,11 +209,11 @@
 	msg2 = g_strdup(_("Input your reason:"));
 
 	nombre = uid_to_purple_name(uid);
-	purple_request_input(gc, _("Reject request"), msg1, msg2,
+	purple_request_input_with_hint(gc, _("Reject request"), msg1, msg2,
 			   _("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);
 }
 
@@ -402,7 +402,7 @@
 			g->gc = gc;
 			g->uid = for_uid;
 			msg = g_strdup_printf(_("User %d needs authentication"), for_uid);
-			purple_request_input(gc, NULL, msg,
+			purple_request_input_with_hint(gc, NULL, msg,
 					   _("Input request here"), /* TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands */
 					   _("Would you be my friend?"),
 					   TRUE, FALSE, NULL, _("Send"),
@@ -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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/group.c	Sat Oct 06 15:55:47 2007 +0000
@@ -116,14 +116,14 @@
 	purple_roomlist_set_fields(rl, fields);
 	purple_roomlist_set_in_progress(qd->roomlist, TRUE);
 
-	purple_request_input(gc, _("QQ Qun"),
+	purple_request_input_with_hint(gc, _("QQ Qun"),
 			   _("Please enter external group ID"),
 			   _("You can only search for permanent QQ groups\n"),
 			   NULL, FALSE, FALSE, NULL, 
 			   _("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/group_im.c	Sat Oct 06 15:55:47 2007 +0000
@@ -133,11 +133,11 @@
 
 	nombre = uid_to_purple_name(user_uid);
 
-	purple_request_action(gc, _("QQ Qun Operation"),
+	purple_request_action_with_hint(gc, _("QQ Qun Operation"),
 			    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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/group_join.c	Sat Oct 06 15:55:47 2007 +0000
@@ -132,14 +132,14 @@
 	g = g_new0(gc_and_uid, 1);
 	g->gc = gc;
 	g->uid = group->internal_group_id;
-	purple_request_input(gc, NULL, msg,
+	purple_request_input_with_hint(gc, NULL, msg,
 			   _("Input request here"),
 			   _("Would you be my friend?"), TRUE, FALSE, NULL,
 			   _("Send"),
 			   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);
 }
 
@@ -356,13 +356,13 @@
 	g->gc = gc;
 	g->uid = internal_group_id;
 
-	purple_request_action(gc, _("QQ Qun Operation"),
+	purple_request_action_with_hint(gc, _("QQ Qun Operation"),
 			    _("Are you sure you want to leave this Qun?"),
 			    _
 			    ("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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/group_opt.c	Sat Oct 06 15:55:47 2007 +0000
@@ -121,9 +121,9 @@
 	g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0);
 
 	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_request_action_with_hint(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));
 }
@@ -137,13 +137,13 @@
 	msg2 = g_strdup(_("Enter your reason:"));
 
 	nombre = uid_to_purple_name(g->member);
-	purple_request_input(g->gc, /* title */ NULL, msg1, msg2,
+	purple_request_input_with_hint(g->gc, /* title */ NULL, msg1, msg2,
 			   _("Sorry, you are not my type..."), /* multiline */ TRUE, /* masked */ FALSE,
 			   /* hint */ NULL,
 			   _("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);
@@ -388,13 +388,13 @@
 	g->gc = gc;
 	g->uid = internal_group_id;
 
-	purple_request_action(gc, _("QQ Qun Operation"),
+	purple_request_action_with_hint(gc, _("QQ Qun Operation"),
 			    _("You have successfully created a Qun"),
 			    _
 			    ("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/qq.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/qq.c	Sat Oct 06 15:55:47 2007 +0000
@@ -417,9 +417,9 @@
 	g->gc = gc;
 	g->uid = uid;
 
-	purple_request_action(gc, _("Block Buddy"),
+	purple_request_action_with_hint(gc, _("Block Buddy"),
 			    _("Are you sure you want to block this buddy?"), NULL,
-			    1, g, 2,
+			    1, g, "blist", 2,
 			    _("Cancel"),
 			    G_CALLBACK(qq_do_nothing_with_gc_and_uid),
 			    _("Block"), G_CALLBACK(qq_block_buddy_with_gc_and_uid));
@@ -470,11 +470,11 @@
 static void _qq_menu_create_permanent_group(PurplePluginAction * action)
 {
 	PurpleConnection *gc = (PurpleConnection *) action->context;
-	purple_request_input(gc, _("Create QQ Qun"),
+	purple_request_input_with_hint(gc, _("Create QQ Qun"),
 			   _("Input Qun name here"),
 			   _("Only QQ members can create permanent Qun"),
 			   "OpenQ", FALSE, FALSE, NULL,
-			   _("Create"), G_CALLBACK(qq_group_create_with_name), _("Cancel"), NULL, gc);
+			   _("Create"), G_CALLBACK(qq_group_create_with_name), _("Cancel"), NULL, "blist", gc);
 }
 */
 
--- a/libpurple/protocols/qq/sys_msg.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/qq/sys_msg.c	Sat Oct 06 15:55:47 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);
@@ -165,10 +165,10 @@
 		g->uid = uid;	/* only need to get value */
 		message = g_strdup_printf(_("You have been added by %s"), from);
 		_qq_sys_msg_log_write(gc, message, from);
-		purple_request_action(gc, NULL, message,
+		purple_request_action_with_hint(gc, NULL, message,
 				    _("Would you 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"),
@@ -259,10 +259,10 @@
 		g2->gc = gc;
 		g2->uid = strtol(from, NULL, 10);
 		message = g_strdup_printf(_("%s is not in your buddy list"), from);
-		purple_request_action(gc, NULL, message,
+		purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/sametime/sametime.c	Sat Oct 06 15:55:47 2007 +0000
@@ -3382,12 +3382,12 @@
 	   " message to be sent to %s");
   msg1 = g_strdup_printf(msgB, buddy->name);
 
-  purple_request_fields(gc, _("New Conference"),
+  purple_request_fields_with_hint(gc, _("New Conference"),
 		      msgA, msg1, fields,
 		      _("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);
 }
 
@@ -3468,12 +3468,12 @@
 	   " create a new conference to invite this user to.");
   msg = g_strdup_printf(msgB, buddy->name);
 
-  purple_request_fields(gc, _("Invite to Conference"),
+  purple_request_fields_with_hint(gc, _("Invite to Conference"),
 		      msgA, msg, fields,
 		      _("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);
 }
 
@@ -3638,13 +3638,13 @@
 	  " continue logging in.");
   msg = g_strdup_printf(msgA, NSTR(purple_account_get_username(acct)));
   
-  purple_request_input(gc, _("Meanwhile Connection Setup"),
+  purple_request_input_with_hint(gc, _("Meanwhile Connection Setup"),
 		     _("No Sametime Community Server Specified"), msg,
 		     MW_PLUGIN_DEFAULT_HOST, FALSE, FALSE, NULL,
 		     _("Connect"), G_CALLBACK(prompt_host_ok_cb),
 		     _("Cancel"), G_CALLBACK(prompt_host_cancel_cb),
 			 acct, NULL, NULL,
-		     gc);
+		     "account", gc);
 
   g_free(msg);
 }
@@ -5215,10 +5215,10 @@
   title = g_strdup_printf(_("Import Sametime List for Account %s"),
 			  purple_account_get_username(account));
 
-  purple_request_file(gc, title, NULL, FALSE,
+  purple_request_file_with_hint(gc, title, NULL, FALSE,
 		    G_CALLBACK(st_import_action_cb), NULL,
 		    account, NULL, NULL,
-		    gc);
+		    "blist", gc);
 
   g_free(title);
 }
@@ -5255,10 +5255,10 @@
   title = g_strdup_printf(_("Export Sametime List for Account %s"),
 			  purple_account_get_username(account));
 
-  purple_request_file(gc, title, NULL, TRUE,
+  purple_request_file_with_hint(gc, title, NULL, TRUE,
 		    G_CALLBACK(st_export_action_cb), NULL,
 			account, NULL, NULL,
-		    gc);
+		    "blist", gc);
 
   g_free(title);
 }
@@ -5391,12 +5391,12 @@
 	  " the list below to add it to your buddy list.");
   msg = g_strdup_printf(msgB, result->name);
 
-  purple_request_fields(gc, _("Select Notes Address Book"),
+  purple_request_fields_with_hint(gc, _("Select Notes Address Book"),
 		      msgA, msg, fields,
 		      _("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);
 }
@@ -5481,12 +5481,12 @@
   msgB = _("Enter the name of a Notes Address Book group in the field below"
 	  " to add the group and its members to your buddy list.");
 
-  purple_request_input(gc, _("Add Group"), msgA, msgB, NULL,
+  purple_request_input_with_hint(gc, _("Add Group"), msgA, msgB, NULL,
 		     FALSE, FALSE, NULL,
 		     _("Add"), G_CALLBACK(remote_group_action_cb),
 		     _("Cancel"), NULL,
 			 purple_connection_get_account(gc), NULL, NULL,
-		     gc);
+		     "blist", gc);
 }
 
 
@@ -5606,12 +5606,12 @@
   msgB = _("Enter a name or partial ID in the field below to search"
 	   " for matching users in your Sametime community.");
 
-  purple_request_input(gc, _("User Search"), msgA, msgB, NULL,
+  purple_request_input_with_hint(gc, _("User Search"), msgA, msgB, NULL,
 		     FALSE, FALSE, NULL,
 		     _("Search"), G_CALLBACK(search_action_cb),
 		     _("Cancel"), NULL,
 			 purple_connection_get_account(gc), NULL, NULL,
-			 gc);
+			 "blist", gc);
 }
 
 
--- a/libpurple/protocols/silc/buddy.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc/buddy.c	Sat Oct 06 15:55:47 2007 +0000
@@ -312,9 +312,9 @@
 		a->hostname = strdup(hostname);
 	a->port = port;
 
-	purple_request_action(client->application, _("Key Agreement Request"), tmp,
+	purple_request_action_with_hint(client->application, _("Key Agreement Request"), tmp,
 			      hostname ? tmp2 : NULL, 1, gc->account, client_entry->nickname,
-			      NULL, a, 2, _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb),
+			      NULL, "blist", a, 2, _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb),
 			      _("No"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb));
 }
 
@@ -449,11 +449,11 @@
 	p->client = sg->client;
 	p->conn = sg->conn;
 	p->client_id = client_entry->id;
-	purple_request_input(gc, _("IM With Password"), NULL,
+	purple_request_input_with_hint(gc, _("IM With Password"), NULL,
 	                     _("Set IM Password"), NULL, FALSE, TRUE, NULL,
 	                     _("OK"), G_CALLBACK(silcpurple_buddy_privkey_cb),
 	                     _("Cancel"), G_CALLBACK(silcpurple_buddy_privkey_cb),
-	                     gc->account, NULL, NULL, p);
+	                     gc->account, NULL, NULL, "blist", p);
 
 	silc_client_list_free(sg->client, sg->conn, clients);
 }
@@ -1056,10 +1056,10 @@
 	}
 
 	/* Open file selector to select the public key. */
-	purple_request_file(r->client->application, _("Open..."), NULL, FALSE,
+	purple_request_file_with_hint(r->client->application, _("Open..."), NULL, FALSE,
 			    G_CALLBACK(silcpurple_add_buddy_ask_import),
 			    G_CALLBACK(silcpurple_add_buddy_ask_pk_cancel),
-			    purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r);
+			    purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, "blist", r);
 
 }
 
@@ -1069,10 +1069,10 @@
 	char tmp[512];
 	g_snprintf(tmp, sizeof(tmp), _("The %s buddy is not present in the network"),
 		   r->b->name);
-	purple_request_action(r->client->application, _("Add Buddy"), tmp,
+	purple_request_action_with_hint(r->client->application, _("Add Buddy"), tmp,
 			      _("To add the buddy you must import his/her public key. "
 				"Press Import to import a public key."), 0,
-			      purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r, 2,
+			      purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, "blist", r, 2,
 			      _("Cancel"), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb),
 			      _("_Import..."), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb));
 }
@@ -1179,7 +1179,7 @@
 		silc_free(fingerprint);
 	}
 
-	purple_request_fields(r->client->application, _("Add Buddy"),
+	purple_request_fields_with_hint(r->client->application, _("Add Buddy"),
 			      _("Select correct user"),
 			      r->pubkey_search
 			      ? _("More than one user was found with the same public key. Select "
@@ -1189,7 +1189,7 @@
 			      fields,
 			      _("OK"), G_CALLBACK(silcpurple_add_buddy_select_cb),
 			      _("Cancel"), G_CALLBACK(silcpurple_add_buddy_select_cancel),
-			      purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r);
+			      purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, "blist", r);
 }
 
 static void
--- a/libpurple/protocols/silc/chat.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc/chat.c	Sat Oct 06 15:55:47 2007 +0000
@@ -301,10 +301,10 @@
 	f = purple_request_fields_get_field(fields, "list");
 	if (!purple_request_field_list_get_selected(f)) {
 		/* Add new public key */
-		purple_request_file(sg->gc, _("Open Public Key..."), NULL, FALSE,
+		purple_request_file)with_hint(sg->gc, _("Open Public Key..."), NULL, FALSE,
 				    G_CALLBACK(silcpurple_chat_chpk_add),
 				    G_CALLBACK(silcpurple_chat_chpk_cancel),
-				    purple_connection_get_account(sg->gc), NULL, NULL, sgc);
+				    purple_connection_get_account(sg->gc), NULL, NULL, "conversation", sgc);
 		return;
 	}
 
@@ -441,11 +441,11 @@
 	if (!channel_pubkeys || !silc_dlist_count(channel_pubkeys)) {
 		f = purple_request_field_list_new("list", NULL);
 		purple_request_field_group_add_field(g, f);
-		purple_request_fields(sg->gc, _("Channel Authentication"),
+		purple_request_fields_with_hint(sg->gc, _("Channel Authentication"),
 				      _("Channel Authentication"), t, fields,
 				      _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb),
 				      _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok),
-				      purple_connection_get_account(sg->gc), NULL, NULL, sgc);
+				      purple_connection_get_account(sg->gc), NULL, NULL, "conversation", sgc);
 		if (channel_pubkeys)
 		  silc_dlist_uninit(channel_pubkeys);
 		return;
@@ -476,11 +476,11 @@
 	}
 
 	purple_request_field_list_set_multi_select(f, FALSE);
-	purple_request_fields(sg->gc, _("Channel Authentication"),
+	purple_request_fields_with_hint(sg->gc, _("Channel Authentication"),
 			      _("Channel Authentication"), t, fields,
 			      _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb),
 			      _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok),
-			      purple_connection_get_account(sg->gc), NULL, NULL, sgc);
+			      purple_connection_get_account(sg->gc), NULL, NULL, "conversation", sgc);
 }
 
 static void
@@ -611,10 +611,10 @@
 	g_snprintf(tmp, sizeof(tmp),
 		   _("Please enter the %s channel private group name and passphrase."),
 		   p->channel);
-	purple_request_fields(gc, _("Add Channel Private Group"), NULL, tmp, fields,
+	purple_request_fields_with_hint(gc, _("Add Channel Private Group"), NULL, tmp, fields,
 			      _("Add"), G_CALLBACK(silcpurple_chat_prv_add),
 			      _("Cancel"), G_CALLBACK(silcpurple_chat_prv_cancel),
-			      purple_connection_get_account(gc), NULL, NULL, p);
+			      purple_connection_get_account(gc), NULL, NULL, "conversation", p);
 }
 
 
@@ -739,12 +739,12 @@
 	s->channel = ch;
 	s->sg = sg;
 	g_snprintf(tmp, sizeof(tmp), "%d", (int)channel->user_limit);
-	purple_request_input(gc, _("User Limit"), NULL,
+	purple_request_input_with_hint(gc, _("User Limit"), NULL,
 			   _("Set user limit on channel. Set to zero to reset user limit."),
 			   tmp, FALSE, FALSE, NULL,
 			   _("OK"), G_CALLBACK(silcpurple_chat_ulimit_cb),
 			   _("Cancel"), G_CALLBACK(silcpurple_chat_ulimit_cb),
-			   purple_connection_get_account(gc), NULL, NULL, s);
+			   purple_connection_get_account(gc), NULL, NULL, "conversation", s);
 }
 
 static void
--- a/libpurple/protocols/silc/ops.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc/ops.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1810,11 +1810,11 @@
 		return;
 	internal->u.ask_pass = completion;
 	internal->context = context;
-	purple_request_input(gc, _("Passphrase"), NULL,
+	purple_request_input_with_hint(gc, _("Passphrase"), NULL,
 			     _("Passphrase required"), NULL, FALSE, TRUE, NULL,
 			     _("OK"), G_CALLBACK(silc_ask_passphrase_cb),
 			     _("Cancel"), G_CALLBACK(silc_ask_passphrase_cb),
-			     purple_connection_get_account(gc), NULL, NULL, internal);
+			     purple_connection_get_account(gc), NULL, NULL, "blist", internal);
 }
 
 
--- a/libpurple/protocols/silc/pk.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc/pk.c	Sat Oct 06 15:55:47 2007 +0000
@@ -107,9 +107,9 @@
 		   _("Fingerprint and babbleprint for the %s key are:\n\n"
 		     "%s\n%s\n"), entity, fingerprint, babbleprint);
 
-	purple_request_action(gc, _("Verify Public Key"), tmp, tmp2,
+	purple_request_action_with_hint(gc, _("Verify Public Key"), tmp, tmp2,
 			      PURPLE_DEFAULT_ACTION_NONE,
-			      purple_connection_get_account(gc), entity, NULL, verify, 3,
+			      purple_connection_get_account(gc), entity, NULL, "blist", verify, 3,
 			      _("Yes"), G_CALLBACK(silcpurple_verify_cb),
 			      _("No"), G_CALLBACK(silcpurple_verify_cb),
 			      _("_View..."), G_CALLBACK(silcpurple_verify_details));
--- a/libpurple/protocols/silc/silc.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc/silc.c	Sat Oct 06 15:55:47 2007 +0000
@@ -813,7 +813,7 @@
 	purple_request_field_group_add_field(g, f);
 	purple_request_fields_add_group(fields, g);
 
-	purple_request_fields(gc, _("User Online Status Attributes"),
+	purple_request_fields_with_hint(gc, _("User Online Status Attributes"),
 			    _("User Online Status Attributes"),
 			    _("You can let other users see your online status information "
 			      "and your personal information. Please fill the information "
@@ -821,7 +821,7 @@
 			    fields,
 			    _("OK"), G_CALLBACK(silcpurple_attrs_cb),
 			    _("Cancel"), G_CALLBACK(silcpurple_attrs_cancel),
-				gc->account, NULL, NULL, gc);
+				gc->account, NULL, NULL, "blist", gc);
 }
 
 static void
@@ -1025,11 +1025,11 @@
 	purple_request_field_group_add_field(g, f);
 	purple_request_fields_add_group(fields, g);
 
-	purple_request_fields(gc, _("Create New SILC Key Pair"),
+	purple_request_fields_with_hint(gc, _("Create New SILC Key Pair"),
 			      _("Create New SILC Key Pair"), NULL, fields,
 			      _("Generate Key Pair"), G_CALLBACK(silcpurple_create_keypair_cb),
 			      _("Cancel"), G_CALLBACK(silcpurple_create_keypair_cancel),
-			      gc->account, NULL, NULL, gc);
+			      gc->account, NULL, NULL, "blist", gc);
 
 	g_strfreev(u);
 	silc_free(hostname);
--- a/libpurple/protocols/silc/util.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc/util.c	Sat Oct 06 15:55:47 2007 +0000
@@ -376,10 +376,10 @@
 
 	buf = g_string_free(s, FALSE);
 
-	purple_request_action(sg->gc, _("Public Key Information"),
+	purple_request_action_with_hint(sg->gc, _("Public Key Information"),
 			      _("Public Key Information"),
 			      buf, 0, purple_connection_get_account(sg->gc),
-			      NULL, NULL, context, 1, _("Close"), callback);
+			      NULL, NULL, "blist", context, 1, _("Close"), callback);
 
 	g_free(buf);
 	silc_free(fingerprint);
--- a/libpurple/protocols/silc/wb.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc/wb.c	Sat Oct 06 15:55:47 2007 +0000
@@ -299,8 +299,8 @@
 	req->channel = channel;
 	req->sg = sg;
 
-	purple_request_action(gc, _("Whiteboard"), tmp, NULL, 1,
-				sg->account, sender->nickname, NULL, req, 2,
+	purple_request_action_with_hint(gc, _("Whiteboard"), tmp, NULL, 1,
+				sg->account, sender->nickname, NULL, "blist", req, 2,
 			    _("Yes"), G_CALLBACK(silcpurple_wb_request_cb),
 			    _("No"), G_CALLBACK(silcpurple_wb_request_cb));
 }
--- a/libpurple/protocols/silc10/buddy.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc10/buddy.c	Sat Oct 06 15:55:47 2007 +0000
@@ -309,9 +309,9 @@
 		a->hostname = strdup(hostname);
 	a->port = port;
 
-	purple_request_action(client->application, _("Key Agreement Request"), tmp,
+	purple_request_action_with_hint(client->application, _("Key Agreement Request"), tmp,
 			    hostname ? tmp2 : NULL, 1, gc->account, client_entry->nickname,
-				NULL, a, 2, _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb),
+				NULL, a, "blist", 2, _("Yes"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb),
 			    _("No"), G_CALLBACK(silcpurple_buddy_keyagr_request_cb));
 }
 
@@ -462,11 +462,11 @@
 	p->client = sg->client;
 	p->conn = sg->conn;
 	p->client_id = *clients[0]->id;
-	purple_request_input(gc, _("IM With Password"), NULL,
+	purple_request_input_with_hint(gc, _("IM With Password"), NULL,
 	                     _("Set IM Password"), NULL, FALSE, TRUE, NULL,
 	                     _("OK"), G_CALLBACK(silcpurple_buddy_privkey_cb),
 	                     _("Cancel"), G_CALLBACK(silcpurple_buddy_privkey_cb),
-	                     gc->account, NULL, NULL, p);
+	                     gc->account, NULL, NULL, "blist", p);
 
 	silc_free(clients);
 	silc_free(nickname);
@@ -1064,10 +1064,10 @@
 	}
 
 	/* Open file selector to select the public key. */
-	purple_request_file(r->client->application, _("Open..."), NULL, FALSE,
+	purple_request_file_with_hint(r->client->application, _("Open..."), NULL, FALSE,
 			  G_CALLBACK(silcpurple_add_buddy_ask_import),
 			  G_CALLBACK(silcpurple_add_buddy_ask_pk_cancel),
-			  purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r);
+			  purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, "blist", r);
 
 }
 
@@ -1077,10 +1077,10 @@
 	char tmp[512];
 	g_snprintf(tmp, sizeof(tmp), _("The %s buddy is not present in the network"),
 		   r->b->name);
-	purple_request_action(r->client->application, _("Add Buddy"), tmp,
+	purple_request_action_with_hint(r->client->application, _("Add Buddy"), tmp,
 			    _("To add the buddy you must import his/her public key. "
 			      "Press Import to import a public key."), 0,
-				  purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r, 2,
+				  purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, "blist", r, 2,
 			    _("Cancel"), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb),
 			    _("_Import..."), G_CALLBACK(silcpurple_add_buddy_ask_pk_cb));
 }
@@ -1177,7 +1177,7 @@
 		silc_free(fingerprint);
 	}
 
-	purple_request_fields(r->client->application, _("Add Buddy"),
+	purple_request_fields_with_hint(r->client->application, _("Add Buddy"),
 				_("Select correct user"),
 				r->pubkey_search
 					? _("More than one user was found with the same public key. Select "
@@ -1187,7 +1187,7 @@
 				fields,
 				_("OK"), G_CALLBACK(silcpurple_add_buddy_select_cb),
 				_("Cancel"), G_CALLBACK(silcpurple_add_buddy_select_cancel),
-				purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, r);
+				purple_buddy_get_account(r->b), purple_buddy_get_name(r->b), NULL, "blist", r);
 }
 
 static void
--- a/libpurple/protocols/silc10/chat.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc10/chat.c	Sat Oct 06 15:55:47 2007 +0000
@@ -288,10 +288,10 @@
 	f = purple_request_fields_get_field(fields, "list");
 	if (!purple_request_field_list_get_selected(f)) {
 		/* Add new public key */
-		purple_request_file(sg->gc, _("Open Public Key..."), NULL, FALSE,
+		purple_request_file_with_hint(sg->gc, _("Open Public Key..."), NULL, FALSE,
 				  G_CALLBACK(silcpurple_chat_chpk_add),
 				  G_CALLBACK(silcpurple_chat_chpk_cancel),
-				  purple_connection_get_account(sg->gc), NULL, NULL, sgc);
+				  purple_connection_get_account(sg->gc), NULL, NULL, "conversation", sgc);
 		return;
 	}
 
@@ -419,11 +419,11 @@
 	if (!channel_pubkeys) {
 		f = purple_request_field_list_new("list", NULL);
 		purple_request_field_group_add_field(g, f);
-		purple_request_fields(sg->gc, _("Channel Authentication"),
+		purple_request_fields_with_hint(sg->gc, _("Channel Authentication"),
 				    _("Channel Authentication"), t, fields,
 				    _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb),
 				    _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok),
-					purple_connection_get_account(sg->gc), NULL, NULL, sgc);
+					purple_connection_get_account(sg->gc), NULL, NULL, "conversation", sgc);
 		return;
 	}
 	sgc->pubkeys = silc_buffer_copy(channel_pubkeys);
@@ -458,11 +458,11 @@
 	}
 
 	purple_request_field_list_set_multi_select(f, FALSE);
-	purple_request_fields(sg->gc, _("Channel Authentication"),
+	purple_request_fields_with_hint(sg->gc, _("Channel Authentication"),
 			    _("Channel Authentication"), t, fields,
 			    _("Add / Remove"), G_CALLBACK(silcpurple_chat_chpk_cb),
 			    _("OK"), G_CALLBACK(silcpurple_chat_chauth_ok),
-				purple_connection_get_account(sg->gc), NULL, NULL, sgc);
+				purple_connection_get_account(sg->gc), NULL, NULL, "cnoversation", sgc);
 
 	silc_argument_payload_free(chpks);
 }
@@ -595,10 +595,10 @@
 	g_snprintf(tmp, sizeof(tmp),
 		   _("Please enter the %s channel private group name and passphrase."),
 		   p->channel);
-	purple_request_fields(gc, _("Add Channel Private Group"), NULL, tmp, fields,
+	purple_request_fields_with_hint(gc, _("Add Channel Private Group"), NULL, tmp, fields,
 			    _("Add"), G_CALLBACK(silcpurple_chat_prv_add),
 			    _("Cancel"), G_CALLBACK(silcpurple_chat_prv_cancel),
-				purple_connection_get_account(gc), NULL, NULL, p);
+				purple_connection_get_account(gc), NULL, NULL, "conversation", p);
 }
 
 
@@ -723,12 +723,12 @@
 	s->channel = ch;
 	s->sg = sg;
 	g_snprintf(tmp, sizeof(tmp), "%d", (int)channel->user_limit);
-	purple_request_input(gc, _("User Limit"), NULL,
+	purple_request_input_with_hint(gc, _("User Limit"), NULL,
 			   _("Set user limit on channel. Set to zero to reset user limit."),
 			   tmp, FALSE, FALSE, NULL,
 			   _("OK"), G_CALLBACK(silcpurple_chat_ulimit_cb),
 			   _("Cancel"), G_CALLBACK(silcpurple_chat_ulimit_cb),
-			   purple_connection_get_account(gc), NULL, NULL, s);
+			   purple_connection_get_account(gc), NULL, NULL, "conversation", s);
 }
 
 static void
--- a/libpurple/protocols/silc10/ops.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc10/ops.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1291,9 +1291,9 @@
 
 #if 0 /* XXX for now, let's not show attrs here */
 			if (client_entry->attrs)
-				purple_request_action(gc, _("User Information"),
+				purple_request_action_with_hint(gc, _("User Information"),
 						_("User Information"),
-						buf, 1, client_entry, 2,
+						buf, 1, "blist", client_entry, 2,
 						_("OK"), G_CALLBACK(silcpurple_whois_more),
 						_("_More..."), G_CALLBACK(silcpurple_whois_more), gc->account, NULL, NULL);
 			else
@@ -1898,11 +1898,11 @@
 		return;
 	internal->completion = completion;
 	internal->context = context;
-	purple_request_input(gc, _("Passphrase"), NULL,
+	purple_request_input_with_hint(gc, _("Passphrase"), NULL,
 			   _("Passphrase required"), NULL, FALSE, TRUE, NULL,
 			   _("OK"), G_CALLBACK(silc_ask_passphrase_cb),
 			   _("Cancel"), G_CALLBACK(silc_ask_passphrase_cb),
-			   purple_connection_get_account(gc), NULL, NULL, internal);
+			   purple_connection_get_account(gc), NULL, NULL, "blist", internal);
 }
 
 
--- a/libpurple/protocols/silc10/pk.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc10/pk.c	Sat Oct 06 15:55:47 2007 +0000
@@ -113,9 +113,9 @@
 		   _("Fingerprint and babbleprint for the %s key are:\n\n"
 		     "%s\n%s\n"), entity, fingerprint, babbleprint);
 
-	purple_request_action(gc, _("Verify Public Key"), tmp, tmp2,
+	purple_request_action_with_hint(gc, _("Verify Public Key"), tmp, tmp2,
 						PURPLE_DEFAULT_ACTION_NONE,
-						purple_connection_get_account(gc), entity, NULL, verify, 3,
+						purple_connection_get_account(gc), entity, NULL, verify, "blist", 3,
 			    _("Yes"), G_CALLBACK(silcpurple_verify_cb),
 			    _("No"), G_CALLBACK(silcpurple_verify_cb),
 			    _("_View..."), G_CALLBACK(silcpurple_verify_details));
--- a/libpurple/protocols/silc10/silc.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc10/silc.c	Sat Oct 06 15:55:47 2007 +0000
@@ -726,7 +726,7 @@
 	purple_request_field_group_add_field(g, f);
 	purple_request_fields_add_group(fields, g);
 
-	purple_request_fields(gc, _("User Online Status Attributes"),
+	purple_request_fields_with_hint(gc, _("User Online Status Attributes"),
 			    _("User Online Status Attributes"),
 			    _("You can let other users see your online status information "
 			      "and your personal information. Please fill the information "
@@ -734,7 +734,7 @@
 			    fields,
 			    _("OK"), G_CALLBACK(silcpurple_attrs_cb),
 			    _("Cancel"), G_CALLBACK(silcpurple_attrs_cancel),
-				gc->account, NULL, NULL, gc);
+				gc->account, NULL, NULL, "blist", gc);
 }
 
 static void
@@ -940,7 +940,7 @@
 			    _("Create New SILC Key Pair"), NULL, fields,
 			    _("Generate Key Pair"), G_CALLBACK(silcpurple_create_keypair_cb),
 			    _("Cancel"), G_CALLBACK(silcpurple_create_keypair_cancel),
-				gc->account, NULL, NULL, gc);
+				gc->account, NULL, NULL, "blist", gc);
 
 	g_strfreev(u);
 	silc_free(hostname);
--- a/libpurple/protocols/silc10/util.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc10/util.c	Sat Oct 06 15:55:47 2007 +0000
@@ -371,10 +371,10 @@
 
 	buf = g_string_free(s, FALSE);
 
-	purple_request_action(sg->gc, _("Public Key Information"),
+	purple_request_action_with_hint(sg->gc, _("Public Key Information"),
 			    _("Public Key Information"),
 			    buf, 0, purple_connection_get_account(sg->gc),
-				NULL, NULL, context, 1, _("Close"), callback);
+				NULL, NULL, context, "blist", 1, _("Close"), callback);
 
 	g_free(buf);
 	silc_free(fingerprint);
--- a/libpurple/protocols/silc10/wb.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/silc10/wb.c	Sat Oct 06 15:55:47 2007 +0000
@@ -299,8 +299,8 @@
 	req->channel = channel;
 	req->sg = sg;
 
-	purple_request_action(gc, _("Whiteboard"), tmp, NULL, 1,
-				sg->account, sender->nickname, NULL, req, 2,
+	purple_request_action_with_hint(gc, _("Whiteboard"), tmp, NULL, 1,
+				sg->account, sender->nickname, NULL, "conversation", req, 2,
 			    _("Yes"), G_CALLBACK(silcpurple_wb_request_cb),
 			    _("No"), G_CALLBACK(silcpurple_wb_request_cb));
 }
--- a/libpurple/protocols/toc/toc.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/toc/toc.c	Sat Oct 06 15:55:47 2007 +0000
@@ -2216,8 +2216,8 @@
 		g_snprintf(buf, sizeof(buf), _("%s requests you to send them a file"), ft->user);
 	}
 
-	purple_request_accept_cancel(ft->gc, NULL, buf, NULL, 
-							   PURPLE_DEFAULT_ACTION_NONE, ft,
+	purple_request_accept_cancel_with_hint(ft->gc, NULL, buf, NULL, 
+							   PURPLE_DEFAULT_ACTION_NONE, "xfer", ft,
 							   G_CALLBACK(toc_accept_ft),
 							   G_CALLBACK(toc_reject_ft));
 }
--- a/libpurple/protocols/yahoo/yahoo.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/protocols/yahoo/yahoo.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1028,12 +1028,12 @@
 static void
 yahoo_buddy_add_deny_reason_cb(gpointer data) {
 	struct yahoo_add_request *add_req = data;
-	purple_request_input(add_req->gc, NULL, _("Authorization denied message:"),
+	purple_request_input_with_hint(add_req->gc, NULL, _("Authorization denied message:"),
 			NULL, _("No reason given."), TRUE, FALSE, NULL,
 			_("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_denied_our_add(PurpleConnection *gc, const char *who, const char *reason)
@@ -2065,9 +2065,9 @@
 		g_snprintf(buf, sizeof(buf), _("You have tried to ignore %s, but the "
 					"user is on your buddy list.  Clicking \"Yes\" "
 					"will remove and ignore the buddy."), who);
-		purple_request_yes_no(gc, NULL, _("Ignore buddy?"), buf, 0,
+		purple_request_yes_no_with_hint(gc, NULL, _("Ignore buddy?"), buf, 0,
 						gc->account, who, NULL,
-						b,
+						"blist", b,
 						G_CALLBACK(ignore_buddy),
 						G_CALLBACK(keep_buddy));
 		break;
@@ -3494,23 +3494,23 @@
 static void yahoo_show_act_id(PurplePluginAction *action)
 {
 	PurpleConnection *gc = (PurpleConnection *) action->context;
-	purple_request_input(gc, NULL, _("Activate which ID?"), NULL,
+	purple_request_input_with_hint(gc, NULL, _("Activate which ID?"), NULL,
 					   purple_connection_get_display_name(gc), FALSE, FALSE, NULL,
 					   _("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)
 {
 	PurpleConnection *gc = (PurpleConnection *) action->context;
-	purple_request_input(gc, NULL, _("Join whom in chat?"), NULL,
+	purple_request_input_with_hint(gc, NULL, _("Join who in chat?"), NULL,
 					   "", FALSE, FALSE, NULL,
 					   _("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) {
--- a/libpurple/request.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/request.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1142,6 +1142,20 @@
 				   PurpleAccount *account, const char *who, PurpleConversation *conv,
 				   void *user_data)
 {
+	return purple_request_input_with_hint(
+		handle, title, primary, secondary, default_value, multiline, masked, hint, ok_text, ok_cb,
+		cancel_text, cancel_cb, account, who, conv, "blist", user_data);
+}
+
+void *
+purple_request_input_with_hint(void *handle, const char *title, const char *primary,
+				   const char *secondary, const char *default_value,
+				   gboolean multiline, gboolean masked, gchar *hint,
+				   const char *ok_text, GCallback ok_cb,
+				   const char *cancel_text, GCallback cancel_cb,
+				   PurpleAccount *account, const char *who, PurpleConversation *conv,
+				   const char *ui_hint, void *user_data)
+{
 	PurpleRequestUiOps *ops;
 
 	g_return_val_if_fail(ok_text != NULL, NULL);
@@ -1161,7 +1175,7 @@
 											 ok_text, ok_cb,
 											 cancel_text, cancel_cb,
 											 account, who, conv,
-											 user_data);
+											 ui_hint, user_data);
 
 		handles = g_list_append(handles, info);
 
@@ -1186,10 +1200,34 @@
 	g_return_val_if_fail(ok_cb   != NULL,  NULL);
 
 	va_start(args, user_data);
-	ui_handle = purple_request_choice_varg(handle, title, primary, secondary,
+	ui_handle = purple_request_choice_varg_with_hint(handle, title, primary, secondary,
 					     default_value, ok_text, ok_cb,
 					     cancel_text, cancel_cb,
-					     account, who, conv, user_data, args);
+					     account, who, conv, "blist", user_data, args);
+	va_end(args);
+
+	return ui_handle;
+}
+
+void *
+purple_request_choice_with_hint(void *handle, const char *title, const char *primary,
+					const char *secondary, int default_value,
+					const char *ok_text, GCallback ok_cb,
+					const char *cancel_text, GCallback cancel_cb,
+					PurpleAccount *account, const char *who, PurpleConversation *conv,
+					const char *ui_hint, void *user_data, ...)
+{
+	void *ui_handle;
+	va_list args;
+
+	g_return_val_if_fail(ok_text != NULL,  NULL);
+	g_return_val_if_fail(ok_cb   != NULL,  NULL);
+
+	va_start(args, user_data);
+	ui_handle = purple_request_choice_varg_with_hint(handle, title, primary, secondary,
+					     default_value, ok_text, ok_cb,
+					     cancel_text, cancel_cb,
+					     account, who, conv, ui_hint, user_data, args);
 	va_end(args);
 
 	return ui_handle;
@@ -1204,6 +1242,20 @@
 			 PurpleAccount *account, const char *who, PurpleConversation *conv,
 			 void *user_data, va_list choices)
 {
+	return purple_request_choice_varg_with_hint(
+		handle, title, primary, secondary, default_value, ok_text, ok_cb,
+		cancel_text, cancel_cb, account, who, conv, "blist", user_data, choices);
+}
+
+void *
+purple_request_choice_varg_with_hint(void *handle, const char *title,
+			 const char *primary, const char *secondary,
+			 int default_value,
+			 const char *ok_text, GCallback ok_cb,
+			 const char *cancel_text, GCallback cancel_cb,
+			 PurpleAccount *account, const char *who, PurpleConversation *conv,
+			 const char *ui_hint, void *user_data, va_list choices)
+{
 	PurpleRequestUiOps *ops;
 
 	g_return_val_if_fail(ok_text != NULL,  NULL);
@@ -1222,7 +1274,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);
 
@@ -1244,9 +1296,29 @@
 	g_return_val_if_fail(action_count > 0, NULL);
 
 	va_start(args, action_count);
-	ui_handle = purple_request_action_varg(handle, title, primary, secondary,
+	ui_handle = purple_request_action_varg_with_hint(handle, title, primary, secondary,
 										 default_action, account, who, conv,
-										 user_data, action_count, args);
+										 "blist", user_data, action_count, args);
+	va_end(args);
+
+	return ui_handle;
+}
+
+void *
+purple_request_action_with_hint(void *handle, const char *title, const char *primary,
+					const char *secondary, int default_action,
+					PurpleAccount *account, const char *who, PurpleConversation *conv,
+					const char *ui_hint, void *user_data, size_t action_count, ...)
+{
+	void *ui_handle;
+	va_list args;
+
+	g_return_val_if_fail(action_count > 0, NULL);
+
+	va_start(args, action_count);
+	ui_handle = purple_request_action_varg_with_hint(handle, title, primary, secondary,
+										 default_action, account, who, conv,
+										 ui_hint, user_data, action_count, args);
 	va_end(args);
 
 	return ui_handle;
@@ -1257,7 +1329,19 @@
 						 const char *primary, const char *secondary,
 						 int default_action,
 						 PurpleAccount *account, const char *who, PurpleConversation *conv,
-						  void *user_data, size_t action_count, va_list actions)
+						 void *user_data, size_t action_count, va_list actions)
+{
+	return purple_request_action_varg_with_hint(
+		handle, title, primary, secondary, default_action, account, who, conv,
+		"blist", user_data, action_count, actions);
+}
+
+void *
+purple_request_action_varg_with_hint(void *handle, const char *title,
+						 const char *primary, const char *secondary,
+						 int default_action,
+						 PurpleAccount *account, const char *who, PurpleConversation *conv,
+						 const char *ui_hint, void *user_data, size_t action_count, va_list actions)
 {
 	PurpleRequestUiOps *ops;
 
@@ -1273,7 +1357,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);
 
@@ -1291,6 +1375,19 @@
 					PurpleAccount *account, const char *who, PurpleConversation *conv,
 					void *user_data)
 {
+	return purple_request_fields_with_hint(
+		handle, title, primary, secondary, fields, ok_text, ok_cb,
+		cancel_text, cancel_cb, account, who, conv, "blist", user_data);
+}
+
+void *
+purple_request_fields_with_hint(void *handle, 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,
+					const char *ui_hint, void *user_data)
+{
 	PurpleRequestUiOps *ops;
 
 	g_return_val_if_fail(fields  != NULL, NULL);
@@ -1309,7 +1406,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);
 
@@ -1326,6 +1423,17 @@
 				  PurpleAccount *account, const char *who, PurpleConversation *conv,
 				  void *user_data)
 {
+	return purple_request_file_with_hint(
+		handle, title, filename, savedialog, ok_cb, cancel_cb, account, who, conv, "blist", user_data);
+}
+
+void *
+purple_request_file_with_hint(void *handle, const char *title, const char *filename,
+				  gboolean savedialog,
+				  GCallback ok_cb, GCallback cancel_cb,
+				  PurpleAccount *account, const char *who, PurpleConversation *conv,
+				  const char *ui_hint, void *user_data)
+{
 	PurpleRequestUiOps *ops;
 
 	ops = purple_request_get_ui_ops();
@@ -1338,7 +1446,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;
 	}
@@ -1352,6 +1460,16 @@
 				  PurpleAccount *account, const char *who, PurpleConversation *conv,
 				  void *user_data)
 {
+	return purple_request_folder_with_hint(
+		handle, title, dirname, ok_cb, cancel_cb, account, who, conv, "blist", user_data);
+}
+
+void *
+purple_request_folder_with_hint(void *handle, const char *title, const char *dirname,
+				  GCallback ok_cb, GCallback cancel_cb,
+				  PurpleAccount *account, const char *who, PurpleConversation *conv,
+				  const char *ui_hint, void *user_data)
+{
 	PurpleRequestUiOps *ops;
 
 	ops = purple_request_get_ui_ops();
@@ -1365,7 +1483,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/request.h	Sat Oct 06 15:55:47 2007 +0000
@@ -189,33 +189,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, 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, 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);
@@ -1187,10 +1187,23 @@
  * @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.
  */
+void *purple_request_input_with_hint(void *handle, const char *title,
+						 const char *primary, const char *secondary,
+						 const char *default_value,
+						 gboolean multiline, gboolean masked, gchar *hint,
+						 const char *ok_text, GCallback ok_cb,
+						 const char *cancel_text, GCallback cancel_cb,
+						 PurpleAccount *account, const char *who, PurpleConversation *conv,
+						 const char *ui_hint, void *user_data);
+
+/**
+ * @deprecated Please use purple_request_input_with_hint() instead.
+ */
 void *purple_request_input(void *handle, const char *title,
 						 const char *primary, const char *secondary,
 						 const char *default_value,
@@ -1217,12 +1230,24 @@
  * @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.
  *
  * @return A UI-specific handle.
  */
+void *purple_request_choice_with_hint(void *handle, const char *title,
+						  const char *primary, const char *secondary,
+						  int default_value,
+						  const char *ok_text, GCallback ok_cb,
+						  const char *cancel_text, GCallback cancel_cb,
+						  PurpleAccount *account, const char *who, PurpleConversation *conv,
+						  const char *ui_hint, void *user_data, ...) G_GNUC_NULL_TERMINATED;
+
+/**
+ * @deprecated Please use purple_request_choice_with_hint() instead.
+ */
 void *purple_request_choice(void *handle, const char *title,
 						  const char *primary, const char *secondary,
 						  int default_value,
@@ -1248,12 +1273,24 @@
  * @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.
  *
  * @return A UI-specific handle.
  */
+void *purple_request_choice_varg_with_hint(void *handle, const char *title,
+							   const char *primary, const char *secondary,
+							   int default_value,
+							   const char *ok_text, GCallback ok_cb,
+							   const char *cancel_text, GCallback cancel_cb,
+							   PurpleAccount *account, const char *who, PurpleConversation *conv,
+							   const char *ui_hint, void *user_data, va_list choices);
+
+/**
+ * @deprecated Please use purple_request_choice_varg_with_hint() instead.
+ */
 void *purple_request_choice_varg(void *handle, const char *title,
 							   const char *primary, const char *secondary,
 							   int default_value,
@@ -1277,6 +1314,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
@@ -1289,6 +1327,15 @@
  *
  * @return A UI-specific handle.
  */
+void *purple_request_action_with_hint(void *handle, const char *title,
+						  const char *primary, const char *secondary,
+						  int default_action,
+						  PurpleAccount *account, const char *who, PurpleConversation *conv,
+						  const char *ui_hint, void *user_data, size_t action_count, ...);
+
+/**
+ * @deprecated Please use purple_request_action_with_hint() instead.
+ */
 void *purple_request_action(void *handle, const char *title,
 						  const char *primary, const char *secondary,
 						  int default_action,
@@ -1310,12 +1357,23 @@
  * @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.
  *
  * @return A UI-specific handle.
  */
+void *purple_request_action_varg_with_hint(void *handle, const char *title,
+							   const char *primary, const char *secondary,
+							   int default_action,
+							   PurpleAccount *account, const char *who, PurpleConversation *conv,
+							   const char *ui_hint, void *user_data, size_t action_count,
+							   va_list actions);
+
+/**
+ * @deprecated Please use purple_request_action_varg_with_hint() instead.
+ */
 void *purple_request_action_varg(void *handle, const char *title,
 							   const char *primary, const char *secondary,
 							   int default_action,
@@ -1340,10 +1398,22 @@
  * @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.
  */
+void *purple_request_fields_with_hint(void *handle, 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,
+						  const char *ui_hint, void *user_data);
+
+/**
+ * @deprecated Please use purple_request_fields_with_hint() instead.
+ */
 void *purple_request_fields(void *handle, const char *title,
 						  const char *primary, const char *secondary,
 						  PurpleRequestFields *fields,
@@ -1370,6 +1440,16 @@
 /**
  * A wrapper for purple_request_action() that uses @c Yes and @c No buttons.
  */
+#define purple_request_yes_no_with_hint(handle, title, primary, secondary, \
+							default_action, account, who, conv, \
+							ui_hint, user_data, yes_cb, no_cb) \
+	purple_request_action_with_hint((handle), (title), (primary), (secondary), \
+						(default_action), account, who, conv, (ui_hint), (user_data), 2, \
+						_("_Yes"), (yes_cb), _("_No"), (no_cb))
+
+/**
+ * @deprecated Please use purple_request_yes_no_with_hint instead.
+ */
 #define purple_request_yes_no(handle, title, primary, secondary, \
 							default_action, account, who, conv, \
 							user_data, yes_cb, no_cb) \
@@ -1380,6 +1460,16 @@
 /**
  * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
  */
+#define purple_request_ok_cancel_with_hint(handle, title, primary, secondary, \
+							default_action, account, who, conv, \
+						    ui_hint, user_data, ok_cb, cancel_cb) \
+	purple_request_action_with_hint((handle), (title), (primary), (secondary), \
+						(default_action), account, who, conv, (ui_hint), (user_data), 2, \
+						_("_OK"), (ok_cb), _("_Cancel"), (cancel_cb))
+
+/**
+ * @deprecated Please use purple_request_ok_cancel_with_hint instead.
+ */
 #define purple_request_ok_cancel(handle, title, primary, secondary, \
 							default_action, account, who, conv, \
 						    user_data, ok_cb, cancel_cb) \
@@ -1390,6 +1480,16 @@
 /**
  * A wrapper for purple_request_action() that uses Accept and Cancel buttons.
  */
+#define purple_request_accept_cancel_with_hint(handle, title, primary, secondary, \
+								   default_action, account, who, conv, \
+								   ui_hint, user_data, accept_cb, cancel_cb) \
+	purple_request_action_with_hint((handle), (title), (primary), (secondary), \
+						(default_action), account, who, conv, (ui_hint), (user_data), 2, \
+						_("_Accept"), (accept_cb), _("_Cancel"), (cancel_cb))
+
+/**
+ * @deprecated Please use purple_request_accept_cancel_with_hint instead.
+ */
 #define purple_request_accept_cancel(handle, title, primary, secondary, \
 								   default_action, account, who, conv, \
 								   user_data, accept_cb, cancel_cb) \
@@ -1413,10 +1513,20 @@
  * @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.
  */
+void *purple_request_file_with_hint(void *handle, const char *title, const char *filename,
+						gboolean savedialog,
+						GCallback ok_cb, GCallback cancel_cb,
+						PurpleAccount *account, const char *who, PurpleConversation *conv,
+						const char *ui_hint, void *user_data);
+
+/**
+ * @deprecated Please use purple_request_file_with_hint() instead.
+ */
 void *purple_request_file(void *handle, const char *title, const char *filename,
 						gboolean savedialog,
 						GCallback ok_cb, GCallback cancel_cb,
@@ -1437,10 +1547,19 @@
  * @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.
  */
+void *purple_request_folder_with_hint(void *handle, const char *title, const char *dirname,
+						GCallback ok_cb, GCallback cancel_cb,
+						PurpleAccount *account, const char *who, PurpleConversation *conv,
+						const char *ui_hint, void *user_data);
+
+/**
+ * @deprecated Please use purple_request_folder_with_hint() instead.
+ */
 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,
--- a/libpurple/server.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/libpurple/server.c	Sat Oct 06 15:55:47 2007 +0000
@@ -799,9 +799,9 @@
 				   who, purple_account_get_username(account), name);
 
 
-		purple_request_accept_cancel(gc, NULL, _("Accept chat invitation?"), buf2,
+		purple_request_accept_cancel_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkaccount.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1901,9 +1901,9 @@
 							  purple_account_get_username(account));
 
 		purple_request_close_with_handle(account);
-		purple_request_action(account, NULL, buf, NULL, 0,
+		purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkblist.c	Sat Oct 06 15:55:47 2007 +0000
@@ -522,9 +522,9 @@
 	if (i > 1)
 	{
 		char *msg = g_strdup_printf(ngettext("You have %d contact named %s. Would you like to merge them?", "You currently have %d contacts named %s. Would you like to merge them?", i), i, alias);
-		purple_request_action(NULL, NULL, msg, _("Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. "
+		purple_request_action_with_hint(NULL, NULL, msg, _("Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. "
 							 "You can separate them again by choosing 'Expand' from the contact's context menu"), 0, NULL, NULL, NULL,
-				      merges, 2, _("_Merge"), PURPLE_CALLBACK(gtk_blist_do_personize), _("_Cancel"), PURPLE_CALLBACK(g_list_free));
+				      "blist", merges, 2, _("_Merge"), PURPLE_CALLBACK(gtk_blist_do_personize), _("_Cancel"), PURPLE_CALLBACK(g_list_free));
 		g_free(msg);
 	} else
 		g_list_free(merges);
@@ -617,7 +617,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_with_parent(GTK_WINDOW(gtkblist->window), b->account, b->name, NULL);
 }
 
 static void gtk_blist_menu_showlog_cb(GtkWidget *w, PurpleBlistNode *node)
@@ -643,7 +643,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_with_parent(GTK_WINDOW(gtkblist->window), (PurpleContact *)node);
 		pidgin_clear_cursor(gtkblist->window);
 		return;
 	} else {
@@ -655,7 +655,7 @@
 	}
 
 	if (name && account) {
-		pidgin_log_show(type, name, account);
+		pidgin_log_show_with_parent(GTK_WINDOW(gtkblist->window), type, name, account);
 		g_free(name);
 
 		pidgin_clear_cursor(gtkblist->window);
@@ -682,11 +682,6 @@
 	pidgin_blist_update(purple_get_blist(), node);
 }
 
-static void gtk_blist_show_systemlog_cb()
-{
-	pidgin_syslog_show();
-}
-
 static void gtk_blist_show_onlinehelp_cb()
 {
 	purple_notify_uri(NULL, PURPLE_WEBSITE "documentation");
@@ -3057,6 +3052,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                                 *
@@ -3090,15 +3090,15 @@
 
 	/* Tools */
 	{ N_("/_Tools"), NULL, NULL, 0, "<Branch>", NULL },
-	{ N_("/Tools/Buddy _Pounces"), NULL, pidgin_pounces_manager_show, 0, "<Item>", NULL },
+	{ N_("/Tools/Buddy _Pounces"), NULL, pidgin_blist_show_with_parent, (int)pidgin_pounces_manager_show_with_parent, "<Item>", NULL },
 	{ N_("/Tools/_Certificates"), NULL, pidgin_certmgr_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_with_parent, "<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_with_parent, "<Item>", NULL },
 	{ "/Tools/sep3", NULL, NULL, 0, "<Separator>", NULL },
 	{ N_("/Tools/Mute _Sounds"), "<CTL>S", pidgin_blist_mute_sounds_cb, 0, "<CheckItem>", NULL },
 	/* Help */
@@ -3106,9 +3106,9 @@
 	{ 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_with_parent, "<StockItem>", GTK_STOCK_ABOUT },
 #else
-	{ N_("/Help/_About"), NULL, pidgin_dialogs_about, 0,  "<Item>", NULL },
+	{ N_("/Help/_About"), NULL, pidgin_blist_show_with_parent, (int)pidgin_dialogs_about_with_parent, "<Item>", NULL },
 #endif
 };
 
@@ -4323,9 +4323,9 @@
 	text = g_hash_table_lookup(gtkblist->connection_errors, account);
 
 	enabled = purple_account_get_enabled(account, purple_core_get_ui());
-	purple_request_action(account, _("Connection Error"), primary, text, 2,
+	purple_request_action_with_hint(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"),
@@ -6268,13 +6268,13 @@
 static void
 pidgin_blist_request_add_group(void)
 {
-	purple_request_input(NULL, _("Add Group"), NULL,
+	purple_request_input_with_hint(NULL, _("Add Group"), NULL,
 					   _("Please enter the name of the group to be added."),
 					   NULL, FALSE, FALSE, NULL,
 					   _("Add"), G_CALLBACK(add_group_cb),
 					   _("Cancel"), NULL,
 					   NULL, NULL, NULL,
-					   NULL);
+					   "blist", NULL);
 }
 
 void
--- a/pidgin/gtkcertmgr.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkcertmgr.c	Sat Oct 06 15:55:47 2007 +0000
@@ -184,7 +184,7 @@
 		   if the window gets closed unusually, such as by handle
 		   deletion */
 		/* TODO: Display some more information on the certificate? */
-		purple_request_input(tpm_dat,
+		purple_request_input_with_hint(tpm_dat,
 				     _("Certificate Import"),
 				     _("Specify a hostname"),
 				     _("Type the host name this certificate is for."),
@@ -197,7 +197,7 @@
 				     _("Cancel"),
 				     G_CALLBACK(tls_peers_mgmt_import_cancel2_cb),
 				     NULL, NULL, NULL, /* No account/who/conv*/
-				     crt    /* Pass cert instance to callback*/
+				     "certmgr", crt    /* Pass cert instance to callback*/
 				     );
 		
 		g_free(default_hostname);
@@ -220,13 +220,13 @@
 tls_peers_mgmt_import_cb(GtkWidget *button, gpointer data)
 {
 	/* TODO: need to tell the user that we want a .PEM file! */
-	purple_request_file(tpm_dat,
+	purple_request_file_with_hint(tpm_dat,
 			    _("Select a PEM certificate"),
 			    "certificate.pem",
 			    FALSE, /* Not a save dialog */
 			    G_CALLBACK(tls_peers_mgmt_import_ok_cb),
 			    NULL,  /* Do nothing if cancelled */
-			    NULL, NULL, NULL, NULL );/* No account,conv,etc. */
+			    NULL, NULL, NULL, "certmgr", NULL );/* No account,conv,etc. */
 }
 
 static void
@@ -295,14 +295,14 @@
 
 	
 	/* TODO: inform user that it will be a PEM? */
-	purple_request_file(tpm_dat,
+	purple_request_file_with_hint(tpm_dat,
 			    _("PEM X.509 Certificate Export"),
 			    "certificate.pem",
 			    TRUE, /* Is a save dialog */
 			    G_CALLBACK(tls_peers_mgmt_export_ok_cb),
 			    G_CALLBACK(tls_peers_mgmt_export_cancel_cb),
 			    NULL, NULL, NULL, /* No account,conv,etc. */
-			    crt); /* Pass the certificate on to the callback */
+			    "certmgr", crt); /* Pass the certificate on to the callback */
 }
 
 static void
@@ -371,10 +371,11 @@
 		primary = g_strdup_printf(
 			_("Really delete certificate for %s?"), id );
 		
-		purple_request_yes_no(tpm_dat, _("Confirm certificate delete"),
+		purple_request_yes_no_with_hint(tpm_dat, _("Confirm certificate delete"),
 				      primary, NULL, /* Can this be NULL? */
 				      2, /* NO is default action */
 				      NULL, NULL, NULL,
+				      "certmgr",
 				      id, /* id ownership passed to callback */
 				      tls_peers_mgmt_delete_confirm_cb,
 				      tls_peers_mgmt_delete_confirm_cb );
--- a/pidgin/gtkconv.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkconv.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1029,11 +1029,11 @@
 		if (*c == '/' || *c == '\\')
 			*c = ' ';
 	}
-	purple_request_file(PIDGIN_CONVERSATION(conv), _("Save Conversation"),
+	purple_request_file_with_hint(PIDGIN_CONVERSATION(conv), _("Save Conversation"),
 					  buf,
 					  TRUE, G_CALLBACK(savelog_writefile_cb), NULL,
 					  NULL, NULL, conv,
-					  conv);
+					  "conversation", conv);
 
 	g_free(buf);
 }
@@ -1081,7 +1081,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_with_parent(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);
@@ -1090,7 +1090,7 @@
 	}
 	g_slist_free(buddies);
 
-	pidgin_log_show(type, name, account);
+	pidgin_log_show_with_parent(GTK_WINDOW(win->window), type, name, account);
 
 	gdk_window_set_cursor(gtkblist->window->window, NULL);
 	gdk_window_set_cursor(win->window->window, NULL);
@@ -1236,7 +1236,7 @@
 
 	conv = pidgin_conv_window_get_active_gtkconv(win)->active_conv;
 
-	pidgin_pounce_editor_show(purple_conversation_get_account(conv),
+	pidgin_pounce_editor_show_with_parent(GTK_WINDOW(win->window), purple_conversation_get_account(conv),
 								purple_conversation_get_name(conv), NULL);
 }
 
@@ -2713,10 +2713,10 @@
 
 	buf = g_strdup_printf("%s.%s", purple_normalize(conv->account, conv->name), ext);
 
-	purple_request_file(gtkconv, _("Save Icon"), buf, TRUE,
+	purple_request_file_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkdebug.c	Sat Oct 06 15:55:47 2007 +0000
@@ -231,10 +231,10 @@
 static void
 save_cb(GtkWidget *w, DebugWindow *win)
 {
-	purple_request_file(win, _("Save Debug Log"), "purple-debug.log", TRUE,
+	purple_request_file_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkdialogs.c	Sat Oct 06 15:55:47 2007 +0000
@@ -334,6 +334,13 @@
 
 void pidgin_dialogs_about()
 {
+	PidginBuddyList *blist = pidgin_blist_get_default_gtk_blist();
+
+	pidgin_dialogs_about_with_parent(blist ? GTK_WINDOW(blist->window) : NULL);
+}
+
+void pidgin_dialogs_about_with_parent(GtkWindow *parent)
+{
 	GtkWidget *hbox;
 	GtkWidget *vbox;
 	GtkWidget *logo;
@@ -349,11 +356,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);
@@ -764,7 +775,7 @@
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(purple_get_blist(), _("New Instant Message"),
+	purple_request_fields_with_hint(purple_get_blist(), _("New Instant Message"),
 						NULL,
 						_("Please enter the screen name or alias of the person "
 						  "you would like to IM."),
@@ -772,7 +783,7 @@
 						_("OK"), G_CALLBACK(pidgin_dialogs_im_cb),
 						_("Cancel"), NULL,
 						NULL, NULL, NULL,
-						NULL);
+						"blist", NULL);
 }
 
 void
@@ -903,7 +914,7 @@
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(purple_get_blist(), _("Get User Info"),
+	purple_request_fields_with_hint(purple_get_blist(), _("Get User Info"),
 						NULL,
 						_("Please enter the screen name or alias of the person "
 						  "whose info you would like to view."),
@@ -911,7 +922,7 @@
 						_("OK"), G_CALLBACK(pidgin_dialogs_info_cb),
 						_("Cancel"), NULL,
 						NULL, NULL, NULL,
-						NULL);
+						"blist", NULL);
 }
 
 static void
@@ -939,7 +950,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_with_parent(GTK_WINDOW(gtkblist->window), (PurpleContact *)node->parent);
 				g_slist_free(buddies);
 				pidgin_clear_cursor(gtkblist->window);
 				g_free(username);
@@ -948,7 +959,7 @@
 		}
 		g_slist_free(buddies);
 
-		pidgin_log_show(PURPLE_LOG_IM, username, account);
+		pidgin_log_show_with_parent(GTK_WINDOW(gtkblist->window), PURPLE_LOG_IM, username, account);
 
 		pidgin_clear_cursor(gtkblist->window);
 	}
@@ -995,7 +1006,7 @@
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_group_add_field(group, field);
 
-	purple_request_fields(purple_get_blist(), _("View User Log"),
+	purple_request_fields_with_hint(purple_get_blist(), _("View User Log"),
 						NULL,
 						_("Please enter the screen name or alias of the person "
 						  "whose log you would like to view."),
@@ -1003,7 +1014,7 @@
 						_("OK"), G_CALLBACK(pidgin_dialogs_log_cb),
 						_("Cancel"), NULL,
 						NULL, NULL, NULL,
-						NULL);
+						"blist", NULL);
 }
 
 static void
@@ -1017,13 +1028,13 @@
 {
 	g_return_if_fail(contact != NULL);
 
-	purple_request_input(NULL, _("Alias Contact"), NULL,
+	purple_request_input_with_hint(NULL, _("Alias Contact"), NULL,
 					   _("Enter an alias for this contact."),
 					   contact->alias, FALSE, FALSE, NULL,
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_contact_cb),
 					   _("Cancel"), NULL,
 					   NULL, purple_contact_get_alias(contact), NULL,
-					   contact);
+					   "blist", contact);
 }
 
 static void
@@ -1042,12 +1053,12 @@
 
 	secondary = g_strdup_printf(_("Enter an alias for %s."), buddy->name);
 
-	purple_request_input(NULL, _("Alias Buddy"), NULL,
+	purple_request_input_with_hint(NULL, _("Alias Buddy"), NULL,
 					   secondary, buddy->alias, FALSE, FALSE, NULL,
 					   _("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);
 }
@@ -1063,13 +1074,13 @@
 {
 	g_return_if_fail(chat != NULL);
 
-	purple_request_input(NULL, _("Alias Chat"), NULL,
+	purple_request_input_with_hint(NULL, _("Alias Chat"), NULL,
 					   _("Enter an alias for this chat."),
 					   chat->alias, FALSE, FALSE, NULL,
 					   _("Alias"), G_CALLBACK(pidgin_dialogs_alias_chat_cb),
 					   _("Cancel"), NULL,
 					   chat->account, NULL, NULL,
-					   chat);
+					   "blist", chat);
 }
 
 static void
@@ -1111,9 +1122,9 @@
 						"want to continue?", contact->totalsize - 1),
 					buddy->name, contact->totalsize - 1);
 
-		purple_request_action(contact, NULL, _("Remove Contact"), text, 0,
+		purple_request_action_with_hint(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);
@@ -1152,9 +1163,9 @@
 	ggp->parent = source;
 	ggp->new_name = g_strdup(new_name);
 	
-	purple_request_action(source, NULL, _("Merge Groups"), text, 0,
+	purple_request_action_with_hint(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));
 
@@ -1208,9 +1219,9 @@
 	text = g_strdup_printf(_("You are about to remove the group %s and all its members from your buddy list.  Do you want to continue?"),
 						   group->name);
 
-	purple_request_action(group, NULL, _("Remove Group"), text, 0,
+	purple_request_action_with_hint(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);
 
@@ -1247,9 +1258,9 @@
 	text = g_strdup_printf(_("You are about to remove %s from your buddy list.  Do you want to continue?"),
 						   buddy->name);
 
-	purple_request_action(buddy, NULL, _("Remove Buddy"), text, 0,
+	purple_request_action_with_hint(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);
 
@@ -1274,9 +1285,9 @@
 	text = g_strdup_printf(_("You are about to remove the chat %s from your buddy list.  Do you want to continue?"),
 			name ? name : "");
 
-	purple_request_action(chat, NULL, _("Remove Chat"), text, 0,
+	purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkdialogs.h	Sat Oct 06 15:55:47 2007 +0000
@@ -33,6 +33,7 @@
 /* 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_about_with_parent(GtkWindow *parent);
 void pidgin_dialogs_im(void);
 void pidgin_dialogs_im_with_user(PurpleAccount *, const char *);
 void pidgin_dialogs_info(void);
--- a/pidgin/gtkimhtmltoolbar.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkimhtmltoolbar.c	Sat Oct 06 15:55:47 2007 +0000
@@ -184,6 +184,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);
@@ -427,14 +429,14 @@
 		}
 
 		toolbar->link_dialog =
-			purple_request_fields(toolbar, _("Insert Link"),
+			purple_request_fields_with_hint(toolbar, _("Insert Link"),
 					    NULL,
-						msg,
+					    msg,
 					    fields,
 					    _("_Insert"), G_CALLBACK(do_insert_link_cb),
 					    _("Cancel"), G_CALLBACK(cancel_link_cb),
-						NULL, NULL, NULL,
-					    toolbar);
+					    NULL, NULL, NULL,
+					    "conversation", toolbar);
 		g_free(msg);
 		g_free(desc);
 	} else {
@@ -709,6 +711,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtklog.c	Sat Oct 06 15:55:47 2007 +0000
@@ -321,9 +321,9 @@
 	data2[0] = lv->treestore;
 	data2[1] = data[3]; /* iter */
 	data2[2] = log;
-	purple_request_action(lv, NULL, "Delete Log?", tmp, 0, 
+	purple_request_action_with_hint(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);
@@ -523,7 +523,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;
@@ -569,7 +569,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 */
@@ -676,6 +676,10 @@
 }
 
 void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) {
+	pidgin_log_show_with_parent(NULL, type, screenname, account);
+}
+
+void pidgin_log_show_with_parent(GtkWindow *parent, PurpleLogType type, const char *screenname, PurpleAccount *account) {
 	struct log_viewer_hash_t *ht;
 	PidginLogViewer *lv = NULL;
 	const char *name = screenname;
@@ -717,13 +721,17 @@
 		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) {
+	pidgin_log_show_contact_with_parent(NULL, contact);
+}
+
+void pidgin_log_show_contact_with_parent(GtkWindow *parent, PurpleContact *contact) {
 	struct log_viewer_hash_t *ht = g_new0(struct log_viewer_hash_t, 1);
 	PurpleBlistNode *child;
 	PidginLogViewer *lv = NULL;
@@ -777,11 +785,16 @@
 	}
 
 	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(void)
+{
+	pidgin_syslog_show_with_parent(NULL);
+}
+
+void pidgin_syslog_show_with_parent(GtkWindow *parent)
 {
 	GList *accounts = NULL;
 	GList *logs = NULL;
@@ -801,7 +814,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtklog.h	Sat Oct 06 15:55:47 2007 +0000
@@ -53,9 +53,12 @@
 
 
 void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account);
+void pidgin_log_show_with_parent(GtkWindow *parent, PurpleLogType type, const char *screenname, PurpleAccount *account);
 void pidgin_log_show_contact(PurpleContact *contact);
+void pidgin_log_show_contact_with_parent(GtkWindow *parent, PurpleContact *contact);
 
 void pidgin_syslog_show(void);
+void pidgin_syslog_show_with_parent(GtkWindow *parent);
 
 /**************************************************************************/
 /** @name GTK+ Log Subsystem                                              */
--- a/pidgin/gtkplugin.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkplugin.c	Sat Oct 06 15:55:47 2007 +0000
@@ -280,11 +280,11 @@
 			cb_data[1] = model;
 			cb_data[2] = iter;
 
-			purple_request_action(plugin_dialog, NULL,
+			purple_request_action_with_hint(plugin_dialog, NULL,
 			                    _("Multiple plugins will be unloaded."),
 			                    tmp->str, 0,
-								NULL, NULL, NULL,
-								cb_data, 2,
+			                    NULL, NULL, NULL,
+			                    "plugins", cb_data, 2,
 			                    _("Unload Plugins"), G_CALLBACK(plugin_unload_confirm_cb),
 			                    _("Cancel"), g_free);
 			g_string_free(tmp, TRUE);
@@ -516,6 +516,11 @@
 
 void pidgin_plugin_dialog_show()
 {
+	pidgin_plugin_dialog_show_with_parent(NULL);
+}
+
+void pidgin_plugin_dialog_show_with_parent(GtkWindow *parent)
+{
 	GtkWidget *sw;
 	GtkWidget *event_view;
 	GtkListStore *ls;
@@ -524,6 +529,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;
 	}
@@ -532,6 +539,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkplugin.h	Sat Oct 06 15:55:47 2007 +0000
@@ -77,4 +77,9 @@
  */
 void pidgin_plugin_dialog_show(void);
 
+/**
+ * Shows the Plugins dialog, transient to a parent window
+ */
+void pidgin_plugin_dialog_show_with_parent(GtkWindow *parent);
+
 #endif /* _PIDGINPLUGIN_H_ */
--- a/pidgin/gtkpounce.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkpounce.c	Sat Oct 06 15:55:47 2007 +0000
@@ -154,10 +154,10 @@
 	entry = (GtkWidget *)data;
 	name = gtk_entry_get_text(GTK_ENTRY(entry));
 
-	purple_request_file(entry, _("Select a file"), name, FALSE,
+	purple_request_file_with_hint(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);
 }
@@ -472,6 +472,13 @@
 pidgin_pounce_editor_show(PurpleAccount *account, const char *name,
 							PurplePounce *cur_pounce)
 {
+	pidgin_pounce_editor_show_with_parent(NULL, account, name, cur_pounce);
+}
+
+void
+pidgin_pounce_editor_show_with_parent(GtkWindow *parent, PurpleAccount *account, const char *name,
+							PurplePounce *cur_pounce)
+{
 	PidginPounceDialog *dialog;
 	GtkWidget *window;
 	GtkWidget *label;
@@ -1050,7 +1057,7 @@
 static void
 pounces_manager_add_cb(GtkButton *button, gpointer user_data)
 {
-	pidgin_pounce_editor_show(NULL, NULL, NULL);
+	pidgin_pounce_editor_show_with_parent(GTK_WINDOW(pounces_manager->window), NULL, NULL, NULL);
 }
 
 static void
@@ -1060,7 +1067,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_with_parent(GTK_WINDOW(pounces_manager->window), NULL, NULL, pounce);
 }
 
 static void
@@ -1101,9 +1108,9 @@
 	pouncee = purple_pounce_get_pouncee(pounce);
 
 	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,
+	purple_request_action_with_hint(pounce, NULL, buf, NULL, 0,
 						account, pouncee, NULL,
-						pounce, 2,
+						"pounces", pounce, 2,
 						_("Delete"), pounces_manager_delete_confirm_cb,
 						_("Cancel"), NULL);
 	g_free(buf);
@@ -1160,7 +1167,7 @@
 	if ((pounce != NULL) && (event->button == 1) &&
 		(event->type == GDK_2BUTTON_PRESS))
 	{
-		pidgin_pounce_editor_show(NULL, NULL, pounce);
+		pidgin_pounce_editor_show_with_parent(GTK_WINDOW(pounces_manager->window), NULL, NULL, pounce);
 		return TRUE;
 	}
 
@@ -1309,7 +1316,13 @@
 }
 
 void
-pidgin_pounces_manager_show(void)
+pidgin_pounces_manager_show()
+{
+	pidgin_pounces_manager_show_with_parent(NULL);
+}
+
+void
+pidgin_pounces_manager_show_with_parent(GtkWindow *parent)
 {
 	PouncesManager *dialog;
 	GtkWidget *bbox;
@@ -1321,6 +1334,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;
 	}
 
@@ -1331,6 +1345,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkpounce.h	Sat Oct 06 15:55:47 2007 +0000
@@ -31,16 +31,28 @@
 /**
  * Displays a New Buddy Pounce or Edit Buddy Pounce dialog.
  *
+ * @param parent     The parent window.
  * @param account    The optional account to use.
  * @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_with_parent(GtkWindow *parent, PurpleAccount *account, const char *name,
+								PurplePounce *cur_pounce);
+
+/**
+ * @deprecated Please use pidgin_pounce_editor_show_with_parent
+ */
 void pidgin_pounce_editor_show(PurpleAccount *account, const char *name,
 								PurplePounce *cur_pounce);
 
 /**
  * Shows the pounces manager window.
  */
+void pidgin_pounces_manager_show_with_parent(GtkWindow *parent);
+
+/**
+ * @deprecated Please use pidgin_pounces_manager_show_with_parent
+ */
 void pidgin_pounces_manager_show(void);
 
 /**
--- a/pidgin/gtkprefs.c	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkprefs.c	Sat Oct 06 15:55:47 2007 +0000
@@ -641,7 +641,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_with_hint(NULL, _("Install Theme"), NULL, FALSE,
+	    (GCallback)request_theme_file_name_cb, NULL, NULL, NULL, NULL, "preferences", NULL) ;
 }
 
 static void
@@ -1624,9 +1625,9 @@
 	if (*filename == '\0')
 		filename = NULL;
 
-	purple_request_file(prefs, _("Sound Selection"), filename, FALSE,
+	purple_request_file_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkprivacy.c	Sat Oct 06 15:55:47 2007 +0000
@@ -554,7 +554,7 @@
 	data->block   = FALSE;
 
 	if (name == NULL) {
-		purple_request_input(account, _("Permit User"),
+		purple_request_input_with_hint(account, _("Permit User"),
 			_("Type a user you permit to contact you."),
 			_("Please enter the name of the user you wish to be "
 			  "able to contact you."),
@@ -562,7 +562,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);
@@ -571,10 +571,10 @@
 							  "%s to contact you?"), name);
 
 
-		purple_request_action(account, _("Permit User"), primary, secondary,
+		purple_request_action_with_hint(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));
 
@@ -596,24 +596,24 @@
 	data->block   = TRUE;
 
 	if (name == NULL) {
-		purple_request_input(account, _("Block User"),
+		purple_request_input_with_hint(account, _("Block User"),
 			_("Type a user to block."),
 			_("Please enter the name of the user you wish to block."),
 			NULL, FALSE, FALSE, NULL,
 			_("_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);
 		char *secondary =
 			g_strdup_printf(_("Are you sure you want to block %s?"), name);
 
-		purple_request_action(account, _("Block User"), primary, secondary,
+		purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkrequest.c	Sat Oct 06 15:55:47 2007 +0000
@@ -34,6 +34,7 @@
 #include "gtkrequest.h"
 #include "gtkutils.h"
 #include "pidginstock.h"
+#include "gtkblist.h"
 
 #include <gdk/gdkkeysyms.h>
 
@@ -79,6 +80,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)
 {
@@ -287,7 +337,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;
@@ -312,7 +362,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);
@@ -450,7 +500,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;
@@ -474,6 +524,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);
@@ -554,7 +606,7 @@
 pidgin_request_action(const char *title, const char *primary,
 						const char *secondary, 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;
@@ -584,6 +636,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);
@@ -1051,7 +1105,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;
@@ -1092,6 +1146,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,10 +1560,10 @@
 
 	if ((data->u.file.savedialog == TRUE) &&
 		(g_file_test(data->u.file.name, G_FILE_TEST_EXISTS))) {
-		purple_request_action(data, NULL, _("That file already exists"),
+		purple_request_action_with_hint(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
@@ -1532,7 +1588,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;
@@ -1620,6 +1676,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);
@@ -1631,7 +1690,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;
@@ -1670,6 +1729,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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtksavedstatuses.c	Sat Oct 06 15:55:47 2007 +0000
@@ -338,9 +338,9 @@
 		handle = dialog;
 	}
 
-	purple_request_action(handle, NULL, title, NULL, 0,
+	purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1586,9 +1586,9 @@
 
 	msg = g_strdup_printf(_("Are you sure you want to delete %s?"), purple_savedstatus_get_title(saved));
 
-	purple_request_action(saved, NULL, msg, NULL, 0,
+	purple_request_action_with_hint(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	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/gtkutils.c	Sat Oct 06 15:55:47 2007 +0000
@@ -1527,26 +1527,26 @@
 				ft = prpl_info->can_receive_file(gc, who);
 
 			if (im && ft)
-				purple_request_choice(NULL, NULL,
+				purple_request_choice_with_hint(NULL, NULL,
 						    _("You have dragged an image"),
 						    _("You can send this image as a file transfer, "
 						      "embed it into this message, or use it as the buddy icon for this user."),
 						    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,
 							NULL);
 			else if (!(im || ft))
-				purple_request_yes_no(NULL, NULL, _("You have dragged an image"),
+				purple_request_yes_no_with_hint(NULL, NULL, _("You have dragged an image"),
 							_("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,
+				purple_request_choice_with_hint(NULL, NULL,
 						    _("You have dragged an image"),
 						    (ft ? _("You can send this image as a file transfer, or use it as the buddy icon for this user.") :
 						    _("You can insert this image into this message, or use it as the buddy icon for this user")),
@@ -1554,7 +1554,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);
--- a/pidgin/plugins/perl/common/GtkDialogs.xs	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/plugins/perl/common/GtkDialogs.xs	Sat Oct 06 15:55:47 2007 +0000
@@ -10,6 +10,10 @@
 pidgin_dialogs_about()
 
 void
+pidgin_dialogs_about_with_parent(parent)
+	void * parent
+
+void
 pidgin_dialogs_im()
 
 void
--- a/pidgin/plugins/perl/common/GtkLog.xs	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/plugins/perl/common/GtkLog.xs	Sat Oct 06 15:55:47 2007 +0000
@@ -13,11 +13,27 @@
 	Purple::Account account
 
 void
+pidgin_log_show_with_parent(parent, type, screenname, account)
+	void * parent
+	Purple::LogType type
+	const char * screenname
+	Purple::Account account
+
+void
 pidgin_log_show_contact(contact)
 	Purple::BuddyList::Contact contact
 
+void
+pidgin_log_show_contact_with_parent(parent, contact)
+	void * parent
+	Purple::BuddyList::Contact contact
+
 MODULE = Pidgin::Log  PACKAGE = Pidgin::SysLog  PREFIX = pidgin_syslog_
 PROTOTYPES: ENABLE
 
 void
 pidgin_syslog_show()
+
+void
+pidgin_syslog_show_with_parent(parent)
+	void * parent
--- a/pidgin/plugins/perl/common/GtkPlugin.xs	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/plugins/perl/common/GtkPlugin.xs	Sat Oct 06 15:55:47 2007 +0000
@@ -11,3 +11,7 @@
 
 void
 pidgin_plugin_dialog_show()
+
+void
+pidgin_plugin_dialog_show_with_parent(parent)
+	void * parent
--- a/pidgin/plugins/perl/common/GtkPounce.xs	Sat Oct 06 04:08:16 2007 +0000
+++ b/pidgin/plugins/perl/common/GtkPounce.xs	Sat Oct 06 15:55:47 2007 +0000
@@ -9,6 +9,13 @@
 	const char * name
 	Purple::Pounce cur_pounce
 
+void
+pidgin_pounce_editor_show_with_parent(parent, account, name, cur_pounce)
+	void * parent
+	Purple::Account account
+	const char * name
+	Purple::Pounce cur_pounce
+
 MODULE = Pidgin::Pounce  PACKAGE = Pidgin::Pounces  PREFIX = pidgin_pounces_
 PROTOTYPES: ENABLE
 
@@ -22,4 +29,8 @@
 pidgin_pounces_manager_show()
 
 void
+pidgin_pounces_manager_show_with_parent(parent)
+	void * parent
+
+void
 pidgin_pounces_manager_hide()