summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Lundblad <malu@pidgin.im>2010-03-14 21:20:14 +0000
committerMarcus Lundblad <malu@pidgin.im>2010-03-14 21:20:14 +0000
commit3c621ea80131fee9e3f01f623dd9d05dca77b1d7 (patch)
tree182edf3b74c7b0f8c77405e7d48e550375bb4bc1
parent86156393425dba5492c21d9209b214c061f136aa (diff)
parenta3cfe7d38aeaed0ce55c51671d435e3eda151c16 (diff)
downloadpidgin-3c621ea80131fee9e3f01f623dd9d05dca77b1d7.tar.gz
propagate from branch 'im.pidgin.pidgin' (head 121dab07243afbe94e6d84ef70a252f0cc96289e)
to branch 'im.pidgin.cpw.malu.ft_thumbnails' (head 543d1704573378fd21a625ed3ccbf77365515640)
-rw-r--r--ChangeLog19
-rw-r--r--ChangeLog.API1
-rw-r--r--ChangeLog.win323
-rw-r--r--Makefile.mingw2
-rw-r--r--configure.ac4
-rw-r--r--libpurple/plugins/perl/common/Makefile.mingw1
-rw-r--r--libpurple/protocols/jabber/libxmpp.c2
-rw-r--r--libpurple/protocols/oscar/libaim.c1
-rw-r--r--libpurple/protocols/oscar/libicq.c3
-rw-r--r--libpurple/protocols/yahoo/libymsg.c17
-rw-r--r--libpurple/protocols/yahoo/libymsg.h1
-rw-r--r--libpurple/win32/global.mak2
-rw-r--r--libpurple/win32/rules.mak2
-rw-r--r--pidgin/gtkblist.c360
-rw-r--r--pidgin/gtkdialogs.c6
-rw-r--r--pidgin/gtkimhtml.c23
-rw-r--r--pidgin/plugins/perl/common/Makefile.mingw1
-rwxr-xr-xpidgin/win32/nsis/generate_gtk_zip.sh15
-rw-r--r--po/POTFILES.in10
19 files changed, 314 insertions, 159 deletions
diff --git a/ChangeLog b/ChangeLog
index 3bcfa1d963..aa1cd928eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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