--- a/ChangeLog Wed Sep 20 01:38:28 2017 +0200
+++ b/ChangeLog Wed Nov 29 20:40:36 2017 +0100
@@ -1,17 +1,40 @@
Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
-version 2.12.1 (??/??/????):
+version 2.13.0 (??/??/????): * Unified string comparison. (PR #186) (Arkadiy Illarionov)
+ * Properlly shell escape URI's when opening them. (PR #271 Daniel Kamil Kozar) + * Fixed build against curses 6.0 with opaque structs set. (#16764 dimstar) + (PR #268 Daniel Kamil Kozar) + * Fixed a crash when resizing the window. (#16680 marcus) (PR #269 Daniel Kamil Kozar) + * Fixed bashism in autotools. (#16836 lameventanas) (PR #267 Daniel Kamil Kozar) * Show XEP-0066 OOB URLs in any message, not just headlines
+ * Fix a user after free (#17200 debarshiray) (PR #266 Ethan Blanton) + * Removed pipelining from BOSH connections (#17025 PR #295 Tom Li) * Fix "Registration timeout" on SASL auth with InspIRCd servers
(and possibly others not based on charybdis/ratbox/ircd-seven)
* Fix issues with plugins that modify outgoing messages
(such as the custom PART/QUIT feature of the IRC More plugin)
+ * Fix IRC buffer handling. (#12562 PR #272 Shivaram Lingamneni) + * Better support for dark themes. (#12572 Alyssa Rosenzweig and Gary Kramlich) + * Fixed IPv6 links by not escaping []'s. (#16391 cyisfor) (PR #270 Daniel Kamil Kozar) + * Only write buddy icons to the cache if they're not already cached. (PR #276 David Woodhouse) + * Rejoin persistent chats after reconnect. (#15687 PR #285 Christof Meerwald) + * Made the WIN32 Transparency plugin work on all platforms. (#3124 PR #287 Daniel Kamil Kozar) + * Ensure search results buttons are labeled (Backport from de2d88e575ee) + * Fix handling of search results (#17238 David Woodhouse) version 2.12.0 (03/09/2017):
--- a/configure.ac Wed Sep 20 01:38:28 2017 +0200
+++ b/configure.ac Wed Nov 29 20:40:36 2017 +0100
@@ -43,10 +43,10 @@
# Make sure to update finch/libgnt/configure.ac with libgnt version changes.
-m4_define([purple_lt_current], [12])
+m4_define([purple_lt_current], [13]) m4_define([purple_major_version], [2])
-m4_define([purple_minor_version], [12])
-m4_define([purple_micro_version], [1])
+m4_define([purple_minor_version], [13]) +m4_define([purple_micro_version], [0]) m4_define([purple_version_suffix], [devel])
m4_define([purple_version],
[purple_major_version.purple_minor_version.purple_micro_version])
@@ -748,7 +748,7 @@
[compile with GStreamer 0.10 or 1.0 interface (default: auto)])],
with_gstreamer="$withval", with_gstreamer="auto")
if test "x$enable_gst" != "xno"; then
- if test "x$with_gstreamer" == "xauto"; then
+ if test "x$with_gstreamer" = "xauto"; then PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [
AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
@@ -772,7 +772,7 @@
- elif test "x$with_gstreamer" == "x1.0"; then
+ elif test "x$with_gstreamer" = "x1.0"; then PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [
AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer 1.0 for playing sounds])
AC_SUBST(GSTREAMER_CFLAGS)
@@ -787,7 +787,7 @@
- elif test "x$with_gstreamer" == "x0.10"; then
+ elif test "x$with_gstreamer" = "x0.10"; then PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [
AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer 0.10 for playing sounds])
AC_SUBST(GSTREAMER_CFLAGS)
@@ -807,14 +807,14 @@
-if test "x$with_gtk" == "x3" -a "x$with_gstreamer" == "x0.10"; then
+if test "x$with_gtk" = "x3" -a "x$with_gstreamer" = "x0.10"; then AC_MSG_ERROR([WebKitGTK+ 3.0 cannot be mixed with GStreamer 0.10.
Please switch to WebKitGTK+ 2.0 or GStreamer 1.0.])
-elif test "x$with_gtk" == "x2" -a "x$with_gstreamer" == "x1.0"; then
+elif test "x$with_gtk" = "x2" -a "x$with_gstreamer" = "x1.0"; then AC_MSG_ERROR([WebKitGTK+ 2.0 cannot be mixed with GStreamer 1.0.
Please switch to WebKitGTK+ 3.0 or GStreamer 0.10.])
-if test "x$with_gstreamer" == "x0.10" -o "x$with_gstreamer" == "x1.0"; then
+if test "x$with_gstreamer" = "x0.10" -o "x$with_gstreamer" = "x1.0"; then AC_SUBST(GSTREAMER_VER, [$with_gstreamer])
AC_SUBST(GSTREAMER_VER, "")
@@ -823,7 +823,7 @@
dnl #######################################################################
dnl # Check for GStreamer Video
dnl #######################################################################
-if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x1.0"; then
+if test "x$enable_gst" != "xno" -a "x$with_gstreamer" = "x1.0"; then AC_ARG_ENABLE(gstreamer-video,
[AS_HELP_STRING([--disable-gstreamer-video], [compile without GStreamer 1.0 Video Overlay support])],
enable_gstvideo="$enableval", enable_gstvideo="yes")
@@ -843,7 +843,7 @@
dnl #######################################################################
dnl # Check for GStreamer Interfaces
dnl #######################################################################
-if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x0.10"; then
+if test "x$enable_gst" != "xno" -a "x$with_gstreamer" = "x0.10"; then AC_ARG_ENABLE(gstreamer-interfaces,
[AS_HELP_STRING([--disable-gstreamer-interfaces], [compile without GStreamer 0.10 interface support])],
enable_gstinterfaces="$enableval", enable_gstinterfaces="yes")
@@ -867,7 +867,7 @@
[AS_HELP_STRING([--disable-farstream], [compile without farstream support])],
enable_farstream="$enableval", enable_farstream="yes")
if test "x$enable_farstream" != "xno"; then
- if test "x$with_gstreamer" == "x1.0"; then
+ if test "x$with_gstreamer" = "x1.0"; then PKG_CHECK_MODULES(FARSTREAM, [farstream-0.2 >= 0.2.7], [
AC_SUBST(FARSTREAM_CFLAGS)
@@ -898,9 +898,9 @@
[AS_HELP_STRING([--disable-vv], [compile without voice and video support])],
enable_vv="$enableval", enable_vv="yes")
if test "x$enable_vv" != "xno"; then
- if test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x1.0" -a "x$enable_gstvideo" != "xno" -a "x$enable_farstream" != "xno"; then
+ if test "x$enable_gst" != "xno" -a "x$with_gstreamer" = "x1.0" -a "x$enable_gstvideo" != "xno" -a "x$enable_farstream" != "xno"; then AC_DEFINE(USE_VV, 1, [Use voice and video])
- elif test "x$enable_gst" != "xno" -a "x$with_gstreamer" == "x0.10" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then
+ elif test "x$enable_gst" != "xno" -a "x$with_gstreamer" = "x0.10" -a "x$enable_gstinterfaces" != "xno" -a "x$enable_farstream" != "xno"; then AC_DEFINE(USE_VV, 1, [Use voice and video])
@@ -918,7 +918,7 @@
dnl #######################################################################
dnl # Check for Raw data streams support in Farstream
dnl #######################################################################
-if test "x$enable_vv" != "xno" -a "x$with_gstreamer" == "x1.0"; then
+if test "x$enable_vv" != "xno" -a "x$with_gstreamer" = "x1.0"; then AC_MSG_CHECKING(for raw data support in Farstream)
PKG_CHECK_MODULES(GSTAPP, [gstreamer-app-1.0], [
AC_DEFINE(USE_GSTAPP, 1, [Use GStreamer Video Overlay support])
--- a/libpurple/media/backend-fs2.c Wed Sep 20 01:38:28 2017 +0200
+++ b/libpurple/media/backend-fs2.c Wed Nov 29 20:40:36 2017 +0100
@@ -1151,7 +1151,7 @@
FsParticipant *participant;
PurpleMediaBackendFs2Session *session;
PurpleMediaBackendFs2Stream *media_stream;
value = gst_structure_get_value(structure, "stream");
stream = g_value_get_object(value);
@@ -1165,8 +1165,7 @@
local_candidate->foundation);
g_object_get(stream, "participant", &participant, NULL);
- g_object_get(participant, "cname", &name, NULL);
- g_object_unref(participant);
+ name = g_object_get_data(G_OBJECT(participant), "purple-name"); media_stream = get_stream(self, session->id, name);
media_stream->local_candidates = g_list_append(
@@ -1177,6 +1176,7 @@
g_signal_emit_by_name(self, "new-candidate",
session->id, name, candidate);
g_object_unref(candidate);
+ g_object_unref(participant); } else if (gst_structure_has_name(structure,
"farsight-local-candidates-prepared")) {
@@ -1187,18 +1187,18 @@
FsParticipant *participant;
PurpleMediaBackendFs2Session *session;
value = gst_structure_get_value(structure, "stream");
stream = g_value_get_object(value);
session = get_session_from_fs_stream(self, stream);
g_object_get(stream, "participant", &participant, NULL);
- g_object_get(participant, "cname", &name, NULL);
- g_object_unref(participant);
g_signal_emit_by_name(self, "candidates-prepared",
+ g_object_get_data(G_OBJECT(participant), "purple-name")); + g_object_unref(participant); } else if (gst_structure_has_name(structure,
"farsight-new-active-candidate-pair")) {
@@ -1212,7 +1212,6 @@
FsParticipant *participant;
PurpleMediaBackendFs2Session *session;
PurpleMediaCandidate *lcandidate, *rcandidate;
value = gst_structure_get_value(structure, "stream");
stream = g_value_get_object(value);
@@ -1222,8 +1221,6 @@
remote_candidate = g_value_get_boxed(value);
g_object_get(stream, "participant", &participant, NULL);
- g_object_get(participant, "cname", &name, NULL);
- g_object_unref(participant);
session = get_session_from_fs_stream(self, stream);
@@ -1231,8 +1228,11 @@
rcandidate = candidate_from_fs(remote_candidate);
g_signal_emit_by_name(self, "active-candidate-pair",
- session->id, name, lcandidate, rcandidate);
+ g_object_get_data(G_OBJECT(participant), "purple-name"), + lcandidate, rcandidate); + g_object_unref(participant); g_object_unref(lcandidate);
g_object_unref(rcandidate);
} else if (gst_structure_has_name(structure,
@@ -1959,6 +1959,9 @@
+ g_object_set_data_full(G_OBJECT(participant), "purple-name", + g_strdup(name), g_free); if (g_object_class_find_property(G_OBJECT_GET_CLASS(participant),
--- a/libpurple/protocols/irc/irc.c Wed Sep 20 01:38:28 2017 +0200
+++ b/libpurple/protocols/irc/irc.c Wed Nov 29 20:40:36 2017 +0100
@@ -685,31 +685,38 @@
- if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) {
- irc->inbuflen += IRC_INITIAL_BUFSIZE;
- irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen);
+ // resize buffer upwards so we have at least IRC_BUFSIZE_INCREMENT + if (irc->inbuflen < irc->inbufused + IRC_BUFSIZE_INCREMENT) { + if (irc->inbuflen + IRC_BUFSIZE_INCREMENT <= IRC_MAX_BUFSIZE) { + irc->inbuflen += IRC_BUFSIZE_INCREMENT; + irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); + // discard unparseable data from the buffer - len = purple_ssl_read(gsc, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1);
+ len = purple_ssl_read(gsc, irc->inbuf + irc->inbufused, irc->inbuflen - irc->inbufused - 1); - if (len < 0 && errno == EAGAIN) {
+ if (len < 0 && errno != EAGAIN) { gchar *tmp = g_strdup_printf(_("Lost connection with server: %s"),
purple_connection_error_reason (gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp);
purple_connection_error_reason (gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
_("Server closed the connection"));
+ /* else: len < 0 && errno == EAGAIN; this is fine, try again later */ static void irc_input_cb(gpointer data, gint source, PurpleInputCondition cond)
@@ -718,12 +725,18 @@
struct irc_conn *irc = gc->proto_data;
- if (irc->inbuflen < irc->inbufused + IRC_INITIAL_BUFSIZE) {
- irc->inbuflen += IRC_INITIAL_BUFSIZE;
- irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen);
+ /* see irc_input_cb_ssl */ + if (irc->inbuflen < irc->inbufused + IRC_BUFSIZE_INCREMENT) { + if (irc->inbuflen + IRC_BUFSIZE_INCREMENT <= IRC_MAX_BUFSIZE) { + irc->inbuflen += IRC_BUFSIZE_INCREMENT; + irc->inbuf = g_realloc(irc->inbuf, irc->inbuflen); - len = read(irc->fd, irc->inbuf + irc->inbufused, IRC_INITIAL_BUFSIZE - 1);
+ len = read(irc->fd, irc->inbuf + irc->inbufused, irc->inbuflen - irc->inbufused - 1); if (len < 0 && errno == EAGAIN) {
--- a/libpurple/protocols/jabber/bosh.c Wed Sep 20 01:38:28 2017 +0200
+++ b/libpurple/protocols/jabber/bosh.c Wed Nov 29 20:40:36 2017 +0100
@@ -68,7 +68,6 @@
@@ -212,7 +211,6 @@
conn->path = g_strdup_printf("/%s", path);
- conn->pipelining = TRUE;
if (purple_ip_address_is_valid(host))
js->serverFQDN = g_strdup(js->user->domain);
@@ -285,12 +283,6 @@
if (purple_debug_is_verbose())
debug_dump_http_connections(conn);
- /* Easy solution: Does everyone involved support pipelining? Hooray! Just use
- * one TCP connection! */
- return conn->connections[0]->state == HTTP_CONN_CONNECTED ?
- conn->connections[0] : NULL;
/* First loop, look for a connection that's ready */
for (i = 0; i < NUM_HTTP_CONNECTIONS; ++i) {
if (conn->connections[i] &&
@@ -465,27 +457,6 @@
-jabber_bosh_disable_pipelining(PurpleBOSHConnection *bosh)
- /* Do nothing if it's already disabled */
- purple_debug_info("jabber", "BOSH: Disabling pipelining on conn %p\n",
- bosh->pipelining = FALSE;
- if (bosh->connections[1] == NULL) {
- bosh->connections[1] = jabber_bosh_http_connection_init(bosh);
- http_connection_connect(bosh->connections[1]);
- /* Shouldn't happen; this should be the only place pipelining
static void jabber_bosh_connection_received(PurpleBOSHConnection *conn, xmlnode *node) {
JabberStream *js = conn->js;
@@ -726,11 +697,6 @@
- if (conn->bosh->pipelining) {
- /* Hmmmm, fall back to multiple connections */
- jabber_bosh_disable_pipelining(conn->bosh);
/* If the server disconnected us without any requests, let's
* just wait until we have something to send before we reconnect
@@ -807,7 +773,6 @@
if (!g_ascii_strncasecmp(tmp, "close", strlen("close"))) {
- jabber_bosh_disable_pipelining(conn->bosh);
--- a/libpurple/protocols/jabber/jingle/rtp.c Wed Sep 20 01:38:28 2017 +0200
+++ b/libpurple/protocols/jabber/jingle/rtp.c Wed Nov 29 20:40:36 2017 +0100
@@ -950,6 +950,7 @@
JingleTransport *transport;
JabberBuddyResource *jbr;
const gchar *transport_type;
gchar *resource = NULL, *me = NULL, *sid = NULL;
@@ -958,16 +959,15 @@
jb = jabber_buddy_find(js, who, FALSE);
purple_debug_error("jingle-rtp", "Could not find Jabber buddy\n");
resource = jabber_get_resource(who);
jbr = jabber_buddy_find_resource(jb, resource);
purple_debug_error("jingle-rtp", "Could not find buddy's resource - %s\n", resource);
if (jabber_resource_has_capability(jbr, JINGLE_TRANSPORT_ICEUDP)) {
@@ -977,7 +977,7 @@
purple_debug_error("jingle-rtp", "Resource doesn't support "
"the same transport types\n");
/* set ourselves as initiator */
@@ -985,7 +985,6 @@
sid = jabber_get_next_id(js);
session = jingle_session_create(js, sid, me, who, TRUE);
if (type & PURPLE_MEDIA_AUDIO) {
@@ -1005,13 +1004,17 @@
jingle_rtp_init_media(content);
if (jingle_rtp_get_media(session) == NULL) {
--- a/pidgin/gtkblist.c Wed Sep 20 01:38:28 2017 +0200
+++ b/pidgin/gtkblist.c Wed Nov 29 20:40:36 2017 +0100
@@ -60,6 +60,7 @@
#include "gtkstatusbox.h"
#include "gtkscrollbook.h"
#include "gtkblist-theme.h"
#include "gtkblist-theme-loader.h"
@@ -4178,7 +4179,7 @@
pidgin_blist_get_name_markup(PurpleBuddy *b, gboolean selected, gboolean aliased)
- const char *name, *name_color, *name_font, *status_color, *status_font;
+ const char *name, *name_color, *name_font, *status_color, *status_font, *dim_grey; PurplePluginProtocolInfo *prpl_info = NULL;
@@ -4281,13 +4282,15 @@
theme = pidgin_blist_get_theme();
+ dim_grey = pidgin_style_is_dark(NULL) ? "light slate grey" : "dim grey"; if (purple_presence_is_idle(presence)) {
namefont = statusfont = pidgin_blist_theme_get_idle_text_info(theme);
- name_color = "dim grey";
} else if (!purple_presence_is_online(presence)) {
namefont = pidgin_blist_theme_get_offline_text_info(theme);
- name_color = "dim grey";
statusfont = pidgin_blist_theme_get_status_text_info(theme);
} else if (purple_presence_is_available(presence)) {
namefont = pidgin_blist_theme_get_online_text_info(theme);
@@ -4301,14 +4304,14 @@
&& (purple_presence_is_idle(presence)
|| !purple_presence_is_online(presence)))
- name_color = "dim grey";
name_color = theme_font_get_color_default(namefont, name_color);
name_font = theme_font_get_face_default(namefont, "");
- status_color = theme_font_get_color_default(statusfont, "dim grey");
+ status_color = theme_font_get_color_default(statusfont, dim_grey); status_font = theme_font_get_face_default(statusfont, "");
if (aliased && selected) {
@@ -4726,6 +4729,15 @@
+chat_joined_cb(PurpleConversation *conv, PidginBuddyList *gtkblist) case PURPLE_CONV_TYPE_CHAT:
PurpleChat *chat = purple_blist_find_chat(conv->account, conv->name);
@@ -6092,6 +6104,9 @@
purple_signal_connect(handle, "conversation-created", gtkblist,
PURPLE_CALLBACK(conversation_created_cb),
+ purple_signal_connect(handle, "chat-joined", gtkblist, + PURPLE_CALLBACK(chat_joined_cb), gtk_widget_hide(gtkblist->headline_hbox);
@@ -6535,7 +6550,7 @@
textcolor = pidgin_theme_font_get_color_describe(pair);
/* If no theme them default to making idle buddy names grey */
- textcolor = "dim grey";
+ textcolor = pidgin_style_is_dark(NULL) ? "light slate grey" : "dim grey"; idle = g_strdup_printf("<span color='%s' font_desc='%s'>%d:%02d</span>",
--- a/pidgin/gtkconv.c Wed Sep 20 01:38:28 2017 +0200
+++ b/pidgin/gtkconv.c Wed Nov 29 20:40:36 2017 +0100
@@ -63,6 +63,7 @@
@@ -8176,41 +8177,57 @@
purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", handle,
PURPLE_CALLBACK(wrote_msg_update_unseen_cb), NULL);
- /* Set default tab colors */
- GString *str = g_string_new(NULL);
- GtkSettings *settings = gtk_settings_get_default();
- GtkStyle *parent = gtk_rc_get_style_by_paths(settings, "tab-container.tab-label*", NULL, G_TYPE_NONE), *now;
- {"pidgin_tab_label_typing_default", "tab-label-typing", "#4e9a06"},
- {"pidgin_tab_label_typed_default", "tab-label-typed", "#c4a000"},
- {"pidgin_tab_label_attention_default", "tab-label-attention", "#006aff"},
- {"pidgin_tab_label_unreadchat_default", "tab-label-unreadchat", "#cc0000"},
- {"pidgin_tab_label_event_default", "tab-label-event", "#888a85"},
- for (iter = 0; styles[iter].stylename; iter++) {
- now = gtk_rc_get_style_by_paths(settings, styles[iter].labelname, NULL, G_TYPE_NONE);
- (parent && now && parent->rc_style == now->rc_style)) {
- g_string_append_printf(str, "style \"%s\" {\n"
- "fg[ACTIVE] = \"%s\"\n"
- "widget \"*%s\" style \"%s\"\n",
- styles[iter].stylename,
- styles[iter].labelname, styles[iter].stylename);
- gtk_rc_parse_string(str->str);
- g_string_free(str, TRUE);
- gtk_rc_reset_styles(settings);
+/* Invalidate the first tab color set */ +static gboolean tab_color_fuse = TRUE; +pidgin_conversations_set_tab_colors(void) + /* Set default tab colors */ + GString *str = g_string_new(NULL); + GtkSettings *settings = gtk_settings_get_default(); + GtkStyle *parent = gtk_rc_get_style_by_paths(settings, "tab-container.tab-label*", NULL, G_TYPE_NONE), *now; + {"pidgin_tab_label_typing_default", "tab-label-typing", "#4e9a06"}, + {"pidgin_tab_label_typed_default", "tab-label-typed", "#c4a000"}, + {"pidgin_tab_label_attention_default", "tab-label-attention", "#006aff"}, + {"pidgin_tab_label_unreadchat_default", "tab-label-unreadchat", "#cc0000"}, + {"pidgin_tab_label_event_default", "tab-label-event", "#888a85"}, + tab_color_fuse = FALSE; + for (iter = 0; styles[iter].stylename; iter++) { + now = gtk_rc_get_style_by_paths(settings, styles[iter].labelname, NULL, G_TYPE_NONE); + (parent && now && parent->rc_style == now->rc_style)) { + gdk_color_parse(styles[iter].color, &color); + pidgin_style_adjust_contrast(gtk_widget_get_default_style(), &color); + g_string_append_printf(str, "style \"%s\" {\n" + "fg[ACTIVE] = \"%s\"\n" + "widget \"*%s\" style \"%s\"\n", + styles[iter].stylename, + gdk_color_to_string(&color), + styles[iter].labelname, styles[iter].stylename); + gtk_rc_parse_string(str->str); + g_string_free(str, TRUE); + gtk_rc_reset_styles(settings); @@ -9385,6 +9402,9 @@
gtk_window_iconify(GTK_WINDOW(win->window));
+ pidgin_conversations_set_tab_colors(); @@ -10252,6 +10272,9 @@
gdk_color_parse(DEFAULT_HIGHLIGHT_COLOR, &nick_highlight);
gdk_color_parse(DEFAULT_SEND_COLOR, &send_color);
+ pidgin_style_adjust_contrast(NULL, &nick_highlight); + pidgin_style_adjust_contrast(NULL, &send_color); srand(background.red + background.green + background.blue + 1);
breakout_time = time(NULL) + 3;
--- a/pidgin/gtkimhtml.c Wed Sep 20 01:38:28 2017 +0200
+++ b/pidgin/gtkimhtml.c Wed Nov 29 20:40:36 2017 +0100
@@ -44,6 +44,7 @@
#include "gtksourceiter.h"
#include "gtksourceundomanager.h"
#include "gtksourceview-marshal.h"
#include <gdk/gdkkeysyms.h>
@@ -469,6 +470,7 @@
gdk_color_parse(styles[i].def, &defcolor);
+ pidgin_style_adjust_contrast(gtk_widget_get_style(widget), &defcolor); g_object_set(tag, "foreground-gdk", &defcolor, NULL);
--- a/pidgin/plugins/Makefile.am Wed Sep 20 01:38:28 2017 +0200
+++ b/pidgin/plugins/Makefile.am Wed Nov 29 20:40:36 2017 +0100
@@ -47,6 +47,7 @@
themeedit_la_LDFLAGS = -module -avoid-version
timestamp_la_LDFLAGS = -module -avoid-version
timestamp_format_la_LDFLAGS = -module -avoid-version
+transparency_la_LDFLAGS = -module -avoid-version unity_la_LDFLAGS = -module -avoid-version
vvconfig_la_LDFLAGS = -module -avoid-version
xmppconsole_la_LDFLAGS = -module -avoid-version
@@ -68,6 +69,7 @@
@@ -98,6 +100,7 @@
themeedit_la_SOURCES = themeedit.c themeedit-icon.c themeedit-icon.h
timestamp_la_SOURCES = timestamp.c
timestamp_format_la_SOURCES = timestamp_format.c
+transparency_la_SOURCES = transparency.c unity_la_SOURCES = unity.c
vvconfig_la_SOURCES = vvconfig.c
xmppconsole_la_SOURCES = xmppconsole.c
@@ -118,6 +121,7 @@
themeedit_la_LIBADD = $(GTK_LIBS)
timestamp_la_LIBADD = $(GTK_LIBS)
timestamp_format_la_LIBADD = $(GTK_LIBS)
+transparency_la_LIBADD = $(GTK_LIBS) unity_la_LIBADD = $(GTK_LIBS) $(UNITY_LIBS)
vvconfig_la_LIBADD = $(GTK_LIBS) $(GSTREAMER_LIBS)
xmppconsole_la_LIBADD = $(GTK_LIBS)
--- a/pidgin/plugins/Makefile.mingw Wed Sep 20 01:38:28 2017 +0200
+++ b/pidgin/plugins/Makefile.mingw Wed Nov 29 20:40:36 2017 +0100
@@ -10,7 +10,6 @@
TICKER_PLUGIN := ./ticker
-TRANSPARENCY_PLUGIN := ./win32/transparency
WINPREFS_PLUGIN := ./win32/winprefs
@@ -63,14 +62,12 @@
$(MAKE) -C $(DISCO_PLUGIN) -f $(MINGW_MAKEFILE)
$(MAKE) -C $(GTKPERL_PLUGIN) -f $(MINGW_MAKEFILE)
$(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE)
- $(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE)
$(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE)
install: all $(PIDGIN_INSTALL_PLUGINS_DIR)
$(MAKE) -C $(DISCO_PLUGIN) -f $(MINGW_MAKEFILE) install
$(MAKE) -C $(GTKPERL_PLUGIN) -f $(MINGW_MAKEFILE) install
$(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE) install
- $(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE) install
$(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE) install
cp *.dll $(PIDGIN_INSTALL_PLUGINS_DIR)
@@ -102,6 +99,7 @@
@@ -112,7 +110,6 @@
$(MAKE) -C $(DISCO_PLUGIN) -f $(MINGW_MAKEFILE) clean
$(MAKE) -C $(GTKPERL_PLUGIN) -f $(MINGW_MAKEFILE) clean
$(MAKE) -C $(TICKER_PLUGIN) -f $(MINGW_MAKEFILE) clean
- $(MAKE) -C $(TRANSPARENCY_PLUGIN) -f $(MINGW_MAKEFILE) clean
$(MAKE) -C $(WINPREFS_PLUGIN) -f $(MINGW_MAKEFILE) clean
include $(PIDGIN_COMMON_TARGETS)