diff options
author | Marcus Lundblad <malu@pidgin.im> | 2010-03-14 21:20:14 +0000 |
---|---|---|
committer | Marcus Lundblad <malu@pidgin.im> | 2010-03-14 21:20:14 +0000 |
commit | 3c621ea80131fee9e3f01f623dd9d05dca77b1d7 (patch) | |
tree | 182edf3b74c7b0f8c77405e7d48e550375bb4bc1 | |
parent | 86156393425dba5492c21d9209b214c061f136aa (diff) | |
parent | a3cfe7d38aeaed0ce55c51671d435e3eda151c16 (diff) | |
download | pidgin-3c621ea80131fee9e3f01f623dd9d05dca77b1d7.tar.gz |
propagate from branch 'im.pidgin.pidgin' (head 121dab07243afbe94e6d84ef70a252f0cc96289e)
to branch 'im.pidgin.cpw.malu.ft_thumbnails' (head 543d1704573378fd21a625ed3ccbf77365515640)
-rw-r--r-- | ChangeLog | 19 | ||||
-rw-r--r-- | ChangeLog.API | 1 | ||||
-rw-r--r-- | ChangeLog.win32 | 3 | ||||
-rw-r--r-- | Makefile.mingw | 2 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | libpurple/plugins/perl/common/Makefile.mingw | 1 | ||||
-rw-r--r-- | libpurple/protocols/jabber/libxmpp.c | 2 | ||||
-rw-r--r-- | libpurple/protocols/oscar/libaim.c | 1 | ||||
-rw-r--r-- | libpurple/protocols/oscar/libicq.c | 3 | ||||
-rw-r--r-- | libpurple/protocols/yahoo/libymsg.c | 17 | ||||
-rw-r--r-- | libpurple/protocols/yahoo/libymsg.h | 1 | ||||
-rw-r--r-- | libpurple/win32/global.mak | 2 | ||||
-rw-r--r-- | libpurple/win32/rules.mak | 2 | ||||
-rw-r--r-- | pidgin/gtkblist.c | 360 | ||||
-rw-r--r-- | pidgin/gtkdialogs.c | 6 | ||||
-rw-r--r-- | pidgin/gtkimhtml.c | 23 | ||||
-rw-r--r-- | pidgin/plugins/perl/common/Makefile.mingw | 1 | ||||
-rwxr-xr-x | pidgin/win32/nsis/generate_gtk_zip.sh | 15 | ||||
-rw-r--r-- | po/POTFILES.in | 10 |
19 files changed, 314 insertions, 159 deletions
@@ -20,6 +20,8 @@ version 2.7.0 (??/??/????): * 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,14 +32,27 @@ version 2.7.0 (??/??/????): * 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. + + MSN: + * Support for version 9 of the MSN protocol has been removed. This + version is no longer supported on the servers. XMPP: * Direct messages to a specific resource only upon receipt of a message 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) diff --git a/ChangeLog.API b/ChangeLog.API index 5dc9206bd8..5855fae2e9 100644 --- a/ChangeLog.API +++ b/ChangeLog.API @@ -23,6 +23,7 @@ version 2.7.0 (??/??/????): * ui-caps-changed media manager signal * sent-attention conversation signal * got-attention conversation signal + * PurpleMood struct in status.h Pidgin: Added: diff --git a/ChangeLog.win32 b/ChangeLog.win32 index 8010347bd0..f3cf4e2e08 100644 --- a/ChangeLog.win32 +++ b/ChangeLog.win32 @@ -1,6 +1,7 @@ version 2.7.0 (??/??/????): - * Minimum required GTK+ version increased to 2.14.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 * Win9x no longer supported. * Crash Report files (pidgin.RPT) are now generated in the ~/.purple directory instead of the installation directory. diff --git a/Makefile.mingw b/Makefile.mingw index 603ad68ce5..58577489a4 100644 --- a/Makefile.mingw +++ b/Makefile.mingw @@ -31,7 +31,7 @@ awk 'BEGIN {FS="."} { \ exit; \ }' VERSION) -GTK_INSTALL_VERSION = 2.14.7.0 +GTK_INSTALL_VERSION = 2.16.6.0 STRIPPED_RELEASE_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-win32bin DEBUG_SYMBOLS_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-dbgsym diff --git a/configure.ac b/configure.ac index 65e4d8b770..d733037396 100644 --- a/configure.ac +++ b/configure.ac @@ -1091,6 +1091,10 @@ fi AM_CONDITIONAL(USE_INTERNAL_LIBGADU, test "x$gadu_libs" != "xyes") +if test "x$gadu_libs" = "x"; then + gadu_libs=no +fi + AC_SUBST(GADU_LIBS) AC_SUBST(GADU_CFLAGS) diff --git a/libpurple/plugins/perl/common/Makefile.mingw b/libpurple/plugins/perl/common/Makefile.mingw index dbc7b0e872..e074d7c523 100644 --- a/libpurple/plugins/perl/common/Makefile.mingw +++ b/libpurple/plugins/perl/common/Makefile.mingw @@ -13,7 +13,6 @@ DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES)) TARGET = Purple AUTOSPLIT = lib/auto/Purple/autosplit.ix -EXTUTILS ?= C:/perl/lib/ExtUtils PERL_PLUGIN_TOP := .. ## diff --git a/libpurple/protocols/jabber/libxmpp.c b/libpurple/protocols/jabber/libxmpp.c index 7f75e8ac7b..d41160b29d 100644 --- a/libpurple/protocols/jabber/libxmpp.c +++ b/libpurple/protocols/jabber/libxmpp.c @@ -257,7 +257,7 @@ init_plugin(PurplePlugin *plugin) purple_account_user_split_set_reverse(split, FALSE); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); - split = purple_account_user_split_new(_("Resource"), NULL, '/'); + split = purple_account_user_split_new(_("Resource"), "", '/'); purple_account_user_split_set_reverse(split, FALSE); prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); diff --git a/libpurple/protocols/oscar/libaim.c b/libpurple/protocols/oscar/libaim.c index 7d62d94549..5345b25d63 100644 --- a/libpurple/protocols/oscar/libaim.c +++ b/libpurple/protocols/oscar/libaim.c @@ -31,7 +31,6 @@ static PurplePluginProtocolInfo prpl_info = OPT_PROTO_MAIL_CHECK | OPT_PROTO_IM_IMAGE, NULL, /* user_splits */ NULL, /* protocol_options */ - /* The mimimum icon size below is not needed in AIM 6.0 */ {"gif,jpeg,bmp,ico", 0, 0, 100, 100, 7168, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ oscar_list_icon_aim, /* list_icon */ oscar_list_emblem, /* list_emblems */ diff --git a/libpurple/protocols/oscar/libicq.c b/libpurple/protocols/oscar/libicq.c index def3c761e7..2972466075 100644 --- a/libpurple/protocols/oscar/libicq.c +++ b/libpurple/protocols/oscar/libicq.c @@ -41,8 +41,7 @@ static PurplePluginProtocolInfo prpl_info = OPT_PROTO_MAIL_CHECK | OPT_PROTO_IM_IMAGE, NULL, /* user_splits */ NULL, /* protocol_options */ - {"gif,jpeg,bmp,ico", 48, 48, 52, 64, 7168, - PURPLE_ICON_SCALE_SEND | PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ + {"gif,jpeg,bmp,ico", 0, 0, 100, 100, 7168, PURPLE_ICON_SCALE_DISPLAY}, /* icon_spec */ oscar_list_icon_icq, /* list_icon */ oscar_list_emblem, /* list_emblems */ oscar_status_text, /* status_text */ diff --git a/libpurple/protocols/yahoo/libymsg.c b/libpurple/protocols/yahoo/libymsg.c index 568489cf29..272e5594e8 100644 --- a/libpurple/protocols/yahoo/libymsg.c +++ b/libpurple/protocols/yahoo/libymsg.c @@ -1854,6 +1854,7 @@ static void yahoo_auth16_stage1_cb(PurpleUtilFetchUrlData *unused, gpointer user 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 @@ static void yahoo_auth16_stage1_cb(PurpleUtilFetchUrlData *unused, gpointer user 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 @@ static void yahoo_auth16_stage1_cb(PurpleUtilFetchUrlData *unused, gpointer user 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 @@ static void yahoo_auth16_stage1_cb(PurpleUtilFetchUrlData *unused, gpointer user 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 @@ static void yahoo_process_p2p(PurpleConnection *gc, struct yahoo_packet *pkt) 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) { diff --git a/libpurple/protocols/yahoo/libymsg.h b/libpurple/protocols/yahoo/libymsg.h index 335d17b7f7..26fb98b78b 100644 --- a/libpurple/protocols/yahoo/libymsg.h +++ b/libpurple/protocols/yahoo/libymsg.h @@ -119,6 +119,7 @@ enum yahoo_status { 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, diff --git a/libpurple/win32/global.mak b/libpurple/win32/global.mak index ee95ec6a2c..979a891fff 100644 --- a/libpurple/win32/global.mak +++ b/libpurple/win32/global.mak @@ -105,7 +105,7 @@ endif 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 diff --git a/libpurple/win32/rules.mak b/libpurple/win32/rules.mak index 57723976a4..7d1962154f 100644 --- a/libpurple/win32/rules.mak +++ b/libpurple/win32/rules.mak @@ -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 $@ diff --git a/pidgin/gtkblist.c b/pidgin/gtkblist.c index a33d3bb919..84466cac6d 100644 --- a/pidgin/gtkblist.c +++ b/pidgin/gtkblist.c @@ -3384,6 +3384,253 @@ toggle_debug(void) !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 @@ static GtkItemFactoryEntry blist_menu[] = { 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 @@ static GdkPixbuf * _pidgin_blist_get_cached_emblem(gchar *path) { 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 @@ disable_account_cb(GtkCheckMenuItem *widget, gpointer data) 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) diff --git a/pidgin/gtkdialogs.c b/pidgin/gtkdialogs.c index 494b737739..b73dbdfd46 100644 --- a/pidgin/gtkdialogs.c +++ b/pidgin/gtkdialogs.c @@ -76,7 +76,6 @@ static const struct developer developers[] = { {"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 @@ static const struct developer developers[] = { {"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 @@ static const struct developer patch_writers[] = { /* 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"}, diff --git a/pidgin/gtkimhtml.c b/pidgin/gtkimhtml.c index e5bcfacb42..bffc2eda3d 100644 --- a/pidgin/gtkimhtml.c +++ b/pidgin/gtkimhtml.c @@ -191,7 +191,7 @@ clipboard_win32_to_html(char *clipboard) { purple_debug_info("imhtml clipboard", "from clipboard: %s\n", clipboard); - fd = g_fopen("e:\\purplecb.txt", "wb"); + fd = g_fopen("c:\\purplecb.txt", "wb"); fprintf(fd, "%s", clipboard); fclose(fd); #endif @@ -1188,6 +1188,14 @@ static void paste_received_cb (GtkClipboard *clipboard, GtkSelectionData *select memcpy(text, selection_data->data, selection_data->length); } +#ifdef _WIN32 + if (gtk_selection_data_get_data_type(selection_data) == gdk_atom_intern("HTML Format", FALSE)) { + char *tmp = clipboard_win32_to_html(text); + g_free(text); + text = tmp; + } +#endif + if (selection_data->length >= 2 && (*(guint16 *)text == 0xfeff || *(guint16 *)text == 0xfffe)) { /* This is UTF-16 */ @@ -1247,13 +1255,16 @@ static void paste_clipboard_cb(GtkIMHtml *imhtml, gpointer blah) #ifdef _WIN32 /* If we're on windows, let's see if we can get data from the HTML Format clipboard before we try to paste from the GTK buffer */ - if (!clipboard_paste_html_win32(imhtml)) -#endif - { + if (!clipboard_paste_html_win32(imhtml)) { + GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD); + gtk_clipboard_request_text(clipboard, paste_plaintext_received_cb, imhtml); + + } +#else GtkClipboard *clipboard = gtk_widget_get_clipboard(GTK_WIDGET(imhtml), GDK_SELECTION_CLIPBOARD); gtk_clipboard_request_contents(clipboard, gdk_atom_intern("text/html", FALSE), paste_received_cb, imhtml); - } +#endif g_signal_stop_emission_by_name(imhtml, "paste-clipboard"); } @@ -1679,8 +1690,10 @@ static void gtk_imhtml_init (GtkIMHtml *imhtml) g_signal_connect_after(G_OBJECT(imhtml), "realize", G_CALLBACK(imhtml_realized_remove_primary), NULL); g_signal_connect(G_OBJECT(imhtml), "unrealize", G_CALLBACK(imhtml_destroy_add_primary), NULL); +#ifndef _WIN32 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_so_update_selection_cb), imhtml); +#endif gtk_widget_add_events(GTK_WIDGET(imhtml), GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK); diff --git a/pidgin/plugins/perl/common/Makefile.mingw b/pidgin/plugins/perl/common/Makefile.mingw index 2f66802be0..9e558241db 100644 --- a/pidgin/plugins/perl/common/Makefile.mingw +++ b/pidgin/plugins/perl/common/Makefile.mingw @@ -12,7 +12,6 @@ GCCWARNINGS += -Wno-comment -Wno-unused -Wno-nested-externs DEFINES := $(subst -DWIN32_LEAN_AND_MEAN,,$(DEFINES)) TARGET = Pidgin -EXTUTILS ?= C:/perl/lib/ExtUtils ## ## INCLUDE PATHS diff --git a/pidgin/win32/nsis/generate_gtk_zip.sh b/pidgin/win32/nsis/generate_gtk_zip.sh index 6466f7fe2d..abe222781a 100755 --- a/pidgin/win32/nsis/generate_gtk_zip.sh +++ b/pidgin/win32/nsis/generate_gtk_zip.sh @@ -14,26 +14,21 @@ INSTALL_DIR=Gtk CONTENTS_FILE=$INSTALL_DIR/CONTENTS #This needs to be changed every time there is any sort of change. -BUNDLE_VERSION=2.14.7.0 +BUNDLE_VERSION=2.16.6.0 -ATK="http://ftp.gnome.org/pub/gnome/binaries/win32/atk/1.24/atk_1.24.0-1_win32.zip ATK 1.24.0-1" +ATK="http://ftp.acc.umu.se/pub/gnome/binaries/win32/atk/1.26/atk_1.26.0-1_win32.zip ATK 1.26.0-1" CAIRO="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/cairo_1.8.10-1_win32.zip Cairo 1.8.10-1" EXPAT="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/expat_2.0.1-1_win32.zip Expat 2.0.1-1" FONTCONFIG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/fontconfig_2.8.0-2_win32.zip Fontconfig 2.8.0-2" FREETYPE="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/freetype_2.3.11-2_win32.zip Freetype 2.3.11-2" GETTEXT="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime-0.17-1.zip Gettext 0.17-1" GLIB="http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.20/glib_2.20.5-1_win32.zip Glib 2.20.5-1" -GTK="http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.14/gtk+_2.14.7-1_win32.zip GTK+ 2.14.7-1" -LIBJPEG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/jpeg-6b-4.zip libjpeg 6b-4" -#Used by GTK+ -LIBPNG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng_1.2.39-1_win32.zip libpng 1.2.39-1" -#Used by Cairo -LIBPNG2="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng_1.4.0-1_win32.zip libpng 1.4.0-1" -LIBTIFF="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libtiff_3.9.1-1_win32.zip libtiff 3.9.1-1" +GTK="http://ftp.acc.umu.se/pub/gnome/binaries/win32/gtk+/2.16/gtk+_2.16.6-2_win32.zip GTK+ 2.16.6-2" +LIBPNG="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/libpng_1.4.0-1_win32.zip libpng 1.4.0-1" PANGO="http://ftp.gnome.org/pub/gnome/binaries/win32/pango/1.26/pango_1.26.2-1_win32.zip Pango 1.26.2-1" ZLIB="http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/zlib-1.2.3.zip zlib 1.2.3" -ALL="ATK CAIRO EXPAT FONTCONFIG FREETYPE GETTEXT GLIB GTK LIBJPEG LIBPNG LIBPNG2 LIBTIFF PANGO ZLIB" +ALL="ATK CAIRO EXPAT FONTCONFIG FREETYPE GETTEXT GLIB GTK LIBPNG PANGO ZLIB" mkdir -p $STAGE_DIR cd $STAGE_DIR diff --git a/po/POTFILES.in b/po/POTFILES.in index 5872365a9d..16a59190b9 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -119,16 +119,6 @@ libpurple/protocols/msn/slp.c libpurple/protocols/msn/state.c libpurple/protocols/msn/switchboard.c libpurple/protocols/msn/userlist.c -libpurple/protocols/msnp9/dialog.c -libpurple/protocols/msnp9/error.c -libpurple/protocols/msnp9/msn.c -libpurple/protocols/msnp9/nexus.c -libpurple/protocols/msnp9/notification.c -libpurple/protocols/msnp9/servconn.c -libpurple/protocols/msnp9/session.c -libpurple/protocols/msnp9/state.c -libpurple/protocols/msnp9/switchboard.c -libpurple/protocols/msnp9/userlist.c libpurple/protocols/mxit/actions.c libpurple/protocols/mxit/filexfer.c libpurple/protocols/mxit/http.c |