Merge default back in use-gresolver

Mon, 21 Dec 2015 22:14:59 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 21 Dec 2015 22:14:59 -0600
branch
use-gresolver
changeset 37466
ef015fb22744
parent 37465
2b3189543b1f (current diff)
parent 37436
1f30661ee575 (diff)
child 37467
37d053fc8907

Merge default back in

configure.ac file | annotate | diff | comparison | revisions
libpurple/Makefile.am file | annotate | diff | comparison | revisions
libpurple/network.c file | annotate | diff | comparison | revisions
libpurple/protocols/jabber/disco.c file | annotate | diff | comparison | revisions
libpurple/protocols/jabber/google/jingleinfo.c file | annotate | diff | comparison | revisions
libpurple/protocols/jabber/jabber.c file | annotate | diff | comparison | revisions
libpurple/protocols/jabber/jabber.h file | annotate | diff | comparison | revisions
libpurple/protocols/simple/simple.h file | annotate | diff | comparison | revisions
libpurple/proxy.c file | annotate | diff | comparison | revisions
--- a/configure.ac	Mon Dec 21 21:29:48 2015 -0600
+++ b/configure.ac	Mon Dec 21 22:14:59 2015 -0600
@@ -517,15 +517,9 @@
 AC_ARG_ENABLE(gtkui, [AS_HELP_STRING([--disable-gtkui],
 		[compile without GTK+ user interface])],
 	enable_gtkui="$enableval", enable_gtkui="yes")
-AC_ARG_WITH(gtk, [AS_HELP_STRING([--with-gtk=<version>],
-		[compile with GTK+ 2 or 3 user interface (default: auto)])],
-	with_gtk="$withval", with_gtk="auto")
 AC_ARG_ENABLE(consoleui, [AS_HELP_STRING([--disable-consoleui],
 		[compile without console user interface])],
 	[enable_consoleui=$enableval force_finch=$enableval], [enable_consoleui=yes force_finch=no])
-AC_ARG_ENABLE(gstreamer,
-	[AS_HELP_STRING([--disable-gstreamer], [compile without GStreamer audio support])],
-	enable_gst="$enableval", enable_gst="yes")
 
 dnl #######################################################################
 dnl # Check for GTK+ 2.18 and other things used by the GTK UI
@@ -578,45 +572,22 @@
     x_incpath_add="-I$x_includes"
 fi
 
+dnl #######################################################################
+dnl Check Pidgin dependencies
+dnl #######################################################################
 if test "x$enable_gtkui" = "xyes" ; then
-	if test "x$with_gtk" = "x3"; then
-		PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.0.0], , [
-			AC_MSG_RESULT(no)
-			AC_MSG_ERROR([
+	PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.0.0], , [
+		AC_MSG_RESULT(no)
+		AC_MSG_ERROR([
 You must have GTK+ 3.0.0 or newer development headers installed to compile
 Pidgin.  If you want to build only Finch then specify --disable-gtkui when
 running configure.
 ])])
-	elif test "x$with_gtk" = "x2"; then
-		PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.18.0], , [
-			AC_MSG_RESULT(no)
-			AC_MSG_ERROR([
-You must have GTK+ 2.18.0 or newer development headers installed to compile
-Pidgin.  If you want to build only Finch then specify --disable-gtkui when
-running configure.
-])])
-	elif test "x$with_gtk" = "xauto"; then
-		if test "x$enable_gst" != "xno"; then
-			gst10_pkg="gstreamer-1.0"
-			gst010_pkg="gstreamer-0.10"
-		fi
-		PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.0.0 $gst10_pkg], [with_gtk=3], [
-			AC_MSG_RESULT(no)
-			PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.18.0 $gst010_pkg], [with_gtk=2], [
-				AC_MSG_RESULT(no)
-				AC_MSG_ERROR([
-You must have GTK+ 2.18.0 or newer and GStreamer development headers installed to compile
-Pidgin.  If you want to build only Finch then specify --disable-gtkui when
-running configure.  Use --disable-gstreamer if you do not need GStreamer (sound) support.
-])])])
-	else
-		AC_MSG_ERROR([--with-gtk must specify one of 2, 3 or auto.])
-	fi
 	AC_SUBST(GTK_CFLAGS)
 	AC_SUBST(GTK_LIBS)
 
-	GTK_PC_MODULE="gtk+-${with_gtk}.0"
-	GTK_VERSION=${with_gtk}
+	GTK_PC_MODULE="gtk+-3.0"
+	GTK_VERSION="3"
 	AC_SUBST(GTK_PC_MODULE)
 	AC_SUBST(GTK_VERSION)
 
@@ -625,25 +596,14 @@
 			AC_DEFINE(HAVE_PANGO14, 1, [Define if we have Pango 1.4 or newer.]),:)
 
 	WEBKIT_VERSION=1.3.7
-	if test "x$with_gtk" = "x3"; then
-		WEBKIT_PC_MODULE="webkitgtk-3.0"
-		PKG_CHECK_MODULES(WEBKIT, [$WEBKIT_PC_MODULE >= $WEBKIT_VERSION], , [
-			AC_MSG_RESULT(no)
-			AC_MSG_ERROR([
+	WEBKIT_PC_MODULE="webkitgtk-3.0"
+	PKG_CHECK_MODULES(WEBKIT, [$WEBKIT_PC_MODULE >= $WEBKIT_VERSION], , [
+		AC_MSG_RESULT(no)
+		AC_MSG_ERROR([
 You must have WebKit for GTK+3 $WEBKIT_VERSION or newer development headers
 installed to compile Pidgin.  If you want to build only Finch then specify
 --disable-gtkui when running configure.
 ])])
-	else
-		WEBKIT_PC_MODULE="webkit-1.0"
-		PKG_CHECK_MODULES(WEBKIT, [$WEBKIT_PC_MODULE >= $WEBKIT_VERSION], , [
-			AC_MSG_RESULT(no)
-			AC_MSG_ERROR([
-You must have WebKit for GTK+2 $WEBKIT_VERSION or newer development headers
-installed to compile Pidgin.  If you want to build only Finch then specify
---disable-gtkui when running configure.
-])])
-	fi
 	AC_SUBST(WEBKIT_CFLAGS)
 	AC_SUBST(WEBKIT_LIBS)
 	AC_SUBST(WEBKIT_PC_MODULE)
@@ -822,29 +782,16 @@
 	dnl # Check for GCR for its certificate widgets
 	dnl #######################################################################
 	if test "x$enable_gcr" = "xyes"; then
-		if test "x$with_gtk" = "x3"; then
-			PKG_CHECK_MODULES(GCR, gcr-3, [
-				AC_DEFINE(ENABLE_GCR, 1, [Define to 1 if GCR is found.])], [
-				AC_MSG_RESULT(no)
-				enable_gcr="no"
-				if test "x$force_deps" = "xyes" ; then
-					AC_MSG_ERROR([
+		PKG_CHECK_MODULES(GCR, gcr-3, [
+			AC_DEFINE(ENABLE_GCR, 1, [Define to 1 if GCR is found.])], [
+			AC_MSG_RESULT(no)
+			enable_gcr="no"
+			if test "x$force_deps" = "xyes" ; then
+				AC_MSG_ERROR([
 GCR for GTK+3 development headers not found.
 Use --disable-gcr if you do not need GCR certificate widgets.
 ])
-				fi])
-		else
-			PKG_CHECK_MODULES(GCR, gcr-0, [
-				AC_DEFINE(ENABLE_GCR, 1, [Define to 1 if GCR is found.])], [
-				AC_MSG_RESULT(no)
-				enable_gcr="no"
-				if test "x$force_deps" = "xyes" ; then
-					AC_MSG_ERROR([
-GCR for GTK+2 development headers not found.
-Use --disable-gcr if you do not need GCR certificate widgets.
-])
-				fi])
-		fi
+			fi])
 	fi
 
 
@@ -1011,93 +958,32 @@
 dnl #######################################################################
 dnl # Check for GStreamer
 dnl #######################################################################
+AC_ARG_ENABLE(gstreamer,
+	[AS_HELP_STRING([--disable-gstreamer], [compile without GStreamer audio support])],
+	enable_gst="$enableval", enable_gst="yes")
 
-dnl AC_ARG_ENABLE is declared near GTK2/3 configuration
-AC_ARG_WITH(gstreamer, [AS_HELP_STRING([--with-gstreamer=<version>],
-		[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" -a "x$with_gtk" = "x3"; then
-		with_gstreamer="1.0"
-	elif test "x$with_gstreamer" == "xauto" -a "x$with_gtk" = "x2"; then
-		with_gstreamer="0.10"
-	fi
-	if test "x$with_gstreamer" == "xauto"; then
-		PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [
-			AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
-			with_gstreamer="1.0"
-			AC_SUBST(GSTREAMER_CFLAGS)
-			AC_SUBST(GSTREAMER_LIBS)
-			dnl Check whether forking stuff is required for this version.
-		], [
-			PKG_CHECK_MODULES(GSTREAMER, [gstreamer-0.10], [
-				AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
-				with_gstreamer="0.10"
-				AC_SUBST(GSTREAMER_CFLAGS)
-				AC_SUBST(GSTREAMER_LIBS)
-			], [
-				AC_MSG_RESULT(no)
-				enable_gst="no"
-				if test "x$force_deps" = "xyes" ; then
-					AC_MSG_ERROR([
-GStreamer development headers not found.
-Use --disable-gstreamer if you do not need GStreamer (sound) support.
-])
-				fi
-			])
-		])
-	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)
-			AC_SUBST(GSTREAMER_LIBS)
-		], [
-			AC_MSG_RESULT(no)
-			enable_gst="no"
-			if test "x$force_deps" = "xyes" ; then
-				AC_MSG_ERROR([
-GStreamer development headers not found.
-Use --disable-gstreamer if you do not need GStreamer (sound) support.
-])
-			fi
-		])
-	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)
-			AC_SUBST(GSTREAMER_LIBS)
-		], [
-			AC_MSG_RESULT(no)
-			enable_gst="no"
-			if test "x$force_deps" = "xyes" ; then
-				AC_MSG_ERROR([
-GStreamer development headers not found.
-Use --disable-gstreamer if you do not need GStreamer (sound) support.
-])
-			fi
-		])
-	else
-		AC_MSG_ERROR([--with-gstreamer must specify one of 0.10, 1.0 or auto.])
-	fi
-fi
-
-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
-	AC_MSG_ERROR([WebKitGTK+ 2.0 cannot be mixed with GStreamer 1.0.
-Please switch to WebKitGTK+ 3.0 or GStreamer 0.10.])
-fi
-if test "x$with_gstreamer" == "x0.10" -o "x$with_gstreamer" == "x1.0"; then
-	AC_SUBST(GSTREAMER_VER, [$with_gstreamer])
-else
-	AC_SUBST(GSTREAMER_VER, "")
+if test x"$enable_gst" != "xno"; then
+	PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0], [
+	   AC_DEFINE(USE_GSTREAMER, 1, [Use GStreamer for playing sounds])
+	   with_gstreamer="1.0"
+	   AC_SUBST(GSTREAMER_CFLAGS)
+	   AC_SUBST(GSTREAMER_LIBS)
+   ], [
+	   AC_MSG_RESULT(no)
+	   enable_gst="no"
+	   if test "x$force_deps" = "xyes" ; then
+		   AC_MSG_ERROR([
+ GStreamer development headers not found.
+ Use --disable-gstreamer if you do not need GStreamer (sound) support.
+					 ])
+	   fi
+   ])
 fi
 
 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"; 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")
@@ -1115,47 +1001,18 @@
 fi
 
 dnl #######################################################################
