# HG changeset patch # User John Bailey # Date 1209525875 0 # Node ID 0be4c1f0fa5554eeec0b855ddbfcac8e12ca3b87 # Parent d25182f21748bb5835c1f56682bf1b53b016e479 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. diff -r d25182f21748 -r 0be4c1f0fa55 libpurple/protocols/msn/msn.c --- 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 = diff -r d25182f21748 -r 0be4c1f0fa55 libpurple/protocols/msnp9/msn.c --- 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 = diff -r d25182f21748 -r 0be4c1f0fa55 libpurple/protocols/myspace/myspace.c --- 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 */ }; diff -r d25182f21748 -r 0be4c1f0fa55 libpurple/prpl.h --- 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) \ diff -r d25182f21748 -r 0be4c1f0fa55 pidgin/gtkaccount.c --- 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);