changeset 22894:0be4c1f0fa55

This patch from Jaywalker enables text to appear in the screen name entry box. This text is intended to be helpful and let the user know what to enter.
author John Bailey <rekkanoryo@rekkanoryo.org>
date Wed, 30 Apr 2008 03:24:35 +0000
parents d25182f21748
children 01e375e9b681 087c3ed328d3
files libpurple/protocols/msn/msn.c libpurple/protocols/msnp9/msn.c libpurple/protocols/myspace/myspace.c libpurple/prpl.h pidgin/gtkaccount.c
diffstat 5 files changed, 56 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/protocols/msn/msn.c	Tue Apr 29 03:59:45 2008 +0000
+++ b/libpurple/protocols/msn/msn.c	Wed Apr 30 03:24:35 2008 +0000
@@ -132,6 +132,9 @@
 	return list;
 }
 
+const char *msn_get_login_label() {
+	return _("E-mail Address...");
+}
 
 static PurpleCmdRet
 msn_cmd_nudge(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data)
@@ -2306,9 +2309,7 @@
 	NULL,					/* unregister_user */
 	msn_send_attention,                     /* send_attention */
 	msn_attention_types,                    /* attention_types */
-
-	/* padding */
-	NULL
+	msn_get_login_label			/* account_login_label */
 };
 
 static PurplePluginInfo info =
--- a/libpurple/protocols/msnp9/msn.c	Tue Apr 29 03:59:45 2008 +0000
+++ b/libpurple/protocols/msnp9/msn.c	Wed Apr 30 03:24:35 2008 +0000
@@ -134,6 +134,10 @@
 }
 
 
+const char *msn_get_login_label() {
+	return _("E-mail Address...");
+}
+
 static PurpleCmdRet
 msn_cmd_nudge(PurpleConversation *conv, const gchar *cmd, gchar **args, gchar **error, void *data)
 {
@@ -2147,9 +2151,7 @@
 	NULL,					/* unregister_user */
 	msn_send_attention,                     /* send_attention */
 	msn_attention_types,                    /* attention_types */
-
-	/* padding */
-	NULL
+	msn_get_login_label			/* account_login_label */
 };
 
 static PurplePluginInfo info =
--- a/libpurple/protocols/myspace/myspace.c	Tue Apr 29 03:59:45 2008 +0000
+++ b/libpurple/protocols/myspace/myspace.c	Wed Apr 30 03:24:35 2008 +0000
@@ -2449,6 +2449,10 @@
 	return normalized;
 }
 
+const char *msim_get_login_label() {
+	return _("E-mail Address...");
+}
+
 /** Return whether the buddy can be messaged while offline.
  *
  * The protocol supports offline messages in just the same way as online
@@ -3131,7 +3135,7 @@
 	NULL,                  /* unregister_user */
 	msim_send_attention,   /* send_attention */
 	msim_attention_types,  /* attention_types */
-	NULL                /* _purple_reserved4 */
+	msim_get_login_label /* get screen name field title */
 };
 
 
--- a/libpurple/prpl.h	Tue Apr 29 03:59:45 2008 +0000
+++ b/libpurple/prpl.h	Wed Apr 30 03:24:35 2008 +0000
@@ -398,7 +398,11 @@
 	gboolean (*send_attention)(PurpleConnection *gc, const char *username, guint type);
 	GList *(*get_attention_types)(PurpleAccount *acct);
 
-	void (*_purple_reserved4)(void);
+	/* This allows protocols to specify a more specific term for the "ScreenName" field
+	 * in the add account window. This helps avoid confusion for users using protocols
+	 * such as MySpace or MSN
+	 */
+	const char *(*account_login_label)(void);
 };
 
 #define PURPLE_IS_PROTOCOL_PLUGIN(plugin) \
--- a/pidgin/gtkaccount.c	Tue Apr 29 03:59:45 2008 +0000
+++ b/pidgin/gtkaccount.c	Wed Apr 30 03:24:35 2008 +0000
@@ -255,6 +255,16 @@
 	}
 }
 
+static gboolean
+screenname_focus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialog *dialog)
+{
+	if (!strcmp(gtk_entry_get_text(GTK_ENTRY(widget)),dialog->prpl_info->account_login_label())) {
+		gtk_entry_set_text(GTK_ENTRY(widget),"");
+		gtk_widget_modify_text(widget,GTK_STATE_NORMAL,NULL);
+	}
+	return FALSE;
+}
+
 static void
 screenname_changed_cb(GtkEntry *entry, AccountPrefsDialog *dialog)
 {
@@ -270,6 +280,23 @@
 	}
 }
 
+static gboolean
+screenname_nofocus_cb(GtkWidget *widget, GdkEventFocus *event, AccountPrefsDialog *dialog)
+{
+	GdkColor color = {0, 34952, 35466, 34181};
+	if (*gtk_entry_get_text(GTK_ENTRY(widget)) == '\0') {
+		/* We have to avoid hitting the screenname_changed_cb function 
+		 * because it enables buttons we don't want enabled yet ;)
+		 */
+		g_signal_handlers_block_by_func(widget, G_CALLBACK(screenname_changed_cb), dialog);
+		gtk_entry_set_text(GTK_ENTRY(widget),dialog->prpl_info->account_login_label());
+		/* Make sure we can hit it again */
+		g_signal_handlers_unblock_by_func(widget, G_CALLBACK(screenname_changed_cb), dialog);
+		gtk_widget_modify_text(widget,GTK_STATE_NORMAL,&color);
+	}
+	return FALSE;
+}
+
 static void
 icon_filesel_choose_cb(const char *filename, gpointer data)
 {
@@ -364,6 +391,7 @@
 	GList *user_splits;
 	GList *l, *l2;
 	char *username = NULL;
+	GdkColor color = {0, 34952, 35466, 34181};
 
 	if (dialog->protocol_menu != NULL)
 	{
@@ -410,6 +438,15 @@
 
 	add_pref_box(dialog, vbox, _("Screen _name:"), dialog->screenname_entry);
 
+	if (dialog->prpl_info->account_login_label) {
+		gtk_entry_set_text(dialog->screenname_entry,dialog->prpl_info->account_login_label());
+		g_signal_connect(G_OBJECT(dialog->screenname_entry), "focus-in-event",
+						G_CALLBACK(screenname_focus_cb), dialog);
+		g_signal_connect(G_OBJECT(dialog->screenname_entry), "focus-out-event",
+						G_CALLBACK(screenname_nofocus_cb), dialog);
+		gtk_widget_modify_text(dialog->screenname_entry,GTK_STATE_NORMAL,&color);
+	}
+
 	g_signal_connect(G_OBJECT(dialog->screenname_entry), "changed",
 					 G_CALLBACK(screenname_changed_cb), dialog);