-dnl # Check for GStreamer Interfaces
-dnl #######################################################################
-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")
-	if test "x$enable_gstinterfaces" != "xno"; then
-		PKG_CHECK_MODULES(GSTINTERFACES, [gstreamer-interfaces-0.10], [
-			AC_DEFINE(USE_GSTINTERFACES, 1, [Use GStreamer 0.10 interfaces for X overlay support])
-			AC_SUBST(GSTINTERFACES_CFLAGS)
-			AC_SUBST(GSTINTERFACES_LIBS)
-		], [
-			enable_gstinterfaces="no"
-		])
-	fi
-else
-	enable_gstinterfaces="no"
-fi
-
-dnl #######################################################################
 dnl # Check for Farstream
 dnl #######################################################################
 AC_ARG_ENABLE(farstream,
 	[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
-		PKG_CHECK_MODULES(FARSTREAM, [farstream-0.2 >= 0.2.7], [
-			AC_SUBST(FARSTREAM_CFLAGS)
-			AC_SUBST(FARSTREAM_LIBS)
-		], [
-		        enable_farstream="no"
-		])
-	else
-		PKG_CHECK_MODULES(FARSTREAM, [farstream-0.1], [
-			AC_SUBST(FARSTREAM_CFLAGS)
-			AC_SUBST(FARSTREAM_LIBS)
-		], [
-				enable_farstream="no"
-		])
-	fi
+	PKG_CHECK_MODULES(FARSTREAM, [farstream-0.2 >= 0.2.7], [
+		AC_SUBST(FARSTREAM_CFLAGS)
+		AC_SUBST(FARSTREAM_LIBS)
+	], [
+			enable_farstream="no"
+	])
 fi
 
 dnl #######################################################################
@@ -1165,9 +1022,7 @@
 	[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
-		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
+	if test "x$enable_gst" != "xno" -a "x$enable_gstvideo" != "xno" -a "x$enable_farstream" != "xno"; then
 		AC_DEFINE(USE_VV, 1, [Use voice and video])
 	else
 		enable_vv="no"
@@ -1185,7 +1040,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"; then
 	PKG_CHECK_MODULES(GSTAPP, [gstreamer-app-1.0], [
 		AC_DEFINE(USE_GSTAPP, 1, [Use GStreamer Video Overlay support])
 		AC_SUBST(GSTAPP_CFLAGS)
@@ -1891,7 +1746,7 @@
 if test "x$enable_plugins" = "xyes" ; then
 	PKG_CHECK_MODULES(GPLUGIN, [gplugin >= 0.0.17 gmodule-2.0], [
 		dnl # GPLUGIN_REQ sets pkg-config requirements in the .pc file
-		if test "x$with_gtk" != "xno" ; then
+		if test "x$enable_gtkui" != "xno" ; then
 			GPLUGIN_REQ=[", gplugin, gplugin-gtk"]
 		else
 			GPLUGIN_REQ=[", gplugin"]
@@ -2102,10 +1957,7 @@
 	fi
 
 	if test "x$have_gnutls" = "xyes"; then
-
 		AC_DEFINE(HAVE_GNUTLS, 1, [Define if you have GnuTLS])
-		AC_DEFINE(HAVE_SSL, 1, [Define if you have SSL])
-
 		msg_gnutls="GnuTLS"
 	fi
 fi
@@ -2139,11 +1991,10 @@
 	fi
 
 	if test "x$have_nss" = "xyes"; then
-
 		AC_DEFINE(HAVE_NSS, 1, [Define if you have Mozilla NSS])
-		AC_DEFINE(HAVE_SSL, 1, [Define if you have SSL])
-
 		msg_nss="Mozilla NSS"
+	else
+		AC_MSG_ERROR([No SSL/TLS library available])
 	fi
 fi
 
@@ -2470,9 +2321,6 @@
 
 echo
 echo Build GTK+ UI................. : $enable_gtkui
-if test "x$enable_gtkui" = "xyes"; then
-	echo Build for GTK+ version........ : $with_gtk
-fi
 echo Build console UI.............. : $enable_consoleui
 echo Build for X11................. : $with_x
 echo
--- a/finch/gntaccount.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/finch/gntaccount.c	Mon Dec 21 22:14:59 2015 -0600
@@ -979,8 +979,7 @@
 {
 	g_free(data->username);
 
-	if (data->alias != NULL)
-		g_free(data->alias);
+	g_free(data->alias);
 
 	g_free(data);
 }
--- a/finch/gntsound.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/finch/gntsound.c	Mon Dec 21 22:14:59 2015 -0600
@@ -544,11 +544,7 @@
 		return;
 	}
 
-#if GST_CHECK_VERSION(1,0,0)
 	play = gst_element_factory_make("playbin", "play");
-#else
-	play = gst_element_factory_make("playbin2", "play");
-#endif
 
 	if (play == NULL) {
 		return;
--- a/libpurple/Makefile.am	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/Makefile.am	Mon Dec 21 22:14:59 2015 -0600
@@ -263,7 +263,9 @@
 	$(srcdir)/roomlist.h \
 	$(srcdir)/status.h \
 	${srcdir}/sound.h \
-	$(srcdir)/xfer.h
+	$(srcdir)/xfer.h \
+	$(srcdir)/xmlnode.h
+
 
 marshallers.h: marshallers.list
 	$(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=purple_smarshal $(srcdir)/marshallers.list --header > marshallers.h
--- a/libpurple/ciphers/hmaccipher.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/ciphers/hmaccipher.c	Mon Dec 21 22:14:59 2015 -0600
@@ -77,14 +77,10 @@
 	if(PURPLE_IS_HASH(priv->hash))
 		purple_hash_reset(priv->hash);
 
-	if(priv->ipad) {
-		g_free(priv->ipad);
-		priv->ipad = NULL;
-	}
-	if(priv->opad) {
-		g_free(priv->opad);
-		priv->opad = NULL;
-	}
+	g_free(priv->ipad);
+	priv->ipad = NULL;
+	g_free(priv->opad);
+	priv->opad = NULL;
 }
 
 static void
--- a/libpurple/example/Makefile.am	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/example/Makefile.am	Mon Dec 21 22:14:59 2015 -0600
@@ -4,13 +4,13 @@
 nullclient_DEPENDENCIES =
 nullclient_LDFLAGS = -export-dynamic
 nullclient_LDADD = \
+	$(top_builddir)/libpurple/libpurple.la \
 	$(DBUS_LIBS) \
 	$(INTLLIBS) \
 	$(GLIB_LIBS) \
 	$(GPLUGIN_LIBS) \
 	$(LIBXML_LIBS) \
-	$(GSTVIDEO_LIBS) \
-	$(top_builddir)/libpurple/libpurple.la
+	$(GSTVIDEO_LIBS)
 
 AM_CPPFLAGS = \
 	-DSTANDALONE \
--- a/libpurple/http.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/http.c	Mon Dec 21 22:14:59 2015 -0600
@@ -751,8 +751,7 @@
 		request_url,
 		req->http11 ? "1.1" : "1.0");
 
-	if (tmp_url)
-		g_free(tmp_url);
+	g_free(tmp_url);
 
 	if (!purple_http_headers_get(hdrs, "host"))
 		g_string_append_printf(h, "Host: %s\r\n", url->host);
@@ -1474,13 +1473,6 @@
 		return FALSE;
 	}
 
-	if (is_ssl && !purple_ssl_is_supported()) {
-		_purple_http_error(hc, _("Unable to connect to %s: %s"),
-			url->host, _("Server requires TLS/SSL, "
-			"but no TLS/SSL support was found."));
-		return FALSE;
-	}
-
 	if (hc->request->keepalive_pool != NULL) {
 		hc->socket_request = purple_http_keepalive_pool_request(
 			hc->request->keepalive_pool, hc->gc, url->host,
@@ -1756,13 +1748,6 @@
 			"related to gc=%p (it shouldn't happen)\n", gc);
 }
 
-gboolean purple_http_conn_is_cancelling(PurpleHttpConnection *http_conn)
-{
-	if (http_conn == NULL)
-		return FALSE;
-	return http_conn->is_cancelling;
-}
-
 gboolean purple_http_conn_is_running(PurpleHttpConnection *http_conn)
 {
 	if (http_conn == NULL)
--- a/libpurple/http.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/http.h	Mon Dec 21 22:14:59 2015 -0600
@@ -222,16 +222,6 @@
 void purple_http_conn_cancel_all(PurpleConnection *gc);
 
 /**
- * purple_http_conn_is_cancelling:
- * @http_conn: The HTTP connection (may be invalid pointer).
- *
- * Checks, if provided HTTP request is cancelling.
- *
- * Returns:          TRUE, if provided connection is currently cancelling.
- */
-gboolean purple_http_conn_is_cancelling(PurpleHttpConnection *http_conn);
-
-/**
  * purple_http_conn_is_running:
  * @http_conn: The HTTP connection (may be invalid pointer).
  *
--- a/libpurple/media/backend-fs2.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/media/backend-fs2.c	Mon Dec 21 22:14:59 2015 -0600
@@ -76,7 +76,6 @@
 static GList *purple_media_backend_fs2_get_local_candidates(
 		PurpleMediaBackend *self,
 		const gchar *sess_id, const gchar *participant);
-#if GST_CHECK_VERSION(1,0,0)
 static gboolean purple_media_backend_fs2_set_encryption_parameters (
 		PurpleMediaBackend *self, const gchar *sess_id, const gchar *cipher,
 		const gchar *auth, const gchar *key, gsize key_len);
@@ -84,7 +83,6 @@
 		PurpleMediaBackend *self, const gchar *sess_id,
 		const gchar *participant, const gchar *cipher,
 		const gchar *auth, const gchar *key, gsize key_len);
-#endif
 static gboolean purple_media_backend_fs2_set_remote_codecs(
 		PurpleMediaBackend *self,
 		const gchar *sess_id, const gchar *participant,
@@ -230,14 +228,12 @@
 	switch (protocol) {
 		case PURPLE_MEDIA_NETWORK_PROTOCOL_UDP:
 			return FS_NETWORK_PROTOCOL_UDP;
-#if GST_CHECK_VERSION(1,0,0)
 		case PURPLE_MEDIA_NETWORK_PROTOCOL_TCP_PASSIVE:
 			return FS_NETWORK_PROTOCOL_TCP_PASSIVE;
 		case PURPLE_MEDIA_NETWORK_PROTOCOL_TCP_ACTIVE:
 			return FS_NETWORK_PROTOCOL_TCP_ACTIVE;
 		case PURPLE_MEDIA_NETWORK_PROTOCOL_TCP_SO:
 			return FS_NETWORK_PROTOCOL_TCP_SO;
-#endif
 		default:
 			g_return_val_if_reached(FS_NETWORK_PROTOCOL_TCP);
 	}
@@ -249,30 +245,21 @@
 	switch (protocol) {
 		case FS_NETWORK_PROTOCOL_UDP:
 			return PURPLE_MEDIA_NETWORK_PROTOCOL_UDP;
-#if GST_CHECK_VERSION(1,0,0)
 		case FS_NETWORK_PROTOCOL_TCP_PASSIVE:
 			return PURPLE_MEDIA_NETWORK_PROTOCOL_TCP_PASSIVE;
 		case FS_NETWORK_PROTOCOL_TCP_ACTIVE:
 			return PURPLE_MEDIA_NETWORK_PROTOCOL_TCP_ACTIVE;
 		case FS_NETWORK_PROTOCOL_TCP_SO:
 			return PURPLE_MEDIA_NETWORK_PROTOCOL_TCP_SO;
-#endif
 		default:
 			g_return_val_if_reached(PURPLE_MEDIA_NETWORK_PROTOCOL_TCP_PASSIVE);
 	}
 }
 
-#if GST_CHECK_VERSION(1,0,0)
 static GstPadProbeReturn
 event_probe_cb(GstPad *srcpad, GstPadProbeInfo *info, gpointer unused)
-#else
-static gboolean
-event_probe_cb(GstPad *srcpad, GstEvent *event, gboolean release_pad)
-#endif
 {
-#if GST_CHECK_VERSION(1,0,0)
 	GstEvent *event = GST_PAD_PROBE_INFO_EVENT(info);
-#endif
 	if (GST_EVENT_TYPE(event) == GST_EVENT_CUSTOM_DOWNSTREAM
 		&& gst_event_has_name(event, "purple-unlink-tee")) {
 
@@ -280,40 +267,23 @@
 
 		gst_pad_unlink(srcpad, gst_pad_get_peer(srcpad));
 
-#if GST_CHECK_VERSION(1,0,0)
 		gst_pad_remove_probe(srcpad,
 			g_value_get_ulong(gst_structure_get_value(s, "handler-id")));
-#else
-		gst_pad_remove_event_probe(srcpad,
-			g_value_get_uint(gst_structure_get_value(s, "handler-id")));
-#endif
 
 		if (g_value_get_boolean(gst_structure_get_value(s, "release-pad")))
 			gst_element_release_request_pad(GST_ELEMENT_PARENT(srcpad), srcpad);
 
-#if GST_CHECK_VERSION(1,0,0)
 		return GST_PAD_PROBE_DROP;
-#else
-		return FALSE;
-#endif
 	}
 
-#if GST_CHECK_VERSION(1,0,0)
 	return GST_PAD_PROBE_OK;
-#else
-	return TRUE;
-#endif
 }
 
 static void
 unlink_teepad_dynamic(GstPad *srcpad, gboolean release_pad)
 {
-#if GST_CHECK_VERSION(1,0,0)
 	gulong id = gst_pad_add_probe(srcpad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
 	                              event_probe_cb, NULL, NULL);
-#else
-	guint id = gst_pad_add_event_probe(srcpad, G_CALLBACK(event_probe_cb), NULL);
-#endif
 
 	if (GST_IS_GHOST_PAD(srcpad))
 		srcpad = gst_ghost_pad_get_target(GST_GHOST_PAD(srcpad));
@@ -322,11 +292,7 @@
 		gst_event_new_custom(GST_EVENT_CUSTOM_DOWNSTREAM,
 			gst_structure_new("purple-unlink-tee",
 				"release-pad", G_TYPE_BOOLEAN, release_pad,
-#if GST_CHECK_VERSION(1,0,0)
 				"handler-id", G_TYPE_ULONG, id,
-#else
-				"handler-id", G_TYPE_UINT, id,
-#endif
 				NULL)));
 }
 
@@ -548,12 +514,10 @@
 			purple_media_backend_fs2_get_local_candidates;
 	iface->set_remote_codecs = purple_media_backend_fs2_set_remote_codecs;
 	iface->set_send_codec = purple_media_backend_fs2_set_send_codec;
-#if GST_CHECK_VERSION(1,0,0)
 	iface->set_encryption_parameters =
 			purple_media_backend_fs2_set_encryption_parameters;
 	iface->set_decryption_parameters =
 			purple_media_backend_fs2_set_decryption_parameters;
-#endif
 	iface->set_params = purple_media_backend_fs2_set_params;
 	iface->get_available_params = purple_media_backend_fs2_get_available_params;
 	iface->send_dtmf = purple_media_backend_fs2_send_dtmf;
@@ -934,13 +898,9 @@
 	gdouble percent;
 
 	list = gst_structure_get_value(gst_message_get_structure(msg), value_name);
-#if GST_CHECK_VERSION(1,0,0)
 G_GNUC_BEGIN_IGNORE_DEPRECATIONS
 	value = g_value_array_get_nth(g_value_get_boxed(list), 0);
 G_GNUC_END_IGNORE_DEPRECATIONS
-#else
-	value = gst_value_list_get_value(list, 0);
-#endif
 	value_db = g_value_get_double(value);
 	percent = pow(10, value_db / 20);
 	return (percent > 1.0) ? 1.0 : percent;
@@ -1670,11 +1630,7 @@
 		srcpad = gst_element_get_static_pad(session->srcvalve, "src");
 		g_object_set(volume, "volume", input_volume, NULL);
 	} else {
-#if GST_CHECK_VERSION(1,0,0)
 		srcpad = gst_element_get_request_pad(session->tee, "src_%u");
-#else
-		srcpad = gst_element_get_request_pad(session->tee, "src%d");
-#endif
 	}
 
 	purple_debug_info("backend-fs2", "connecting pad: %s\n",
@@ -1926,11 +1882,7 @@
 			gst_element_link(stream->queue, stream->volume);
 			sink = stream->queue;
 		} else if (codec->media_type == FS_MEDIA_TYPE_VIDEO) {
-#if GST_CHECK_VERSION(1,0,0)
 			stream->src = gst_element_factory_make("funnel", NULL);
-#else
-			stream->src = gst_element_factory_make("fsfunnel", NULL);
-#endif
 			sink = gst_element_factory_make("fakesink", NULL);
 			g_object_set(G_OBJECT(sink), "async", FALSE, NULL);
 			gst_bin_add(GST_BIN(priv->confbin), sink);
@@ -1938,11 +1890,7 @@
 			stream->fakesink = sink;
 #ifdef HAVE_MEDIA_APPLICATION
 		} else if (codec->media_type == FS_MEDIA_TYPE_APPLICATION) {
-#if GST_CHECK_VERSION(1,0,0)
 			stream->src = gst_element_factory_make("funnel", NULL);
-#else
-			stream->src = gst_element_factory_make("fsfunnel", NULL);
-#endif
 			sink = purple_media_manager_get_element(
 					purple_media_get_manager(priv->media),
 					PURPLE_MEDIA_RECV_APPLICATION, priv->media,
@@ -1960,11 +1908,7 @@
 		gst_element_link_many(stream->src, stream->tee, sink, NULL);
 	}
 
-#if GST_CHECK_VERSION(1,0,0)
 	sinkpad = gst_element_get_request_pad(stream->src, "sink_%u");
-#else
-	sinkpad = gst_element_get_request_pad(stream->src, "sink%d");
-#endif
 	gst_pad_link(srcpad, sinkpad);
 	gst_object_unref(sinkpad);
 
@@ -2405,7 +2349,6 @@
 	return TRUE;
 }
 
-#if GST_CHECK_VERSION(1,0,0)
 static GstStructure *
 create_fs2_srtp_structure(const gchar *cipher, const gchar *auth,
 	const gchar *key, gsize key_len)
@@ -2494,7 +2437,6 @@
 	gst_structure_free(srtp);
 	return result;
 }
-#endif /* GST 1.0+ */
 
 static gboolean
 purple_media_backend_fs2_set_send_codec(PurpleMediaBackend *self,
--- a/libpurple/mediamanager.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/mediamanager.c	Mon Dec 21 22:14:59 2015 -0600
@@ -35,11 +35,7 @@
 #include <media/backend-fs2.h>
 
 #include <farstream/fs-element-added-notifier.h>
-#if GST_CHECK_VERSION(1,0,0)
 #include <gst/video/videooverlay.h>
-#else
-#include <gst/interfaces/xoverlay.h>
-#endif
 #ifdef HAVE_MEDIA_APPLICATION
 #include <gst/app/app.h>
 #endif
@@ -312,11 +308,7 @@
 		gst_bus_add_signal_watch(GST_BUS(bus));
 		g_signal_connect(G_OBJECT(bus), "message",
 				G_CALLBACK(pipeline_bus_call), manager);
-#if GST_CHECK_VERSION(1,0,0)
 		gst_bus_set_sync_handler(bus, gst_bus_sync_signal_handler, NULL, NULL);
-#else
-		gst_bus_set_sync_handler(bus, gst_bus_sync_signal_handler, NULL);
-#endif
 		gst_object_unref(bus);
 
 		filename = g_build_filename(purple_user_dir(),
@@ -626,9 +618,7 @@
 {
 	GstElement *parent = GST_ELEMENT_PARENT(pad);
 	GstIterator *iter;
-#if GST_CHECK_VERSION(1,0,0)
 	GValue tmp = G_VALUE_INIT;
-#endif
 	GstPad *remaining_pad;
 	GstIteratorResult result;
 
@@ -636,21 +626,15 @@
 
 	iter = gst_element_iterate_src_pads(parent);
 
-#if GST_CHECK_VERSION(1,0,0)
 	result = gst_iterator_next(iter, &tmp);
-#else
-	result = gst_iterator_next(iter, (gpointer)&remaining_pad);
-#endif
 
 	if (result == GST_ITERATOR_DONE) {
 		gst_element_set_locked_state(parent, TRUE);
 		gst_element_set_state(parent, GST_STATE_NULL);
 		gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(parent)), parent);
 	} else if (result == GST_ITERATOR_OK) {
-#if GST_CHECK_VERSION(1,0,0)
 		remaining_pad = g_value_get_object(&tmp);
 		g_value_reset(&tmp);
-#endif
 		gst_object_unref(remaining_pad);
 	}
 
@@ -702,11 +686,7 @@
 {
 #ifdef USE_VV
 	if (manager->priv->video_caps == NULL)
-#if GST_CHECK_VERSION(1,0,0)
 		manager->priv->video_caps = gst_caps_from_string("video/x-raw,"
-#else
-		manager->priv->video_caps = gst_caps_from_string("video/x-raw-yuv,"
-#endif
 			"width=[250,352], height=[200,288], framerate=[1/1,20/1]");
 	return manager->priv->video_caps;
 #else
@@ -1159,11 +1139,7 @@
 		g_free(id);
 
 		tee = gst_bin_get_by_name(GST_BIN(ret), "tee");
-#if GST_CHECK_VERSION(1,0,0)
 		pad = gst_element_get_request_pad(tee, "src_%u");
-#else
-		pad = gst_element_get_request_pad(tee, "src%d");
-#endif
 		gst_object_unref(tee);
 		ghost = gst_ghost_pad_new(NULL, pad);
 		gst_object_unref(pad);
@@ -1369,11 +1345,7 @@
 	GstElement *sink;
 
 	if (GST_MESSAGE_TYPE(msg) != GST_MESSAGE_ELEMENT
-#if GST_CHECK_VERSION(1,0,0)
 	 || !gst_is_video_overlay_prepare_window_handle_message(msg))
-#else
-	 || !gst_structure_has_name(msg->structure, "prepare-xwindow-id"))
-#endif
 		return;
 
 	sink = GST_ELEMENT(GST_MESSAGE_SRC(msg));
@@ -1387,16 +1359,8 @@
 			| G_SIGNAL_MATCH_DATA, 0, 0, NULL,
 			window_id_cb, ow);
 
-#if GST_CHECK_VERSION(1,0,0)
 	gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(GST_MESSAGE_SRC(msg)),
 	                                    ow->window_id);
-#elif GST_CHECK_VERSION(0,10,31)
-	gst_x_overlay_set_window_handle(GST_X_OVERLAY(GST_MESSAGE_SRC(msg)),
-	                                ow->window_id);
-#else
-	gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(GST_MESSAGE_SRC(msg)),
-	                             ow->window_id);
-#endif
 }
 #endif
 
@@ -1429,11 +1393,7 @@
 				continue;
 
 			queue = gst_element_factory_make("queue", NULL);
-#if GST_CHECK_VERSION(1,0,0)
 			convert = gst_element_factory_make("videoconvert", NULL);
-#else
-			convert = gst_element_factory_make("ffmpegcolorspace", NULL);
-#endif
 			ow->sink = purple_media_manager_get_element(
 					manager, PURPLE_MEDIA_RECV_VIDEO,
 					ow->media, ow->session_id,
--- a/libpurple/network.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/network.c	Mon Dec 21 22:14:59 2015 -0600
@@ -1014,7 +1014,7 @@
 			purple_debug_info("network",
 				"network is unavailable, don't try to update STUN IP");
 		}
-	} else if (stun_ip) {
+	} else {
 		g_free(stun_ip);
 		stun_ip = NULL;
 	}
@@ -1034,7 +1034,7 @@
 			purple_debug_info("network",
 				"network is unavailable, don't try to update TURN IP");
 		}
-	} else if (turn_ip) {
+	} else {
 		g_free(turn_ip);
 		turn_ip = NULL;
 	}
@@ -1304,8 +1304,7 @@
 	purple_signal_unregister(purple_network_get_handle(),
 							 "network-configuration-changed");
 
-	if (stun_ip)
-		g_free(stun_ip);
+	g_free(stun_ip);
 
 	g_hash_table_destroy(upnp_port_mappings);
 	g_hash_table_destroy(nat_pmp_port_mappings);
--- a/libpurple/plugins/perl/common/SSLConn.xs	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/plugins/perl/common/SSLConn.xs	Mon Dec 21 22:14:59 2015 -0600
@@ -28,9 +28,6 @@
 Purple::Ssl::Ops
 purple_ssl_get_ops()
 
-gboolean
-purple_ssl_is_supported()
-
 size_t
 purple_ssl_read(gsc, buffer, len)
 	Purple::Ssl::Connection gsc
--- a/libpurple/plugins/ssl/ssl-nss.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/plugins/ssl/ssl-nss.c	Mon Dec 21 22:14:59 2015 -0600
@@ -682,8 +682,7 @@
 	if (len == 0) {
 		purple_debug_error("nss/x509",
 				"Certificate file has no contents!\n");
-		if (rawcert)
-			g_free(rawcert);
+		g_free(rawcert);
 		return NULL;
 	}
 
@@ -731,8 +730,7 @@
 	if (len == 0) {
 		purple_debug_error("nss/x509",
 				"Certificate file has no contents!\n");
-		if (rawcert)
-			g_free(rawcert);
+		g_free(rawcert);
 		return NULL;
 	}
 
--- a/libpurple/protocols/bonjour/bonjour.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/bonjour/bonjour.h	Mon Dec 21 22:14:59 2015 -0600
@@ -26,6 +26,8 @@
 #ifndef _BONJOUR_H_
 #define _BONJOUR_H_
 
+#include <gmodule.h>
+
 #include "internal.h"
 #include "protocol.h"
 
--- a/libpurple/protocols/facebook/Makefile.mingw	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/Makefile.mingw	Mon Dec 21 22:14:59 2015 -0600
@@ -59,6 +59,7 @@
 ##
 LIBS =	\
 			-lglib-2.0 \
+			-lgio-2.0 \
 			-lgobject-2.0 \
 			-lws2_32 \
 			-lintl \
--- a/libpurple/protocols/facebook/api.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/api.c	Mon Dec 21 22:14:59 2015 -0600
@@ -50,8 +50,9 @@
 
 struct _FbApiPrivate
 {
+	FbMqtt *mqtt;
+	FbHttpConns *cons;
 	PurpleConnection *gc;
-	FbMqtt *mqtt;
 	GHashTable *data;
 
 	FbId uid;
@@ -160,6 +161,7 @@
 	FbApiPrivate *priv = FB_API(obj)->priv;
 	GHashTableIter iter;
 
+	fb_http_conns_cancel_all(priv->cons);
 	g_hash_table_iter_init(&iter, priv->data);
 
 	while (g_hash_table_iter_next(&iter, NULL, (gpointer) &fata)) {
@@ -167,14 +169,11 @@
 		g_free(fata);
 	}
 
-	if (G_LIKELY(priv->gc != NULL)) {
-		purple_http_conn_cancel_all(priv->gc);
-	}
-
 	if (G_UNLIKELY(priv->mqtt != NULL)) {
 		g_object_unref(priv->mqtt);
 	}
 
+	fb_http_conns_free(priv->cons);
 	g_hash_table_destroy(priv->data);
 	g_hash_table_destroy(priv->mids);
 
@@ -485,6 +484,7 @@
 	priv = G_TYPE_INSTANCE_GET_PRIVATE(api, FB_TYPE_API, FbApiPrivate);
 	api->priv = priv;
 
+	priv->cons = fb_http_conns_new();
 	priv->data = g_hash_table_new_full(g_direct_hash, g_direct_equal,
 	                                   NULL, NULL);
 	priv->mids = g_hash_table_new_full(g_int64_hash, g_int64_equal,
@@ -646,19 +646,20 @@
 {
 	const gchar *data;
 	const gchar *msg;
+	FbApiPrivate *priv = api->priv;
 	gchar *emsg;
 	GError *err = NULL;
 	gint code;
 	gsize size;
 
-	if (G_UNLIKELY(purple_http_conn_is_cancelling(con))) {
-		/* Ignore canceling HTTP requests */
+	if (fb_http_conns_is_canceled(priv->cons)) {
 		return FALSE;
 	}
 
 	msg = purple_http_response_get_error(res);
 	code = purple_http_response_get_code(res);
 	data = purple_http_response_get_data(res, &size);
+	fb_http_conns_remove(priv->cons, con);
 
 	if (msg != NULL) {
 		emsg = g_strdup_printf("%s (%d)", msg, code);
@@ -717,7 +718,7 @@
 	fb_http_params_set_str(params, "format", "json");
 	fb_http_params_set_str(params, "method", method);
 
-	val = fb_util_locale_str();
+	val = fb_util_get_locale();
 	fb_http_params_set_str(params, "locale", val);
 	g_free(val);
 
@@ -755,6 +756,7 @@
 	data = fb_http_params_close(params, NULL);
 	purple_http_request_set_contents(req, data, -1);
 	ret = purple_http_request(priv->gc, req, callback, api);
+	fb_http_conns_add(priv->cons, ret);
 	purple_http_request_unref(req);
 
 	fb_util_debug(FB_UTIL_DEBUG_INFO, "HTTP Request (%p):", ret);
@@ -919,7 +921,7 @@
 	fb_thrift_write_stop(thft);
 
 	bytes = fb_thrift_get_bytes(thft);
-	cytes = fb_util_zcompress(bytes, &err);
+	cytes = fb_util_zlib_deflate(bytes, &err);
 
 	FB_API_ERROR_EMIT(api, err,
 		g_object_unref(thft);
@@ -1619,10 +1621,10 @@
 		{"/t_p", fb_api_cb_publish_p}
 	};
 
-	comp = fb_util_zcompressed(pload);
+	comp = fb_util_zlib_test(pload);
 
 	if (G_LIKELY(comp)) {
-		bytes = fb_util_zuncompress(pload, &err);
+		bytes = fb_util_zlib_inflate(pload, &err);
 		FB_API_ERROR_EMIT(api, err, return);
 	} else {
 		bytes = (GByteArray*) pload;
@@ -1685,7 +1687,7 @@
 	priv = api->priv;
 
 	if (priv->cid == NULL) {
-		priv->cid = fb_util_randstr(32);
+		priv->cid = fb_util_rand_alnum(32);
 	}
 
 	if (priv->did == NULL) {
@@ -1954,6 +1956,8 @@
 	fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
 	                   "$.graph_api_write_id");
 	fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
+	                   "$.represented_profile.friendship_status");
+	fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
 	                   "$.represented_profile.id");
 	fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
 	                   "$.structured_name.text");
@@ -1965,6 +1969,12 @@
 	while (fb_json_values_update(values, &err)) {
 		g_free(writeid);
 		writeid = fb_json_values_next_str_dup(values, NULL);
+		str = fb_json_values_next_str(values, NULL);
+
+		if (!purple_strequal(str, "ARE_FRIENDS")) {
+			continue;
+		}
+
 		user = fb_api_user_dup(NULL, FALSE);
 		str = fb_json_values_next_str(values, "0");
 
@@ -2127,7 +2137,7 @@
 	va_end(ap);
 
 	bytes = g_byte_array_new_take((guint8*) msg, strlen(msg));
-	cytes = fb_util_zcompress(bytes, &err);
+	cytes = fb_util_zlib_deflate(bytes, &err);
 
 	FB_API_ERROR_EMIT(api, err,
 		g_byte_array_free(bytes, TRUE);
--- a/libpurple/protocols/facebook/data.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/data.c	Mon Dec 21 22:14:59 2015 -0600
@@ -30,6 +30,7 @@
 struct _FbDataPrivate
 {
 	FbApi *api;
+	FbHttpConns *cons;
 	PurpleConnection *gc;
 	PurpleRoomlist *roomlist;
 	GQueue *msgs;
@@ -67,6 +68,7 @@
 	GHashTableIter iter;
 	gpointer ptr;
 
+	fb_http_conns_cancel_all(priv->cons);
 	g_hash_table_iter_init(&iter, priv->evs);
 
 	while (g_hash_table_iter_next(&iter, NULL, &ptr)) {
@@ -77,6 +79,7 @@
 		g_object_unref(priv->api);
 	}
 
+	fb_http_conns_free(priv->cons);
 	g_queue_free_full(priv->msgs, (GDestroyNotify) fb_api_message_free);
 
 	g_hash_table_destroy(priv->imgs);
@@ -101,7 +104,9 @@
 	priv = G_TYPE_INSTANCE_GET_PRIVATE(fata, FB_TYPE_DATA, FbDataPrivate);
 	fata->priv = priv;
 
+	priv->cons = fb_http_conns_new();
 	priv->msgs = g_queue_new();
+
 	priv->imgs = g_hash_table_new_full(g_direct_hash, g_direct_equal,
 	                                   g_object_unref, NULL);
 	priv->unread = g_hash_table_new_full(fb_id_hash, fb_id_equal,
@@ -528,22 +533,25 @@
 {
 	FbDataImage *img = data;
 	FbDataImagePrivate *priv = img->priv;
+	FbDataPrivate *driv = priv->fata->priv;
 	GError *err = NULL;
 
-	if (G_UNLIKELY(purple_http_conn_is_cancelling(con))) {
-		/* Ignore canceling HTTP requests */
+	if (fb_http_conns_is_canceled(driv->cons)) {
 		return;
 	}
 
+	fb_http_conns_remove(driv->cons, con);
 	fb_http_error_chk(res, &err);
+
 	priv->image = (guint8*) purple_http_response_get_data(res, &priv->size);
 	priv->func(img, err);
 
-	if (G_UNLIKELY(err != NULL)) {
+	if (G_LIKELY(err == NULL)) {
+		fb_data_image_queue(priv->fata);
+	} else {
 		g_error_free(err);
 	}
 
-	fb_data_image_queue(priv->fata);
 	g_object_unref(img);
 }
 
@@ -555,6 +563,7 @@
 	FbDataPrivate *priv;
 	GHashTableIter iter;
 	guint active = 0;
+	PurpleHttpConnection *con;
 
 	g_return_if_fail(FB_IS_DATA(fata));
 	priv = fata->priv;
@@ -579,7 +588,8 @@
 
 		img->priv->active = TRUE;
 		url = fb_data_image_get_url(img);
-		purple_http_get(priv->gc, fb_data_image_cb, img, url);
+		con = purple_http_get(priv->gc, fb_data_image_cb, img, url);
+		fb_http_conns_add(priv->cons, con);
 
 		if (++active >= FB_DATA_ICON_MAX) {
 			break;
--- a/libpurple/protocols/facebook/facebook.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/facebook.c	Mon Dec 21 22:14:59 2015 -0600
@@ -854,13 +854,6 @@
 
 	gc = purple_account_get_connection(acct);
 
-	if (!purple_ssl_is_supported()) {
-		purple_connection_error(gc,
-			PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-			_("SSL support unavailable"));
-		return;
-	}
-
 	fata = fb_data_new(gc);
 	api = fb_data_get_api(fata);
 	convh = purple_conversations_get_handle();
--- a/libpurple/protocols/facebook/facebook.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/facebook.h	Mon Dec 21 22:14:59 2015 -0600
@@ -32,6 +32,7 @@
  */
 
 #include <glib.h>
+#include <gmodule.h>
 
 #define FACEBOOK_TYPE_PROTOCOL  (facebook_protocol_get_type())
 #define FACEBOOK_PROTOCOL(obj)  (G_TYPE_CHECK_INSTANCE_CAST((obj), FACEBOOK_TYPE_PROTOCOL, FacebookProtocol))
--- a/libpurple/protocols/facebook/http.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/http.c	Mon Dec 21 22:14:59 2015 -0600
@@ -25,6 +25,12 @@
 
 #include "http.h"
 
+struct _FbHttpConns
+{
+	GHashTable *cons;
+	gboolean canceled;
+};
+
 GQuark
 fb_http_error_quark(void)
 {
@@ -37,6 +43,74 @@
 	return q;
 }
 
+FbHttpConns *
+fb_http_conns_new(void)
+{
+	FbHttpConns *cons;
+
+	cons = g_new0(FbHttpConns, 1);
+	cons->cons = g_hash_table_new(g_direct_hash, g_direct_equal);
+	return cons;
+}
+
+void
+fb_http_conns_free(FbHttpConns *cons)
+{
+	g_return_if_fail(cons != NULL);
+
+	g_hash_table_destroy(cons->cons);
+	g_free(cons);
+}
+
+void
+fb_http_conns_cancel_all(FbHttpConns *cons)
+{
+	GHashTableIter iter;
+	gpointer con;
+
+	g_return_if_fail(cons != NULL);
+	g_return_if_fail(!cons->canceled);
+
+	cons->canceled = TRUE;
+	g_hash_table_iter_init(&iter, cons->cons);
+
+	while (g_hash_table_iter_next(&iter, &con, NULL)) {
+		g_hash_table_iter_remove(&iter);
+		purple_http_conn_cancel(con);
+	}
+}
+
+gboolean
+fb_http_conns_is_canceled(FbHttpConns *cons)
+{
+	g_return_val_if_fail(cons != NULL, TRUE);
+	return cons->canceled;
+}
+
+void
+fb_http_conns_add(FbHttpConns *cons, PurpleHttpConnection *con)
+{
+	g_return_if_fail(cons != NULL);
+	g_return_if_fail(!cons->canceled);
+	g_hash_table_replace(cons->cons, con, con);
+}
+
+void
+fb_http_conns_remove(FbHttpConns *cons, PurpleHttpConnection *con)
+{
+	g_return_if_fail(cons != NULL);
+	g_return_if_fail(!cons->canceled);
+	g_hash_table_remove(cons->cons, con);
+}
+
+void
+fb_http_conns_reset(FbHttpConns *cons)
+{
+	g_return_if_fail(cons != NULL);
+	cons->canceled = FALSE;
+	g_hash_table_remove_all(cons->cons);
+}
+
 gboolean
 fb_http_error_chk(PurpleHttpResponse *res, GError **error)
 {
--- a/libpurple/protocols/facebook/http.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/http.h	Mon Dec 21 22:14:59 2015 -0600
@@ -43,6 +43,13 @@
 #define FB_HTTP_ERROR fb_http_error_quark()
 
 /**
+ * FbHttpConns:
+ *
+ * Represents a set of #PurpleHttpConnection.
+ */
+typedef struct _FbHttpConns FbHttpConns;
+
+/**
  * FbHttpParams:
  *
  * Represents a set of key/value HTTP parameters.
@@ -73,9 +80,81 @@
 fb_http_error_quark(void);
 
 /**
+ * fb_http_conns_new:
+ *
+ * Creates a new #FbHttpConns. The returned #FbHttpConns should be
+ * freed with #fb_http_conns_free() when no longer needed.
+ *
+ * Returns: The new #FbHttpConns.
+ */
+FbHttpConns *
+fb_http_conns_new(void);
+
+/**
+ * fb_http_conns_free:
+ * @cons: The #FbHttpConns.
+ *
+ * Frees all memory used by the #FbHttpConns. This will *not* cancel
+ * the any of the added #PurpleHttpConnection.
+ */
+void
+fb_http_conns_free(FbHttpConns *cons);
+
+/**
+ * fb_http_conns_cancel_all:
+ * @cons: The #FbHttpConns.
+ *
+ * Cancels each #PurpleHttpConnection in the #FbHttpConns.
+ */
+void
+fb_http_conns_cancel_all(FbHttpConns *cons);
+
+/**
+ * fb_http_conns_is_canceled:
+ * @cons: The #FbHttpConns.
+ *
+ * Determines if the #FbHttpConns has been canceled.
+ *
+ * Returns: #TRUE if it has been canceled, otherwise #FALSE.
+ */
+gboolean
+fb_http_conns_is_canceled(FbHttpConns *cons);
+
+/**
+ * fb_http_conns_add:
+ * @cons: The #FbHttpConns.
+ * @con: The #PurpleHttpConnection.
+ *
+ * Adds a #PurpleHttpConnection to the #FbHttpConns.
+ */
+void
+fb_http_conns_add(FbHttpConns *cons, PurpleHttpConnection *con);
+
+/**
+ * fb_http_conns_remove:
+ * @cons: The #FbHttpConns.
+ * @con: The #PurpleHttpConnection.
+ *
+ * Removes a #PurpleHttpConnection from the #FbHttpConns.
+ */
+void
+fb_http_conns_remove(FbHttpConns *cons, PurpleHttpConnection *con);
+
+/**
+ * fb_http_conns_reset:
+ * @cons: The #FbHttpConns.
+ *
+ * Resets the #FbHttpConns. This removes each #PurpleHttpConnection
+ * from the #FbHttpConns *without* canceling it. This allows the the
+ * #FbHttpConns to be reused.
+ */
+void
+fb_http_conns_reset(FbHttpConns *cons);
+
+/**
  * fb_http_error_chk:
  * @res: The #PurpleHttpResponse.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Checks a #PurpleHttpResponse for success. This optionally assigns an
  * appropriate #GError upon failure.
@@ -142,7 +221,7 @@
  * fb_http_params_get_bool:
  * @params: The #FbHttpParams.
  * @name: The parameter name.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a boolean value from the #FbHttpParams. This optionally assigns
  * an appropriate #GError upon failure.
@@ -157,7 +236,7 @@
  * fb_http_params_get_dbl:
  * @params: The #FbHttpParams.
  * @name: The parameter name.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a floating point value from the #FbHttpParams. This optionally
  * assigns an appropriate #GError upon failure.
@@ -172,7 +251,7 @@
  * fb_http_params_get_int:
  * @params: The #FbHttpParams.
  * @name: The parameter name.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets an integer value from the #FbHttpParams. This optionally
  * assigns an appropriate #GError upon failure.
@@ -187,7 +266,7 @@
  * fb_http_params_get_str:
  * @params: The #FbHttpParams.
  * @name: The parameter name.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a string value from the #FbHttpParams. This optionally assigns
  * an appropriate #GError upon failure.
@@ -202,7 +281,7 @@
  * fb_http_params_dup_str:
  * @params: The #FbHttpParams.
  * @name: The parameter name.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a duplicated string value from the #FbHttpParams. This
  * optionally assigns an appropriate #GError upon failure. The returned
--- a/libpurple/protocols/facebook/id.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/id.h	Mon Dec 21 22:14:59 2015 -0600
@@ -93,7 +93,7 @@
  *
  * Return: #TRUE if the string is an #FbId, otherwise #FALSE.
  */
-#define FB_ID_IS_STR(s) fb_util_str_is(s, G_ASCII_DIGIT)
+#define FB_ID_IS_STR(s) fb_util_strtest(s, G_ASCII_DIGIT)
 
 /**
  * FB_ID_TO_STR:
--- a/libpurple/protocols/facebook/json.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/json.c	Mon Dec 21 22:14:59 2015 -0600
@@ -258,13 +258,23 @@
 JsonNode *
 fb_json_node_new(const gchar *data, gssize size, GError **error)
 {
+	gchar *slice;
 	JsonNode *root;
 	JsonParser *prsr;
 
+	g_return_val_if_fail(data != NULL, NULL);
+
+	if (size < 0) {
+		size = strlen(data);
+	}
+
+	/* Ensure data is null terminated for json-glib < 1.0.2 */
+	slice = g_strndup(data, size);
 	prsr = json_parser_new();
 
-	if (!json_parser_load_from_data(prsr, data, size, error)) {
+	if (!json_parser_load_from_data(prsr, slice, size, error)) {
 		g_object_unref(prsr);
+		g_free(slice);
 		return NULL;
 	}
 
@@ -272,6 +282,7 @@
 	root = json_node_copy(root);
 
 	g_object_unref(prsr);
+	g_free(slice);
 	return root;
 }
 
@@ -284,6 +295,11 @@
 	JsonNode *node;
 	JsonNode *ret;
 
+	/* Special case for json-glib < 0.99.2 */
+	if (purple_strequal(expr, "$")) {
+		return json_node_copy(root);
+	}
+
 	node = json_path_query(expr, root, &err);
 
 	if (err != NULL) {
--- a/libpurple/protocols/facebook/json.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/json.h	Mon Dec 21 22:14:59 2015 -0600
@@ -167,7 +167,7 @@
 /**
  * fb_json_bldr_arr_begin:
  * @bldr: The #JsonBuilder.
- * @name: The member name, or #NULL.
+ * @name: The member name or #NULL.
  *
  * Begins an array member in the #JsonBuilder.
  */
@@ -186,7 +186,7 @@
 /**
  * fb_json_bldr_obj_begin:
  * @bldr: The #JsonBuilder.
- * @name: The member name, or #NULL.
+ * @name: The member name or #NULL.
  *
  * Begins an object member in the #JsonBuilder.
  */
@@ -205,7 +205,7 @@
 /**
  * fb_json_bldr_add_bool:
  * @bldr: The #JsonBuilder.
- * @name: The member name, or #NULL.
+ * @name: The member name or #NULL.
  * @value: The value.
  *
  * Adds a boolean memeber to the #JsonBuilder.
@@ -216,7 +216,7 @@
 /**
  * fb_json_bldr_add_dbl:
  * @bldr: The #JsonBuilder.
- * @name: The member name, or #NULL.
+ * @name: The member name or #NULL.
  * @value: The value.
  *
  * Adds a floating point memeber to the #JsonBuilder.
@@ -227,7 +227,7 @@
 /**
  * fb_json_bldr_add_int:
  * @bldr: The #JsonBuilder.
- * @name: The member name, or #NULL.
+ * @name: The member name or #NULL.
  * @value: The value.
  *
  * Adds a integer memeber to the #JsonBuilder.
@@ -238,7 +238,7 @@
 /**
  * fb_json_bldr_add_str:
  * @bldr: The #JsonBuilder.
- * @name: The member name, or #NULL.
+ * @name: The member name or #NULL.
  * @value: The value.
  *
  * Adds a string memeber to the #JsonBuilder.
@@ -249,7 +249,7 @@
 /**
  * fb_json_bldr_add_strf:
  * @bldr: The #JsonBuilder.
- * @name: The member name, or #NULL.
+ * @name: The member name or #NULL.
  * @format: The format string literal.
  * @...: The arguments for @format.
  *
@@ -263,8 +263,8 @@
 /**
  * fb_json_node_new:
  * @data: The string JSON.
- * @size: The size of @json, or -1 if null-terminated.
- * @error: The return location for the #GError, or #NULL.
+ * @size: The size of @json or -1 if null-terminated.
+ * @error: The return location for the #GError or #NULL.
  *
  * Creates a new #JsonNode. The returned #JsonBuilder should be freed
  * wuth #json_node_free() when no longer needed.
@@ -278,7 +278,7 @@
  * fb_json_node_get:
  * @root: The root #JsonNode.
  * @expr: The #JsonPath expression.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a new #JsonNode value from a parent #JsonNode with a #JsonPath
  * expression. The returned #JsonNode should be freed with
@@ -306,7 +306,7 @@
  * fb_json_node_get_arr:
  * @root: The root #JsonNode.
  * @expr: The #JsonPath expression.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a new #JsonArray value from a parent #JsonNode with a #JsonPath
  * expression. The returned #JsonArray should be freed with
@@ -321,7 +321,7 @@
  * fb_json_node_get_bool:
  * @root: The root #JsonNode.
  * @expr: The #JsonPath expression.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a boolean value from a parent #JsonNode with a #JsonPath
  * expression.
@@ -335,7 +335,7 @@
  * fb_json_node_get_dbl:
  * @root: The root #JsonNode.
  * @expr: The #JsonPath expression.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets a floating point value from a parent #JsonNode with a #JsonPath
  * expression.
@@ -349,7 +349,7 @@
  * fb_json_node_get_int:
  * @root: The root #JsonNode.
  * @expr: The #JsonPath expression.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets an integer value from a parent #JsonNode with a #JsonPath
  * expression.
@@ -363,7 +363,7 @@
  * fb_json_node_get_str:
  * @root: The root #JsonNode.
  * @expr: The #JsonPath expression.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Gets an string value from a parent #JsonNode with a #JsonPath
  * expression. The returned string should be freed with #g_free()
@@ -404,8 +404,8 @@
  * @values: The #FbJsonValues.
  *
  * Gets the current working root #JsonNode. This is either the current
- * array #JsonNode, or the root #JsonNode. The returned #JsonNode
- * should not be freed.
+ * array #JsonNode or the root #JsonNode. The returned #JsonNode should
+ * not be freed.
  */
 JsonNode *
 fb_json_values_get_root(FbJsonValues *values);
@@ -425,7 +425,7 @@
 /**
  * fb_json_values_update:
  * @values: The #FbJsonValues.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Updates the current working root. This should be called after all of
  * the #FbJsonValue's have been added with #fb_json_values_add(). If an
--- a/libpurple/protocols/facebook/mqtt.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/mqtt.h	Mon Dec 21 22:14:59 2015 -0600
@@ -521,7 +521,7 @@
 /**
  * fb_mqtt_message_read_byte:
  * @msg: The #FbMqttMessage.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads an 8-bit integer value from the #FbMqttMessage. If @value is
  * #NULL, this will simply advance the cursor position.
@@ -534,7 +534,7 @@
 /**
  * fb_mqtt_message_read_mid:
  * @msg: The #FbMqttMessage.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a message identifier from the #FbMqttMessage. If @value is
  * #NULL, this will simply advance the cursor position.
@@ -547,7 +547,7 @@
 /**
  * fb_mqtt_message_read_u16:
  * @msg: The #FbMqttMessage.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a 16-bit integer value from the #FbMqttMessage. If @value is
  * #NULL, this will simply advance the cursor position.
@@ -560,7 +560,7 @@
 /**
  * fb_mqtt_message_read_str:
  * @msg: The #FbMqttMessage.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a string value from the #FbMqttMessage. The value returned to
  * @value should be freed with #g_free() when no longer needed. If
--- a/libpurple/protocols/facebook/thrift.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/thrift.h	Mon Dec 21 22:14:59 2015 -0600
@@ -193,7 +193,7 @@
 /**
  * fb_thrift_read_bool:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a boolean value from the #FbThrift. If @value is #NULL, this
  * will simply advance the cursor position.
@@ -206,7 +206,7 @@
 /**
  * fb_thrift_read_byte:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads an 8-bit integer value from the #FbThrift. If @value is #NULL,
  * this will simply advance the cursor position.
@@ -219,7 +219,7 @@
 /**
  * fb_thrift_read_dbl:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a 64-bit floating point value from the #FbThrift. If @value
  * is #NULL, this will simply advance the cursor position.
@@ -232,7 +232,7 @@
 /**
  * fb_thrift_read_i16:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a signed 16-bit integer value from the #FbThrift. This will
  * convert the integer from the zig-zag format. If @value is #NULL,
@@ -246,7 +246,7 @@
 /**
  * fb_thrift_read_vi16:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a 16-bit integer value from the #FbThrift. This reads the raw
  * integer value without converting it from the zig-zag format. If
@@ -260,7 +260,7 @@
 /**
  * fb_thrift_read_i32:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a signed 32-bit integer value from the #FbThrift. This will
  * convert the integer from the zig-zag format. If @value is #NULL,
@@ -274,7 +274,7 @@
 /**
  * fb_thrift_read_vi32:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a 32-bit integer value from the #FbThrift. This reads the raw
  * integer value without converting it from the zig-zag format. If
@@ -288,7 +288,7 @@
 /**
  * fb_thrift_read_i64:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a signed 64-bit integer value from the #FbThrift. This will
  * convert the integer from the zig-zag format. If @value is #NULL,
@@ -302,7 +302,7 @@
 /**
  * fb_thrift_read_vi64:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a 64-bit integer value from the #FbThrift. This reads the raw
  * integer value without converting it from the zig-zag format. If
@@ -316,7 +316,7 @@
 /**
  * fb_thrift_read_str:
  * @thft: The #FbThrift.
- * @value: The return location for the value, or #NULL.
+ * @value: The return location for the value or #NULL.
  *
  * Reads a string value from the #FbThrift. The value returned to
  * @value should be freed with #g_free() when no longer needed. If
@@ -331,7 +331,7 @@
  * fb_thrift_read_field:
  * @thft: The #FbThrift.
  * @type: The return location for the #FbThriftType.
- * @id: The return location for the identifier, or #NULL.
+ * @id: The return location for the identifier or #NULL.
  *
  * Reads a field header from the #FbThrift.
  *
--- a/libpurple/protocols/facebook/util.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/util.c	Mon Dec 21 22:14:59 2015 -0600
@@ -244,7 +244,7 @@
 }
 
 gchar *
-fb_util_locale_str(void)
+fb_util_get_locale(void)
 {
 	const gchar * const *langs;
 	const gchar *lang;
@@ -272,7 +272,7 @@
 }
 
 gchar *
-fb_util_randstr(gsize size)
+fb_util_rand_alnum(guint len)
 {
 	gchar *ret;
 	GRand *rand;
@@ -285,19 +285,16 @@
 		"0123456789";
 	static const gsize charc = G_N_ELEMENTS(chars) - 1;
 
-	if (G_UNLIKELY(size < 1)) {
-		return NULL;
-	}
+	g_return_val_if_fail(len > 0, NULL);
+	rand = g_rand_new();
+	ret = g_new(gchar, len + 1);
 
-	rand = g_rand_new();
-	ret = g_new(gchar, size + 1);
-
-	for (i = 0; i < size; i++) {
+	for (i = 0; i < len; i++) {
 		j = g_rand_int_range(rand, 0, charc);
 		ret[i] = chars[j];
 	}
 
-	ret[size] = 0;
+	ret[len] = 0;
 	g_rand_free(rand);
 	return ret;
 }
@@ -463,7 +460,7 @@
 }
 
 gboolean
-fb_util_str_is(const gchar *str, GAsciiType type)
+fb_util_strtest(const gchar *str, GAsciiType type)
 {
 	gsize i;
 	gsize size;
@@ -484,7 +481,7 @@
 }
 
 gboolean
-fb_util_zcompressed(const GByteArray *bytes)
+fb_util_zlib_test(const GByteArray *bytes)
 {
 	guint8 b0;
 	guint8 b1;
@@ -503,7 +500,7 @@
 }
 
 static GByteArray *
-fb_util_zconv(GConverter *conv, const GByteArray *bytes, GError **error)
+fb_util_zlib_conv(GConverter *conv, const GByteArray *bytes, GError **error)
 {
 	GByteArray *ret;
 	GConverterResult res;
@@ -546,25 +543,25 @@
 }
 
 GByteArray *
-fb_util_zcompress(const GByteArray *bytes, GError **error)
+fb_util_zlib_deflate(const GByteArray *bytes, GError **error)
 {
 	GByteArray *ret;
 	GZlibCompressor *conv;
 
 	conv = g_zlib_compressor_new(G_ZLIB_COMPRESSOR_FORMAT_ZLIB, -1);
-	ret = fb_util_zconv(G_CONVERTER(conv), bytes, error);
+	ret = fb_util_zlib_conv(G_CONVERTER(conv), bytes, error);
 	g_object_unref(conv);
 	return ret;
 }
 
 GByteArray *
-fb_util_zuncompress(const GByteArray *bytes, GError **error)
+fb_util_zlib_inflate(const GByteArray *bytes, GError **error)
 {
 	GByteArray *ret;
 	GZlibDecompressor *conv;
 
 	conv = g_zlib_decompressor_new(G_ZLIB_COMPRESSOR_FORMAT_ZLIB);
-	ret = fb_util_zconv(G_CONVERTER(conv), bytes, error);
+	ret = fb_util_zlib_conv(G_CONVERTER(conv), bytes, error);
 	g_object_unref(conv);
 	return ret;
 }
--- a/libpurple/protocols/facebook/util.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/facebook/util.h	Mon Dec 21 22:14:59 2015 -0600
@@ -110,7 +110,7 @@
  * @acct: The #PurpleAccount.
  * @chat: The #PurpleChatConversation.
  * @name: The name of the buddy.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
  * Finds a buddy by their name or alias.
  *
@@ -216,7 +216,7 @@
                       G_GNUC_PRINTF(3, 4);
 
 /**
- * fb_util_locale_str:
+ * fb_util_get_locale:
  *
  * Gets the locale string (ex: en_US) from the system. The returned
  * string should be freed with #g_free() when no longer needed.
@@ -224,19 +224,20 @@
  * Returns: The locale string.
  */
 gchar *
-fb_util_locale_str(void);
+fb_util_get_locale(void);
 
 /**
- * fb_util_randstr:
- * @size: The size of the string.
+ * fb_util_rand_alnum:
+ * @len: The length of the string.
  *
- * Gets a random alphanumeric string. The returned string should be
- * freed with #g_free() when no longer needed.
+ * Gets a random alphanumeric (A-Za-z0-9) string. This function should
+ * *not* be relied on for cryptographic operations. The returned string
+ * should be freed with #g_free() when no longer needed.
  *
- * Returns: The random string.
+ * Returns: The alphanumeric string.
  */
 gchar *
-fb_util_randstr(gsize size);
+fb_util_rand_alnum(guint len);
 
 /**
  * fb_util_request_buddy:
@@ -244,7 +245,7 @@
  * @title: The title of the message or #NULL.
  * @primary: The main point of the message or #NULL.
  * @secondary: The secondary information or #NULL.
- * @select: A #GSList of selected buddies, or #NULL.
+ * @select: A #GSList of selected buddies or #NULL.
  * @multi: #TRUE to for multiple buddy selections, otherwise #FALSE.
  * @ok_cb: The callback for the `OK` button or #NULL.
  * @cancel_cb: The callback for the `Cancel` button or #NULL.
@@ -295,52 +296,55 @@
                          guint64 timestamp);
 
 /**
- * fb_util_str_is:
+ * fb_util_strtest:
  * @str: The string.
  * @type: The #GAsciiType.
  *
- * Determines if @str abides to the #GAsciiType.
+ * Tests if the string only contains characters allowed by the
+ * #GAsciiType. More than one type can be specified by ORing the types
+ * together.
  *
- * Returns: #TRUE if the string abides to @type, otherwise #FALSE.
+ * Returns: #TRUE if the string only contains characters allowed by the
+ *          #GAsciiType, otherwise #FALSE.
  */
 gboolean
-fb_util_str_is(const gchar *str, GAsciiType type);
+fb_util_strtest(const gchar *str, GAsciiType type);
 
 /**
- * fb_util_zcompressed:
+ * fb_util_zlib_test:
  * @bytes: The #GByteArray.
  *
- * Determines if the #GByteArray is zlib compressed.
+ * Tests if the #GByteArray is zlib compressed.
  *
  * Returns: #TRUE if the #GByteArray is compressed, otherwise #FALSE.
  */
 gboolean
-fb_util_zcompressed(const GByteArray *bytes);
+fb_util_zlib_test(const GByteArray *bytes);
 
 /**
- * fb_util_zcompress:
+ * fb_util_zlib_deflate:
  * @bytes: The #GByteArray.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
- * Compresses a #GByteArray with zlib. The returned #GByteArray should
- * be freed with #g_byte_array_free() when no longer needed.
+ * Deflates a #GByteArray with zlib. The returned #GByteArray should be
+ * freed with #g_byte_array_free() when no longer needed.
  *
- * Returns: The compressed #GByteArray.
+ * Returns: The deflated #GByteArray or #NULL on error.
  */
 GByteArray *
-fb_util_zcompress(const GByteArray *bytes, GError **error);
+fb_util_zlib_deflate(const GByteArray *bytes, GError **error);
 
 /**
- * fb_util_zuncompress:
+ * fb_util_zlib_inflate:
  * @bytes: The #GByteArray.
- * @error: The return location for the #GError, or #NULL.
+ * @error: The return location for the #GError or #NULL.
  *
- * Uncompresses a #GByteArray with zlib. The returned #GByteArray
- * should be freed with #g_byte_array_free() when no longer needed.
+ * Inflates a #GByteArray with zlib. The returned #GByteArray should be
+ * freed with #g_byte_array_free() when no longer needed.
  *
- * Returns: The uncompressed #GByteArray, or #NULL on error.
+ * Returns: The inflated #GByteArray or #NULL on error.
  */
 GByteArray *
-fb_util_zuncompress(const GByteArray *bytes, GError **error);
+fb_util_zlib_inflate(const GByteArray *bytes, GError **error);
 
 #endif /* _FACEBOOK_UTIL_H_ */
--- a/libpurple/protocols/gg/gg.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/gg/gg.h	Mon Dec 21 22:14:59 2015 -0600
@@ -26,6 +26,7 @@
 
 #define GGP_UIN_LEN_MAX 10
 
+#include <gmodule.h>
 #include <libgadu.h>
 
 #include "internal.h"
--- a/libpurple/protocols/gg/lib/http.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/gg/lib/http.c	Mon Dec 21 22:14:59 2015 -0600
@@ -312,10 +312,8 @@
 
 		if (res == -1 && errno != EINTR && errno != EAGAIN) {
 			gg_debug(GG_DEBUG_MISC, "=> http, reading header failed (errno=%d)\n", errno);
-			if (h->header) {
-				free(h->header);
-				h->header = NULL;
-			}
+			free(h->header);
+			h->header = NULL;
 			gg_http_error(GG_ERROR_READING);
 		}
 
@@ -328,10 +326,8 @@
 
 		if (res == 0) {
 			gg_debug(GG_DEBUG_MISC, "=> http, connection reset by peer\n");
-			if (h->header) {
-				free(h->header);
-				h->header = NULL;
-			}
+			free(h->header);
+			h->header = NULL;
 			gg_http_error(GG_ERROR_READING);
 		}
 
@@ -447,10 +443,8 @@
 
 		if (res == -1 && errno != EINTR && errno != EAGAIN) {
 			gg_debug(GG_DEBUG_MISC, "=> http, reading body failed (errno=%d)\n", errno);
-			if (h->body) {
-				free(h->body);
-				h->body = NULL;
-			}
+			free(h->body);
+			h->body = NULL;
 			gg_http_error(GG_ERROR_READING);
 		}
 
@@ -472,10 +466,8 @@
 					"connection closed while reading "
 					"(have %d, need %d)\n",
 					h->body_done, h->body_size);
-				if (h->body) {
-					free(h->body);
-					h->body = NULL;
-				}
+				free(h->body);
+				h->body = NULL;
 				gg_http_error(GG_ERROR_READING);
 			}
 
--- a/libpurple/protocols/gg/roster.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/gg/roster.c	Mon Dec 21 22:14:59 2015 -0600
@@ -159,8 +159,7 @@
 		g_hash_table_destroy(content->group_ids);
 	if (content->group_names)
 		g_hash_table_destroy(content->group_names);
-	if (content->bots_group_id)
-		g_free(content->bots_group_id);
+	g_free(content->bots_group_id);
 	g_free(content);
 }
 
--- a/libpurple/protocols/gg/tcpsocket.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/gg/tcpsocket.c	Mon Dec 21 22:14:59 2015 -0600
@@ -113,8 +113,7 @@
 void
 ggp_tcpsocket_setup(PurpleConnection *gc, struct gg_login_params *glp)
 {
-	glp->socket_manager_type = purple_ssl_is_supported() ?
-		GG_SOCKET_MANAGER_TYPE_TLS : GG_SOCKET_MANAGER_TYPE_TCP;
+	glp->socket_manager_type = GG_SOCKET_MANAGER_TYPE_TLS;
 	glp->socket_manager.cb_data = gc;
 	glp->socket_manager.connect_cb = ggp_tcpsocket_connect;
 	glp->socket_manager.close_cb = ggp_tcpsocket_close;
--- a/libpurple/protocols/irc/irc.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/irc/irc.c	Mon Dec 21 22:14:59 2015 -0600
@@ -370,16 +370,9 @@
 	purple_connection_update_progress(gc, _("Connecting"), 1, 2);
 
 	if (purple_account_get_bool(account, "ssl", FALSE)) {
-		if (purple_ssl_is_supported()) {
-			irc->gsc = purple_ssl_connect(account, irc->server,
-					purple_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT),
-					irc_login_cb_ssl, irc_ssl_connect_failure, gc);
-		} else {
-			purple_connection_error (gc,
-				PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-				_("SSL support unavailable"));
-			return;
-		}
+		irc->gsc = purple_ssl_connect(account, irc->server,
+				purple_account_get_int(account, "port", IRC_DEFAULT_SSL_PORT),
+				irc_login_cb_ssl, irc_ssl_connect_failure, gc);
 	}
 
 	if (!irc->gsc) {
--- a/libpurple/protocols/irc/irc.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/irc/irc.h	Mon Dec 21 22:14:59 2015 -0600
@@ -24,6 +24,7 @@
 #define _PURPLE_IRC_H
 
 #include <glib.h>
+#include <gmodule.h>
 
 #ifdef HAVE_CYRUS_SASL
 #include <sasl/sasl.h>
--- a/libpurple/protocols/jabber/chat.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/jabber/chat.c	Mon Dec 21 22:14:59 2015 -0600
@@ -540,8 +540,7 @@
 			_("Configuration error"), msg,
 			purple_request_cpar_from_connection(js->gc));
 
-		if(msg)
-			g_free(msg);
+		g_free(msg);
 		return;
 	}
 
@@ -621,8 +620,7 @@
 			_("Registration error"), msg,
 			purple_request_cpar_from_connection(js->gc));
 
-		if(msg)
-			g_free(msg);
+		g_free(msg);
 		return;
 	}
 }
@@ -692,8 +690,7 @@
 			_("Registration error"), msg,
 			purple_request_cpar_from_connection(js->gc));
 
-		if(msg)
-			g_free(msg);
+		g_free(msg);
 		return;
 	}
 
--- a/libpurple/protocols/jabber/ibb.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/jabber/ibb.c	Mon Dec 21 22:14:59 2015 -0600
@@ -294,10 +294,8 @@
 
 	if (sess) {
 		/* reset callback */
-		if (sess->last_iq_id) {
-			g_free(sess->last_iq_id);
-			sess->last_iq_id = NULL;
-		}
+		g_free(sess->last_iq_id);
+		sess->last_iq_id = NULL;
 
 		if (type == JABBER_IQ_ERROR) {
 			jabber_ibb_session_close(sess);
--- a/libpurple/protocols/jabber/jabber.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/jabber/jabber.c	Mon Dec 21 22:14:59 2015 -0600
@@ -99,10 +99,8 @@
 {
 	char *open_stream;
 
-	if (js->stream_id) {
-		g_free(js->stream_id);
-		js->stream_id = NULL;
-	}
+	g_free(js->stream_id);
+	js->stream_id = NULL;
 
 	open_stream = g_strdup_printf("<stream:stream to='%s' "
 				          "xmlns='" NS_XMPP_CLIENT "' "
@@ -235,21 +233,16 @@
 	 */
 	{
 		const gchar *connection_security = purple_account_get_string(account, "connection_security", JABBER_DEFAULT_REQUIRE_TLS);
-		if (!g_str_equal(connection_security, "none") &&
-				purple_ssl_is_supported()) {
+		if (!g_str_equal(connection_security, "none")) {
 			jabber_send_raw(js,
 					"<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>", -1);
 			return TRUE;
 		}
 	}
 #else
-	if(purple_ssl_is_supported()) {
-		jabber_send_raw(js,
-				"<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>", -1);
-		return TRUE;
-	} else {
-		purple_debug_warning("jabber", "No libpurple TLS/SSL support found.");
-	}
+	jabber_send_raw(js,
+			"<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>", -1);
+	return TRUE;
 #endif
 
 	starttls = purple_xmlnode_get_child(packet, "starttls");
@@ -1078,19 +1071,13 @@
 
 	/* if they've got old-ssl mode going, we probably want to ignore SRV lookups */
 	if (g_str_equal("old_ssl", purple_account_get_string(account, "connection_security", JABBER_DEFAULT_REQUIRE_TLS))) {
-		if(purple_ssl_is_supported()) {
-			js->gsc = purple_ssl_connect(account, js->certificate_CN,
-					purple_account_get_int(account, "port", 5223),
-					jabber_login_callback_ssl, jabber_ssl_connect_failure, gc);
-			if (!js->gsc) {
-				purple_connection_error(gc,
-					PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-					_("Unable to establish SSL connection"));
-			}
-		} else {
+		js->gsc = purple_ssl_connect(account, js->certificate_CN,
+				purple_account_get_int(account, "port", 5223),
+				jabber_login_callback_ssl, jabber_ssl_connect_failure, gc);
+		if (!js->gsc) {
 			purple_connection_error(gc,
 				PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-				_("SSL support unavailable"));
+				_("Unable to establish SSL connection"));
 		}
 
 		return;
@@ -2671,10 +2658,8 @@
 
 	if((jb = jabber_buddy_find(js, who, TRUE)) &&
 			(jbr = jabber_buddy_find_resource(jb, jid->resource))) {
-		if(jbr->thread_id) {
-			g_free(jbr->thread_id);
-			jbr->thread_id = NULL;
-		}
+		g_free(jbr->thread_id);
+		jbr->thread_id = NULL;
 	}
 
 	jabber_id_free(jid);
--- a/libpurple/protocols/jabber/jabber.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/jabber/jabber.h	Mon Dec 21 22:14:59 2015 -0600
@@ -56,6 +56,7 @@
 
 #include <libxml/parser.h>
 #include <glib.h>
+#include <gmodule.h>
 #include <gio/gio.h>
 
 #include "circularbuffer.h"
--- a/libpurple/protocols/jabber/message.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/jabber/message.c	Mon Dec 21 22:14:59 2015 -0600
@@ -147,8 +147,7 @@
 					jbr->chat_states = JABBER_CHAT_STATES_UNSUPPORTED;
 			}
 
-			if(jbr->thread_id)
-				g_free(jbr->thread_id);
+			g_free(jbr->thread_id);
 			jbr->thread_id = g_strdup(jbr->thread_id);
 		}
 
--- a/libpurple/protocols/jabber/presence.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/jabber/presence.c	Mon Dec 21 22:14:59 2015 -0600
@@ -245,10 +245,8 @@
 
 		/* update old values */
 
-		if(js->old_msg)
-			g_free(js->old_msg);
-		if(js->old_avatarhash)
-			g_free(js->old_avatarhash);
+		g_free(js->old_msg);
+		g_free(js->old_avatarhash);
 		js->old_msg = g_strdup(stripped);
 		js->old_avatarhash = g_strdup(js->avatar_hash);
 		js->old_state = state;
@@ -440,7 +438,7 @@
 			if (tmp && strstr(bare_jid, tmp) == NULL) {
 				g_free(nickname);
 				nickname = tmp;
-			} else if (tmp)
+			} else
 				g_free(tmp);
 
 			g_free(bare_jid);
@@ -945,10 +943,8 @@
 	if (presence.jid_from->node)
 		presence.chat = jabber_chat_find(js, presence.jid_from->node,
 		                                 presence.jid_from->domain);
-	if(presence.jb->error_msg) {
-		g_free(presence.jb->error_msg);
-		presence.jb->error_msg = NULL;
-	}
+	g_free(presence.jb->error_msg);
+	presence.jb->error_msg = NULL;
 
 	if (presence.type == JABBER_PRESENCE_AVAILABLE) {
 		presence.state = JABBER_BUDDY_STATE_ONLINE;
--- a/libpurple/protocols/jabber/si.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/jabber/si.c	Mon Dec 21 22:14:59 2015 -0600
@@ -351,8 +351,7 @@
 	if(!jsx->accepted)
 		return;
 
-	if(jsx->iq_id)
-		g_free(jsx->iq_id);
+	g_free(jsx->iq_id);
 	jsx->iq_id = g_strdup(id);
 
 	for(streamhost = purple_xmlnode_get_child(query, "streamhost"); streamhost;
--- a/libpurple/protocols/msn/msn.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/msn/msn.c	Mon Dec 21 22:14:59 2015 -0600
@@ -1341,15 +1341,6 @@
 
 	gc = purple_account_get_connection(account);
 
-	if (!purple_ssl_is_supported())
-	{
-		purple_connection_error(gc,
-			PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-			_("SSL support is needed for MSN. Please install a supported "
-			  "SSL library."));
-		return;
-	}
-
 	http_method = purple_account_get_bool(account, "http_method", FALSE);
 
 	if (http_method)
--- a/libpurple/protocols/msn/msn.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/msn/msn.h	Mon Dec 21 22:14:59 2015 -0600
@@ -110,6 +110,8 @@
 	MSN_CLIENT_VER_15_0 = 0xB0	/* MSNC11 */
 } MsnClientVerId;
 
+#include <gmodule.h>
+
 #include "internal.h"
 
 #include "session.h"
--- a/libpurple/protocols/msn/object.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/msn/object.c	Mon Dec 21 22:14:59 2015 -0600
@@ -37,8 +37,7 @@
 		c = strchr(tag, '"'); \
 		if (c != NULL) \
 		{ \
-			if (obj->field != NULL) \
-				g_free(obj->field); \
+			g_free(obj->field); \
 			obj->field = g_strndup(tag, c - tag); \
 		} \
 	}
--- a/libpurple/protocols/mxit/client.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/mxit/client.c	Mon Dec 21 22:14:59 2015 -0600
@@ -1906,20 +1906,17 @@
 			/* this is an invite, so update its profile info */
 			if ( ( statusMsg ) && ( *statusMsg ) ) {
 				/* update the status message */
-				if ( contact->statusMsg )
-					g_free( contact->statusMsg );
+				g_free(contact->statusMsg);
 				contact->statusMsg = strdup( statusMsg );
 			}
 			else
 				contact->statusMsg = NULL;
-			if ( contact->profile )
-				g_free( contact->profile );
+			g_free(contact->profile);
 			contact->profile = profile;
 			if ( ( avatarId ) && ( *avatarId ) ) {
 				/* avatar must be requested for this invite before we can display it */
 				mxit_get_avatar( session, mxitId, avatarId );
-				if ( contact->avatarId )
-					g_free( contact->avatarId );
+				g_free(contact->avatarId);
 				contact->avatarId = strdup( avatarId );
 			}
 			else {
@@ -1941,8 +1938,7 @@
 				if ( buddy ) {
 					contact = purple_buddy_get_protocol_data( buddy );
 					if ( contact ) {
-						if ( contact->statusMsg )
-							g_free( contact->statusMsg );
+						g_free(contact->statusMsg);
 						contact->statusMsg = strdup( statusMsg );
 					}
 				}
@@ -2926,12 +2922,9 @@
 
 		session->invites = g_list_remove( session->invites, contact );
 
-		if ( contact->msg )
-			g_free( contact->msg );
-		if ( contact->statusMsg )
-			g_free( contact->statusMsg );
-		if ( contact->profile )
-			g_free( contact->profile );
+		g_free(contact->msg);
+		g_free(contact->statusMsg);
+		g_free(contact->profile);
 		if (contact->image)
 			g_object_unref(contact->image);
 		g_free( contact );
--- a/libpurple/protocols/mxit/formcmds.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/mxit/formcmds.c	Mon Dec 21 22:14:59 2015 -0600
@@ -303,8 +303,7 @@
 		g_string_append_printf(msg, "<a href=\"%s\">%s</a>", purple_url_decode(dest), (text) ? text : _( "Download" ));		/* add link to display message */
 	}
 
-	if (text)
-		g_free(text);
+	g_free(text);
 }
 
 
--- a/libpurple/protocols/mxit/markup.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/mxit/markup.c	Mon Dec 21 22:14:59 2015 -0600
@@ -258,8 +258,7 @@
 	if ( mx ) {
 		if ( mx->msg )
 			g_string_free( mx->msg, TRUE );
-		if ( mx->from )
-			g_free( mx->from );
+		g_free(mx->from);
 		g_free( mx );
 	}
 }
--- a/libpurple/protocols/mxit/multimx.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/mxit/multimx.c	Mon Dec 21 22:14:59 2015 -0600
@@ -164,8 +164,7 @@
 	session->rooms = g_list_remove(session->rooms, multimx);
 
 	/* free nickname */
-	if (multimx->nickname)
-		g_free(multimx->nickname);
+	g_free(multimx->nickname);
 
 	/* Deallocate it */
 	g_free (multimx);
--- a/libpurple/protocols/mxit/mxit.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/mxit/mxit.c	Mon Dec 21 22:14:59 2015 -0600
@@ -112,8 +112,7 @@
 skip:
 	/* this is not an internal mxit link */
 
-	if ( link )
-		g_free( link );
+	g_free(link);
 	link = NULL;
 
 	if ( parts )
@@ -491,12 +490,9 @@
 
 	contact = purple_buddy_get_protocol_data( buddy );
 	if ( contact ) {
-		if ( contact->statusMsg )
-			g_free( contact->statusMsg );
-		if ( contact->avatarId )
-			g_free( contact->avatarId );
-		if ( contact->msg )
-			g_free( contact->msg );
+		g_free(contact->statusMsg);
+		g_free(contact->avatarId);
+		g_free(contact->msg);
 		if (contact->image)
 			g_object_unref(contact->image);
 		g_free( contact );
--- a/libpurple/protocols/mxit/mxit.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/mxit/mxit.h	Mon Dec 21 22:14:59 2015 -0600
@@ -26,6 +26,7 @@
 #ifndef		_MXIT_H_
 #define		_MXIT_H_
 
+#include <gmodule.h>
 
 #include "internal.h"
 #include "http.h"
--- a/libpurple/protocols/mxit/roster.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/mxit/roster.c	Mon Dec 21 22:14:59 2015 -0600
@@ -481,10 +481,8 @@
 	// TODO: Download custom mood frame.
 
 	/* update status message */
-	if ( contact->statusMsg ) {
-		g_free( contact->statusMsg );
-		contact->statusMsg = NULL;
-	}
+	g_free(contact->statusMsg);
+	contact->statusMsg = NULL;
 	if ( ( statusMsg ) && ( statusMsg[0] != '\0' ) )
 		contact->statusMsg = g_markup_escape_text( statusMsg, -1 );
 
@@ -532,8 +530,7 @@
 		/*  avatar has not changed - do nothing */
 	}
 	else if ( avatarId[0] != '\0' ) {		/* avatar has changed */
-		if ( contact->avatarId )
-			g_free( contact->avatarId );
+		g_free(contact->avatarId);
 		contact->avatarId = g_strdup( avatarId );
 
 		/* Send request to download new avatar image */
@@ -596,12 +593,9 @@
 	invite->session->invites = g_list_remove( invite->session->invites, invite->contact );
 
 	/* freeup invite object */
-	if ( invite->contact->msg )
-		g_free( invite->contact->msg );
-	if ( invite->contact->statusMsg )
-		g_free( invite->contact->statusMsg );
-	if ( invite->contact->profile )
-		g_free( invite->contact->profile );
+	g_free(invite->contact->msg);
+	g_free(invite->contact->statusMsg);
+	g_free(invite->contact->profile);
 	if (invite->contact->image)
 		g_object_unref(invite->contact->image);
 	g_free( invite->contact );
@@ -627,12 +621,9 @@
 	invite->session->invites = g_list_remove( invite->session->invites, invite->contact );
 
 	/* freeup invite object */
-	if ( invite->contact->msg )
-		g_free( invite->contact->msg );
-	if ( invite->contact->statusMsg )
-		g_free( invite->contact->statusMsg );
-	if ( invite->contact->profile )
-		g_free( invite->contact->profile );
+	g_free(invite->contact->msg);
+	g_free(invite->contact->statusMsg);
+	g_free(invite->contact->profile);
 	if (invite->contact->image)
 		g_object_unref(invite->contact->image);
 	g_free( invite->contact );
--- a/libpurple/protocols/novell/nmconference.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/nmconference.c	Mon Dec 21 22:14:59 2015 -0600
@@ -83,8 +83,7 @@
 				   "Releasing conference %p, total=%d\n",
 				   conference, --conf_count);
 
-		if (conference->guid)
-			g_free(conference->guid);
+		g_free(conference->guid);
 
 		if (conference->participants) {
 			for (node = conference->participants; node; node = node->next) {
--- a/libpurple/protocols/novell/nmconn.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/nmconn.c	Mon Dec 21 22:14:59 2015 -0600
@@ -187,10 +187,8 @@
 		}
 		g_slist_free(conn->requests);
 		conn->requests = NULL;
-		if (conn->ssl_conn) {
-			g_free(conn->ssl_conn);
-			conn->ssl_conn = NULL;
-		}
+		g_free(conn->ssl_conn);
+		conn->ssl_conn = NULL;
 		g_free(conn->addr);
 		conn->addr = NULL;
 		g_free(conn);
--- a/libpurple/protocols/novell/nmcontact.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/nmcontact.c	Mon Dec 21 22:14:59 2015 -0600
@@ -164,8 +164,7 @@
 		 nm_locate_field(NM_A_SZ_DISPLAY_NAME, (NMField *) fields->ptr_value))) {
 
 		if (field->ptr_value) {
-			if (contact->display_name)
-				g_free(contact->display_name);
+			g_free(contact->display_name);
 
 			contact->display_name = g_strdup((char *) field->ptr_value);
 		}
@@ -175,8 +174,7 @@
 	if ((field = nm_locate_field(NM_A_SZ_DN, (NMField *) fields->ptr_value))) {
 
 		if (field->ptr_value) {
-			if (contact->dn)
-				g_free(contact->dn);
+			g_free(contact->dn);
 
 			contact->dn = g_strdup((char *) field->ptr_value);
 		}
@@ -303,10 +301,8 @@
 	if (contact == NULL)
 		return;
 
-	if (contact->display_name) {
-		g_free(contact->display_name);
-		contact->display_name = NULL;
-	}
+	g_free(contact->display_name);
+	contact->display_name = NULL;
 
 	if (display_name)
 		contact->display_name = g_strdup(display_name);
@@ -318,10 +314,8 @@
 	if (contact == NULL)
 		return;
 
-	if (contact->dn) {
-		g_free(contact->dn);
-		contact->dn = NULL;
-	}
+	g_free(contact->dn);
+	contact->dn = NULL;
 
 	if (dn)
 		contact->dn = g_strdup(dn);
@@ -538,8 +532,7 @@
 		 nm_locate_field(NM_A_SZ_DISPLAY_NAME, (NMField *) fields->ptr_value))) {
 
 		if (field->ptr_value) {
-			if (folder->name)
-				g_free(folder->name);
+			g_free(folder->name);
 
 			folder->name = g_strdup((char *) field->ptr_value);
 		}
@@ -640,8 +633,7 @@
 	if (folder == NULL || name == NULL)
 		return;
 
-	if (folder->name)
-		g_free(folder->name);
+	g_free(folder->name);
 
 	folder->name = g_strdup(name);
 }
--- a/libpurple/protocols/novell/nmevent.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/nmevent.c	Mon Dec 21 22:14:59 2015 -0600
@@ -241,14 +241,9 @@
 		nm_release_conference(conference);
 	}
 
-	if (msg)
-		g_free(msg);
-
-	if (nortf)
-		g_free(nortf);
-
-	if (guid)
-		g_free(guid);
+	g_free(msg);
+	g_free(nortf);
+	g_free(guid);
 
 	return rc;
 }
@@ -323,11 +318,8 @@
 		}
 	}
 
