Mercurial > pidgin
changeset 29603:22faf27397d2
merge of '8524850cd868993d8572075af80943765b232d45'
and 'c0fb4b16f604abbca72e2d063be8d03653d5aac2'
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Wed, 17 Mar 2010 02:06:54 +0000 |
parents | bfaf039aed87 (diff) 6e598ca344b3 (current diff) |
children | 12ba4c648872 |
files | |
diffstat | 15 files changed, 494 insertions(+), 391 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Mar 12 06:25:15 2010 +0000 +++ b/ChangeLog Wed Mar 17 02:06:54 2010 +0000 @@ -20,6 +20,8 @@ * The Recent Log Activity sort method for the Buddy List now distinguishes between no activity and a small amount of activity in the distant past. (Greg McNew) + * Added a menu set mood globally for all mood-supporting accounts + (currently XMPP and ICQ). Bonjour: * Added support for IPv6. (Thanks to T_X for testing) @@ -30,8 +32,10 @@ * Minimum requirement for external libgadu is now also 1.9.0-rc2. ICQ: - * X-Status (Custom ICQ status icon) support (Andrew Ivanov, Tomáš Kebert, - Yuriy Yevgrafov, and trac users bob007, salieff, and nops) + * X-Status (Custom ICQ status icon) support. Since most of the icons + available reflect moods, this is labeled "Set Mood" on the Accounts->ICQ + Account menu. (Andrew Ivanov, Tomáš Kebert, Yuriy Yevgrafov, and trac + users bob007, salieff, and nops) * Allow setting and displaying icons between 1x1 and 100x100 pixels. Previously only icons between 48x48 and 52x64 were allowed. @@ -44,6 +48,11 @@ with content (as opposed to a typing notification, etc). (Thanks to rjoly for testing) + Yahoo: + * Attempt to better handle transparent proxies interfering with HTTP-based + login. + * Fix handling of P2P packets, thus fixing the loss of some messages. + version 2.6.6 (02/18/2010): libpurple: * Fix 'make check' on OS X. (David Fang)
--- a/ChangeLog.API Fri Mar 12 06:25:15 2010 +0000 +++ b/ChangeLog.API Wed Mar 17 02:06:54 2010 +0000 @@ -23,6 +23,7 @@ * ui-caps-changed media manager signal * sent-attention conversation signal * got-attention conversation signal + * PurpleMood struct in status.h Pidgin: Added:
--- a/ChangeLog.win32 Fri Mar 12 06:25:15 2010 +0000 +++ b/ChangeLog.win32 Wed Mar 17 02:06:54 2010 +0000 @@ -1,14 +1,15 @@ version 2.7.0 (??/??/????): * Updated GTK+ to 2.16.6 * Private GTK+ Runtime now used (GTK+ Installer no longer supported) - * Minimum required GTK+ version increased to 2.14.0 + * Minimum required GTK+ version increased to 2.14.7 * Win9x no longer supported. * Crash Report files (pidgin.RPT) are now generated in the ~/.purple directory instead of the installation directory. * NSS SSL Library upgraded to 3.12.5 (thanks to Berke Viktor) * GtkSpell upgraded to 2.0.16, changing the spellchecking backend to - enchant. This means that myspell, hunspell (OpenOffice) and existing - aspell dictionaries can be used. + enchant. This means that myspell and hunspell (OpenOffice) + dictionaries can be used (previous versions' aspell dictionaries + will not work). version 2.6.6 (02/18/2010): * Installer translations for: Norwegian nynorsk
--- a/Makefile.mingw Fri Mar 12 06:25:15 2010 +0000 +++ b/Makefile.mingw Wed Mar 17 02:06:54 2010 +0000 @@ -47,13 +47,15 @@ k5sprt32.dll \ krb5_32.dll \ libenchant.dll \ + libenchant_ispell.dll \ + libenchant_myspell.dll \ libgtkspell-0.dll \ libmeanwhile-1.dll \ libnspr4.dll \ libplc4.dll \ libplds4.dll \ libsasl.dll \ - libxml2.dll \ + libxml2-2.dll \ nss3.dll \ nssckbi.dll \ nssutil3.dll \ @@ -94,7 +96,7 @@ cp $(GTKSPELL_TOP)/bin/libgtkspell-0.dll $(PIDGIN_INSTALL_DIR)/spellcheck cp $(ENCHANT_TOP)/bin/libenchant.dll $(PIDGIN_INSTALL_DIR)/spellcheck cp -R $(ENCHANT_TOP)/lib $(PIDGIN_INSTALL_DIR)/spellcheck - cp $(WIN32_DEV_TOP)/pidgin-inst-deps-20100223/exchndl.dll $(PIDGIN_INSTALL_DIR) + cp $(WIN32_DEV_TOP)/pidgin-inst-deps-20100315/exchndl.dll $(PIDGIN_INSTALL_DIR) pidgin/win32/nsis/gtk-runtime-$(GTK_BUNDLE_VERSION).zip: pidgin/win32/nsis/generate_gtk_zip.sh `pwd` @@ -150,7 +152,7 @@ installers: installer installer_offline debug_symbols_zip installer_zip Doxyfile.mingw: Doxyfile.in - sed -e "s/@PACKAGE@/pidgin/" -e "s/@VERSION@/$(PIDGIN_VERSION)/" -e "s/@top_srcdir@/$(PIDGIN_TREE_TOP)/g" -e "s/@enable_dot@/NO/" Doxyfile.in > Doxyfile.mingw + sed -e "s/@PACKAGE@/pidgin/" -e "s/@VERSION@/$(PIDGIN_VERSION)/" -e "s/@top_srcdir@/$(PIDGIN_TREE_TOP)/g" -e "s/@enable_dot@/NO/" $< > $@ docs: Doxyfile.mingw @echo "Running doxygen..."
--- a/libpurple/plugins/perl/common/Makefile.mingw Fri Mar 12 06:25:15 2010 +0000 +++ b/libpurple/plugins/perl/common/Makefile.mingw Wed Mar 17 02:06:54 2010 +0000 @@ -13,7 +13,6 @@ TARGET = Purple AUTOSPLIT = lib/auto/Purple/autosplit.ix -EXTUTILS ?= C:/perl/lib/ExtUtils PERL_PLUGIN_TOP := .. ##
--- a/libpurple/protocols/yahoo/libymsg.c Fri Mar 12 06:25:15 2010 +0000 +++ b/libpurple/protocols/yahoo/libymsg.c Wed Mar 17 02:06:54 2010 +0000 @@ -1854,6 +1854,7 @@ return; } else if (len > 0 && ret_data && *ret_data) { + PurpleAccount *account = purple_connection_get_account(gc); gchar **split_data = g_strsplit(ret_data, "\r\n", -1); int totalelements = 0; int response_no = -1; @@ -1861,11 +1862,13 @@ totalelements = g_strv_length(split_data); - if(totalelements == 1) + if(totalelements == 1) { /* Received an error code */ response_no = strtol(split_data[0], NULL, 10); - else if(totalelements >= 2) { + } else if(totalelements == 2 || totalelements == 3 ) { /* received valid data */ response_no = strtol(split_data[0], NULL, 10); token = g_strdup(split_data[1] + strlen("ymsgr=")); + } else { /* It looks like a transparent proxy has returned a document we don't want */ + response_no = -1; } g_strfreev(split_data); @@ -1884,8 +1887,8 @@ case 1212: /* Password incorrect */ /* Set password to NULL. Avoids account locking. Brings dialog to enter password if clicked on Re-enable account */ - if (!purple_account_get_remember_password(purple_connection_get_account(gc))) - purple_account_set_password(purple_connection_get_account(gc), NULL); + if (!purple_account_get_remember_password(account)) + purple_account_set_password(account, NULL); error_reason = g_strdup(_("Incorrect password")); error = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED; break; @@ -1927,7 +1930,6 @@ else { /* OK to login, correct information provided */ PurpleUtilFetchUrlData *url_data = NULL; - PurpleAccount *account = purple_connection_get_account(gc); char *url = NULL; gboolean yahoojp = yahoo_is_japan(account); gboolean proxy_ssl = purple_account_get_bool(account, "proxy_ssl", FALSE); @@ -2731,8 +2733,9 @@ PurpleAccount *account; YahooFriend *f; - /* if status is not 1 ie YAHOO_STATUS_BRB, the packet bounced back, so contains our own ip */ - if(!(pkt->status == YAHOO_STATUS_BRB)) + /* if status is not YAHOO_STATUS_BRB or YAHOO_STATUS_P2P, the packet bounced back, + * so it contains our own ip */ + if(pkt->status != YAHOO_STATUS_BRB && pkt->status != YAHOO_STATUS_P2P) return ; while (l) {
--- a/libpurple/protocols/yahoo/libymsg.h Fri Mar 12 06:25:15 2010 +0000 +++ b/libpurple/protocols/yahoo/libymsg.h Wed Mar 17 02:06:54 2010 +0000 @@ -90,8 +90,8 @@ #define YAHOO_CLIENT_VERSION_ID "4194239" #define YAHOO_CLIENT_VERSION "9.0.0.2162" -#define YAHOOJP_CLIENT_VERSION_ID "4194239" -#define YAHOOJP_CLIENT_VERSION "9.0.0.2162" +#define YAHOOJP_CLIENT_VERSION_ID "4186047" +#define YAHOOJP_CLIENT_VERSION "9.0.0.1727" #define YAHOO_CLIENT_USERAGENT "Mozilla/5.0" @@ -119,6 +119,7 @@ YAHOO_STATUS_ONVACATION, YAHOO_STATUS_OUTTOLUNCH, YAHOO_STATUS_STEPPEDOUT, + YAHOO_STATUS_P2P = 11, YAHOO_STATUS_INVISIBLE = 12, YAHOO_STATUS_CUSTOM = 99, YAHOO_STATUS_IDLE = 999,
--- a/libpurple/win32/global.mak Fri Mar 12 06:25:15 2010 +0000 +++ b/libpurple/win32/global.mak Wed Mar 17 02:06:54 2010 +0000 @@ -105,7 +105,7 @@ GMSGFMT ?= $(WIN32_DEV_TOP)/gettext-0.17/bin/msgfmt MAKENSIS ?= makensis.exe MAKENSISOPT ?= / -PERL ?= /cygdrive/c/perl/bin/perl +PERL ?= perl WINDRES ?= windres STRIP ?= strip
--- a/libpurple/win32/rules.mak Fri Mar 12 06:25:15 2010 +0000 +++ b/libpurple/win32/rules.mak Wed Mar 17 02:06:54 2010 +0000 @@ -4,7 +4,7 @@ $(CC) $(CFLAGS) $(DEFINES) $(INCLUDE_PATHS) -o $@ -c $< %.c: %.xs - $(PERL) $(EXTUTILS)/xsubpp -typemap $(EXTUTILS)/typemap -typemap $(PURPLE_PERL_TOP)/common/typemap $< > $@ + $(PERL) -MExtUtils::ParseXS -e 'ExtUtils::ParseXS::process_file(filename => "$<", output => "$@", typemap => "$(PURPLE_PERL_TOP)/common/typemap");' %.o: %.rc $(WINDRES) -I$(PURPLE_TOP) -i $< -o $@
--- a/pidgin/gtkblist.c Fri Mar 12 06:25:15 2010 +0000 +++ b/pidgin/gtkblist.c Wed Mar 17 02:06:54 2010 +0000 @@ -3384,6 +3384,253 @@ !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")); } +static char *get_mood_icon_path(const char *mood) +{ + char *path; + + if (!strcmp(mood, "busy")) { + path = g_build_filename(DATADIR, "pixmaps", "pidgin", + "status", "16", "busy.png", NULL); + } else if (!strcmp(mood, "hiptop")) { + path = g_build_filename(DATADIR, "pixmaps", "pidgin", + "emblems", "16", "hiptop.png", NULL); + } else { + char *filename = g_strdup_printf("%s.png", mood); + path = g_build_filename(DATADIR, "pixmaps", "pidgin", + "emotes", "small", filename, NULL); + g_free(filename); + } + return path; +} + +static void +update_status_with_mood(PurpleAccount *account, const gchar *mood, + const gchar *text) +{ + if (mood != NULL && !purple_strequal(mood, "")) { + if (text) { + purple_account_set_status(account, "mood", TRUE, + PURPLE_MOOD_NAME, mood, + PURPLE_MOOD_COMMENT, text, + NULL); + } else { + purple_account_set_status(account, "mood", TRUE, + PURPLE_MOOD_NAME, mood, + NULL); + } + } else { + purple_account_set_status(account, "mood", FALSE, NULL); + } +} + +static void +edit_mood_cb(PurpleConnection *gc, PurpleRequestFields *fields) +{ + PurpleRequestField *mood_field, *text_field; + GList *l; + + mood_field = purple_request_fields_get_field(fields, "mood"); + text_field = purple_request_fields_get_field(fields, "text"); + l = purple_request_field_list_get_selected(mood_field); + + if (l) { + const char *mood = purple_request_field_list_get_data(mood_field, l->data); + const char *text = purple_request_field_string_get_value(text_field); + + if (gc) { + PurpleAccount *account = purple_connection_get_account(gc); + + update_status_with_mood(account, mood, text); + } else { + GList *accounts = purple_accounts_get_all_active(); + + for (; accounts ; accounts = g_list_delete_link(accounts, accounts)) { + PurpleAccount *account = (PurpleAccount *) accounts->data; + PurpleConnection *gc = purple_account_get_connection(account); + + if (gc->flags && PURPLE_CONNECTION_SUPPORT_MOODS) { + update_status_with_mood(account, mood, text); + } + } + } + } +} + +static void +global_moods_for_each(gpointer key, gpointer value, gpointer user_data) +{ + GList **out_moods = (GList **) user_data; + PurpleMood *mood = (PurpleMood *) value; + + *out_moods = g_list_append(*out_moods, mood); +} + +static PurpleMood * +get_global_moods(void) +{ + GHashTable *global_moods = + g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + GHashTable *mood_counts = + g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + GList *accounts = purple_accounts_get_all_active(); + PurpleMood *result = NULL; + GList *out_moods = NULL; + int i = 0; + int num_accounts = 0; + + for (; accounts ; accounts = g_list_delete_link(accounts, accounts)) { + PurpleAccount *account = (PurpleAccount *) accounts->data; + PurpleConnection *gc = purple_account_get_connection(account); + + if (gc->flags & PURPLE_CONNECTION_SUPPORT_MOODS) { + PurplePluginProtocolInfo *prpl_info = + PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + PurpleMood *mood = NULL; + + for (mood = prpl_info->get_moods(account) ; + mood->mood != NULL ; mood++) { + int mood_count = + GPOINTER_TO_INT(g_hash_table_lookup(mood_counts, mood->mood)); + + if (!g_hash_table_lookup(global_moods, mood->mood)) { + g_hash_table_insert(global_moods, g_strdup(mood->mood), mood); + } + g_hash_table_insert(mood_counts, g_strdup(mood->mood), + GINT_TO_POINTER(mood_count + 1)); + } + + num_accounts++; + } + } + + g_hash_table_foreach(global_moods, global_moods_for_each, &out_moods); + result = g_new0(PurpleMood, g_hash_table_size(global_moods) + 1); + + while (out_moods) { + PurpleMood *mood = (PurpleMood *) out_moods->data; + int in_num_accounts = + GPOINTER_TO_INT(g_hash_table_lookup(mood_counts, mood->mood)); + + if (in_num_accounts == num_accounts) { + /* mood is present in all accounts supporting moods */ + result[i].mood = mood->mood; + result[i].description = mood->description; + i++; + } + out_moods = g_list_delete_link(out_moods, out_moods); + } + + g_hash_table_destroy(global_moods); + g_hash_table_destroy(mood_counts); + + return result; +} + +/* get current set mood for all mood-supporting accounts, or NULL if not set + or not set to the same on all */ +static const gchar * +get_global_mood_status(void) +{ + GList *accounts = purple_accounts_get_all_active(); + const gchar *found_mood = NULL; + + for (; accounts ; accounts = g_list_delete_link(accounts, accounts)) { + PurpleAccount *account = (PurpleAccount *) accounts->data; + + if (purple_account_get_connection(account)->flags & + PURPLE_CONNECTION_SUPPORT_MOODS) { + PurplePresence *presence = purple_account_get_presence(account); + PurpleStatus *status = purple_presence_get_status(presence, "mood"); + const gchar *curr_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); + + if (found_mood != NULL && !purple_strequal(curr_mood, found_mood)) { + /* found a different mood */ + found_mood = NULL; + break; + } else { + found_mood = curr_mood; + } + } + } + + return found_mood; +} + +static void +set_mood_cb(GtkWidget *widget, PurpleAccount *account) +{ + const char *current_mood; + PurpleRequestFields *fields; + PurpleRequestFieldGroup *g; + PurpleRequestField *f; + PurpleConnection *gc = NULL; + PurplePluginProtocolInfo *prpl_info = NULL; + PurpleMood *mood; + PurpleMood *global_moods = get_global_moods(); + + if (account) { + PurplePresence *presence = purple_account_get_presence(account); + PurpleStatus *status = purple_presence_get_status(presence, "mood"); + gc = purple_account_get_connection(account); + g_return_if_fail(gc->prpl != NULL); + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + current_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); + } else { + current_mood = get_global_mood_status(); + } + + fields = purple_request_fields_new(); + g = purple_request_field_group_new(NULL); + f = purple_request_field_list_new("mood", _("Please select your mood from the list")); + + purple_request_field_list_add(f, _("None"), ""); + if (current_mood == NULL) + purple_request_field_list_add_selected(f, _("None")); + + /* TODO: rlaager wants this sorted. */ + for (mood = account ? prpl_info->get_moods(account) : global_moods; + mood->mood != NULL ; mood++) { + char *path; + + if (mood->mood == NULL || mood->description == NULL) + continue; + + path = get_mood_icon_path(mood->mood); + purple_request_field_list_add_icon(f, _(mood->description), + path, (gpointer)mood->mood); + g_free(path); + + if (current_mood && !strcmp(current_mood, mood->mood)) + purple_request_field_list_add_selected(f, _(mood->description)); + } + purple_request_field_group_add_field(g, f); + + purple_request_fields_add_group(fields, g); + + /* if the connection allows setting a mood message */ + if (gc && (gc->flags & PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES)) { + g = purple_request_field_group_new(NULL); + f = purple_request_field_string_new("text", + _("Message (optional)"), NULL, FALSE); + purple_request_field_group_add_field(g, f); + purple_request_fields_add_group(fields, g); + } + + purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"), + NULL, fields, + _("OK"), G_CALLBACK(edit_mood_cb), + _("Cancel"), NULL, + gc ? purple_connection_get_account(gc) : NULL, + NULL, NULL, gc); + + g_free(global_moods); +} + +static void +set_mood_show(void) +{ + set_mood_cb(NULL, NULL); +} /*************************************************** * Crap * @@ -3423,6 +3670,7 @@ { N_("/Tools/Plu_gins"), "<CTL>U", pidgin_plugin_dialog_show, 2, "<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 }, + { N_("/Tools/Set _Mood"), "<CTL>M", set_mood_show, 0, "<Item>", NULL }, { "/Tools/sep2", NULL, NULL, 0, "<Separator>", NULL }, { N_("/Tools/_File Transfers"), "<CTL>T", pidgin_xfer_dialog_show, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_TRANSFER }, { N_("/Tools/R_oom List"), NULL, pidgin_roomlist_dialog_show, 0, "<Item>", NULL }, @@ -3754,25 +4002,6 @@ return pb; } -static char *get_mood_icon_path(const char *mood) -{ - char *path; - - if (!strcmp(mood, "busy")) { - path = g_build_filename(DATADIR, "pixmaps", "pidgin", - "status", "16", "busy.png", NULL); - } else if (!strcmp(mood, "hiptop")) { - path = g_build_filename(DATADIR, "pixmaps", "pidgin", - "emblems", "16", "hiptop.png", NULL); - } else { - char *filename = g_strdup_printf("%s.png", mood); - path = g_build_filename(DATADIR, "pixmaps", "pidgin", - "emotes", "small", filename, NULL); - g_free(filename); - } - return path; -} - GdkPixbuf * pidgin_blist_get_emblem(PurpleBlistNode *node) { @@ -7815,100 +8044,7 @@ purple_account_set_enabled(account, PIDGIN_UI, FALSE); } -static void -edit_mood_cb(PurpleConnection *gc, PurpleRequestFields *fields) -{ - PurpleRequestField *mood_field, *text_field; - GList *l; - - mood_field = purple_request_fields_get_field(fields, "mood"); - text_field = purple_request_fields_get_field(fields, "text"); - l = purple_request_field_list_get_selected(mood_field); - - if (l) { - const char *mood = purple_request_field_list_get_data(mood_field, l->data); - const char *text = purple_request_field_string_get_value(text_field); - PurpleAccount *account = purple_connection_get_account(gc); - - if (mood != NULL && !purple_strequal(mood, "")) { - if (text) { - purple_account_set_status(account, "mood", TRUE, - PURPLE_MOOD_NAME, mood, - PURPLE_MOOD_COMMENT, text, - NULL); - } else { - purple_account_set_status(account, "mood", TRUE, - PURPLE_MOOD_NAME, mood, - NULL); - } - } else { - purple_account_set_status(account, "mood", FALSE, NULL); - } - } -} - -static void -set_mood_cb(GtkWidget *widget, PurpleAccount *account) -{ - PurplePresence *presence = purple_account_get_presence(account); - PurpleStatus *status = purple_presence_get_status(presence, "mood"); - const char *current_mood; - PurpleRequestFields *fields; - PurpleRequestFieldGroup *g; - PurpleRequestField *f; - PurpleConnection *gc = purple_account_get_connection(account); - PurplePluginProtocolInfo *prpl_info; - PurpleMood *mood; - - g_return_if_fail(gc->prpl != NULL); - prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); - - current_mood = purple_status_get_attr_string(status, PURPLE_MOOD_NAME); - - fields = purple_request_fields_new(); - g = purple_request_field_group_new(NULL); - f = purple_request_field_list_new("mood", _("Please select your mood from the list")); - - purple_request_field_list_add(f, _("None"), ""); - if (current_mood == NULL) - purple_request_field_list_add_selected(f, _("None")); - - /* TODO: rlaager wants this sorted. */ - for (mood = prpl_info->get_moods(account); - mood->mood != NULL ; mood++) { - char *path; - - if (mood->mood == NULL || mood->description == NULL) - continue; - - path = get_mood_icon_path(mood->mood); - purple_request_field_list_add_icon(f, _(mood->description), - path, (gpointer)mood->mood); - g_free(path); - - if (current_mood && !strcmp(current_mood, mood->mood)) - purple_request_field_list_add_selected(f, _(mood->description)); - } - purple_request_field_group_add_field(g, f); - - purple_request_fields_add_group(fields, g); - - /* if the connection allows setting a mood message */ - if (gc->flags & PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES) { - g = purple_request_field_group_new(NULL); - f = purple_request_field_string_new("text", - _("Message (optional)"), NULL, FALSE); - purple_request_field_group_add_field(g, f); - purple_request_fields_add_group(fields, g); - } - - purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"), - NULL, fields, - _("OK"), G_CALLBACK(edit_mood_cb), - _("Cancel"), NULL, - purple_connection_get_account(gc), - NULL, NULL, gc); -} + void pidgin_blist_update_accounts_menu(void)
--- a/pidgin/gtkdialogs.c Fri Mar 12 06:25:15 2010 +0000 +++ b/pidgin/gtkdialogs.c Wed Mar 17 02:06:54 2010 +0000 @@ -76,7 +76,6 @@ {"John 'rekkanoryo' Bailey", N_("bug master"), NULL}, {"Ethan 'Paco-Paco' Blanton", NULL, NULL}, {"Hylke Bons", N_("artist"), "hylkebons@gmail.com"}, - {"Thomas Butter", NULL, NULL}, /* feel free to not translate this */ {N_("Ka-Hing Cheung"), NULL, NULL}, {"Sadrul Habib Chowdhury", NULL, NULL}, @@ -87,8 +86,6 @@ {"Richard 'rlaager' Laager", NULL, "rlaager@pidgin.im"}, {"Sulabh 'sulabh_m' Mahajan", NULL, NULL}, {"Richard 'wabz' Nelson", NULL, NULL}, - {"Christopher 'siege' O'Brien", NULL, "taliesein@users.sf.net"}, - {"Bartosz Oler", NULL, NULL}, {"Etan 'deryni' Reisner", NULL, NULL}, {"Tim 'marv' Ringenbach", NULL, NULL}, {"Michael 'Maiku' Ruprecht", N_("voice and video"), NULL}, @@ -114,12 +111,15 @@ /* Order: Alphabetical by Last Name */ static const struct developer retired_developers[] = { {"Herman Bloggs", N_("win32 port"), "herman@bluedigits.com"}, + {"Thomas Butter", NULL, NULL}, {"Jim Duchek", N_("maintainer"), "jim@linuxpimps.com"}, {"Rob Flynn", N_("maintainer"), NULL}, {"Adam Fritzler", N_("libfaim maintainer"), NULL}, {"Christian 'ChipX86' Hammond", N_("webmaster"), NULL}, /* If "lazy bum" translates literally into a serious insult, use something else or omit it. */ {"Syd Logan", N_("hacker and designated driver [lazy bum]"), NULL}, + {"Christopher 'siege' O'Brien", NULL, "taliesein@users.sf.net"}, + {"Bartosz Oler", NULL, NULL}, {"Megan 'Cae' Schneider", N_("support/QA"), NULL}, {"Jim Seymour", N_("XMPP"), NULL}, {"Mark Spencer", N_("original author"), "markster@marko.net"},
--- a/pidgin/plugins/perl/common/Makefile.mingw Fri Mar 12 06:25:15 2010 +0000 +++ b/pidgin/plugins/perl/common/Makefile.mingw Wed Mar 17 02:06:54 2010 +0000 @@ -12,7 +12,6 @@ DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES)) TARGET = Pidgin -EXTUTILS ?= C:/perl/lib/ExtUtils ## ## INCLUDE PATHS
--- a/pidgin/plugins/xmppconsole.c Fri Mar 12 06:25:15 2010 +0000 +++ b/pidgin/plugins/xmppconsole.c Wed Mar 17 02:06:54 2010 +0000 @@ -845,7 +845,7 @@ /** summary */ N_("Send and receive raw XMPP stanzas."), /** description */ - N_("This plugin is useful for debbuging XMPP servers or clients."), + N_("This plugin is useful for debugging XMPP servers or clients."), "Sean Egan <seanegan@gmail.com>", /**< author */ PURPLE_WEBSITE, /**< homepage */
--- a/pidgin/win32/winpidgin.c Fri Mar 12 06:25:15 2010 +0000 +++ b/pidgin/win32/winpidgin.c Wed Mar 17 02:06:54 2010 +0000 @@ -26,13 +26,10 @@ */ /* This is for ATTACH_PARENT_PROCESS */ -#define UNICODE -#define _UNICODE #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x501 #endif #include <windows.h> -#include <tchar.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> @@ -53,70 +50,70 @@ static LPFNPIDGINMAIN pidgin_main = NULL; static LPFNSETDLLDIRECTORY MySetDllDirectory = NULL; -static const TCHAR *get_win32_error_message(DWORD err) { - static TCHAR err_msg[512]; +static const wchar_t *get_win32_error_message(DWORD err) { + static wchar_t err_msg[512]; - FormatMessage( + FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &err_msg, sizeof(err_msg) / sizeof(TCHAR), NULL); + (LPWSTR) &err_msg, sizeof(err_msg) / sizeof(wchar_t), NULL); return err_msg; } -static BOOL read_reg_string(HKEY key, TCHAR *sub_key, TCHAR *val_name, LPBYTE data, LPDWORD data_len) { +static BOOL read_reg_string(HKEY key, wchar_t *sub_key, wchar_t *val_name, LPBYTE data, LPDWORD data_len) { HKEY hkey; BOOL ret = FALSE; LONG retv; - if (ERROR_SUCCESS == (retv = RegOpenKeyEx(key, sub_key, 0, + if (ERROR_SUCCESS == (retv = RegOpenKeyExW(key, sub_key, 0, KEY_QUERY_VALUE, &hkey))) { - if (ERROR_SUCCESS == (retv = RegQueryValueEx(hkey, val_name, + if (ERROR_SUCCESS == (retv = RegQueryValueExW(hkey, val_name, NULL, NULL, data, data_len))) ret = TRUE; else { - const TCHAR *err_msg = get_win32_error_message(retv); + const wchar_t *err_msg = get_win32_error_message(retv); - _tprintf(_T("Could not read reg key '%s' subkey '%s' value: '%s'.\nMessage: (%ld) %s\n"), - (key == HKEY_LOCAL_MACHINE) ? _T("HKLM") - : ((key == HKEY_CURRENT_USER) ? _T("HKCU") : _T("???")), + wprintf(L"Could not read reg key '%s' subkey '%s' value: '%s'.\nMessage: (%ld) %s\n", + (key == HKEY_LOCAL_MACHINE) ? L"HKLM" + : ((key == HKEY_CURRENT_USER) ? L"HKCU" : L"???"), sub_key, val_name, retv, err_msg); } RegCloseKey(hkey); } else { - TCHAR szBuf[80]; + wchar_t szBuf[80]; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, retv, 0, - (LPTSTR) &szBuf, sizeof(szBuf) / sizeof(TCHAR), NULL); - _tprintf(_T("Could not open reg subkey: %s\nError: (%ld) %s\n"), + FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, retv, 0, + (LPWSTR) &szBuf, sizeof(szBuf) / sizeof(wchar_t), NULL); + wprintf(L"Could not open reg subkey: %s\nError: (%ld) %s\n", sub_key, retv, szBuf); } return ret; } -static BOOL common_dll_prep(const TCHAR *path) { +static BOOL common_dll_prep(const wchar_t *path) { HMODULE hmod; HKEY hkey; struct _stat stat_buf; - TCHAR test_path[MAX_PATH + 1]; + wchar_t test_path[MAX_PATH + 1]; - _sntprintf(test_path, sizeof(test_path) / sizeof(TCHAR), - _T("%s\\libgtk-win32-2.0-0.dll"), path); - test_path[sizeof(test_path) / sizeof(TCHAR) - 1] = _T('\0'); + _snwprintf(test_path, sizeof(test_path) / sizeof(wchar_t), + L"%s\\libgtk-win32-2.0-0.dll", path); + test_path[sizeof(test_path) / sizeof(wchar_t) - 1] = L'\0'; - if (_tstat(test_path, &stat_buf) != 0) { + if (_wstat(test_path, &stat_buf) != 0) { printf("Unable to determine GTK+ path. \n" "Assuming GTK+ is in the PATH.\n"); return FALSE; } - _tprintf(_T("GTK+ path found: %s\n"), path); + wprintf(L"GTK+ path found: %s\n", path); - if ((hmod = GetModuleHandle(_T("kernel32.dll")))) { + if ((hmod = GetModuleHandleW(L"kernel32.dll"))) { MySetDllDirectory = (LPFNSETDLLDIRECTORY) GetProcAddress( hmod, "SetDllDirectoryW"); if (!MySetDllDirectory) @@ -133,44 +130,44 @@ /* For the rest, we set the current directory and make sure * SafeDllSearch is set to 0 where needed. */ else { - OSVERSIONINFO osinfo; + OSVERSIONINFOW osinfo; printf("Setting current directory to GTK+ dll directory\n"); - SetCurrentDirectory(path); + SetCurrentDirectoryW(path); /* For Windows 2000 (SP3+) / WinXP (No SP): * If SafeDllSearchMode is set to 1, Windows system directories are * searched for dlls before the current directory. Therefore we set it * to 0. */ - osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osinfo); + osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); + GetVersionExW(&osinfo); if ((osinfo.dwMajorVersion == 5 && osinfo.dwMinorVersion == 0 - && _tcscmp(osinfo.szCSDVersion, _T("Service Pack 3")) >= 0) + && wcscmp(osinfo.szCSDVersion, L"Service Pack 3") >= 0) || (osinfo.dwMajorVersion == 5 && osinfo.dwMinorVersion == 1 - && _tcscmp(osinfo.szCSDVersion, _T("")) >= 0) + && wcscmp(osinfo.szCSDVersion, L"") >= 0) ) { DWORD regval = 1; DWORD reglen = sizeof(DWORD); printf("Using Win2k (SP3+) / WinXP (No SP)... Checking SafeDllSearch\n"); read_reg_string(HKEY_LOCAL_MACHINE, - _T("System\\CurrentControlSet\\Control\\Session Manager"), - _T("SafeDllSearchMode"), + L"System\\CurrentControlSet\\Control\\Session Manager", + L"SafeDllSearchMode", (LPBYTE) ®val, ®len); if (regval != 0) { printf("Trying to set SafeDllSearchMode to 0\n"); regval = 0; - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, - _T("System\\CurrentControlSet\\Control\\Session Manager"), + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"System\\CurrentControlSet\\Control\\Session Manager", 0, KEY_SET_VALUE, &hkey ) == ERROR_SUCCESS) { - if (RegSetValueEx(hkey, - _T("SafeDllSearchMode"), 0, + if (RegSetValueExW(hkey, + L"SafeDllSearchMode", 0, REG_DWORD, (LPBYTE) ®val, sizeof(DWORD) ) != ERROR_SUCCESS) @@ -188,35 +185,35 @@ return TRUE; } -static BOOL dll_prep(const TCHAR *pidgin_dir) { - TCHAR path[MAX_PATH + 1]; - path[0] = _T('\0'); +static BOOL dll_prep(const wchar_t *pidgin_dir) { + wchar_t path[MAX_PATH + 1]; + path[0] = L'\0'; if (*pidgin_dir) { - _sntprintf(path, sizeof(path) / sizeof(TCHAR), _T("%s\\Gtk\\bin"), pidgin_dir); - path[sizeof(path) / sizeof(TCHAR)] = _T('\0'); + _snwprintf(path, sizeof(path) / sizeof(wchar_t), L"%s\\Gtk\\bin", pidgin_dir); + path[sizeof(path) / sizeof(wchar_t) - 1] = L'\0'; } return common_dll_prep(path); } -static void portable_mode_dll_prep(const TCHAR *pidgin_dir) { - /* need to be able to fit MAX_PATH + "PIDGIN_ASPELL_DIR=\\Aspell\\bin" in path2 */ - TCHAR path[MAX_PATH + 1]; - TCHAR path2[MAX_PATH + 33]; - const TCHAR *prev = NULL; +static void portable_mode_dll_prep(const wchar_t *pidgin_dir) { + /* need to be able to fit MAX_PATH + "PURPLEHOME=" in path2 */ + wchar_t path[MAX_PATH + 1]; + wchar_t path2[MAX_PATH + 12]; + const wchar_t *prev = NULL; /* We assume that GTK+ is installed under \\path\to\Pidgin\..\GTK * First we find \\path\to */ if (*pidgin_dir) /* pidgin_dir points to \\path\to\Pidgin */ - prev = _tcsrchr(pidgin_dir, _T('\\')); + prev = wcsrchr(pidgin_dir, L'\\'); if (prev) { int cnt = (prev - pidgin_dir); - _tcsncpy(path, pidgin_dir, cnt); - path[cnt] = _T('\0'); + wcsncpy(path, pidgin_dir, cnt); + path[cnt] = L'\0'; } else { printf("Unable to determine current executable path. \n" "This will prevent the settings dir from being set.\n" @@ -225,130 +222,126 @@ } /* Set $HOME so that the GTK+ settings get stored in the right place */ - _sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("HOME=%s"), path); - _tputenv(path2); + _snwprintf(path2, sizeof(path2) / sizeof(wchar_t), L"HOME=%s", path); + _wputenv(path2); /* Set up the settings dir base to be \\path\to * The actual settings dir will be \\path\to\.purple */ - _sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("PURPLEHOME=%s"), path); - _tprintf(_T("Setting settings dir: %s\n"), path2); - _tputenv(path2); - - _sntprintf(path2, sizeof(path2) / sizeof(TCHAR), _T("PIDGIN_ASPELL_DIR=%s\\Aspell\\bin"), path); - _tprintf(_T("%s\n"), path2); - _tputenv(path2); + _snwprintf(path2, sizeof(path2) / sizeof(wchar_t), L"PURPLEHOME=%s", path); + wprintf(L"Setting settings dir: %s\n", path2); + _wputenv(path2); if (!dll_prep(pidgin_dir)) { /* set the GTK+ path to be \\path\to\GTK\bin */ - _tcscat(path, _T("\\GTK\\bin")); + wcscat(path, L"\\GTK\\bin"); common_dll_prep(path); } } -static TCHAR* winpidgin_lcid_to_posix(LCID lcid) { - TCHAR *posix = NULL; +static wchar_t* winpidgin_lcid_to_posix(LCID lcid) { + wchar_t *posix = NULL; int lang_id = PRIMARYLANGID(lcid); int sub_id = SUBLANGID(lcid); switch (lang_id) { - case LANG_AFRIKAANS: posix = _T("af"); break; - case LANG_ARABIC: posix = _T("ar"); break; - case LANG_AZERI: posix = _T("az"); break; - case LANG_BENGALI: posix = _T("bn"); break; - case LANG_BULGARIAN: posix = _T("bg"); break; - case LANG_CATALAN: posix = _T("ca"); break; - case LANG_CZECH: posix = _T("cs"); break; - case LANG_DANISH: posix = _T("da"); break; - case LANG_ESTONIAN: posix = _T("et"); break; - case LANG_PERSIAN: posix = _T("fa"); break; - case LANG_GERMAN: posix = _T("de"); break; - case LANG_GREEK: posix = _T("el"); break; + case LANG_AFRIKAANS: posix = L"af"; break; + case LANG_ARABIC: posix = L"ar"; break; + case LANG_AZERI: posix = L"az"; break; + case LANG_BENGALI: posix = L"bn"; break; + case LANG_BULGARIAN: posix = L"bg"; break; + case LANG_CATALAN: posix = L"ca"; break; + case LANG_CZECH: posix = L"cs"; break; + case LANG_DANISH: posix = L"da"; break; + case LANG_ESTONIAN: posix = L"et"; break; + case LANG_PERSIAN: posix = L"fa"; break; + case LANG_GERMAN: posix = L"de"; break; + case LANG_GREEK: posix = L"el"; break; case LANG_ENGLISH: switch (sub_id) { case SUBLANG_ENGLISH_UK: - posix = _T("en_GB"); break; + posix = L"en_GB"; break; case SUBLANG_ENGLISH_AUS: - posix = _T("en_AU"); break; + posix = L"en_AU"; break; case SUBLANG_ENGLISH_CAN: - posix = _T("en_CA"); break; + posix = L"en_CA"; break; default: - posix = _T("en"); break; + posix = L"en"; break; } break; - case LANG_SPANISH: posix = _T("es"); break; - case LANG_BASQUE: posix = _T("eu"); break; - case LANG_FINNISH: posix = _T("fi"); break; - case LANG_FRENCH: posix = _T("fr"); break; - case LANG_GALICIAN: posix = _T("gl"); break; - case LANG_GUJARATI: posix = _T("gu"); break; - case LANG_HEBREW: posix = _T("he"); break; - case LANG_HINDI: posix = _T("hi"); break; - case LANG_HUNGARIAN: posix = _T("hu"); break; + case LANG_SPANISH: posix = L"es"; break; + case LANG_BASQUE: posix = L"eu"; break; + case LANG_FINNISH: posix = L"fi"; break; + case LANG_FRENCH: posix = L"fr"; break; + case LANG_GALICIAN: posix = L"gl"; break; + case LANG_GUJARATI: posix = L"gu"; break; + case LANG_HEBREW: posix = L"he"; break; + case LANG_HINDI: posix = L"hi"; break; + case LANG_HUNGARIAN: posix = L"hu"; break; case LANG_ICELANDIC: break; - case LANG_INDONESIAN: posix = _T("id"); break; - case LANG_ITALIAN: posix = _T("it"); break; - case LANG_JAPANESE: posix = _T("ja"); break; - case LANG_GEORGIAN: posix = _T("ka"); break; - case LANG_KANNADA: posix = _T("kn"); break; - case LANG_KOREAN: posix = _T("ko"); break; - case LANG_LITHUANIAN: posix = _T("lt"); break; - case LANG_MACEDONIAN: posix = _T("mk"); break; - case LANG_DUTCH: posix = _T("nl"); break; - case LANG_NEPALI: posix = _T("ne"); break; + case LANG_INDONESIAN: posix = L"id"; break; + case LANG_ITALIAN: posix = L"it"; break; + case LANG_JAPANESE: posix = L"ja"; break; + case LANG_GEORGIAN: posix = L"ka"; break; + case LANG_KANNADA: posix = L"kn"; break; + case LANG_KOREAN: posix = L"ko"; break; + case LANG_LITHUANIAN: posix = L"lt"; break; + case LANG_MACEDONIAN: posix = L"mk"; break; + case LANG_DUTCH: posix = L"nl"; break; + case LANG_NEPALI: posix = L"ne"; break; case LANG_NORWEGIAN: switch (sub_id) { case SUBLANG_NORWEGIAN_BOKMAL: - posix = _T("nb"); break; + posix = L"nb"; break; case SUBLANG_NORWEGIAN_NYNORSK: - posix = _T("nn"); break; + posix = L"nn"; break; } break; - case LANG_PUNJABI: posix = _T("pa"); break; - case LANG_POLISH: posix = _T("pl"); break; - case LANG_PASHTO: posix = _T("ps"); break; + case LANG_PUNJABI: posix = L"pa"; break; + case LANG_POLISH: posix = L"pl"; break; + case LANG_PASHTO: posix = L"ps"; break; case LANG_PORTUGUESE: switch (sub_id) { case SUBLANG_PORTUGUESE_BRAZILIAN: - posix = _T("pt_BR"); break; + posix = L"pt_BR"; break; default: - posix = _T("pt"); break; + posix = L"pt"; break; } break; - case LANG_ROMANIAN: posix = _T("ro"); break; - case LANG_RUSSIAN: posix = _T("ru"); break; - case LANG_SLOVAK: posix = _T("sk"); break; - case LANG_SLOVENIAN: posix = _T("sl"); break; - case LANG_ALBANIAN: posix = _T("sq"); break; + case LANG_ROMANIAN: posix = L"ro"; break; + case LANG_RUSSIAN: posix = L"ru"; break; + case LANG_SLOVAK: posix = L"sk"; break; + case LANG_SLOVENIAN: posix = L"sl"; break; + case LANG_ALBANIAN: posix = L"sq"; break; /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN */ case LANG_SERBIAN: switch (sub_id) { case SUBLANG_SERBIAN_LATIN: - posix = _T("sr@Latn"); break; + posix = L"sr@Latn"; break; case SUBLANG_SERBIAN_CYRILLIC: - posix = _T("sr"); break; + posix = L"sr"; break; case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: - posix = _T("bs"); break; + posix = L"bs"; break; case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: - posix = _T("hr"); break; + posix = L"hr"; break; } break; - case LANG_SWEDISH: posix = _T("sv"); break; - case LANG_TAMIL: posix = _T("ta"); break; - case LANG_TELUGU: posix = _T("te"); break; - case LANG_THAI: posix = _T("th"); break; - case LANG_TURKISH: posix = _T("tr"); break; - case LANG_UKRAINIAN: posix = _T("uk"); break; - case LANG_VIETNAMESE: posix = _T("vi"); break; - case LANG_XHOSA: posix = _T("xh"); break; + case LANG_SWEDISH: posix = L"sv"; break; + case LANG_TAMIL: posix = L"ta"; break; + case LANG_TELUGU: posix = L"te"; break; + case LANG_THAI: posix = L"th"; break; + case LANG_TURKISH: posix = L"tr"; break; + case LANG_UKRAINIAN: posix = L"uk"; break; + case LANG_VIETNAMESE: posix = L"vi"; break; + case LANG_XHOSA: posix = L"xh"; break; case LANG_CHINESE: switch (sub_id) { case SUBLANG_CHINESE_SIMPLIFIED: - posix = _T("zh_CN"); break; + posix = L"zh_CN"; break; case SUBLANG_CHINESE_TRADITIONAL: - posix = _T("zh_TW"); break; + posix = L"zh_TW"; break; default: - posix = _T("zh"); break; + posix = L"zh"; break; } break; case LANG_URDU: break; @@ -379,8 +372,8 @@ /* Deal with exceptions */ if (posix == NULL) { switch (lcid) { - case 0x0455: posix = _T("my_MM"); break; /* Myanmar (Burmese) */ - case 9999: posix = _T("ku"); break; /* Kurdish (from NSIS) */ + case 0x0455: posix = L"my_MM"; break; /* Myanmar (Burmese) */ + case 9999: posix = L"ku"; break; /* Kurdish (from NSIS) */ } } @@ -392,19 +385,19 @@ - Check NSIS Installer Language reg value - Use default user locale */ -static const TCHAR *winpidgin_get_locale() { - const TCHAR *locale = NULL; +static const wchar_t *winpidgin_get_locale() { + const wchar_t *locale = NULL; LCID lcid; - TCHAR data[10]; - DWORD datalen = sizeof(data) / sizeof(TCHAR); + wchar_t data[10]; + DWORD datalen = sizeof(data) / sizeof(wchar_t); /* Check if user set PIDGINLANG env var */ - if ((locale = _tgetenv(_T("PIDGINLANG")))) + if ((locale = _wgetenv(L"PIDGINLANG"))) return locale; - if (!portable_mode && read_reg_string(HKEY_CURRENT_USER, _T("SOFTWARE\\pidgin"), - _T("Installer Language"), (LPBYTE) &data, &datalen)) { - if ((locale = winpidgin_lcid_to_posix(_ttoi(data)))) + if (!portable_mode && read_reg_string(HKEY_CURRENT_USER, L"SOFTWARE\\pidgin", + L"Installer Language", (LPBYTE) &data, &datalen)) { + if ((locale = winpidgin_lcid_to_posix(_wtoi(data)))) return locale; } @@ -412,39 +405,39 @@ if ((locale = winpidgin_lcid_to_posix(lcid))) return locale; - return _T("en"); + return L"en"; } static void winpidgin_set_locale() { - const TCHAR *locale; - TCHAR envstr[25]; + const wchar_t *locale; + wchar_t envstr[25]; locale = winpidgin_get_locale(); - _sntprintf(envstr, sizeof(envstr) / sizeof(TCHAR), _T("LANG=%s"), locale); - _tprintf(_T("Setting locale: %s\n"), envstr); - _tputenv(envstr); + _snwprintf(envstr, sizeof(envstr) / sizeof(wchar_t), L"LANG=%s", locale); + wprintf(L"Setting locale: %s\n", envstr); + _wputenv(envstr); } static void winpidgin_add_stuff_to_path() { - TCHAR perl_path[MAX_PATH + 1]; - TCHAR *ppath = NULL; - TCHAR mit_kerberos_path[MAX_PATH + 1]; - TCHAR *mpath = NULL; + wchar_t perl_path[MAX_PATH + 1]; + wchar_t *ppath = NULL; + wchar_t mit_kerberos_path[MAX_PATH + 1]; + wchar_t *mpath = NULL; DWORD plen; printf("%s", "Looking for Perl... "); - plen = sizeof(perl_path) / sizeof(TCHAR); - if (read_reg_string(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Perl"), _T(""), + plen = sizeof(perl_path) / sizeof(wchar_t); + if (read_reg_string(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Perl", L"", (LPBYTE) &perl_path, &plen)) { /* We *could* check for perl510.dll, but it seems unnecessary. */ - _tprintf(_T("found in '%s'.\n"), perl_path); + wprintf(L"found in '%s'.\n", perl_path); - if (perl_path[_tcslen(perl_path) - 1] != _T('\\')) - _tcscat(perl_path, _T("\\")); - _tcscat(perl_path, _T("bin")); + if (perl_path[wcslen(perl_path) - 1] != L'\\') + wcscat(perl_path, L"\\"); + wcscat(perl_path, L"bin"); ppath = perl_path; } else @@ -452,47 +445,47 @@ printf("%s", "Looking for MIT Kerberos... "); - plen = sizeof(mit_kerberos_path) / sizeof(TCHAR); - if (read_reg_string(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\MIT\\Kerberos"), _T("InstallDir"), + plen = sizeof(mit_kerberos_path) / sizeof(wchar_t); + if (read_reg_string(HKEY_LOCAL_MACHINE, L"SOFTWARE\\MIT\\Kerberos", L"InstallDir", (LPBYTE) &mit_kerberos_path, &plen)) { /* We *could* check for gssapi32.dll */ - _tprintf(_T("found in '%s'.\n"), mit_kerberos_path); + wprintf(L"found in '%s'.\n", mit_kerberos_path); - if (mit_kerberos_path[_tcslen(mit_kerberos_path) - 1] != _T('\\')) - _tcscat(mit_kerberos_path, _T("\\")); - _tcscat(mit_kerberos_path, _T("bin")); + if (mit_kerberos_path[wcslen(mit_kerberos_path) - 1] != L'\\') + wcscat(mit_kerberos_path, L"\\"); + wcscat(mit_kerberos_path, L"bin"); mpath = mit_kerberos_path; } else printf("%s", "not found.\n"); if (ppath != NULL || mpath != NULL) { - const TCHAR *path = _tgetenv(_T("PATH")); - BOOL add_ppath = ppath != NULL && (path == NULL || !_tcsstr(path, ppath)); - BOOL add_mpath = mpath != NULL && (path == NULL || !_tcsstr(path, mpath)); - TCHAR *newpath; + const wchar_t *path = _wgetenv(L"PATH"); + BOOL add_ppath = ppath != NULL && (path == NULL || !wcsstr(path, ppath)); + BOOL add_mpath = mpath != NULL && (path == NULL || !wcsstr(path, mpath)); + wchar_t *newpath; int newlen; if (add_ppath || add_mpath) { /* Enough to add "PATH=" + path + ";" + ppath + ";" + mpath + \0 */ - newlen = 6 + (path ? _tcslen(path) + 1 : 0); + newlen = 6 + (path ? wcslen(path) + 1 : 0); if (add_ppath) - newlen += _tcslen(ppath) + 1; + newlen += wcslen(ppath) + 1; if (add_mpath) - newlen += _tcslen(mpath) + 1; - newpath = malloc(newlen * sizeof(TCHAR)); + newlen += wcslen(mpath) + 1; + newpath = malloc(newlen * sizeof(wchar_t)); - _sntprintf(newpath, newlen, _T("PATH=%s%s%s%s%s%s"), - path ? path : _T(""), - path ? _T(";") : _T(""), - add_ppath ? ppath : _T(""), - add_ppath ? _T(";") : _T(""), - add_mpath ? mpath : _T(""), - add_mpath ? _T(";") : _T("")); + _snwprintf(newpath, newlen, L"PATH=%s%s%s%s%s%s", + path ? path : L"", + path ? L";" : L"", + add_ppath ? ppath : L"", + add_ppath ? L";" : L"", + add_mpath ? mpath : L"", + add_mpath ? L";" : L""); - _tprintf(_T("New PATH: %s\n"), newpath); + wprintf(L"New PATH: %s\n", newpath); - _tputenv(newpath); + _wputenv(newpath); free(newpath); } } @@ -504,7 +497,7 @@ static BOOL winpidgin_set_running(BOOL fail_if_running) { HANDLE h; - if ((h = CreateMutex(NULL, FALSE, _T("pidgin_is_running")))) { + if ((h = CreateMutexW(NULL, FALSE, L"pidgin_is_running"))) { DWORD err = GetLastError(); if (err == ERROR_ALREADY_EXISTS) { if (fail_if_running) { @@ -512,14 +505,14 @@ printf("An instance of Pidgin is already running.\n"); - if((msg_win = FindWindowEx(NULL, NULL, _T("WinpidginMsgWinCls"), NULL))) + if((msg_win = FindWindowExW(NULL, NULL, L"WinpidginMsgWinCls", NULL))) if(SendMessage(msg_win, PIDGIN_WM_FOCUS_REQUEST, (WPARAM) NULL, (LPARAM) NULL)) return FALSE; /* If we get here, the focus request wasn't successful */ - MessageBox(NULL, - _T("An instance of Pidgin is already running"), + MessageBoxW(NULL, + L"An instance of Pidgin is already running", NULL, MB_OK | MB_TOPMOST); return FALSE; @@ -555,7 +548,7 @@ return; } - if (!(msg_win = FindWindowEx(NULL, NULL, _T("WinpidginMsgWinCls"), NULL))) { + if (!(msg_win = FindWindowExW(NULL, NULL, L"WinpidginMsgWinCls", NULL))) { printf("Unable to find an instance of Pidgin to handle protocol message.\n"); return; } @@ -576,8 +569,8 @@ GetWindowThreadProcessId(msg_win, &pid); if (!(process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, pid))) { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _tprintf(_T("Unable to open Pidgin process. (%u) %s\n"), (UINT) dw, err_msg); + const wchar_t *err_msg = get_win32_error_message(dw); + wprintf(L"Unable to open Pidgin process. (%u) %s\n", (UINT) dw, err_msg); return; } @@ -591,15 +584,15 @@ printf("Unable to send protocol message to Pidgin instance.\n"); } else { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _tprintf(_T("Unable to write to remote memory. (%u) %s\n"), (UINT) dw, err_msg); + const wchar_t *err_msg = get_win32_error_message(dw); + wprintf(L"Unable to write to remote memory. (%u) %s\n", (UINT) dw, err_msg); } VirtualFreeEx(process, remote_msg, 0, MEM_RELEASE); } else { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _tprintf(_T("Unable to allocate remote memory. (%u) %s\n"), (UINT) dw, err_msg); + const wchar_t *err_msg = get_win32_error_message(dw); + wprintf(L"Unable to allocate remote memory. (%u) %s\n", (UINT) dw, err_msg); } CloseHandle(process); @@ -610,11 +603,11 @@ int _stdcall WinMain (struct HINSTANCE__ *hInstance, struct HINSTANCE__ *hPrevInstance, char *lpszCmdLine, int nCmdShow) { - TCHAR errbuf[512]; - TCHAR pidgin_dir[MAX_PATH]; - TCHAR exe_name[MAX_PATH]; + wchar_t errbuf[512]; + wchar_t pidgin_dir[MAX_PATH]; + wchar_t exe_name[MAX_PATH]; HMODULE hmod; - TCHAR *tmp; + wchar_t *tmp; wchar_t *wtmp; int pidgin_argc; char **pidgin_argv; /* This is in utf-8 */ @@ -654,7 +647,7 @@ * (_istty() doesn't work for stuff using the GUI subsystem) */ if (_fileno(stdout) == -1 || _fileno(stdout) == -2) { LPFNATTACHCONSOLE MyAttachConsole = NULL; - if ((hmod = GetModuleHandle(_T("kernel32.dll")))) { + if ((hmod = GetModuleHandleW(L"kernel32.dll"))) { MyAttachConsole = (LPFNATTACHCONSOLE) GetProcAddress(hmod, "AttachConsole"); @@ -676,20 +669,20 @@ } /* Load exception handler if we have it */ - if (GetModuleFileName(NULL, pidgin_dir, MAX_PATH) != 0) { + if (GetModuleFileNameW(NULL, pidgin_dir, MAX_PATH) != 0) { /* primitive dirname() */ - tmp = _tcsrchr(pidgin_dir, _T('\\')); + tmp = wcsrchr(pidgin_dir, L'\\'); if (tmp) { HMODULE hmod; - tmp[0] = _T('\0'); + tmp[0] = L'\0'; /* tmp++ will now point to the executable file name */ - _tcscpy(exe_name, tmp + 1); + wcscpy(exe_name, tmp + 1); - _tcscat(pidgin_dir, _T("\\exchndl.dll")); - if ((hmod = LoadLibrary(pidgin_dir))) { + wcscat(pidgin_dir, L"\\exchndl.dll"); + if ((hmod = LoadLibraryW(pidgin_dir))) { FARPROC proc; /* exchndl.dll is built without UNICODE */ char debug_dir[MAX_PATH]; @@ -709,8 +702,7 @@ proc = GetProcAddress(hmod, "SetDebugInfoDir"); if (proc) { char *pidgin_dir_ansi = NULL; - tmp[0] = _T('\0'); -#ifdef _UNICODE + tmp[0] = L'\0'; i = WideCharToMultiByte(CP_ACP, 0, pidgin_dir, -1, NULL, 0, NULL, NULL); if (i != 0) { @@ -722,9 +714,6 @@ pidgin_dir_ansi = NULL; } } -#else - pidgin_dir_ansi = pidgin_dir; -#endif if (pidgin_dir_ansi != NULL) { _snprintf(debug_dir, sizeof(debug_dir) / sizeof(char), "%s\\pidgin-%s-dbgsym", @@ -733,30 +722,28 @@ printf(" Setting exchndl.dll DebugInfoDir to %s\n", debug_dir); (proc)(debug_dir); -#ifdef _UNICODE free(pidgin_dir_ansi); -#endif } } } - tmp[0] = _T('\0'); + tmp[0] = L'\0'; } } else { DWORD dw = GetLastError(); - const TCHAR *err_msg = get_win32_error_message(dw); - _sntprintf(errbuf, 512, - _T("Error getting module filename.\nError: (%u) %s"), + const wchar_t *err_msg = get_win32_error_message(dw); + _snwprintf(errbuf, 512, + L"Error getting module filename.\nError: (%u) %s", (UINT) dw, err_msg); - _tprintf(_T("%s\n"), errbuf); - MessageBox(NULL, errbuf, NULL, MB_OK | MB_TOPMOST); - pidgin_dir[0] = _T('\0'); + wprintf(L"%s\n", errbuf); + MessageBoxW(NULL, errbuf, NULL, MB_OK | MB_TOPMOST); + pidgin_dir[0] = L'\0'; } /* Determine if we're running in portable mode */ if (wcsstr(cmdLine, L"--portable-mode") - || (exe_name != NULL && _tcsstr(exe_name, _T("-portable.exe")))) { + || (exe_name != NULL && wcsstr(exe_name, L"-portable.exe"))) { printf("Running in PORTABLE mode.\n"); portable_mode = TRUE; } @@ -776,20 +763,20 @@ return 0; /* Now we are ready for Pidgin .. */ - if ((hmod = LoadLibrary(_T("pidgin.dll")))) + if ((hmod = LoadLibraryW(L"pidgin.dll"))) pidgin_main = (LPFNPIDGINMAIN) GetProcAddress(hmod, "pidgin_main"); if (!pidgin_main) { DWORD dw = GetLastError(); BOOL mod_not_found = (dw == ERROR_MOD_NOT_FOUND || dw == ERROR_DLL_NOT_FOUND); - const TCHAR *err_msg = get_win32_error_message(dw); + const wchar_t *err_msg = get_win32_error_message(dw); - _sntprintf(errbuf, 512, _T("Error loading pidgin.dll.\nError: (%u) %s%s%s"), + _snwprintf(errbuf, 512, L"Error loading pidgin.dll.\nError: (%u) %s%s%s", (UINT) dw, err_msg, - mod_not_found ? _T("\n") : _T(""), - mod_not_found ? _T("This probably means that GTK+ can't be found.") : _T("")); - _tprintf(_T("%s\n"), errbuf); - MessageBox(NULL, errbuf, _T("Error"), MB_OK | MB_TOPMOST); + mod_not_found ? L"\n" : L"", + mod_not_found ? L"This probably means that GTK+ can't be found." : L""); + wprintf(L"%s\n", errbuf); + MessageBoxW(NULL, errbuf, L"Error", MB_OK | MB_TOPMOST); return 0; }
--- a/pidgin/win32/wspell.c Fri Mar 12 06:25:15 2010 +0000 +++ b/pidgin/win32/wspell.c Wed Mar 17 02:06:54 2010 +0000 @@ -95,41 +95,6 @@ SetErrorMode(old_error_mode); } -static void lookup_aspell_path() { - const char *tmp; - gchar *aspell_path; - - if ((tmp = g_getenv("PIDGIN_ASPELL_DIR"))) - aspell_path = g_strdup(tmp); - else - aspell_path = wpurple_read_reg_string(HKEY_LOCAL_MACHINE, "Software\\Aspell", "Path"); - - if (aspell_path != NULL) { - char *tmp = g_build_filename(aspell_path, "aspell-15.dll", NULL); - if (g_file_test(tmp, G_FILE_TEST_EXISTS)) { - const char *path = g_getenv("PATH"); - purple_debug_info("wspell", "Found Aspell in %s\n", aspell_path); - - g_free(tmp); - - tmp = g_strdup_printf("%s%s%s", (path ? path : ""), - (path ? G_SEARCHPATH_SEPARATOR_S : ""), - aspell_path); - - g_setenv("PATH", tmp, TRUE); - - } else - purple_debug_warning("wspell", "Couldn't find aspell-15.dll\n"); - - g_free(tmp); - g_free(aspell_path); - } else - purple_debug_warning("wspell", "Aspell installation not found (this isn't necessarily a problem)\n"); -} - void winpidgin_spell_init() { - /* We keep doing the aspell path thing so that previously installed dictionaries still work */ - lookup_aspell_path(); - load_gtkspell(); }