-	if (msg)
-		g_free(msg);
-
-	if (guid)
-		g_free(guid);
+	g_free(msg);
+	g_free(guid);
 
 	return rc;
 }
@@ -381,8 +373,7 @@
 	}
 
 
-	if (guid)
-		g_free(guid);
+	g_free(guid);
 
 	return rc;
 }
@@ -417,8 +408,7 @@
 		}
 	}
 
-	if (guid)
-		g_free(guid);
+	g_free(guid);
 
 	return rc;
 }
@@ -468,8 +458,7 @@
 		}
 	}
 
-	if (guid)
-		g_free(guid);
+	g_free(guid);
 
 	return rc;
 }
@@ -507,8 +496,7 @@
 		}
 	}
 
-	if (guid)
-		g_free(guid);
+	g_free(guid);
 
 	return rc;
 }
@@ -569,8 +557,7 @@
 		}
 	}
 
-	if (guid)
-		g_free(guid);
+	g_free(guid);
 
 	return rc;
 }
@@ -605,8 +592,7 @@
 		}
 	}
 
-	if (guid)
-		g_free(guid);
+	g_free(guid);
 
 	return rc;
 }
@@ -651,8 +637,7 @@
 		}
 	}
 
-	if (text)
-		g_free(text);
+	g_free(text);
 
 	return rc;
 }
@@ -677,8 +662,7 @@
 		rc = nm_read_all(conn, guid, size);
 	}
 
-	if (guid)
-		g_free(guid);
+	g_free(guid);
 
 	return rc;
 }
@@ -712,8 +696,7 @@
 
 	if (--(event->ref_count) == 0) {
 
-		if (event->source)
-			g_free(event->source);
+		g_free(event->source);
 
 		if (event->conference)
 			nm_release_conference(event->conference);
@@ -721,8 +704,7 @@
 		if (event->user_record)
 			nm_release_user_record(event->user_record);
 
-		if (event->text)
-			g_free(event->text);
+		g_free(event->text);
 
 		g_free(event);
 	}
@@ -936,8 +918,7 @@
 	}
 
 	/* Cleanup */
-	if (source)
-		g_free(source);
+	g_free(source);
 
 	return rc;
 }
--- a/libpurple/protocols/novell/nmmessage.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/nmmessage.c	Mon Dec 21 22:14:59 2015 -0600
@@ -53,8 +53,7 @@
 nm_release_message(NMMessage * msg)
 {
 	if (msg && (--(msg->ref_count) == 0)) {
-		if (msg->text)
-			g_free(msg->text);
+		g_free(msg->text);
 
 		if (msg->conference)
 			nm_release_conference(msg->conference);
--- a/libpurple/protocols/novell/nmrequest.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/nmrequest.c	Mon Dec 21 22:14:59 2015 -0600
@@ -60,8 +60,7 @@
 nm_release_request(NMRequest * req)
 {
 	if (req && (--req->ref_count == 0)) {
-		if (req->cmd)
-			g_free(req->cmd);
+		g_free(req->cmd);
 		g_free(req);
 
 		purple_debug_info("novell",
--- a/libpurple/protocols/novell/nmuserrecord.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/nmuserrecord.c	Mon Dec 21 22:14:59 2015 -0600
@@ -191,64 +191,50 @@
 	dest->status = src->status;
 
 	/* Copy status text */
-	if (dest->status_text) {
-		g_free(dest->status_text);
-		dest->status_text = NULL;
-	}
+	g_free(dest->status_text);
+	dest->status_text = NULL;
 
 	if (src->status_text)
 		dest->status_text = g_strdup(src->status_text);
 
 	/* Copy DN */
-	if (dest->dn) {
-		g_free(dest->dn);
-		dest->dn = NULL;
-	}
+	g_free(dest->dn);
+	dest->dn = NULL;
 
 	if (src->dn)
 		dest->dn = g_strdup(src->dn);
 
 	/* Copy CN */
-	if (dest->cn) {
-		g_free(dest->cn);
-		dest->cn = NULL;
-	}
+	g_free(dest->cn);
+	dest->cn = NULL;
 
 	if (src->cn)
 		dest->cn = g_strdup(src->cn);
 
 	/* Copy display id */
-	if (dest->display_id) {
-		g_free(dest->display_id);
-		dest->display_id = NULL;
-	}
+	g_free(dest->display_id);
+	dest->display_id = NULL;
 
 	if (src->display_id)
 		dest->display_id = g_strdup(src->display_id);
 
 	/* Copy first name */
-	if (dest->fname) {
-		g_free(dest->fname);
-		dest->fname = NULL;
-	}
+	g_free(dest->fname);
+	dest->fname = NULL;
 
 	if (src->fname)
 		dest->fname = g_strdup(src->fname);
 
 	/* Copy last name */
-	if (dest->lname) {
-		g_free(dest->lname);
-		dest->lname = NULL;
-	}
+	g_free(dest->lname);
+	dest->lname = NULL;
 
 	if (src->lname)
 		dest->lname = g_strdup(src->lname);
 
 	/* Copy full name */
-	if (dest->full_name) {
-		g_free(dest->full_name);
-		dest->full_name = NULL;
-	}
+	g_free(dest->full_name);
+	dest->full_name = NULL;
 
 	if (src->full_name)
 		dest->full_name = g_strdup(src->full_name);
@@ -321,8 +307,7 @@
 nm_user_record_set_dn(NMUserRecord * user_record, const char *dn)
 {
 	if (user_record != NULL && dn != NULL) {
-		if (user_record->dn)
-			g_free(user_record->dn);
+		g_free(user_record->dn);
 
 		user_record->dn = g_strdup(dn);
 	}
@@ -341,8 +326,7 @@
 nm_user_record_set_userid(NMUserRecord * user_record, const char *userid)
 {
 	if (user_record != NULL && userid != NULL) {
-		if (user_record->cn)
-			g_free(user_record->cn);
+		g_free(user_record->cn);
 
 		user_record->cn = g_strdup(userid);
 	}
@@ -361,8 +345,7 @@
 nm_user_record_set_display_id(NMUserRecord * user_record, const char *display_id)
 {
 	if (user_record != NULL && display_id != NULL) {
-		if (user_record->display_id)
-			g_free(user_record->display_id);
+		g_free(user_record->display_id);
 
 		user_record->display_id = g_strdup(display_id);
 	}
@@ -445,10 +428,8 @@
 
 	user_record->status = status;
 
-	if (user_record->status_text) {
-		g_free(user_record->status_text);
-		user_record->status_text = NULL;
-	}
+	g_free(user_record->status_text);
+	user_record->status_text = NULL;
 
 	if (text)
 		user_record->status_text = g_strdup(text);
@@ -512,11 +493,9 @@
 nm_release_property(NMProperty * property)
 {
 	if (property) {
-		if (property->tag)
-			g_free(property->tag);
+		g_free(property->tag);
 
-		if (property->value)
-			g_free(property->value);
+		g_free(property->value);
 
 		g_free(property);
 	}
--- a/libpurple/protocols/novell/novell.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/novell.c	Mon Dec 21 22:14:59 2015 -0600
@@ -572,8 +572,7 @@
 
 	if (user == NULL || folder_name == NULL || contact == NULL) {
 
-		if (folder_name)
-			g_free(folder_name);
+		g_free(folder_name);
 
 		return;
 	}
@@ -606,8 +605,7 @@
 		g_free(err);
 	}
 
-	if (folder_name)
-		g_free(folder_name);
+	g_free(folder_name);
 }
 
 /* Add contact to newly create folder */
@@ -625,8 +623,7 @@
 		if (contact)
 			nm_release_contact(contact);
 
-		if (folder_name)
-			g_free(folder_name);
+		g_free(folder_name);
 
 		return;
 	}
@@ -724,8 +721,7 @@
 		g_free(err);
 	}
 
-	if (name)
-		g_free(name);
+	g_free(name);
 }
 
 /* Handle get details response add to privacy list */
@@ -824,8 +820,7 @@
 
 	}
 
-	if (who)
-		g_free(who);
+	g_free(who);
 
 }
 
@@ -880,8 +875,7 @@
 
 	}
 
-	if (who)
-		g_free(who);
+	g_free(who);
 }
 
 static void
@@ -949,8 +943,7 @@
 		g_free(err);
 	}
 
-	if (who)
-		g_free(who);
+	g_free(who);
 }
 
 static void
@@ -1678,8 +1671,7 @@
 {
 	static char *name = NULL;
 
-	if (name)
-		g_free(name);
+	g_free(name);
 
 	name = g_strdup_printf(_("GroupWise Conference %d"), id);
 
@@ -3095,8 +3087,7 @@
 	rc = nm_send_set_status(user, novellstatus, text, msg, NULL, NULL);
 	_check_for_disconnect(user, rc);
 
-	if (text)
-		g_free(text);
+	g_free(text);
 }
 
 static void
--- a/libpurple/protocols/novell/novell.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/novell/novell.h	Mon Dec 21 22:14:59 2015 -0600
@@ -22,6 +22,8 @@
 #ifndef _NOVELL_H_
 #define _NOVELL_H_
 
+#include <gmodule.h>
+
 #include "protocol.h"
 
 #define NOVELL_TYPE_PROTOCOL             (novell_protocol_get_type())
--- a/libpurple/protocols/oscar/family_icq.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/oscar/family_icq.c	Mon Dec 21 22:14:59 2015 -0600
@@ -254,7 +254,7 @@
 	byte_stream_destroy(&bs);
 
 	/* Keep track of this request and the ICQ number and request ID */
-	info = (struct aim_icq_info *)g_new0(struct aim_icq_info, 1);
+	info = g_new0(struct aim_icq_info, 1);
 	info->reqid = snacid;
 	info->uin = atoi(uin);
 	od->icq_info = g_slist_prepend(od->icq_info, info);
@@ -301,7 +301,7 @@
 	byte_stream_destroy(&bs);
 
 	/* Keep track of this request and the ICQ number and request ID */
-	info = (struct aim_icq_info *)g_new0(struct aim_icq_info, 1);
+	info = g_new0(struct aim_icq_info, 1);
 	info->reqid = snacid;
 	info->uin = atoi(uin);
 	info->for_auth_request = for_auth_request;
@@ -472,7 +472,7 @@
 		/* find other data from the same request */
 		info_ptr = g_slist_find_custom(od->icq_info, &reqid, compare_icq_infos);
 		if (!info_ptr) {
-			struct aim_icq_info *new_info = (struct aim_icq_info *)g_new0(struct aim_icq_info, 1);
+			struct aim_icq_info *new_info = g_new0(struct aim_icq_info, 1);
 			new_info->reqid = reqid;
 			info_ptr = od->icq_info = g_slist_prepend(od->icq_info, new_info);
 		}
@@ -541,7 +541,7 @@
 		case 0x00eb: { /* email address(es) */
 			int i;
 			info->numaddresses = byte_stream_getle16(&qbs);
-			info->email2 = (char **)g_new0(char *, info->numaddresses);
+			info->email2 = g_new0(char *, info->numaddresses);
 			for (i = 0; i < info->numaddresses; i++) {
 				info->email2[i] = byte_stream_getstr(&qbs, byte_stream_getle16(&qbs));
 				if (i+1 != info->numaddresses)
--- a/libpurple/protocols/oscar/family_locate.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/oscar/family_locate.c	Mon Dec 21 22:14:59 2015 -0600
@@ -549,14 +549,10 @@
 		 * We don't have an away message specified in this user_info
 		 * block, so clear any cached away message now.
 		 */
-		if (cur->away) {
-			g_free(cur->away);
-			cur->away = NULL;
-		}
-		if (cur->away_encoding) {
-			g_free(cur->away_encoding);
-			cur->away_encoding = NULL;
-		}
+		g_free(cur->away);
+		cur->away = NULL;
+		g_free(cur->away_encoding);
+		cur->away_encoding = NULL;
 		cur->away_len = 0;
 	}
 }
--- a/libpurple/protocols/oscar/oscar.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/oscar/oscar.c	Mon Dec 21 22:14:59 2015 -0600
@@ -741,14 +741,7 @@
 	od->default_port = purple_account_get_int(account, "port", OSCAR_DEFAULT_LOGIN_PORT);
 
 	encryption_type = purple_account_get_string(account, "encryption", OSCAR_DEFAULT_ENCRYPTION);
-	if (!purple_ssl_is_supported() && strcmp(encryption_type, OSCAR_REQUIRE_ENCRYPTION) == 0) {
-		purple_connection_error(
-			gc,
-			PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT,
-			_("You required encryption in your account settings, but encryption is not supported by your system."));
-		return;
-	}
-	od->use_ssl = purple_ssl_is_supported() && strcmp(encryption_type, OSCAR_NO_ENCRYPTION) != 0;
+	od->use_ssl = strcmp(encryption_type, OSCAR_NO_ENCRYPTION) != 0;
 
 	/* Connect to core Purple signals */
 	purple_prefs_connect_callback(purple_connection_get_protocol(gc), "/purple/away/idle_reporting", idle_reporting_pref_cb, gc);
--- a/libpurple/protocols/oscar/oscar.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/oscar/oscar.h	Mon Dec 21 22:14:59 2015 -0600
@@ -45,6 +45,7 @@
 #include <stdarg.h>
 #include <errno.h>
 #include <time.h>
+#include <gmodule.h>
 
 #ifndef _WIN32
 #include <sys/time.h>
--- a/libpurple/protocols/sametime/sametime.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/sametime/sametime.h	Mon Dec 21 22:14:59 2015 -0600
@@ -1,6 +1,8 @@
 #ifndef _SAMETIME_H_
 #define _SAMETIME_H_
 
+#include <gmodule.h>
+
 #define MW_TYPE_PROTOCOL             (mw_protocol_get_type())
 #define MW_PROTOCOL(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), MW_TYPE_PROTOCOL, mwProtocol))
 #define MW_PROTOCOL_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), MW_TYPE_PROTOCOL, mwProtocolClass))
--- a/libpurple/protocols/silc/silcpurple.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/silc/silcpurple.h	Mon Dec 21 22:14:59 2015 -0600
@@ -20,6 +20,8 @@
 #ifndef SILCPURPLE_H
 #define SILCPURPLE_H
 
+#include <gmodule.h>
+
 /* Purple includes */
 #include "internal.h"
 #include "account.h"
--- a/libpurple/protocols/simple/simple.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/simple/simple.h	Mon Dec 21 22:14:59 2015 -0600
@@ -24,6 +24,7 @@
 #define _PURPLE_SIMPLE_H
 
 #include <glib.h>
+#include <gmodule.h>
 #include <gio/gio.h>
 #include <time.h>
 
--- a/libpurple/protocols/yahoo/yahoo.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/yahoo/yahoo.h	Mon Dec 21 22:14:59 2015 -0600
@@ -22,6 +22,8 @@
 #ifndef _YAHOO_H_
 #define _YAHOO_H_
 
+#include <gmodule.h>
+
 #include "protocol.h"
 
 #define YAHOO_TYPE_PROTOCOL             (yahoo_protocol_get_type())
--- a/libpurple/protocols/yahoo/yahoochat.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/yahoo/yahoochat.c	Mon Dec 21 22:14:59 2015 -0600
@@ -727,8 +727,7 @@
 
 	c = purple_conversations_find_chat(gc, YAHOO_CHAT_ID);
 	if (!who || !c) {
-		if (room)
-			g_free(room);
+		g_free(room);
 		/* we still get messages after we part, funny that */
 		return;
 	}
@@ -955,10 +954,8 @@
 	yahoo_packet_send_and_free(pkt, yd);
 
 	yd->in_chat = 0;
-	if (yd->chat_name) {
-		g_free(yd->chat_name);
-		yd->chat_name = NULL;
-	}
+	g_free(yd->chat_name);
+	yd->chat_name = NULL;
 
 	if (purple_conversations_find_chat(gc, YAHOO_CHAT_ID) != NULL)
 		purple_serv_got_chat_left(gc, YAHOO_CHAT_ID);
--- a/libpurple/protocols/yahoo/ymsg.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/yahoo/ymsg.c	Mon Dec 21 22:14:59 2015 -0600
@@ -1906,11 +1906,6 @@
 
 	purple_debug_info("yahoo", "Authentication: In yahoo_auth16_stage1\n");
 
-	if(!purple_ssl_is_supported()) {
-		purple_connection_error(gc, PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, _("SSL support unavailable"));
-		return;
-	}
-
 	auth_data = g_new0(struct yahoo_auth_data, 1);
 	auth_data->gc = gc;
 	auth_data->seed = g_strdup(seed);
--- a/libpurple/protocols/zephyr/zephyr.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/zephyr/zephyr.c	Mon Dec 21 22:14:59 2015 -0600
@@ -2313,10 +2313,8 @@
 	zephyr_account *zephyr = purple_connection_get_protocol_data(gc);
 	PurpleStatusPrimitive primitive = purple_status_type_get_primitive(purple_status_get_status_type(status));
 
-	if (zephyr->away) {
-		g_free(zephyr->away);
-		zephyr->away=NULL;
-	}
+	g_free(zephyr->away);
+	zephyr->away = NULL;
 
 	if (primitive == PURPLE_STATUS_AWAY) {
 		zephyr->away = g_strdup(purple_status_get_attr_string(status,"message"));
--- a/libpurple/protocols/zephyr/zephyr.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/protocols/zephyr/zephyr.h	Mon Dec 21 22:14:59 2015 -0600
@@ -22,6 +22,8 @@
 #ifndef _ZEPHYR_H_
 #define _ZEPHYR_H_
 
+#include <gmodule.h>
+
 #include "protocol.h"
 
 #define ZEPHYR_TYPE_PROTOCOL             (zephyr_protocol_get_type())
--- a/libpurple/proxy.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/proxy.c	Mon Dec 21 22:14:59 2015 -0600
@@ -332,18 +332,12 @@
 	g_free(tmp);
 
 	/* Free the old fields */
-	if (info.host) {
-		g_free(info.host);
-		info.host = NULL;
-	}
-	if (info.username) {
-		g_free(info.username);
-		info.username = NULL;
-	}
-	if (info.password) {
-		g_free(info.password);
-		info.password = NULL;
-	}
+	g_free(info.host);
+	info.host = NULL;
+	g_free(info.username);
+	info.username = NULL;
+	g_free(info.password);
+	info.password = NULL;
 
 	tmp = purple_gnome_proxy_get_parameter(GNOME_PROXY_USE_SAME_PROXY, gnome_version);
 	if (!tmp)
--- a/libpurple/purple-socket.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/purple-socket.c	Mon Dec 21 22:14:59 2015 -0600
@@ -259,12 +259,6 @@
 	ps->cb_data = user_data;
 
 	if (ps->is_tls) {
-		if (!purple_ssl_is_supported()) {
-			purple_debug_error("socket", "TLS is not supported");
-			ps->state = PURPLE_SOCKET_STATE_ERROR;
-			return FALSE;
-		}
-
 		ps->tls_connection = purple_ssl_connect(account, ps->host,
 			ps->port, _purple_socket_connected_tls,
 			_purple_socket_connected_tls_error, ps);
--- a/libpurple/server.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/server.c	Mon Dec 21 22:14:59 2015 -0600
@@ -103,7 +103,7 @@
 		tmp = tmp->next;
 	}
 
-	lar = (struct last_auto_response *)g_new0(struct last_auto_response, 1);
+	lar = g_new0(struct last_auto_response, 1);
 	g_snprintf(lar->name, sizeof(lar->name), "%s", name);
 	lar->gc = gc;
 	lar->sent = 0;
--- a/libpurple/sslconn.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/sslconn.c	Mon Dec 21 22:14:59 2015 -0600
@@ -56,17 +56,6 @@
 	return (_ssl_initialized = ops->init());
 }
 
-gboolean
-purple_ssl_is_supported(void)
-{
-#ifdef HAVE_SSL
-	ssl_init();
-	return (purple_ssl_get_ops() != NULL);
-#else
-	return FALSE;
-#endif
-}
-
 static void
 purple_ssl_connect_cb(gpointer data, gint source, const gchar *error_message)
 {
@@ -110,7 +99,6 @@
 	g_return_val_if_fail(host != NULL,            NULL);
 	g_return_val_if_fail(port != 0 && port != -1, NULL);
 	g_return_val_if_fail(func != NULL,            NULL);
-	g_return_val_if_fail(purple_ssl_is_supported(), NULL);
 
 	if (!_ssl_initialized)
 	{
@@ -156,7 +144,6 @@
 				   void *data)
 {
 	g_return_if_fail(func != NULL);
-	g_return_if_fail(purple_ssl_is_supported());
 
 	purple_ssl_input_remove(gsc);
 
@@ -203,7 +190,6 @@
 
 	g_return_val_if_fail(fd != -1,                NULL);
 	g_return_val_if_fail(func != NULL,            NULL);
-	g_return_val_if_fail(purple_ssl_is_supported(), NULL);
 
 	if (!_ssl_initialized)
 	{
--- a/libpurple/sslconn.h	Mon Dec 21 21:29:48 2015 -0600
+++ b/libpurple/sslconn.h	Mon Dec 21 22:14:59 2015 -0600
@@ -152,15 +152,6 @@
 /**************************************************************************/
 
 /**
- * purple_ssl_is_supported:
- *
- * Returns whether or not SSL is currently supported.
- *
- * Returns: %TRUE if SSL is supported, or %FALSE otherwise.
- */
-gboolean purple_ssl_is_supported(void);
-
-/**
  * purple_ssl_strerror:
  * @error:      Error code
  *
--- a/pidgin/gtkaccount.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkaccount.c	Mon Dec 21 22:14:59 2015 -0600
@@ -114,11 +114,7 @@
 	GtkWidget *password_box;
 	gchar *password;
 	GtkWidget *username_entry;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkRGBA username_entry_hint_color;
-#else
-	GdkColor *username_entry_hint_color;
-#endif
 	GtkWidget *password_entry;
 	GtkWidget *alias_entry;
 	GtkWidget *remember_pass_check;
@@ -325,11 +321,7 @@
 
 	if(!strcmp(gtk_entry_get_text(GTK_ENTRY(widget)), label)) {
 		gtk_entry_set_text(GTK_ENTRY(widget), "");
-#if GTK_CHECK_VERSION(3,0,0)
 		gtk_widget_override_color(widget, GTK_STATE_NORMAL, NULL);
-#else
-		gtk_widget_modify_text(widget, GTK_STATE_NORMAL,NULL);
-#endif
 	}
 
 	g_hash_table_destroy(table);
@@ -355,11 +347,7 @@
 			gtk_entry_set_text(GTK_ENTRY(widget), label);
 			/* Make sure we can hit it again */
 			g_signal_handlers_unblock_by_func(widget, G_CALLBACK(username_changed_cb), dialog);
-#if GTK_CHECK_VERSION(3,0,0)
 			gtk_widget_override_color(widget, GTK_STATE_NORMAL, &dialog->username_entry_hint_color);
-#else
-			gtk_widget_modify_text(widget, GTK_STATE_NORMAL, dialog->username_entry_hint_color);
-#endif
 		}
 
 		g_hash_table_destroy(table);
@@ -374,13 +362,8 @@
 	GHashTable *table;
 	const char *label, *text;
 	char *temp_text = NULL;
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context;
 	GtkBorder border;
-#else
-	GtkStyle *style;
-	const GtkBorder *border = NULL;
-#endif
 	gint xsize;
 
 	table = purple_protocol_client_iface_get_account_text_table(dialog->protocol, NULL);
@@ -392,51 +375,25 @@
 	if (strcmp(text, label)) {
 		temp_text = g_strdup(text);
 		gtk_entry_set_text(GTK_ENTRY(widget), label);
-#if GTK_CHECK_VERSION(3,0,0)
 		gtk_widget_override_color(GTK_WIDGET(widget), GTK_STATE_NORMAL, NULL);
-#else
-		gtk_widget_modify_text(GTK_WIDGET(widget), GTK_STATE_NORMAL, NULL);
-#endif
 	}
 
-#if GTK_CHECK_VERSION(3,0,0)
 	context = gtk_widget_get_style_context(dialog->username_entry);
 	gtk_style_context_get_color(context, GTK_STATE_FLAG_INSENSITIVE,
 	                            &dialog->username_entry_hint_color);
-#else
-	style = gtk_rc_get_style(dialog->username_entry);
-	dialog->username_entry_hint_color = &(style->fg[GTK_STATE_INSENSITIVE]);
-#endif
 
 	pango_layout_get_pixel_size(gtk_entry_get_layout(GTK_ENTRY(widget)), &xsize, NULL);
-#if GTK_CHECK_VERSION(3,0,0)
 	gtk_style_context_get_margin(context, GTK_STATE_FLAG_NORMAL, &border);
 	xsize += border.left + border.right;
 	gtk_style_context_get_padding(context, GTK_STATE_FLAG_NORMAL, &border);
 	xsize += border.left + border.right;
-#else
-	xsize += 2 * style->xthickness;
-	gtk_style_get(style, GTK_TYPE_ENTRY, "inner-border", &border, NULL);
-	if (border)
-		xsize += border->left + border->right;
-	else
-		xsize += 4; /* 2 * default inner-border */
-#endif
 	gtk_widget_set_size_request(GTK_WIDGET(widget), xsize, -1);
 	if (temp_text) {
 		gtk_entry_set_text(GTK_ENTRY(widget), temp_text);
 		g_free(temp_text);
-#if GTK_CHECK_VERSION(3,0,0)
 		gtk_widget_override_color(GTK_WIDGET(widget), GTK_STATE_NORMAL, NULL);
-#else
-		gtk_widget_modify_text(GTK_WIDGET(widget), GTK_STATE_NORMAL, NULL);
-#endif
 	} else
-#if GTK_CHECK_VERSION(3,0,0)
 		gtk_widget_override_color(GTK_WIDGET(widget), GTK_STATE_NORMAL, &dialog->username_entry_hint_color);
-#else
-		gtk_widget_modify_text(GTK_WIDGET(widget), GTK_STATE_NORMAL, dialog->username_entry_hint_color);
-#endif
 
 	g_signal_handlers_unblock_by_func(widget, G_CALLBACK(username_themechange_cb), dialog);
 	g_signal_handlers_unblock_by_func(widget, G_CALLBACK(username_changed_cb), dialog);
@@ -548,12 +505,8 @@
 static void
 update_editable(PurpleConnection *gc, AccountPrefsDialog *dialog)
 {
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *style;
 	GdkRGBA color;
-#else
-	GtkStyle *style;
-#endif
 	gboolean set;
 	GList *l;
 
@@ -566,7 +519,6 @@
 	set = !(purple_account_is_connected(dialog->account) || purple_account_is_connecting(dialog->account));
 	gtk_widget_set_sensitive(dialog->protocol_menu, set);
 	gtk_editable_set_editable(GTK_EDITABLE(dialog->username_entry), set);
-#if GTK_CHECK_VERSION(3,0,0)
 	style = set ? NULL : gtk_widget_get_style_context(dialog->username_entry);
 	if (style) {
 		gtk_style_context_get_background_color(style, GTK_STATE_FLAG_INSENSITIVE, &color);
@@ -574,18 +526,12 @@
 	} else {
 		gtk_widget_override_background_color(dialog->username_entry, GTK_STATE_FLAG_NORMAL, NULL);
 	}
-#else
-	style = set ? NULL : gtk_widget_get_style(dialog->username_entry);
-	gtk_widget_modify_base(dialog->username_entry, GTK_STATE_NORMAL,
-			style ? &style->base[GTK_STATE_INSENSITIVE] : NULL);
-#endif
 
 	for (l = dialog->user_split_entries ; l != NULL ; l = l->next) {
 		if (l->data == NULL)
 			continue;
 		if (GTK_IS_EDITABLE(l->data)) {
 			gtk_editable_set_editable(GTK_EDITABLE(l->data), set);
-#if GTK_CHECK_VERSION(3,0,0)
 			style = set ? NULL : gtk_widget_get_style_context(GTK_WIDGET(l->data));
 			if (style) {
 				gtk_style_context_get_background_color(style, GTK_STATE_FLAG_INSENSITIVE, &color);
@@ -593,11 +539,6 @@
 			} else {
 				gtk_widget_override_background_color(GTK_WIDGET(l->data), GTK_STATE_FLAG_NORMAL, NULL);
 			}
-#else
-			style = set ? NULL : gtk_widget_get_style(GTK_WIDGET(l->data));
-			gtk_widget_modify_base(GTK_WIDGET(l->data), GTK_STATE_NORMAL,
-					style ? &style->base[GTK_STATE_INSENSITIVE] : NULL);
-#endif
 		} else {
 			gtk_widget_set_sensitive(GTK_WIDGET(l->data), set);
 		}
@@ -2574,11 +2515,7 @@
 	width  = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/accounts/dialog/width");
 	height = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/accounts/dialog/height");
 
-#if GTK_CHECK_VERSION(3,0,0)
 	dialog->window = win = pidgin_create_dialog(_("Accounts"), 0, "accounts", TRUE);
-#else
-	dialog->window = win = pidgin_create_dialog(_("Accounts"), PIDGIN_HIG_BORDER, "accounts", TRUE);
-#endif
 	gtk_window_set_default_size(GTK_WINDOW(win), width, height);
 
 	g_signal_connect(G_OBJECT(win), "delete_event",
--- a/pidgin/gtkblist.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkblist.c	Mon Dec 21 22:14:59 2015 -0600
@@ -122,11 +122,6 @@
 
 	guint select_notebook_page_timeout;
 
-#if !GTK_CHECK_VERSION(3,0,0)
-	GdkCursor *hand_cursor;         /* Hand cursor */
-	GdkCursor *arrow_cursor;        /* Arrow cursor */
-	gboolean changing_style;        /* True when changing GTK+ theme style */
-#endif
 
 } PidginBuddyListPrivate;
 
@@ -2943,11 +2938,7 @@
 static gboolean
 pidgin_blist_paint_tip(GtkWidget *widget, cairo_t *cr, gpointer null)
 {
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context;
-#else
-	GtkStyle *style;
-#endif
 	int current_height, max_width;
 	int max_text_width;
 	int max_avatar_width;
@@ -2959,12 +2950,8 @@
 	if(gtkblist->tooltipdata == NULL)
 		return FALSE;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	context = gtk_widget_get_style_context(gtkblist->tipwindow);
 	gtk_style_context_add_class(context, GTK_STYLE_CLASS_TOOLTIP);
-#else
-	style = gtk_widget_get_style(gtkblist->tipwindow);
-#endif
 
 	max_text_width = 0;
 	max_avatar_width = 0;
@@ -2993,7 +2980,6 @@
 
 		if (td->avatar && pidgin_gdk_pixbuf_is_opaque(td->avatar))
 		{
-#if GTK_CHECK_VERSION(3,0,0)
 			gtk_style_context_save(context);
 			gtk_style_context_add_class(context, GTK_STYLE_CLASS_FRAME);
 			if (dir == GTK_TEXT_DIR_RTL) {
@@ -3007,22 +2993,6 @@
 				                 td->avatar_width + 2, td->avatar_height + 2);
 			}
 			gtk_style_context_restore(context);
-#else
-			if (dir == GTK_TEXT_DIR_RTL) {
-				gtk_paint_flat_box(style, gtkblist->tipwindow->window,
-				                   GTK_STATE_NORMAL, GTK_SHADOW_OUT,
-				                   NULL, gtkblist->tipwindow, "tooltip",
-				                   TOOLTIP_BORDER - 1, current_height - 1,
-				                   td->avatar_width + 2, td->avatar_height + 2);
-			} else {
-				gtk_paint_flat_box(style, gtkblist->tipwindow->window,
-				                   GTK_STATE_NORMAL, GTK_SHADOW_OUT,
-				                   NULL, gtkblist->tipwindow, "tooltip",
-				                   max_width - (td->avatar_width + TOOLTIP_BORDER) - 1,
-				                   current_height - 1, td->avatar_width + 2,
-				                   td->avatar_height + 2);
-			}
-#endif
 		}
 
 		if (td->status_icon) {
@@ -3059,7 +3029,6 @@
 		}
 
 		if (td->name_layout) {
-#if GTK_CHECK_VERSION(3,0,0)
 			if (dir == GTK_TEXT_DIR_RTL) {
 				gtk_render_layout(context, cr,
 				                  max_width - (TOOLTIP_BORDER + status_size + SMALL_SPACE) - PANGO_PIXELS(300000),
@@ -3069,22 +3038,9 @@
 				                  TOOLTIP_BORDER + status_size + SMALL_SPACE,
 				                  current_height, td->name_layout);
 			}
-#else
-			if (dir == GTK_TEXT_DIR_RTL) {
-				gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-				                 NULL, gtkblist->tipwindow, "tooltip",
-				                 max_width  -(TOOLTIP_BORDER + status_size + SMALL_SPACE) - PANGO_PIXELS(300000),
-				                 current_height, td->name_layout);
-			} else {
-				gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-				                 NULL, gtkblist->tipwindow, "tooltip",
-				                 TOOLTIP_BORDER + status_size + SMALL_SPACE, current_height, td->name_layout);
-			}
-#endif
 		}
 
 		if (td->layout) {
-#if GTK_CHECK_VERSION(3,0,0)
 			if (dir != GTK_TEXT_DIR_RTL) {
 				gtk_render_layout(context, cr,
 				                  TOOLTIP_BORDER + status_size + SMALL_SPACE,
@@ -3096,20 +3052,6 @@
 				                  current_height + td->name_height,
 				                  td->layout);
 			}
-#else
-			if (dir != GTK_TEXT_DIR_RTL) {
-				gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-				                 NULL, gtkblist->tipwindow, "tooltip",
-				                 TOOLTIP_BORDER + status_size + SMALL_SPACE,
-				                 current_height + td->name_height, td->layout);
-			} else {
-				gtk_paint_layout(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-				                 NULL, gtkblist->tipwindow, "tooltip",
-				                 max_width - (TOOLTIP_BORDER + status_size + SMALL_SPACE) - PANGO_PIXELS(300000),
-				                 current_height + td->name_height,
-				                 td->layout);
-			}
-#endif
 		}
 
 		current_height += MAX(td->name_height + td->height, td->avatar_height) + td->padding;
@@ -5088,24 +5030,6 @@
 	return FALSE;
 }
 
-#if !GTK_CHECK_VERSION(3,0,0)
-static gboolean
-headline_box_enter_cb(GtkWidget *widget, GdkEventCrossing *event,
-                      PidginBuddyListPrivate *priv)
-{
-	gdk_window_set_cursor(widget->window, priv->hand_cursor);
-	return FALSE;
-}
-
-static gboolean
-headline_box_leave_cb(GtkWidget *widget, GdkEventCrossing *event,
-                      PidginBuddyListPrivate *priv)
-{
-	gdk_window_set_cursor(widget->window, priv->arrow_cursor);
-	return FALSE;
-}
-#endif
-
 static void
 reset_headline(PidginBuddyList *gtkblist)
 {
@@ -5124,8 +5048,6 @@
 	return FALSE;
 }
 
-#if GTK_CHECK_VERSION(3,0,0)
-
 static gboolean
 headline_response_cb(GtkInfoBar *infobar, int resp, PidginBuddyList *gtkblist)
 {
@@ -5163,31 +5085,6 @@
 	return TRUE;
 }
 
-#else
-
-static gboolean
-headline_close_press_cb(GtkButton *button, PidginBuddyList *gtkblist)
-{
-	gtk_widget_hide(gtkblist->headline);
-	return FALSE;
-}
-
-static gboolean
-headline_box_press_cb(GtkWidget *widget, GdkEventButton *event, PidginBuddyList *gtkblist)
-{
-	gtk_widget_hide(gtkblist->headline);
-	if (gtkblist->headline_callback)
-		g_idle_add(headline_click_callback, NULL);
-	else {
-		if (gtkblist->headline_destroy)
-			gtkblist->headline_destroy(gtkblist->headline_data);
-		reset_headline(gtkblist);
-	}
-	return TRUE;
-}
-
-#endif
-
 /***********************************/
 /* Connection error handling stuff */
 /***********************************/
@@ -5611,27 +5508,6 @@
 	}
 }
 
-#if !GTK_CHECK_VERSION(3,0,0)
-static gboolean
-paint_headline_hbox  (GtkWidget      *widget,
-		      GdkEventExpose *event,
-		      gpointer user_data)
-{
-	gtk_paint_flat_box (widget->style,
-		      widget->window,
-		      GTK_STATE_NORMAL,
-		      GTK_SHADOW_OUT,
-		      NULL,
-		      widget,
-		      "tooltip",
-		      widget->allocation.x + 1,
-		      widget->allocation.y + 1,
-		      widget->allocation.width - 2,
-		      widget->allocation.height - 2);
-	return FALSE;
-}
-#endif
-
 /* This assumes there are not things like groupless buddies or multi-leveled groups.
  * I'm sure other things in this code assumes that also.
  */
@@ -5648,34 +5524,6 @@
 	}
 }
 
-#if !GTK_CHECK_VERSION(3,0,0)
-static void
-headline_style_set (GtkWidget *widget,
-		    GtkStyle  *prev_style)
-{
-	PidginBuddyListPrivate *priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist);
-	GtkStyle *style;
-	GtkWidget *window;
-
-	if (priv->changing_style)
-		return;
-
-	/* This is a hack needed to use the tooltip background colour */
-	window = gtk_window_new(GTK_WINDOW_POPUP);
-	gtk_widget_set_name(window, "gtk-tooltip");
-	gtk_widget_ensure_style(window);
-	style = gtk_widget_get_style(window);
-
-	priv->changing_style = TRUE;
-	gtk_widget_set_style(gtkblist->headline, style);
-	priv->changing_style = FALSE;
-
-	gtk_widget_destroy(window);
-
-	gtk_widget_queue_draw(gtkblist->headline);
-}
-#endif
-
 /******************************************/
 /* End of connection error handling stuff */
 /******************************************/
@@ -5905,12 +5753,8 @@
 	GtkTreeViewColumn *column;
 	GtkWidget *menu;
 	GtkWidget *sep;
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkWidget *infobar;
 	GtkWidget *content_area;
-#else
-	GtkWidget *ebox;
-#endif
 	GtkWidget *label;
 	GtkWidget *close;
 	char *pretty, *tmp;
@@ -5919,9 +5763,6 @@
 	GError *error;
 	GtkAccelGroup *accel_group;
 	GtkTreeSelection *selection;
-#if ! GTK_CHECK_VERSION(3,0,0)
-	int blist_width;
-#endif
 	GtkTargetEntry dte[] = {{"PURPLE_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW},
 				{"application/x-im-contact", 0, DRAG_BUDDY},
 				{"text/x-vcard", 0, DRAG_VCARD },
@@ -5956,11 +5797,6 @@
 	g_signal_connect(G_OBJECT(gtkblist->window), "focus-out-event",
 			 G_CALLBACK(blist_focus_cb), gtkblist);
 
-	/* TODO: how is this done in gtk+ 3.0? */
-#if !GTK_CHECK_VERSION(3,0,0)
-	GTK_WINDOW(gtkblist->window)->allow_shrink = TRUE;
-#endif
-
 	gtkblist->main_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_widget_show(gtkblist->main_vbox);
 	gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->main_vbox);
@@ -6043,7 +5879,6 @@
 	pidgin_blist_select_notebook_page(gtkblist);
 
 	/****************************** Headline **********************************/
-#if GTK_CHECK_VERSION(3,0,0)
 
 	gtkblist->headline = gtk_event_box_new();
 	gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->headline,
@@ -6078,50 +5913,6 @@
 	g_signal_connect(gtkblist->headline, "button-press-event",
 	                 G_CALLBACK(headline_press_cb), infobar);
 
-#else
-
-	ebox = gtk_event_box_new();
-	gtk_box_pack_start(GTK_BOX(gtkblist->vbox), ebox, FALSE, FALSE, 0);
-	gtkblist->headline = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
-	gtk_container_set_border_width(GTK_CONTAINER(gtkblist->headline), 6);
-	gtk_container_add(GTK_CONTAINER(ebox), gtkblist->headline);
-	gtkblist->headline_image = gtk_image_new_from_pixbuf(NULL);
-	gtk_misc_set_alignment(GTK_MISC(gtkblist->headline_image), 0.0, 0);
-	gtkblist->headline_label = gtk_label_new(NULL);
-	blist_width = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/width") - 25;
-	if (blist_width < -1)
-		blist_width = -1;
-	gtk_widget_set_size_request(gtkblist->headline_label, blist_width, -1);
-	gtk_label_set_line_wrap(GTK_LABEL(gtkblist->headline_label), TRUE);
-	gtk_box_pack_start(GTK_BOX(gtkblist->headline), gtkblist->headline_image, FALSE, FALSE, 0);
-	gtk_box_pack_start(GTK_BOX(gtkblist->headline), gtkblist->headline_label, TRUE, TRUE, 0);
-	g_signal_connect(gtkblist->headline_label,   /* connecting on headline doesn't work, because
-	                                                the signal is not emitted when theme is changed */
-			"style-set",
-			 G_CALLBACK(headline_style_set),
-			 NULL);
-	g_signal_connect (gtkblist->headline,
-			  "expose_event",
-			  G_CALLBACK (paint_headline_hbox),
-			  NULL);
-	gtk_widget_set_name(gtkblist->headline, "gtk-tooltips");
-
-	priv->hand_cursor = gdk_cursor_new (GDK_HAND2);
-	priv->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR);
-
-	/* Close button. */
-	close = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
-	close = pidgin_create_small_button(close);
-	gtk_box_pack_start(GTK_BOX(gtkblist->headline), close, FALSE, FALSE, 0);
-	gtk_widget_set_tooltip_text(close, _("Close"));
-	g_signal_connect(close, "clicked", G_CALLBACK(headline_close_press_cb), gtkblist);
-
-	g_signal_connect(G_OBJECT(ebox), "enter-notify-event", G_CALLBACK(headline_box_enter_cb), priv);
-	g_signal_connect(G_OBJECT(ebox), "leave-notify-event", G_CALLBACK(headline_box_leave_cb), priv);
-	g_signal_connect(G_OBJECT(ebox), "button-press-event", G_CALLBACK(headline_box_press_cb), gtkblist);
-
-#endif
-
 	/****************************** GtkTreeView **********************************/
 	gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS,
 						 GDK_TYPE_PIXBUF, /* Status icon */
@@ -6220,9 +6011,6 @@
 	gtkblist->statusbox = pidgin_status_box_new();
 	gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->statusbox, FALSE, TRUE, 0);
 	gtk_widget_set_name(gtkblist->statusbox, "pidgin_blist_statusbox");
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_container_set_border_width(GTK_CONTAINER(gtkblist->statusbox), 3);
-#endif
 	gtk_widget_show(gtkblist->statusbox);
 
 	/* set the Show Offline Buddies option. must be done
@@ -7119,13 +6907,6 @@
 
 	priv = PIDGIN_BUDDY_LIST_GET_PRIVATE(gtkblist);
 
-#if !GTK_CHECK_VERSION(3,0,0)
-	gdk_cursor_unref(priv->hand_cursor);
-	gdk_cursor_unref(priv->arrow_cursor);
-	priv->hand_cursor = NULL;
-	priv->arrow_cursor = NULL;
-#endif
-
 	if (priv->current_theme)
 		g_object_unref(priv->current_theme);
 	if (priv->select_notebook_page_timeout)
--- a/pidgin/gtkcertmgr.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkcertmgr.c	Mon Dec 21 22:14:59 2015 -0600
@@ -608,11 +608,7 @@
 
 	win = dlg->window =
 		pidgin_create_dialog(_("Certificate Manager"),/* Title */
-#if GTK_CHECK_VERSION(3,0,0)
 				     0, /*Window border*/
-#else
-				     PIDGIN_HIG_BORDER, /*Window border*/
-#endif
 				     "certmgr",         /* Role */
 				     TRUE); /* Allow resizing */
 	g_signal_connect(G_OBJECT(win), "delete_event",
--- a/pidgin/gtkconv.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkconv.c	Mon Dec 21 22:14:59 2015 -0600
@@ -5198,12 +5198,8 @@
 static gboolean
 pidgin_conv_end_quickfind(PidginConversation *gtkconv)
 {
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context = gtk_widget_get_style_context(gtkconv->quickfind_entry);
 	gtk_style_context_remove_class(context, "not-found");
-#else
-	gtk_widget_modify_base(gtkconv->quickfind_entry, GTK_STATE_NORMAL, NULL);
-#endif
 
 	webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(gtkconv->webview));
 	gtk_widget_hide(gtkconv->quickfind_container);
@@ -5219,23 +5215,11 @@
 		case GDK_KEY_Return:
 		case GDK_KEY_KP_Enter:
 			if (webkit_web_view_search_text(WEBKIT_WEB_VIEW(gtkconv->webview), gtk_entry_get_text(GTK_ENTRY(entry)), FALSE, TRUE, TRUE)) {
-#if GTK_CHECK_VERSION(3,0,0)
 				GtkStyleContext *context = gtk_widget_get_style_context(gtkconv->quickfind_entry);
 				gtk_style_context_remove_class(context, "not-found");
-#else
-				gtk_widget_modify_base(gtkconv->quickfind_entry, GTK_STATE_NORMAL, NULL);
-#endif
 			} else {
-#if GTK_CHECK_VERSION(3,0,0)
 				GtkStyleContext *context = gtk_widget_get_style_context(gtkconv->quickfind_entry);
 				gtk_style_context_add_class(context, "not-found");
-#else
-				GdkColor col;
-				col.red = 0xffff;
-				col.green = 0xafff;
-				col.blue = 0xafff;
-				gtk_widget_modify_base(gtkconv->quickfind_entry, GTK_STATE_NORMAL, &col);
-#endif
 			}
 			break;
 		case GDK_KEY_Escape:
@@ -5252,7 +5236,6 @@
 {
 	GtkWidget *widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	GtkWidget *label, *entry, *close;
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context;
 	GtkCssProvider *filter_css;
 	const gchar filter_style[] =
@@ -5262,7 +5245,6 @@
 			"background-image: none;"
 			"background-color: @error_bg_color;"
 		"}";
-#endif
 
 	gtk_box_pack_start(GTK_BOX(container), widget, FALSE, FALSE, 0);
 
@@ -5275,14 +5257,12 @@
 
 	entry = gtk_entry_new();
 	gtk_box_pack_start(GTK_BOX(widget), entry, TRUE, TRUE, 0);
-#if GTK_CHECK_VERSION(3,0,0)
 	filter_css = gtk_css_provider_new();
 	gtk_css_provider_load_from_data(filter_css, filter_style, -1, NULL);
 	context = gtk_widget_get_style_context(entry);
 	gtk_style_context_add_provider(context,
 	                               GTK_STYLE_PROVIDER(filter_css),
 	                               GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-#endif
 
 	gtkconv->quickfind_entry = entry;
 	gtkconv->quickfind_container = widget;
@@ -8918,43 +8898,6 @@
 	default_conv_theme = purple_theme_manager_load_theme(theme_dir, "conversation");
 	g_free(theme_dir);
 
-#if !GTK_CHECK_VERSION(3,0,0)
-	{
-		/* 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;
-		struct {
-			const char *stylename;
-			const char *labelname;
-			const char *color;
-		} styles[] = {
-			{"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"},
-			{NULL, NULL, NULL}
-		};
-		int iter;
-		for (iter = 0; styles[iter].stylename; iter++) {
-			now = gtk_rc_get_style_by_paths(settings, styles[iter].labelname, NULL, G_TYPE_NONE);
-			if (parent == now ||
-					(parent && now && parent->rc_style == now->rc_style)) {
-				g_string_append_printf(str, "style \"%s\" {\n"
-						"fg[ACTIVE] = \"%s\"\n"
-						"}\n"
-						"widget \"*%s\" style \"%s\"\n",
-						styles[iter].stylename,
-						styles[iter].color,
-						styles[iter].labelname, styles[iter].stylename);
-			}
-		}
-		gtk_rc_parse_string(str->str);
-		g_string_free(str, TRUE);
-		gtk_rc_reset_styles(settings);
-	}
-#endif
 }
 
 static void
@@ -9242,9 +9185,7 @@
 notebook_init_grab(PidginConvWindow *gtkwin, GtkWidget *widget, GdkEvent *event)
 {
 	static GdkCursor *cursor = NULL;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkDevice *device;
-#endif
 
 	gtkwin->in_drag = TRUE;
 
@@ -9259,23 +9200,12 @@
 
 	/* Grab the pointer */
 	gtk_grab_add(gtkwin->notebook);
-#if GTK_CHECK_VERSION(3,0,0)
 	device = gdk_event_get_device(event);
 	if (!gdk_display_device_is_grabbed(gdk_device_get_display(device), device))
 		gdk_device_grab(device, gtk_widget_get_window(gtkwin->notebook),
 		                GDK_OWNERSHIP_WINDOW, FALSE,
 		                GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
 		                cursor, gdk_event_get_time(event));
-#else
-#ifndef _WIN32
-	/* Currently for win32 GTK+ (as of 2.2.1), gdk_pointer_is_grabbed will
-	   always be true after a button press. */
-	if (!gdk_pointer_is_grabbed())
-#endif
-		gdk_pointer_grab(gtk_widget_get_window(gtkwin->notebook), FALSE,
-		                 GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
-		                 NULL, cursor, gdk_event_get_time(event));
-#endif
 }
 
 static gboolean
@@ -9541,9 +9471,7 @@
 	gint dest_page_num = 0;
 	gboolean new_window = FALSE;
 	gboolean to_right = FALSE;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkDevice *device;
-#endif
 
 	/*
 	* Don't check to make sure that the event's window matches the
@@ -9553,18 +9481,11 @@
 	if (e->button != 1 && e->type != GDK_BUTTON_RELEASE)
 		return FALSE;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	device = gdk_event_get_device((GdkEvent *)e);
 	if (gdk_display_device_is_grabbed(gdk_device_get_display(device), device)) {
 		gdk_device_ungrab(device, gdk_event_get_time((GdkEvent *)e));
 		gtk_grab_remove(widget);
 	}
-#else
-	if (gdk_pointer_is_grabbed()) {
-		gdk_pointer_ungrab(gdk_event_get_time((GdkEvent *)e));
-		gtk_grab_remove(widget);
-	}
-#endif
 
 	if (!win->in_predrag && !win->in_drag)
 		return FALSE;
@@ -10367,7 +10288,6 @@
 	return FALSE;
 }
 
-#if GTK_CHECK_VERSION(3,0,0)
 static void
 set_default_tab_colors(GtkWidget *widget)
 {
@@ -10411,7 +10331,6 @@
 		g_error_free(error);
 	g_string_free(str, TRUE);
 }
-#endif
 
 void
 pidgin_conv_window_add_gtkconv(PidginConvWindow *win, PidginConversation *gtkconv)
@@ -10448,9 +10367,7 @@
 
 	/* Tab label. */
 	gtkconv->tab_label = gtk_label_new(tmp_lab = purple_conversation_get_title(conv));
-#if GTK_CHECK_VERSION(3,0,0)
 	set_default_tab_colors(gtkconv->tab_label);
-#endif
 	gtk_widget_set_name(gtkconv->tab_label, "tab-label");
 
 	gtkconv->menu_tabby = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
@@ -10671,12 +10588,8 @@
 	GList *l;
 	int x, y;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	gdkwin = gdk_device_get_window_at_position(gdk_event_get_device(event),
 	                                           &x, &y);
-#else
-	gdkwin = gdk_window_at_pointer(&x, &y);
-#endif
 
 	if (gdkwin)
 		gdkwin = gdk_window_get_toplevel(gdkwin);
--- a/pidgin/gtkdebug.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkdebug.c	Mon Dec 21 22:14:59 2015 -0600
@@ -148,18 +148,13 @@
  *****************************************************************************/
 static void
 regex_clear_color(GtkWidget *w) {
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context = gtk_widget_get_style_context(w);
 	gtk_style_context_remove_class(context, "good-filter");
 	gtk_style_context_remove_class(context, "bad-filter");
-#else
-	gtk_widget_modify_base(w, GTK_STATE_NORMAL, NULL);
-#endif
 }
 
 static void
 regex_change_color(GtkWidget *w, gboolean success) {
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context = gtk_widget_get_style_context(w);
 
 	if (success) {
@@ -169,21 +164,6 @@
 		gtk_style_context_add_class(context, "bad-filter");
 		gtk_style_context_remove_class(context, "good-filter");
 	}
-#else
-	GdkColor color;
-
-	if (success) {
-		color.red = 0xAFFF;
-		color.green = 0xFFFF;
-		color.blue = 0xAFFF;
-	} else {
-		color.red = 0xFFFF;
-		color.green = 0xAFFF;
-		color.blue = 0xAFFF;
-	}
-
-	gtk_widget_modify_base(w, GTK_STATE_NORMAL, &color);
-#endif
 }
 
 static void
@@ -438,7 +418,6 @@
 	gint width, height;
 	void *handle;
 	GtkToolItem *item;
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context;
 	GtkCssProvider *filter_css;
 	const gchar filter_style[] =
@@ -454,7 +433,6 @@
 			"background-image: none;"
 			"background-color: @success_color;"
 		"}";
-#endif
 
 	win = g_new0(DebugWindow, 1);
 
@@ -548,14 +526,12 @@
 		gtk_container_add(GTK_CONTAINER(item), GTK_WIDGET(win->expression));
 		gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(item));
 
-#if GTK_CHECK_VERSION(3,0,0)
 		filter_css = gtk_css_provider_new();
 		gtk_css_provider_load_from_data(filter_css, filter_style, -1, NULL);
 		context = gtk_widget_get_style_context(win->expression);
 		gtk_style_context_add_provider(context,
 		                               GTK_STYLE_PROVIDER(filter_css),
 		                               GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-#endif
 
 		/* this needs to be before the text is set from the pref if we want it
 		 * to colorize a stored expression.
--- a/pidgin/gtkdialogs.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkdialogs.c	Mon Dec 21 22:14:59 2015 -0600
@@ -467,13 +467,8 @@
 	AtkObject *obj;
 	char *filename, *tmp;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	win = pidgin_create_dialog(title, 0, role, TRUE);
 	vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(win), FALSE, 0);
-#else
-	win = pidgin_create_dialog(title, PIDGIN_HIG_BORDER, role, TRUE);
-	vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(win), FALSE, PIDGIN_HIG_BORDER);
-#endif
 	gtk_window_set_default_size(GTK_WINDOW(win), 475, 450);
 
 	/* Generate a logo with a version number */
@@ -624,11 +619,7 @@
 	g_string_append(str, "<dt>Plugins:</dt><dd>Disabled</dd>");
 #endif
 
-#ifdef HAVE_SSL
 	g_string_append(str, "<dt>SSL:</dt><dd>SSL support is present.</dd>");
-#else
-	g_string_append(str, "<dt>SSL:</dt><dd>SSL support was <strong><em>NOT</em></strong> compiled!</dd>");
-#endif
 
 	g_string_append_printf(str, "<dt>GTK+ Runtime:</dt><dd>%u.%u.%u</dd>"
 		"<dt>GLib Runtime:</dt><dd>%u.%u.%u</dd>",
--- a/pidgin/gtkdnd-hints.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkdnd-hints.c	Mon Dec 21 22:14:59 2015 -0600
@@ -48,8 +48,6 @@
 	{ NULL, NULL, 0, 0 }
 };
 
-#if GTK_CHECK_VERSION(3,0,0)
-
 static void
 dnd_hints_realized_cb(GtkWidget *window, GtkWidget *pix)
 {
@@ -99,41 +97,6 @@
 	return win;
 }
 
-#else
-
-static GtkWidget *
-dnd_hints_init_window(const gchar *fname)
-{
-	GdkPixbuf *pixbuf;
-	GdkPixmap *pixmap;
-	GdkBitmap *bitmap;
-	GtkWidget *pix;
-	GtkWidget *win;
-	GdkColormap *colormap;
-
-	pixbuf = gdk_pixbuf_new_from_file(fname, NULL);
-	g_return_val_if_fail(pixbuf, NULL);
-
-	win = gtk_window_new(GTK_WINDOW_POPUP);
-	colormap = gtk_widget_get_colormap(win);
-	gdk_pixbuf_render_pixmap_and_mask_for_colormap(pixbuf, colormap,
-	                                               &pixmap, &bitmap, 128);
-	g_object_unref(G_OBJECT(pixbuf));
-
-	pix = gtk_image_new_from_pixmap(pixmap, bitmap);
-	gtk_container_add(GTK_CONTAINER(win), pix);
-	gtk_widget_shape_combine_mask(win, bitmap, 0, 0);
-
-	g_object_unref(G_OBJECT(pixmap));
-	g_object_unref(G_OBJECT(bitmap));
-
-	gtk_widget_show_all(pix);
-
-	return win;
-}
-
-#endif
-
 static void
 get_widget_coords(GtkWidget *w, gint *x1, gint *y1, gint *x2, gint *y2)
 {
--- a/pidgin/gtkdocklet.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkdocklet.c	Mon Dec 21 22:14:59 2015 -0600
@@ -107,18 +107,6 @@
 	if (icon_name) {
 		gtk_status_icon_set_from_icon_name(docklet, icon_name);
 	}
-
-#if !GTK_CHECK_VERSION(3,0,0)
-	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink")) {
-		gboolean pending = FALSE;
-		pending |= (newflag & PIDGIN_DOCKLET_EMAIL_PENDING);
-		pending |= (newflag & PIDGIN_DOCKLET_CONV_PENDING);
-		gtk_status_icon_set_blinking(docklet, pending &&
-			!(newflag & PIDGIN_DOCKLET_CONNECTING));
-	} else if (gtk_status_icon_get_blinking(docklet)) {
-		gtk_status_icon_set_blinking(docklet, FALSE);
-	}
-#endif
 }
 
 static GList *
@@ -341,15 +329,6 @@
 	                      gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(toggle)));
 }
 
-#if !GTK_CHECK_VERSION(3,0,0)
-static void
-docklet_toggle_blink(GtkWidget *toggle, void *data)
-{
-	purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/blink",
-	                      gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(toggle)));
-}
-#endif
-
 static void
 docklet_toggle_blist(GtkWidget *toggle, void *data)
 {
@@ -761,13 +740,6 @@
 	g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_mute), NULL);
 	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
 
-#if !GTK_CHECK_VERSION(3,0,0)
-	menuitem = gtk_check_menu_item_new_with_mnemonic(_("_Blink on New Message"));
-	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/blink"));
-	g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blink), NULL);
-	gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
-#endif
-
 	pidgin_separator(menu);
 
 	/* add plugin actions */
--- a/pidgin/gtkmedia.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkmedia.c	Mon Dec 21 22:14:59 2015 -0600
@@ -922,11 +922,7 @@
 		PidginMediaRealizeData *data;
 		GtkWidget *aspect;
 		GtkWidget *remote_video;
-#if GTK_CHECK_VERSION(3,0,0)
 		GdkRGBA color = {0.0, 0.0, 0.0, 1.0};
-#else
-		GdkColor color = {0, 0, 0, 0};
-#endif
 
 		aspect = gtk_aspect_frame_new(NULL, 0, 0, 4.0/3.0, FALSE);
 		gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
@@ -938,11 +934,7 @@
 		data->participant = g_strdup(gtkmedia->priv->screenname);
 
 		remote_video = gtk_drawing_area_new();
-#if GTK_CHECK_VERSION(3,0,0)
 		gtk_widget_override_background_color(remote_video, GTK_STATE_FLAG_NORMAL, &color);
-#else
-		gtk_widget_modify_bg(remote_video, GTK_STATE_NORMAL, &color);
-#endif
 		g_signal_connect(G_OBJECT(remote_video), "realize",
 				G_CALLBACK(realize_cb), data);
 		gtk_container_add(GTK_CONTAINER(aspect), remote_video);
@@ -961,11 +953,7 @@
 		PidginMediaRealizeData *data;
 		GtkWidget *aspect;
 		GtkWidget *local_video;
-#if GTK_CHECK_VERSION(3,0,0)
 		GdkRGBA color = {0.0, 0.0, 0.0, 1.0};
-#else
-		GdkColor color = {0, 0, 0, 0};
-#endif
 
 		aspect = gtk_aspect_frame_new(NULL, 0, 0, 4.0/3.0, TRUE);
 		gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
@@ -977,11 +965,7 @@
 		data->participant = NULL;
 
 		local_video = gtk_drawing_area_new();
-#if GTK_CHECK_VERSION(3,0,0)
 		gtk_widget_override_background_color(local_video, GTK_STATE_FLAG_NORMAL, &color);
-#else
-		gtk_widget_modify_bg(local_video, GTK_STATE_NORMAL, &color);
-#endif
 		g_signal_connect(G_OBJECT(local_video), "realize",
 				G_CALLBACK(realize_cb), data);
 		gtk_container_add(GTK_CONTAINER(aspect), local_video);
@@ -1141,8 +1125,7 @@
 			break;
 		}
 		case PROP_SCREENNAME:
-			if (media->priv->screenname)
-				g_free(media->priv->screenname);
+			g_free(media->priv->screenname);
 			media->priv->screenname = g_value_dup_string(value);
 			break;
 		default:
--- a/pidgin/gtkmenutray.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkmenutray.c	Mon Dec 21 22:14:59 2015 -0600
@@ -45,7 +45,6 @@
 /******************************************************************************
  * Item Stuff
  *****************************************************************************/
-#if GTK_CHECK_VERSION(3,0,0)
 static void
 pidgin_menu_tray_select(GtkMenuItem *widget) {
 	/* this may look like nothing, but it's really overriding the
@@ -60,21 +59,6 @@
 	 * overridding the select, so it makes sense to override deselect as well.
 	 */
 }
-#else
-static void
-pidgin_menu_tray_select(GtkItem *widget) {
-	/* this may look like nothing, but it's really overriding the
-	 * GtkMenuItem's select function so that it doesn't get highlighted like
-	 * a normal menu item would.
-	 */
-}
-static void
-pidgin_menu_tray_deselect(GtkItem *widget) {
-	/* Probably not necessary, but I'd rather be safe than sorry.  We're
-	 * overridding the select, so it makes sense to override deselect as well.
-	 */
-}
-#endif
 
 /******************************************************************************
  * Object Stuff
@@ -125,11 +109,7 @@
 static void
 pidgin_menu_tray_class_init(PidginMenuTrayClass *klass) {
 	GObjectClass *object_class = G_OBJECT_CLASS(klass);
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkMenuItemClass *menu_item_class = GTK_MENU_ITEM_CLASS(klass);
-#else
-	GtkItemClass *menu_item_class = GTK_ITEM_CLASS(klass);
-#endif
 	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
 	GParamSpec *pspec;
 
--- a/pidgin/gtknotify.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtknotify.c	Mon Dec 21 22:14:59 2015 -0600
@@ -888,9 +888,6 @@
 
 	window = gtk_dialog_new();
 	gtk_window_set_title(GTK_WINDOW(window), title);
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_container_set_border_width(GTK_CONTAINER(window), PIDGIN_HIG_BORDER);
-#endif
 	gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
--- a/pidgin/gtkplugin.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkplugin.c	Mon Dec 21 22:14:59 2015 -0600
@@ -808,15 +808,9 @@
 pidgin_plugins_paint_tooltip(GtkWidget *tipwindow, cairo_t *cr, gpointer data)
 {
 	PangoLayout *layout = g_object_get_data(G_OBJECT(tipwindow), "tooltip-plugin");
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context = gtk_widget_get_style_context(tipwindow);
 	gtk_style_context_add_class(context, GTK_STYLE_CLASS_TOOLTIP);
 	gtk_render_layout(context, cr, 6, 6, layout);
-#else
-	gtk_paint_layout(tipwindow->style, tipwindow->window, GTK_STATE_NORMAL, FALSE,
-	                 NULL, tipwindow, "tooltip",
-	                 6, 6, layout);
-#endif
 	return TRUE;
 }
 
--- a/pidgin/gtkpluginpref.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkpluginpref.c	Mon Dec 21 22:14:59 2015 -0600
@@ -203,9 +203,6 @@
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
 	parent = ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 16);
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
-#endif
 	gtk_widget_show(ret);
 
 	for(pp = purple_plugin_pref_frame_get_prefs(frame);
--- a/pidgin/gtkpounce.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkpounce.c	Mon Dec 21 22:14:59 2015 -0600
@@ -545,9 +545,6 @@
 	dialog->window = window = gtk_dialog_new();
 	gtk_window_set_title(GTK_WINDOW(window), (cur_pounce == NULL ? _("Add Buddy Pounce") : _("Modify Buddy Pounce")));
 	gtk_window_set_role(GTK_WINDOW(window), "buddy_pounce");
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_container_set_border_width(GTK_CONTAINER(dialog->window), PIDGIN_HIG_BORDER);
-#endif
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
 					 G_CALLBACK(delete_win_cb), dialog);
@@ -1343,11 +1340,8 @@
 	width  = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/pounces/dialog/width");
 	height = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/pounces/dialog/height");
 
-#if GTK_CHECK_VERSION(3,0,0)
 	dialog->window = win = pidgin_create_dialog(_("Buddy Pounces"), 0, "pounces", TRUE);
-#else
-	dialog->window = win = pidgin_create_dialog(_("Buddy Pounces"), PIDGIN_HIG_BORDER, "pounces", TRUE);
-#endif
+
 	gtk_window_set_default_size(GTK_WINDOW(win), width, height);
 
 	g_signal_connect(G_OBJECT(win), "delete_event",
--- a/pidgin/gtkprefs.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkprefs.c	Mon Dec 21 22:14:59 2015 -0600
@@ -56,12 +56,7 @@
 #include "pidginstock.h"
 #ifdef USE_VV
 #include "media-gst.h"
-#if GST_CHECK_VERSION(1,0,0)
 #include <gst/video/videooverlay.h>
-#else
-#include <gst/interfaces/xoverlay.h>
-#include <gst/interfaces/propertyprobe.h>
-#endif
 #ifdef GDK_WINDOWING_WIN32
 #include <gdk/gdkwin32.h>
 #endif
@@ -1988,7 +1983,6 @@
 static void
 network_ip_changed(GtkEntry *entry, gpointer data)
 {
-#if GTK_CHECK_VERSION(3,0,0)
 	const gchar *text = gtk_entry_get_text(entry);
 	GtkStyleContext *context = gtk_widget_get_style_context(GTK_WIDGET(entry));
 
@@ -2007,30 +2001,6 @@
 		gtk_style_context_remove_class(context, "bad-ip");
 		gtk_style_context_remove_class(context, "good-ip");
 	}
-#else
-	const gchar *text = gtk_entry_get_text(entry);
-	GdkColor color;
-
-	if (text && *text) {
-		if (purple_ip_address_is_valid(text)) {
-			color.red = 0xAFFF;
-			color.green = 0xFFFF;
-			color.blue = 0xAFFF;
-
-			purple_network_set_public_ip(text);
-		} else {
-			color.red = 0xFFFF;
-			color.green = 0xAFFF;
-			color.blue = 0xAFFF;
-		}
-
-		gtk_widget_modify_base(GTK_WIDGET(entry), GTK_STATE_NORMAL, &color);
-
-	} else {
-		purple_network_set_public_ip("");
-		gtk_widget_modify_base(GTK_WIDGET(entry), GTK_STATE_NORMAL, NULL);
-	}
-#endif
 }
 
 static gboolean
@@ -2153,7 +2123,6 @@
 	GtkWidget *vbox, *hbox, *entry;
 	GtkWidget *label, *auto_ip_checkbox, *ports_checkbox, *spin_button;
 	GtkSizeGroup *sg;
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context;
 	GtkCssProvider *ip_css;
 	const gchar ip_style[] =
@@ -2169,7 +2138,6 @@
 			"background-image: none;"
 			"background-color: @success_color;"
 		"}";
-#endif
 
 	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
@@ -2211,14 +2179,12 @@
 	g_signal_connect(G_OBJECT(entry), "changed",
 					 G_CALLBACK(network_ip_changed), NULL);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	ip_css = gtk_css_provider_new();
 	gtk_css_provider_load_from_data(ip_css, ip_style, -1, NULL);
 	context = gtk_widget_get_style_context(entry);
 	gtk_style_context_add_provider(context,
 	                               GTK_STYLE_PROVIDER(ip_css),
 	                               GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-#endif
 
 	hbox = pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("Public _IP:"),
 			sg, entry, TRUE, NULL);
@@ -3482,17 +3448,6 @@
 	GList *ret = NULL;
 	GstElement *element;
 	GObjectClass *klass;
-#if !GST_CHECK_VERSION(1,0,0)
-	GstPropertyProbe *probe;
-	const GParamSpec *pspec;
-	guint i;
-	GValueArray *array;
-	enum {
-		PROBE_NONE,
-		PROBE_DEVICE,
-		PROBE_NAME
-	} probe_attr;
-#endif
 
 	ret = g_list_prepend(ret, g_strdup(_("Default")));
 	ret = g_list_prepend(ret, g_strdup(""));
@@ -3524,99 +3479,8 @@
 		return g_list_reverse(ret);
 	}
 
-#if GST_CHECK_VERSION(1,0,0)
 	purple_debug_info("vvconfig", "'%s' - gstreamer-1.0 doesn't suport "
 		"property probing\n", element_name);
-#else
-	if (g_object_class_find_property(klass, "device"))
-		probe_attr = PROBE_DEVICE;
-	else if (g_object_class_find_property(klass, "device-index") &&
-		g_object_class_find_property(klass, "device-name"))
-		probe_attr = PROBE_NAME;
-	else
-		probe_attr = PROBE_NONE;
-	
-	if (!GST_IS_PROPERTY_PROBE(element))
-		probe_attr = PROBE_NONE;
-	
-	if (probe_attr == PROBE_NONE)
-	{
-		purple_debug_info("vvconfig", "'%s' - no possibility to probe "
-			"for devices\n", element_name);
-		gst_object_unref(element);
-		return g_list_reverse(ret);
-	}
-
-	probe = GST_PROPERTY_PROBE(element);
-
-	if (probe_attr == PROBE_DEVICE)
-		pspec = gst_property_probe_get_property(probe, "device");
-	else /* probe_attr == PROBE_NAME */
-		pspec = gst_property_probe_get_property(probe, "device-name");
-
-	if (!pspec) {
-		purple_debug_info("vvconfig", "'%s' - creating probe failed\n",
-			element_name);
-		gst_object_unref(element);
-		return g_list_reverse(ret);
-	}
-
-	/* Set autoprobe[-fps] to FALSE to avoid delays when probing. */
-	if (g_object_class_find_property(klass, "autoprobe"))
-		g_object_set(G_OBJECT(element), "autoprobe", FALSE, NULL);
-	if (g_object_class_find_property(klass, "autoprobe-fps"))
-		g_object_set(G_OBJECT(element), "autoprobe-fps", FALSE, NULL);
-
-	array = gst_property_probe_probe_and_get_values(probe, pspec);
-	if (array == NULL) {
-		purple_debug_info("vvconfig", "'%s' has no devices\n",
-			element_name);
-		gst_object_unref(element);
-		return g_list_reverse(ret);
-	}
-
-	for (i = 0; i < array->n_values; i++) {
-		GValue *device;
-		const gchar *name;
-		const gchar *device_name;
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-		/* GValueArray is in gstreamer-0.10 API */
-		device = g_value_array_get_nth(array, i);
-G_GNUC_END_IGNORE_DEPRECATIONS
-
-		if (probe_attr == PROBE_DEVICE) {
-			g_object_set_property(G_OBJECT(element), "device",
-				device);
-			if (gst_element_set_state(element, GST_STATE_READY)
-				!= GST_STATE_CHANGE_SUCCESS)
-			{
-				purple_debug_warning("vvconfig", "Error "
-					"changing state of %s\n", element_name);
-				continue;
-			}
-
-			g_object_get(G_OBJECT(element), "device-name", &name,
-				NULL);
-			device_name = g_strdup(g_value_get_string(device));
-		} else /* probe_attr == PROBE_NAME */ {
-			name = g_strdup(g_value_get_string(device));
-			device_name = g_strdup_printf("%d", i);
-		}
-
-		if (name == NULL)
-			name = _("Unknown");
-		purple_debug_info("vvconfig", "Found device %s: %s for %s\n",
-			device_name, name, element_name);
-		ret = g_list_prepend(ret, (gpointer)name);
-		ret = g_list_prepend(ret, (gpointer)device_name);
-		gst_element_set_state(element, GST_STATE_NULL);
-	}
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-	/* GValueArray is in gstreamer-0.10 API */
-	g_value_array_free(array);
-G_GNUC_END_IGNORE_DEPRECATIONS
-#endif
 
 	gst_object_unref(element);
 	return g_list_reverse(ret);
@@ -4011,19 +3875,11 @@
 {
 	GtkWidget *test;
 	GtkWidget *video;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkRGBA color = {0.0, 0.0, 0.0, 1.0};
-#else
-	GdkColor color = {0, 0, 0, 0};
-#endif
 
 	video_drawing_area = video = gtk_drawing_area_new();
 	gtk_box_pack_start(GTK_BOX(vbox), video, TRUE, TRUE, 0);
-#if GTK_CHECK_VERSION(3,0,0)
 	gtk_widget_override_background_color(video, GTK_STATE_FLAG_NORMAL, &color);
-#else
-	gtk_widget_modify_bg(video, GTK_STATE_NORMAL, &color);
-#endif
 	gtk_widget_set_size_request(GTK_WIDGET(video), 240, 180);
 
 	test = gtk_toggle_button_new_with_label(_("Test Video"));
@@ -4208,11 +4064,7 @@
 	/* Back to instant-apply! I win!  BU-HAHAHA! */
 
 	/* Create the window */
-#if GTK_CHECK_VERSION(3,0,0)
 	prefs = pidgin_create_dialog(_("Preferences"), 0, "preferences", FALSE);
-#else
-	prefs = pidgin_create_dialog(_("Preferences"), PIDGIN_HIG_BORDER, "preferences", FALSE);
-#endif
 	g_signal_connect(G_OBJECT(prefs), "destroy",
 					 G_CALLBACK(delete_prefs), NULL);
 
--- a/pidgin/gtkrequest.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkrequest.c	Mon Dec 21 22:14:59 2015 -0600
@@ -37,9 +37,6 @@
 #ifdef ENABLE_GCR
 #define GCR_API_SUBJECT_TO_CHANGE
 #include <gcr/gcr.h>
-#if !GTK_CHECK_VERSION(3,0,0)
-#include <gcr/gcr-simple-certificate.h>
-#endif
 #endif
 
 #include "gtk3compat.h"
--- a/pidgin/gtkroomlist.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkroomlist.c	Mon Dec 21 22:14:59 2015 -0600
@@ -355,23 +355,16 @@
 	int current_height, max_width;
 	int max_text_width;
 	GtkTextDirection dir = gtk_widget_get_direction(GTK_WIDGET(grl->tree));
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context;
 
 	context = gtk_widget_get_style_context(grl->tipwindow);
 	gtk_style_context_add_class(context, GTK_STYLE_CLASS_TOOLTIP);
-#else
-	GtkStyle *style;
-
-	style = gtk_widget_get_style(grl->tipwindow);
-#endif
 
 	max_text_width = MAX(grl->tip_width, grl->tip_name_width);
 	max_width = TOOLTIP_BORDER + SMALL_SPACE + max_text_width + TOOLTIP_BORDER;
 
 	current_height = 12;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	if (dir == GTK_TEXT_DIR_RTL) {
 		gtk_render_layout(context, cr,
 		                  max_width - (TOOLTIP_BORDER + SMALL_SPACE) - PANGO_PIXELS(600000),
@@ -394,34 +387,6 @@
 		                  current_height + grl->tip_name_height,
 		                  grl->tip_layout);
 	}
-#else
-	if (dir == GTK_TEXT_DIR_RTL) {
-		gtk_paint_layout(style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-		                 NULL, grl->tipwindow, "tooltip",
-		                 max_width - (TOOLTIP_BORDER + SMALL_SPACE) - PANGO_PIXELS(600000),
-		                 current_height,
-		                 grl->tip_name_layout);
-	} else {
-		gtk_paint_layout(style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-		                 NULL, grl->tipwindow, "tooltip",
-		                 TOOLTIP_BORDER + SMALL_SPACE,
-		                 current_height,
-		                 grl->tip_name_layout);
-	}
-	if (dir != GTK_TEXT_DIR_RTL) {
-		gtk_paint_layout(style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-		                 NULL, grl->tipwindow, "tooltip",
-		                 TOOLTIP_BORDER + SMALL_SPACE,
-		                 current_height + grl->tip_name_height,
-		                 grl->tip_layout);
-	} else {
-		gtk_paint_layout(style, grl->tipwindow->window, GTK_STATE_NORMAL, FALSE,
-		                 NULL, grl->tipwindow, "tooltip",
-		                 max_width - (TOOLTIP_BORDER + SMALL_SPACE) - PANGO_PIXELS(600000),
-		                 current_height + grl->tip_name_height,
-		                 grl->tip_layout);
-	}
-#endif
 
 	return FALSE;
 }
@@ -567,11 +532,7 @@
 	dialog->account = account;
 
 	/* Create the window. */
-#if GTK_CHECK_VERSION(3,0,0)
 	dialog->window = window = pidgin_create_dialog(_("Room List"), 0, "room list", TRUE);
-#else
-	dialog->window = window = pidgin_create_dialog(_("Room List"), PIDGIN_HIG_BORDER, "room list", TRUE);
-#endif
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
 					 G_CALLBACK(delete_win_cb), dialog);
--- a/pidgin/gtksmiley-manager.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtksmiley-manager.c	Mon Dec 21 22:14:59 2015 -0600
@@ -339,47 +339,26 @@
 		g_object_ref(smiley);
 	}
 
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_container_set_border_width(
-		GTK_CONTAINER(edit_dialog->window), PIDGIN_HIG_BORDER);
-#endif
 
 	/* The vbox */
-#if GTK_CHECK_VERSION(3,0,0)
 	vbox = gtk_grid_new();
 	gtk_grid_set_row_spacing(GTK_GRID(vbox), PIDGIN_HIG_BORDER);
-#else
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
-#endif
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(
 		edit_dialog->window)), vbox);
 	gtk_widget_show(vbox);
 
 	/* The hbox */
-#if GTK_CHECK_VERSION(3,0,0)
 	hbox = gtk_grid_new();
 	gtk_grid_set_column_spacing(GTK_GRID(hbox), PIDGIN_HIG_BORDER);
 	gtk_grid_attach(GTK_GRID(vbox), hbox, 0, 0, 1, 1);
-#else
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
-	gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)), hbox);
-#endif
 
 	label = GTK_LABEL(gtk_label_new_with_mnemonic(_("_Image:")));
-#if GTK_CHECK_VERSION(3,0,0)
 	gtk_grid_attach(GTK_GRID(hbox), GTK_WIDGET(label), 0, 0, 1, 1);
-#else
-	gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0);
-#endif
 	gtk_widget_show(GTK_WIDGET(label));
 
 	filech = GTK_BUTTON(gtk_button_new());
-#if GTK_CHECK_VERSION(3,0,0)
 	gtk_grid_attach_next_to(GTK_GRID(hbox), GTK_WIDGET(filech), NULL,
 		GTK_POS_RIGHT, 1, 1);
-#else
-	gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(filech), FALSE, FALSE, 0);
-#endif
 	pidgin_set_accessible_label(GTK_WIDGET(filech), label);
 
 	edit_dialog->thumbnail = GTK_IMAGE(gtk_image_new());
@@ -389,37 +368,23 @@
 	gtk_widget_show_all(hbox);
 
 	/* info */
-#if GTK_CHECK_VERSION(3,0,0)
 	hbox = gtk_grid_new();
 	gtk_grid_set_column_spacing(GTK_GRID(hbox), PIDGIN_HIG_BORDER);
 
 	gtk_grid_attach_next_to(GTK_GRID(vbox), hbox, NULL,
 		GTK_POS_BOTTOM, 1, 1);
-#else
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
-	gtk_container_add(GTK_CONTAINER(GTK_VBOX(vbox)), hbox);
-#endif
 
 	/* Shortcut text */
 	label = GTK_LABEL(gtk_label_new_with_mnemonic(_("S_hortcut text:")));
-#if GTK_CHECK_VERSION(3,0,0)
 	gtk_grid_attach(GTK_GRID(hbox), GTK_WIDGET(label), 0, 0, 1, 1);
-#else
-	gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0);
-#endif
 	gtk_widget_show(GTK_WIDGET(label));
 
 	edit_dialog->shortcut = GTK_ENTRY(gtk_entry_new());
 	gtk_entry_set_activates_default(edit_dialog->shortcut, TRUE);
 	pidgin_set_accessible_label(GTK_WIDGET(edit_dialog->shortcut), label);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	gtk_grid_attach_next_to(GTK_GRID(hbox),
 		GTK_WIDGET(edit_dialog->shortcut), NULL, GTK_POS_RIGHT, 1, 1);
-#else
-	gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(edit_dialog->shortcut),
-		FALSE, FALSE, 0);
-#endif
 
 	gtk_widget_show(GTK_WIDGET(edit_dialog->shortcut));
 	gtk_widget_show(hbox);
@@ -810,9 +775,6 @@
 
 	gtk_window_set_default_size(GTK_WINDOW(win), 50, 400);
 	gtk_window_set_role(GTK_WINDOW(win), "custom_smiley_manager");
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_container_set_border_width(GTK_CONTAINER(win), PIDGIN_HIG_BORDER);
-#endif
 	gtk_dialog_set_response_sensitive(win, GTK_RESPONSE_NO, FALSE);
 	gtk_dialog_set_response_sensitive(win, PIDGIN_RESPONSE_MODIFY, FALSE);
 
--- a/pidgin/gtksound.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtksound.c	Mon Dec 21 22:14:59 2015 -0600
@@ -554,11 +554,7 @@
 		return;
 	}
 
-#if GST_CHECK_VERSION(1,0,0)
 	play = gst_element_factory_make("playbin", "play");
-#else
-	play = gst_element_factory_make("playbin2", "play");
-#endif
 
 	if (play == NULL) {
 		return;
--- a/pidgin/gtkstatusbox.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkstatusbox.c	Mon Dec 21 22:14:59 2015 -0600
@@ -71,14 +71,9 @@
 static void status_menu_refresh_iter(PidginStatusBox *status_box, gboolean status_changed);
 static void pidgin_status_box_regenerate(PidginStatusBox *status_box, gboolean status_changed);
 static void pidgin_status_box_changed(PidginStatusBox *box);
-#if GTK_CHECK_VERSION(3,0,0)
 static void pidgin_status_box_get_preferred_height (GtkWidget *widget,
 	gint *minimum_height, gint *natural_height);
 static gboolean pidgin_status_box_draw (GtkWidget *widget, cairo_t *cr);
-#else
-static void pidgin_status_box_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static gboolean pidgin_status_box_expose_event (GtkWidget *widget, GdkEventExpose *event);
-#endif
 static void pidgin_status_box_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
 static void pidgin_status_box_redisplay_buddy_icon(PidginStatusBox *status_box);
 static void pidgin_status_box_forall (GtkContainer *container, gboolean include_internals, GtkCallback callback, gpointer callback_data);
@@ -451,13 +446,8 @@
 
 	gtk_widget_destroy(statusbox->icon_box);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	g_object_unref(statusbox->hand_cursor);
 	g_object_unref(statusbox->arrow_cursor);
-#else
-	gdk_cursor_unref(statusbox->hand_cursor);
-	gdk_cursor_unref(statusbox->arrow_cursor);
-#endif
 
 	if (statusbox->buddy_icon_img)
 		g_object_unref(statusbox->buddy_icon_img);
@@ -566,13 +556,8 @@
 	parent_class = g_type_class_peek_parent(klass);
 
 	widget_class = (GtkWidgetClass*)klass;
-#if GTK_CHECK_VERSION(3,0,0)
 	widget_class->get_preferred_height = pidgin_status_box_get_preferred_height;
 	widget_class->draw = pidgin_status_box_draw;
-#else
-	widget_class->size_request = pidgin_status_box_size_request;
-	widget_class->expose_event = pidgin_status_box_expose_event;
-#endif
 	widget_class->size_allocate = pidgin_status_box_size_allocate;
 
 	container_class->child_type = pidgin_status_box_child_type;
@@ -1325,7 +1310,6 @@
 popup_grab_on_window(GdkWindow *window, GdkEvent *event)
 {
 	guint32 activate_time = gdk_event_get_time(event);
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkDevice *device = gdk_event_get_device(event);
 	GdkGrabStatus status;
 
@@ -1346,23 +1330,6 @@
 	}
 
 	return FALSE;
-#else
-	if ((gdk_pointer_grab(window, TRUE,
-	                      GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
-	                      GDK_POINTER_MOTION_MASK,
-	                      NULL, NULL, activate_time) == 0))
-	{
-		if (gdk_keyboard_grab(window, TRUE, activate_time) == 0)
-			return TRUE;
-		else {
-			gdk_display_pointer_ungrab(gdk_window_get_display(window),
-			                           activate_time);
-			return FALSE;
-		}
-	}
-
-	return FALSE;
-#endif
 }
 
 
@@ -1396,22 +1363,15 @@
 pidgin_status_box_popdown(PidginStatusBox *box, GdkEvent *event)
 {
 	guint32 time;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkDevice *device;
-#endif
 	gtk_widget_hide(box->popup_window);
 	box->popup_in_progress = FALSE;
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(box->toggle_button), FALSE);
 	gtk_grab_remove(box->popup_window);
 	time = gdk_event_get_time(event);
-#if GTK_CHECK_VERSION(3,0,0)
 	device = gdk_event_get_device(event);
 	gdk_device_ungrab(device, time);
 	gdk_device_ungrab(gdk_device_get_associated_device(device), time);
-#else
-	gdk_pointer_ungrab(time);
-	gdk_keyboard_ungrab(time);
-#endif
 }
 
 static gboolean
@@ -1911,7 +1871,6 @@
 
 }
 
-#if GTK_CHECK_VERSION(3,0,0)
 static void
 pidgin_status_box_get_preferred_height(GtkWidget *widget, gint *minimum_height,
                                        gint *natural_height)
@@ -1937,30 +1896,6 @@
 			*natural_height += box_nat_height + border_width * 2;
 	}
 }
-#else
-static void
-pidgin_status_box_size_request(GtkWidget *widget,
-								 GtkRequisition *requisition)
-{
-	GtkRequisition box_req;
-	gint border_width = GTK_CONTAINER (widget)->border_width;
-
-	gtk_widget_size_request(PIDGIN_STATUS_BOX(widget)->toggle_button, requisition);
-
-	/* Make this icon the same size as other buddy icons in the list; unless it already wants to be bigger */
-	requisition->height = MAX(requisition->height, 34);
-	requisition->height += border_width * 2;
-
-	/* If the gtkwebview is visible, then add some additional padding */
-	if (PIDGIN_STATUS_BOX(widget)->webview_visible) {
-		gtk_widget_size_request(PIDGIN_STATUS_BOX(widget)->vbox, &box_req);
-		if (box_req.height > 1)
-			requisition->height += box_req.height + border_width * 2;
-	}
-
-	requisition->width = 1;
-}
-#endif
 
 /* From gnome-panel */
 static void
@@ -2051,7 +1986,6 @@
 	gtk_widget_set_allocation(GTK_WIDGET(status_box), allocation);
 }
 
-#if GTK_CHECK_VERSION(3,0,0)
 static gboolean
 pidgin_status_box_draw(GtkWidget *widget, cairo_t *cr)
 {
@@ -2069,22 +2003,6 @@
 	}
 	return FALSE;
 }
-#else
-static gboolean
-pidgin_status_box_expose_event(GtkWidget *widget,
-				 GdkEventExpose *event)
-{
-	PidginStatusBox *status_box = PIDGIN_STATUS_BOX(widget);
-	gtk_container_propagate_expose(GTK_CONTAINER(widget), status_box->vbox, event);
-	gtk_container_propagate_expose(GTK_CONTAINER(widget), status_box->toggle_button, event);
-	if (status_box->icon_box && status_box->icon_opaque) {
-		gtk_paint_box(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL,
-				status_box->icon_box, "button", status_box->icon_box->allocation.x-1, status_box->icon_box->allocation.y-1,
-				34, 34);
-	}
-	return FALSE;
-}
-#endif
 
 static void
 pidgin_status_box_forall(GtkContainer *container,
@@ -2396,11 +2314,8 @@
 	{
 		gtk_widget_hide(status_box->vbox);
 		status_box->webview_visible = FALSE;
-		if (message != NULL)
-		{
-			g_free(message);
-			message = NULL;
-		}
+		g_free(message);
+		message = NULL;
 	}
 
 	if (status_box->account == NULL) {
--- a/pidgin/gtkutils.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkutils.c	Mon Dec 21 22:14:59 2015 -0600
@@ -210,11 +210,6 @@
 	/* don't allow focus on the close button */
 	gtk_button_set_focus_on_click(GTK_BUTTON(button), FALSE);
 
-	/* set style to make it as small as possible */
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_widget_set_name(button, "pidgin-small-close-button");
-#endif
-
 	gtk_widget_show(image);
 
 	gtk_container_add(GTK_CONTAINER(button), image);
@@ -2116,11 +2111,7 @@
 	cursor = gdk_cursor_new(cursor_type);
 	gdk_window_set_cursor(gtk_widget_get_window(widget), cursor);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	g_object_unref(cursor);
-#else
-	gdk_cursor_unref(cursor);
-#endif
 
 	gdk_display_flush(gdk_window_get_display(gtk_widget_get_window(widget)));
 }
@@ -2805,14 +2796,8 @@
 	GtkComboBoxText *ret = NULL;
 	GtkWidget *the_entry = NULL;
 
-#if GTK_CHECK_VERSION(2,24,0)
 	ret = GTK_COMBO_BOX_TEXT(gtk_combo_box_text_new_with_entry());
 	the_entry = gtk_bin_get_child(GTK_BIN(ret));
-#else
-	ret = GTK_COMBO_BOX(gtk_combo_box_entry_new_text());
-	the_entry = gtk_entry_new();
-	gtk_container_add(GTK_CONTAINER(ret), the_entry);
-#endif
 
 	if (default_item)
 		gtk_entry_set_text(GTK_ENTRY(the_entry), default_item);
@@ -3554,11 +3539,7 @@
 #if GTK_CHECK_VERSION(3,8,0)
 			gtk_container_add(GTK_CONTAINER(sw), child);
 #else
-#if GTK_CHECK_VERSION(3,0,0)
 			if (GTK_IS_SCROLLABLE(child))
-#else
-			if (GTK_WIDGET_GET_CLASS(child)->set_scroll_adjustments_signal)
-#endif /* GTK_CHECK_VERSION(3,0,0) */
 				gtk_container_add(GTK_CONTAINER(sw), child);
 			else
 				gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), child);
@@ -3584,21 +3565,6 @@
 	/* Example custom URL handler. */
 	pidgin_webview_class_register_protocol("open://", open_dialog, dummy);
 
-	/* Used to make small buttons */
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_rc_parse_string("style \"pidgin-small-close-button\"\n"
-	                    "{\n"
-	                    "GtkWidget::focus-padding = 0\n"
-	                    "GtkWidget::focus-line-width = 0\n"
-	                    "xthickness = 0\n"
-	                    "ythickness = 0\n"
-	                    "GtkContainer::border-width = 0\n"
-	                    "GtkButton::inner-border = {0, 0, 0, 0}\n"
-	                    "GtkButton::default-border = {0, 0, 0, 0}\n"
-	                    "}\n"
-	                    "widget \"*.pidgin-small-close-button\" style \"pidgin-small-close-button\"");
-#endif
-
 #ifdef _WIN32
 	winpidgin_register_win32_url_handlers();
 #endif
--- a/pidgin/gtkwhiteboard.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkwhiteboard.c	Mon Dec 21 22:14:59 2015 -0600
@@ -87,11 +87,6 @@
 static gboolean
 pidgin_whiteboard_draw_event(GtkWidget *widget, cairo_t *cr,
 	gpointer _gtkwb);
-#if !GTK_CHECK_VERSION(3,0,0)
-static gboolean
-pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event,
-	gpointer _gtkwb);
-#endif
 
 static gboolean pidgin_whiteboard_brush_down(GtkWidget *widget, GdkEventButton *event, gpointer data);
 static gboolean pidgin_whiteboard_brush_motion(GtkWidget *widget, GdkEventMotion *event, gpointer data);
@@ -219,19 +214,11 @@
 	gtk_widget_show(drawing_area);
 
 	/* Signals used to handle backing pixmap */
-#if GTK_CHECK_VERSION(3,0,0)
 	g_signal_connect(G_OBJECT(drawing_area), "draw",
 		G_CALLBACK(pidgin_whiteboard_draw_event), gtkwb);
 
 	g_signal_connect(G_OBJECT(drawing_area), "configure-event",
 		G_CALLBACK(pidgin_whiteboard_configure_event), gtkwb);
-#else
-	g_signal_connect(G_OBJECT(drawing_area), "expose_event",
-		G_CALLBACK(pidgin_whiteboard_expose_event), gtkwb);
-
-	g_signal_connect(G_OBJECT(drawing_area), "configure_event",
-		G_CALLBACK(pidgin_whiteboard_configure_event), gtkwb);
-#endif
 
 	/* Event signals */
 	g_signal_connect(G_OBJECT(drawing_area), "button_press_event",
@@ -389,9 +376,7 @@
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)data;
 	cairo_t *cr;
 	GtkAllocation allocation;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkRGBA white = {1.0, 1.0, 1.0, 1.0};
-#endif
 
 	if (gtkwb->priv->cr)
 		cairo_destroy(gtkwb->priv->cr);
@@ -403,11 +388,7 @@
 	gtkwb->priv->surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24,
 		allocation.width, allocation.height);
 	gtkwb->priv->cr = cr = cairo_create(gtkwb->priv->surface);
-#if GTK_CHECK_VERSION(3,0,0)
 	gdk_cairo_set_source_rgba(cr, &white);
-#else
-	gdk_cairo_set_source_color(cr, &gtk_widget_get_style(widget)->white);
-#endif
 	cairo_rectangle(cr, 0, 0, allocation.width, allocation.height);
 	cairo_fill(cr);
 
@@ -426,23 +407,6 @@
 	return FALSE;
 }
 
-#if !GTK_CHECK_VERSION(3,0,0)
-static gboolean
-pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event,
-	gpointer _gtkwb)
-{
-	cairo_t *cr;
-
-	cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
-
-	pidgin_whiteboard_draw_event(widget, cr, _gtkwb);
-
-	cairo_destroy(cr);
-
-	return FALSE;
-}
-#endif
-
 static gboolean pidgin_whiteboard_brush_down(GtkWidget *widget, GdkEventButton *event, gpointer data)
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)data;
@@ -502,12 +466,8 @@
 	GList *draw_list = purple_whiteboard_get_draw_list(wb);
 
 	if(event->is_hint)
-#if GTK_CHECK_VERSION(3,0,0)
 		gdk_window_get_device_position(event->window, event->device, &x, &y,
 		                               &state);
-#else
-		gdk_window_get_pointer(event->window, &x, &y, &state);
-#endif
 	else
 	{
 		x = event->x;
@@ -645,22 +605,16 @@
 	GtkWidget *widget = gtkwb->drawing_area;
 	cairo_t *gfx_con = gtkwb->priv->cr;
 	GdkColor col;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkRGBA rgba;
-#endif
 
 	/* Interpret and convert color */
 	pidgin_whiteboard_rgb24_to_rgb48(color, &col);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	rgba.red = col.red / 0xffff;
 	rgba.green = col.green / 0xffff;
 	rgba.blue = col.blue / 0xffff;
 	rgba.alpha = 1.0;
 	gdk_cairo_set_source_rgba(gfx_con, &rgba);
-#else
-	gdk_cairo_set_source_color(gfx_con, &col);
-#endif
 
 	/* Draw a circle */
 	cairo_arc(gfx_con,
@@ -763,18 +717,11 @@
 	GtkWidget *drawing_area = gtkwb->drawing_area;
 	cairo_t *cr = gtkwb->priv->cr;
 	GtkAllocation allocation;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkRGBA white = {1.0, 1.0, 1.0, 1.0};
-#endif
 
 	gtk_widget_get_allocation(drawing_area, &allocation);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	gdk_cairo_set_source_rgba(cr, &white);
-#else
-	gdk_cairo_set_source_color(cr,
-		&gtk_widget_get_style(drawing_area)->white);
-#endif
 	cairo_rectangle(cr, 0, 0, allocation.width, allocation.height);
 	cairo_fill(cr);
 
--- a/pidgin/gtkxfer.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/gtkxfer.c	Mon Dec 21 22:14:59 2015 -0600
@@ -718,11 +718,7 @@
 		purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/filetransfer/clear_finished");
 
 	/* Create the window. */
-#if GTK_CHECK_VERSION(3,0,0)
 	dialog->window = window = pidgin_create_dialog(_("File Transfers"), 0, "file transfer", TRUE);
-#else
-	dialog->window = window = pidgin_create_dialog(_("File Transfers"), PIDGIN_HIG_BORDER, "file transfer", TRUE);
-#endif
 	gtk_window_set_default_size(GTK_WINDOW(window), 450, 250);
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
--- a/pidgin/libpidgin.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/libpidgin.c	Mon Dec 21 22:14:59 2015 -0600
@@ -431,10 +431,8 @@
 	char *opt_login_arg = NULL;
 	char *opt_session_arg = NULL;
 	char *search_path;
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkCssProvider *provider;
 	GdkScreen *screen;
-#endif
 	GList *accounts;
 #ifdef HAVE_SIGNAL_H
 	int sig_indx;	/* for setting up signal catching */
@@ -443,13 +441,11 @@
 	GIOChannel *signal_channel;
 	GIOStatus signal_status;
 	guint signal_channel_watcher;
+	GError *error;
 #ifndef DEBUG
 	char *segfault_message_tmp;
-#endif
-#endif
-#if defined(HAVE_SIGNAL_H) || GTK_CHECK_VERSION(3,0,0)
-	GError *error;
-#endif
+#endif /* DEBUG */
+#endif /* HAVE_SIGNAL_N */
 	int opt;
 	gboolean gui_check;
 	gboolean debug_enabled, debug_colored;
@@ -694,12 +690,6 @@
 	purple_debug_set_enabled(debug_enabled);
 	purple_debug_set_colored(debug_colored);
 
-#if !GTK_CHECK_VERSION(3,0,0)
-	search_path = g_build_filename(purple_user_dir(), "gtkrc-2.0", NULL);
-	gtk_rc_add_default_file(search_path);
-	g_free(search_path);
-#endif
-
 	gui_check = gtk_init_check(&argc, &argv);
 	if (!gui_check) {
 		char *display = gdk_get_display();
@@ -715,7 +705,6 @@
 		return 1;
 	}
 
-#if GTK_CHECK_VERSION(3,0,0)
 	search_path = g_build_filename(purple_user_dir(), "gtk-3.0.css", NULL);
 
 	error = NULL;
@@ -733,7 +722,6 @@
 	}
 
 	g_free(search_path);
-#endif
 
 #ifdef _WIN32
 	winpidgin_init();
@@ -788,14 +776,10 @@
 #ifdef USE_SM
 	pidgin_session_init(argv[0], opt_session_arg, opt_config_dir_arg);
 #endif
-	if (opt_session_arg != NULL) {
-		g_free(opt_session_arg);
-		opt_session_arg = NULL;
-	}
-	if (opt_config_dir_arg != NULL) {
-		g_free(opt_config_dir_arg);
-		opt_config_dir_arg = NULL;
-	}
+	g_free(opt_session_arg);
+	opt_session_arg = NULL;
+	g_free(opt_config_dir_arg);
+	opt_config_dir_arg = NULL;
 
 	/* This needs to be before purple_blist_show() so the
 	 * statusbox gets the forced online status. */
@@ -822,10 +806,8 @@
 			purple_savedstatus_activate(purple_savedstatus_get_startup());
 		/* now enable the requested ones */
 		dologin_named(opt_login_arg);
-		if (opt_login_arg != NULL) {
-			g_free(opt_login_arg);
-			opt_login_arg = NULL;
-		}
+		g_free(opt_login_arg);
+		opt_login_arg = NULL;
 	} else if (opt_nologin)	{
 		/* Set all accounts to "offline" */
 		PurpleSavedStatus *saved_status;
--- a/pidgin/minidialog.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/minidialog.c	Mon Dec 21 22:14:59 2015 -0600
@@ -446,38 +446,10 @@
 	g_object_class_install_properties(object_class, LAST_PROPERTY, properties);
 }
 
-#if !GTK_CHECK_VERSION(3,0,0)
-/* 16 is the width of the icon, due to PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL */
-#define BLIST_WIDTH_OTHER_THAN_LABEL \
-	((PIDGIN_HIG_BOX_SPACE * 3) + 16)
-
-#define BLIST_WIDTH_PREF \
-	(PIDGIN_PREFS_ROOT "/blist/width")
-
-static void
-blist_width_changed_cb(const char *name,
-                       PurplePrefType type,
-                       gconstpointer val,
-                       gpointer data)
-{
-	PidginMiniDialog *self = PIDGIN_MINI_DIALOG(data);
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
-	guint blist_width = GPOINTER_TO_INT(val);
-	guint label_width = blist_width - BLIST_WIDTH_OTHER_THAN_LABEL;
-
-	gtk_widget_set_size_request(GTK_WIDGET(priv->title), label_width, -1);
-	gtk_widget_set_size_request(GTK_WIDGET(priv->desc), label_width, -1);
-}
-#endif
-
 static void
 pidgin_mini_dialog_init(PidginMiniDialog *self)
 {
 	GtkBox *self_box = GTK_BOX(self);
-#if !GTK_CHECK_VERSION(3,0,0)
-	guint blist_width = purple_prefs_get_int(BLIST_WIDTH_PREF);
-	guint label_width = blist_width - BLIST_WIDTH_OTHER_THAN_LABEL;
-#endif
 
 	PidginMiniDialogPrivate *priv = g_new0(PidginMiniDialogPrivate, 1);
 	self->priv = priv;
@@ -490,9 +462,6 @@
 	gtk_misc_set_alignment(GTK_MISC(priv->icon), 0, 0);
 
 	priv->title = GTK_LABEL(gtk_label_new(NULL));
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_widget_set_size_request(GTK_WIDGET(priv->title), label_width, -1);
-#endif
 	gtk_label_set_line_wrap(priv->title, TRUE);
 	gtk_label_set_selectable(priv->title, TRUE);
 	gtk_misc_set_alignment(GTK_MISC(priv->title), 0, 0);
@@ -501,9 +470,6 @@
 	gtk_box_pack_start(priv->title_box, GTK_WIDGET(priv->title), TRUE, TRUE, 0);
 
 	priv->desc = GTK_LABEL(gtk_label_new(NULL));
-#if !GTK_CHECK_VERSION(3,0,0)
-	gtk_widget_set_size_request(GTK_WIDGET(priv->desc), label_width, -1);
-#endif
 	gtk_label_set_line_wrap(priv->desc, TRUE);
 	gtk_misc_set_alignment(GTK_MISC(priv->desc), 0, 0);
 	gtk_label_set_selectable(priv->desc, TRUE);
@@ -512,11 +478,6 @@
 	 */
 	g_object_set(G_OBJECT(priv->desc), "no-show-all", TRUE, NULL);
 
-#if !GTK_CHECK_VERSION(3,0,0)
-	purple_prefs_connect_callback(self, BLIST_WIDTH_PREF,
-		blist_width_changed_cb, self);
-#endif
-
 	self->contents = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
 
 	priv->buttons = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
--- a/pidgin/pidginstock.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/pidginstock.c	Mon Dec 21 22:14:59 2015 -0600
@@ -388,13 +388,7 @@
 static void
 reload_settings(void)
 {
-#if GTK_CHECK_VERSION(3,0,0)
 	gtk_style_context_reset_widgets(gdk_screen_get_default());
-#else
-	GtkSettings *setting = NULL;
-	setting = gtk_settings_get_default();
-	gtk_rc_reset_styles(setting);
-#endif
 }
 
 /*****************************************************************************
@@ -522,13 +516,8 @@
 
 		if (stock_icons[i].dir == NULL) {
 			/* GTK+ Stock icon */
-#if GTK_CHECK_VERSION(3,0,0)
 			iconset = gtk_style_context_lookup_icon_set(gtk_widget_get_style_context(win),
 			                                            stock_icons[i].filename);
-#else
-			iconset = gtk_style_lookup_icon_set(gtk_widget_get_style(win),
-			                                    stock_icons[i].filename);
-#endif
 		} else {
 			filename = find_file(stock_icons[i].dir, stock_icons[i].filename);
 
--- a/pidgin/pidgintooltip.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/pidgintooltip.c	Mon Dec 21 22:14:59 2015 -0600
@@ -88,7 +88,6 @@
 	}
 }
 
-#if GTK_CHECK_VERSION(3,0,0)
 static gboolean
 pidgin_tooltip_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
 {
@@ -105,20 +104,6 @@
 	}
 	return FALSE;
 }
-#else
-static gboolean
-pidgin_tooltip_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
-{
-	if (pidgin_tooltip.paint_tooltip) {
-		cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget)));
-		gtk_paint_flat_box(widget->style, widget->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT,
-		                   NULL, widget, "tooltip", 0, 0, -1, -1);
-		pidgin_tooltip.paint_tooltip(widget, cr, data);
-		cairo_destroy(cr);
-	}
-	return FALSE;
-}
-#endif
 
 static GtkWidget*
 setup_tooltip_window(void)
@@ -149,17 +134,12 @@
 	GdkRectangle mon_size;
 	GtkWidget *tipwindow = pidgin_tooltip.tipwindow;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkDeviceManager *devmgr;
 	GdkDevice *dev;
 
 	devmgr = gdk_display_get_device_manager(gdk_display_get_default());
 	dev = gdk_device_manager_get_client_pointer(devmgr);
 	gdk_device_get_position(dev, &screen, &x, &y);
-#else
-	gdk_display_get_pointer(gdk_display_get_default(),
-		&screen, &x, &y, NULL);
-#endif
 
 	mon_num = gdk_screen_get_monitor_at_point(screen, x, y);
 	gdk_screen_get_monitor_geometry(screen, mon_num, &mon_size);
@@ -209,13 +189,8 @@
 	gtk_window_move(GTK_WINDOW(tipwindow), x, y);
 	gtk_widget_show(tipwindow);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	g_signal_connect(G_OBJECT(tipwindow), "draw",
 			G_CALLBACK(pidgin_tooltip_draw_cb), data);
-#else
-	g_signal_connect(G_OBJECT(tipwindow), "expose_event",
-			G_CALLBACK(pidgin_tooltip_expose_event), data);
-#endif
 
 	/* Hide the tooltip when the widget is destroyed */
 	sig = g_signal_connect(G_OBJECT(pidgin_tooltip.widget), "destroy", G_CALLBACK(pidgin_tooltip_destroy), NULL);
--- a/pidgin/pixmaps/emotes/default/24/scalable/shout.svg	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/pixmaps/emotes/default/24/scalable/shout.svg	Mon Dec 21 22:14:59 2015 -0600
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!-- Created with Inkscape (http://www.inkscape.org/) -->
+
 <svg
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:cc="http://creativecommons.org/ns#"
@@ -13,18 +14,38 @@
    height="24"
    id="svg2"
    sodipodi:version="0.32"
-   inkscape:version="0.46"
+   inkscape:version="0.48.5 r10040"
    version="1.0"
-   sodipodi:docbase="/home/hbons/Desktop/untitled folder 1"
    sodipodi:docname="shout.svg"
-   inkscape:export-filename="/home/hbons/Desktop/newstyle.png"
+   inkscape:export-filename="/home/steve/src/hg/pidgin/pidgin/pidgin/pixmaps/emotes/default/24/scalable/path1307.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90"
    inkscape:output_extension="org.inkscape.output.svg.inkscape">
   <defs
      id="defs4">
     <linearGradient
-       inkscape:collect="always"
+       id="linearGradient9179">
+      <stop
+         style="stop-color:#4f371a;stop-opacity:0.97254902;"
+         offset="0"
+         id="stop9181" />
+      <stop
+         style="stop-color:#ad8248;stop-opacity:0.96470588;"
+         offset="1"
+         id="stop9183" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9171">
+      <stop
+         style="stop-color:#edd400;stop-opacity:1;"
+         offset="0"
+         id="stop9173" />
+      <stop
+         style="stop-color:#ff9422;stop-opacity:1;"
+         offset="1"
+         id="stop9175" />
+    </linearGradient>
+    <linearGradient
        id="linearGradient3104">
       <stop
          style="stop-color:#eeeeec;stop-opacity:1;"
@@ -39,13 +60,13 @@
        inkscape:collect="always"
        xlink:href="#linearGradient3104"
        id="radialGradient3114"
-       cx="8.3343515"
-       cy="14.186539"
-       fx="8.3343515"
-       fy="14.186539"
+       cx="5.588686"
+       cy="17.183115"
+       fx="5.588686"
+       fy="17.183115"
        r="9.975256"
        gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9327,0.932656,-0.947494,-0.947449,33.02126,11.96667)" />
+       gradientTransform="matrix(-0.99399656,1.0132041,-1.0209557,-1.0015021,34.62613,12.445313)" />
     <filter
        inkscape:collect="always"
        x="-0.27879594"
@@ -79,6 +100,25 @@
        y1="16.037401"
        x2="10.698112"
        y2="15.449714" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9171"
+       id="radialGradient9177"
+       cx="11.806158"
+       cy="10.983024"
+       fx="11.806158"
+       fy="10.983024"
+       r="10.501386"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9179"
+       id="linearGradient9185"
+       x1="1.304772"
+       y1="10.983024"
+       x2="22.307544"
+       y2="10.983024"
+       gradientUnits="userSpaceOnUse" />
   </defs>
   <sodipodi:namedview
      id="base"
@@ -87,17 +127,18 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="22.4"
-     inkscape:cx="26.111884"
+     inkscape:zoom="15.839192"
+     inkscape:cx="11.494979"
      inkscape:cy="11.540302"
      inkscape:document-units="px"
      inkscape:current-layer="layer1"
      showgrid="true"
      fill="#fce94f"
-     inkscape:window-width="1440"
-     inkscape:window-height="845"
-     inkscape:window-x="0"
-     inkscape:window-y="0" />
+     inkscape:window-width="1012"
+     inkscape:window-height="834"
+     inkscape:window-x="-2"
+     inkscape:window-y="154"
+     inkscape:window-maximized="0" />
   <metadata
      id="metadata7">
     <rdf:RDF>
@@ -106,90 +147,95 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
       </cc:Work>
     </rdf:RDF>
   </metadata>
   <g
      inkscape:label="Layer 1"
      inkscape:groupmode="layer"
-     id="layer1">
+     id="layer1"
+     style="display:inline">
     <path
        sodipodi:type="arc"
-       style="opacity:0.64044944;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3405)"
+       style="opacity:0.64044949;fill:#2e3436;fill-opacity:1;stroke:none;filter:url(#filter3405)"
        id="path3140"
        sodipodi:cx="10.748654"
        sodipodi:cy="10.457643"
        sodipodi:rx="6.6449099"
        sodipodi:ry="2.3675451"
-       d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1  4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1  17.393564 10.457643 z"
+       d="m 17.393564,10.457643 a 6.6449099,2.3675451 0 1 1 -13.2898195,0 6.6449099,2.3675451 0 1 1 13.2898195,0 z"
        transform="matrix(1.2039291,0,0,1.055946,-0.9406174,8.4572942)" />
     <path
        sodipodi:type="arc"
-       style="opacity:1;fill:#edd400;fill-opacity:1;stroke:#cc6400;stroke-width:1.05276573;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="fill:url(#radialGradient9177);fill-opacity:1;stroke:url(#linearGradient9185);stroke-width:1.05226015;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        id="path1307"
        sodipodi:cx="11.806158"
        sodipodi:cy="10.983024"
        sodipodi:rx="9.975256"
        sodipodi:ry="9.975256"
-       d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1  1.8309021,10.983024 A 9.975256 9.975256 0 1 1  21.781414 10.983024 z"
-       transform="matrix(0.952236,0,0,0.952236,0.757713,1.541608)" />
+       d="m 21.781414,10.983024 a 9.975256,9.975256 0 1 1 -19.9505119,0 9.975256,9.975256 0 1 1 19.9505119,0 z"
+       transform="matrix(0.952236,0,0,0.952236,0.757713,1.541608)"
+       inkscape:export-xdpi="108.01644"
+       inkscape:export-ydpi="108.01644" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.79545455;fill:url(#radialGradient3114);fill-opacity:1.0;stroke:none;stroke-width:1.05274069;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="opacity:0.79545456;fill:url(#radialGradient3114);fill-opacity:1;stroke:none"
        id="path3102"
        sodipodi:cx="11.806158"
        sodipodi:cy="10.983024"
        sodipodi:rx="9.975256"
        sodipodi:ry="9.975256"
-       d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1  1.8309021,10.983024 A 9.975256 9.975256 0 1 1  21.781414 10.983024 z"
+       d="m 21.781414,10.983024 a 9.975256,9.975256 0 1 1 -19.9505119,0 9.975256,9.975256 0 1 1 19.9505119,0 z"
        transform="matrix(0.8019,0,0,0.801938,2.532654,3.191833)" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.64044944;fill:none;fill-opacity:1.0;stroke:#ffffff;stroke-width:1.17343897;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="opacity:0.64044949;fill:none;stroke:#ffffff;stroke-width:1.17343903;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        id="path2184"
        sodipodi:cx="11.806158"
        sodipodi:cy="10.983024"
        sodipodi:rx="9.975256"
        sodipodi:ry="9.975256"
-       d="M 21.781414 10.983024 A 9.975256 9.975256 0 1 1  1.8309021,10.983024 A 9.975256 9.975256 0 1 1  21.781414 10.983024 z"
+       d="m 21.781414,10.983024 a 9.975256,9.975256 0 1 1 -19.9505119,0 9.975256,9.975256 0 1 1 19.9505119,0 z"
        transform="matrix(0.852176,0,0,0.852216,1.93909,2.639626)" />
     <path
        style="fill:#eeeeec;fill-opacity:1;stroke:#fea523;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
-       d="M 11.499998,10 C 11.499998,11.38 10.379999,12.5 8.9999982,12.5 C 7.6199981,12.5 6.4999979,11.38 6.4999979,10 C 6.4999979,8.62 7.6199981,7.5 8.9999982,7.5 C 10.379999,7.5 11.499998,8.62 11.499998,10 z "
-       id="path3154" />
+       d="m 11.499998,10 c 0,1.38 -1.119999,2.5 -2.4999998,2.5 -1.3800001,0 -2.5000003,-1.12 -2.5000003,-2.5 0,-1.38 1.1200002,-2.5 2.5000003,-2.5 1.3800008,0 2.4999998,1.12 2.4999998,2.5 z"
+       id="path3154"
+       inkscape:connector-curvature="0" />
     <path
        sodipodi:type="arc"
-       style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="fill:#2e3436;fill-opacity:1;stroke:none"
        id="path2172"
        sodipodi:cx="9.7069349"
        sodipodi:cy="9.6526775"
        sodipodi:rx="1.0259361"
        sodipodi:ry="1.9413869"
-       d="M 10.732871 9.6526775 A 1.0259361 1.9413869 0 1 1  8.6809988,9.6526775 A 1.0259361 1.9413869 0 1 1  10.732871 9.6526775 z"
+       d="m 10.732871,9.6526775 a 1.0259361,1.9413869 0 1 1 -2.0518722,0 1.0259361,1.9413869 0 1 1 2.0518722,0 z"
        transform="matrix(0.9747196,0,0,0.7726436,0.5384595,3.0419202)" />
     <path
        sodipodi:type="arc"
-       style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#fea523;stroke-width:0.56451595;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="fill:#eeeeec;fill-opacity:1;stroke:#fea523;stroke-width:0.56451595;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        id="path3152"
        sodipodi:cx="9.7069349"
        sodipodi:cy="9.6526775"
        sodipodi:rx="1.0259361"
        sodipodi:ry="1.9413869"
-       d="M 10.732871 9.6526775 A 1.0259361 1.9413869 0 1 1  8.6809988,9.6526775 A 1.0259361 1.9413869 0 1 1  10.732871 9.6526775 z"
+       d="m 10.732871,9.6526775 a 1.0259361,1.9413869 0 1 1 -2.0518722,0 1.0259361,1.9413869 0 1 1 2.0518722,0 z"
        transform="matrix(2.4367992,0,0,1.2877391,-8.6538516,-2.4301299)" />
     <path
        sodipodi:type="arc"
-       style="opacity:1;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="fill:#2e3436;fill-opacity:1;stroke:none"
        id="path3148"
        sodipodi:cx="9.7069349"
        sodipodi:cy="9.6526775"
        sodipodi:rx="1.0259361"
        sodipodi:ry="1.9413869"
-       d="M 10.732871 9.6526775 A 1.0259361 1.9413869 0 1 1  8.6809988,9.6526775 A 1.0259361 1.9413869 0 1 1  10.732871 9.6526775 z"
+       d="m 10.732871,9.6526775 a 1.0259361,1.9413869 0 1 1 -2.0518722,0 1.0259361,1.9413869 0 1 1 2.0518722,0 z"
        transform="matrix(0.9747195,0,0,0.7726435,4.5384605,3.0419215)" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.64044949;fill:none;fill-opacity:1;stroke:#f57900;stroke-width:0.73675901;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="opacity:0.64044949;fill:none;stroke:#f57900;stroke-width:0.73675901;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        id="path2228"
        sodipodi:cx="8.3258924"
        sodipodi:cy="9.2232141"
@@ -202,7 +248,7 @@
        sodipodi:open="true" />
     <path
        sodipodi:type="arc"
-       style="opacity:0.64044949;fill:none;fill-opacity:1;stroke:#f57900;stroke-width:0.73675901;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="opacity:0.64044949;fill:none;stroke:#f57900;stroke-width:0.73675901;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
        id="path2230"
        sodipodi:cx="8.3258924"
        sodipodi:cy="9.2232141"
@@ -215,23 +261,23 @@
        sodipodi:open="true" />
     <path
        sodipodi:type="arc"
-       style="fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="fill:#2e3436;fill-opacity:1;stroke:none"
        id="path3259"
        sodipodi:cx="11.830358"
        sodipodi:cy="15.741072"
        sodipodi:rx="2.0982144"
        sodipodi:ry="1.7857143"
-       d="M 13.928572 15.741072 A 2.0982144 1.7857143 0 1 1  9.7321432,15.741072 A 2.0982144 1.7857143 0 1 1  13.928572 15.741072 z"
+       d="m 13.928572,15.741072 a 2.0982144,1.7857143 0 1 1 -4.1964288,0 2.0982144,1.7857143 0 1 1 4.1964288,0 z"
        transform="matrix(1.4297873,0,0,1.3999999,-4.9148947,-5.5374983)" />
     <path
        sodipodi:type="arc"
-       style="fill:url(#linearGradient2388);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       style="fill:url(#linearGradient2388);fill-opacity:1;stroke:none"
        id="path3261"
        sodipodi:cx="11.830358"
        sodipodi:cy="15.741072"
        sodipodi:rx="2.0982144"
        sodipodi:ry="1.7857143"
-       d="M 13.928572 15.741072 A 2.0982144 1.7857143 0 1 1  9.7321432,15.741072 A 2.0982144 1.7857143 0 1 1  13.928572 15.741072 z"
+       d="m 13.928572,15.741072 a 2.0982144,1.7857143 0 1 1 -4.1964288,0 2.0982144,1.7857143 0 1 1 4.1964288,0 z"
        transform="matrix(1.4297873,0,0,1.3999999,-4.9148947,-5.5374983)" />
   </g>
 </svg>
Binary file pidgin/pixmaps/emotes/default/24/shout.png has changed
--- a/pidgin/plugins/disco/gtkdisco.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/plugins/disco/gtkdisco.c	Mon Dec 21 22:14:59 2015 -0600
@@ -435,17 +435,9 @@
 disco_paint_tooltip(GtkWidget *tipwindow, cairo_t *cr, gpointer data)
 {
 	PangoLayout *layout = g_object_get_data(G_OBJECT(tipwindow), "tooltip-plugin");
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context = gtk_widget_get_style_context(tipwindow);
 	gtk_style_context_add_class(context, GTK_STYLE_CLASS_TOOLTIP);
 	gtk_render_layout(context, cr, 6, 6, layout);
-#else
-	gtk_paint_layout(gtk_widget_get_style(tipwindow),
-	                 gtk_widget_get_window(tipwindow),
-	                 GTK_STATE_NORMAL, FALSE,
-	                 NULL, tipwindow, "tooltip",
-	                 6, 6, layout);
-#endif
 	return TRUE;
 }
 
--- a/pidgin/plugins/gestures/stroke-draw.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/plugins/gestures/stroke-draw.c	Mon Dec 21 22:14:59 2015 -0600
@@ -57,21 +57,15 @@
 {
 	gint x, y;
 	struct gstroke_metrics *metrics;
-#if GTK_CHECK_VERSION(3,0,0)
 	GdkDeviceManager *devmgr;
 	GdkDevice *dev;
-#endif
 
 	g_return_if_fail(widget != NULL);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	devmgr = gdk_display_get_device_manager(gtk_widget_get_display(widget));
 	dev = gdk_device_manager_get_client_pointer(devmgr);
 	gdk_window_get_device_position(gtk_widget_get_window(widget),
 		dev, &x, &y, NULL);
-#else
-	gtk_widget_get_pointer(widget, &x, &y);
-#endif
 
 	if (last_mouse_position.invalid)
 		last_mouse_position.invalid = FALSE;
@@ -125,11 +119,7 @@
 	timer_id = 0;
 
 	if( event != NULL )
-#if GTK_CHECK_VERSION(3,0,0)
 		gdk_device_ungrab(gdk_event_get_device(event), event->button.time);
-#else
-		gdk_pointer_ungrab (event->button.time);
-#endif
 
 	if (gstroke_draw_strokes() && gstroke_disp != NULL) {
 	    /* get rid of the invisible stroke window */
@@ -167,16 +157,10 @@
 	  if (cursor == NULL)
 		  cursor = gdk_cursor_new(GDK_PENCIL);
 
-#if GTK_CHECK_VERSION(3,0,0)
       gdk_device_grab(gdk_event_get_device(event),
                       gtk_widget_get_window(widget), GDK_OWNERSHIP_WINDOW,
                       FALSE, GDK_BUTTON_RELEASE_MASK, cursor,
                       event->button.time);
-#else
-      gdk_pointer_grab (gtk_widget_get_window(widget), FALSE,
-			GDK_BUTTON_RELEASE_MASK, NULL, cursor,
-			event->button.time);
-#endif
       timer_id = g_timeout_add (GSTROKE_TIMEOUT_DURATION,
 				  gstroke_timeout, widget);
       return TRUE;
@@ -195,11 +179,7 @@
       last_mouse_position.invalid = TRUE;
       original_widget = NULL;
       g_source_remove (timer_id);
-#if GTK_CHECK_VERSION(3,0,0)
       gdk_device_ungrab(gdk_event_get_device(event), event->button.time);
-#else
-      gdk_pointer_ungrab (event->button.time);
-#endif
       timer_id = 0;
 
       {
@@ -341,8 +321,7 @@
 
   metrics = (struct gstroke_metrics*)g_object_get_data(G_OBJECT(widget),
 													   GSTROKE_METRICS);
-  if (metrics)
-    g_free (metrics);
+  g_free(metrics);
   g_object_steal_data(G_OBJECT(widget), GSTROKE_METRICS);
 }
 
--- a/pidgin/plugins/gestures/stroke.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/plugins/gestures/stroke.c	Mon Dec 21 22:14:59 2015 -0600
@@ -197,7 +197,7 @@
 #endif
 
   if (metrics->point_count < GSTROKE_MAX_POINTS) {
-    new_point_p = (p_point) g_malloc (sizeof (struct s_point));
+    new_point_p = g_malloc(sizeof (struct s_point));
 
     if (metrics->pointList == NULL) {
 
@@ -239,7 +239,7 @@
 	  if (((gint) iy) > metrics->max_y) metrics->max_y = (gint) iy;
 	  metrics->point_count++;
 
-	  new_point_p = (p_point) malloc (sizeof(struct s_point));
+	  new_point_p = malloc(sizeof(struct s_point));
 	}
       } else {  /* same thing, but for dely larger than delx case... */
 	ix = LAST_POINT->x;
@@ -263,7 +263,7 @@
 	  if (((gint) iy) > metrics->max_y) metrics->max_y = (gint) iy;
 	  metrics->point_count++;
 
-	  new_point_p = (p_point) malloc (sizeof(struct s_point));
+	  new_point_p = malloc(sizeof(struct s_point));
 	}
       }
 
--- a/pidgin/plugins/screencap.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/plugins/screencap.c	Mon Dec 21 22:14:59 2015 -0600
@@ -276,21 +276,6 @@
 	return FALSE;
 }
 
-#if !GTK_CHECK_VERSION(3,0,0)
-static gboolean
-scrncap_draw_window_expose(GtkWidget *widget, GdkEventExpose *event,
-	gpointer _surface)
-{
-	cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
-
-	scrncap_draw_window_paint(widget, cr, _surface);
-
-	cairo_destroy(cr);
-
-	return FALSE;
-}
-#endif
-
 static void
 scrncap_draw_window_response(GtkDialog *draw_window, gint response_id,
 	gpointer _webview)
@@ -372,13 +357,8 @@
 		G_CALLBACK(scrncap_draw_window_close), NULL);
 
 	draw_cursor = gdk_cursor_new(GDK_PENCIL);
-#if GTK_CHECK_VERSION(3,0,0)
 	g_object_set_data_full(G_OBJECT(draw_window), "draw-cursor",
 		draw_cursor, g_object_unref);
-#else
-	g_object_set_data_full(G_OBJECT(draw_window), "draw-cursor",
-		draw_cursor, (GDestroyNotify)gdk_cursor_unref);
-#endif
 
 	width = gdk_pixbuf_get_width(screen);
 	height = gdk_pixbuf_get_height(screen);
@@ -397,13 +377,8 @@
 
 	drawing_area = gtk_drawing_area_new();
 	gtk_widget_set_size_request(drawing_area, width, height);
-#if GTK_CHECK_VERSION(3,0,0)
 	g_signal_connect(G_OBJECT(drawing_area), "draw",
 		G_CALLBACK(scrncap_draw_window_paint), surface);
-#else
-	g_signal_connect(G_OBJECT(drawing_area), "expose_event",
-		G_CALLBACK(scrncap_draw_window_expose), surface);
-#endif
 	gtk_widget_add_events(drawing_area, GDK_BUTTON_PRESS_MASK |
 		GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_MOTION_MASK |
 		GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
@@ -423,9 +398,7 @@
 	scroll_area = pidgin_make_scrollable(box,
 		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC,
 		GTK_SHADOW_NONE, -1, -1);
-#if GTK_CHECK_VERSION(3,0,0)
 	g_object_set(G_OBJECT(scroll_area), "expand", TRUE, NULL);
-#endif
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(
 		GTK_DIALOG(draw_window))), scroll_area);
 
@@ -585,11 +558,7 @@
 
 	cursor = gdk_cursor_new(GDK_CROSSHAIR);
 	gdk_window_set_cursor(gdkwindow, cursor);
-#if GTK_CHECK_VERSION(3,0,0)
 	g_object_unref(cursor);
-#else
-	gdk_cursor_unref(cursor);
-#endif
 }
 
 static gboolean
--- a/pidgin/plugins/ticker/gtkticker.c	Mon Dec 21 21:29:48 2015 -0600
+++ b/pidgin/plugins/ticker/gtkticker.c	Mon Dec 21 22:14:59 2015 -0600
@@ -31,17 +31,12 @@
 static void gtk_ticker_init          (GtkTicker         *ticker);
 static void gtk_ticker_map           (GtkWidget        *widget);
 static void gtk_ticker_realize       (GtkWidget        *widget);
-#if GTK_CHECK_VERSION(3,0,0)
 static void gtk_ticker_get_preferred_width (GtkWidget *widget,
 		gint      *minimal_width,
 		gint      *natural_width);
 static void gtk_ticker_get_preferred_height (GtkWidget *widget,
 		gint      *minimal_height,
 		gint      *natural_height);
-#else
-static void gtk_ticker_size_request  (GtkWidget        *widget,
-		GtkRequisition   *requisition);
-#endif
 static void gtk_ticker_size_allocate (GtkWidget        *widget,
 		GtkAllocation    *allocation);
 static void gtk_ticker_add_real      (GtkContainer     *container,
@@ -82,12 +77,8 @@
 
 	widget_class->map = gtk_ticker_map;
 	widget_class->realize = gtk_ticker_realize;
-#if GTK_CHECK_VERSION(3,0,0)
 	widget_class->get_preferred_width = gtk_ticker_get_preferred_width;
 	widget_class->get_preferred_height = gtk_ticker_get_preferred_height;
-#else
-	widget_class->size_request = gtk_ticker_size_request;
-#endif
 	widget_class->size_allocate = gtk_ticker_size_allocate;
 
 	container_class->add = gtk_ticker_add_real;
@@ -262,11 +253,7 @@
 	GdkWindowAttr attributes;
 	gint attributes_mask;
 	GdkWindow *window;
-#if GTK_CHECK_VERSION(3,0,0)
 	GtkStyleContext *context;
-#else
-	GtkStyle *style;
-#endif
 	GtkAllocation allocation;
 
 	g_return_if_fail (widget != NULL);
@@ -282,36 +269,22 @@
 	attributes.height = allocation.height;
 	attributes.wclass = GDK_INPUT_OUTPUT;
 	attributes.visual = gtk_widget_get_visual (widget);
-#if !GTK_CHECK_VERSION(3,0,0)
-	attributes.colormap = gtk_widget_get_colormap (widget);
-#endif
 	attributes.event_mask = gtk_widget_get_events (widget);
 	attributes.event_mask |= GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK;
 
-#if GTK_CHECK_VERSION(3,0,0)
 	attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
-#else
-	attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-#endif
 
 	window = gdk_window_new (gtk_widget_get_parent_window (widget),
 			&attributes, attributes_mask);
 	gtk_widget_set_window (widget, window);
 	gdk_window_set_user_data (window, widget);
 
-#if GTK_CHECK_VERSION(3,0,0)
 	context = gtk_widget_get_style_context(widget);
 	gtk_style_context_add_class(context, GTK_STYLE_CLASS_BACKGROUND);
 	gtk_style_context_set_state(context, GTK_STATE_FLAG_NORMAL);
 	gtk_style_context_set_background(context, window);
-#else
-	style = gtk_style_attach (gtk_widget_get_style (widget), window);
-	gtk_widget_set_style (widget, style);
-	gtk_style_set_background (style, window, GTK_STATE_NORMAL);
-#endif
 }
 
-#if GTK_CHECK_VERSION(3,0,0)
 static void
 gtk_ticker_get_preferred_width (GtkWidget *widget,
                                 gint      *minimal_width,
@@ -384,47 +357,6 @@
 	*minimal_height = *natural_height = height;
 }
 
-#else
-
-static void gtk_ticker_size_request (GtkWidget *widget, GtkRequisition *requisition)
-{
-	GtkTicker *ticker;
-	GtkTickerChild *child;
-	GList *children;
-	GtkRequisition child_requisition;
-	guint border_width;
-
-	g_return_if_fail (widget != NULL);
-	g_return_if_fail (GTK_IS_TICKER (widget));
-	g_return_if_fail (requisition != NULL);
-
-	ticker = GTK_TICKER (widget);
-	requisition->width = 0;
-	requisition->height = 0;
-
-	children = ticker->children;
-	while (children)
-	{
-		child = children->data;
-		children = children->next;
-
-		if (gtk_widget_get_visible (child->widget))
-		{
-			gtk_widget_size_request (child->widget, &child_requisition);
-
-			requisition->height = MAX (requisition->height,
-					child_requisition.height);
-			requisition->width += child_requisition.width + ticker->spacing;
-		}
-	}
-	if ( requisition->width > ticker->spacing )
-		requisition->width -= ticker->spacing;
-
-	border_width = gtk_container_get_border_width (GTK_CONTAINER (ticker));
-	requisition->height += border_width * 2;
-	requisition->width += border_width * 2;
-}
-#endif
 
 static void gtk_ticker_compute_offsets (GtkTicker *ticker)
 {

mercurial