Hentet ny revision

Wed, 12 Feb 2014 21:08:49 +0100

author
Nicky Thomassen <nicky@aptget.dk>
date
Wed, 12 Feb 2014 21:08:49 +0100
changeset 35545
d4378d7dc742
parent 35544
aa3a6a3b4079 (current diff)
parent 35542
53d0fee7c971 (diff)
child 35546
310c7590b36f

Hentet ny revision

--- a/doc/Makefile.am	Wed Feb 12 21:04:03 2014 +0100
+++ b/doc/Makefile.am	Wed Feb 12 21:08:49 2014 +0100
@@ -13,14 +13,10 @@
 endif
 
 EXTRA_DIST = \
-	C-HOWTO.dox \
 	PERL-HOWTO.dox \
 	TCL-HOWTO.dox \
 	funniest_home_convos.txt \
 	finch.1.in \
 	gtkrc-2.0 \
 	pidgin.1.in \
-	plugin-i18n.dox \
-	plugin-ids.dox \
-	plugin-signals.dox \
 	the_penguin.txt
--- a/doc/reference/libpurple/Makefile.am	Wed Feb 12 21:04:03 2014 +0100
+++ b/doc/reference/libpurple/Makefile.am	Wed Feb 12 21:08:49 2014 +0100
@@ -84,6 +84,8 @@
 # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
 # e.g. content_files=running.sgml building.sgml changes-2.0.sgml
 content_files = version.xml \
+	plugin_i18n.xml \
+	plugin_ids.xml \
 	signals_account.xml \
 	signals_blist.xml \
 	signals_certificate.xml \
@@ -96,9 +98,11 @@
 	signals_jabber.xml \
 	signals_log.xml \
 	signals_notify.xml \
+	signals_plugin.xml \
 	signals_savedstatus.xml \
 	signals_sound.xml \
 	signals_xfer.xml \
+	tut_c_plugins.xml \
 	tut_signals.xml \
 	ui_ops.xml
 
--- a/finch/libgnt/gntprogressbar.h	Wed Feb 12 21:04:03 2014 +0100
+++ b/finch/libgnt/gntprogressbar.h	Wed Feb 12 21:08:49 2014 +0100
@@ -77,6 +77,7 @@
  * gnt_progress_bar_new:
  *
  * Create a new GntProgressBar
+ *
  * Returns: The new GntProgressBar
  */
 GntWidget *
--- a/libpurple/Makefile.am	Wed Feb 12 21:04:03 2014 +0100
+++ b/libpurple/Makefile.am	Wed Feb 12 21:08:49 2014 +0100
@@ -2,6 +2,8 @@
 		dbus-analyze-functions.py \
 		dbus-analyze-signals.py \
 		dbus-analyze-types.py \
+		enums.c.in \
+		enums.h.in \
 		glibcompat.h \
 		marshallers.list \
 		purple-notifications-example \
@@ -36,15 +38,6 @@
 
 SUBDIRS = $(GCONF_DIR) plugins protocols . tests example
 
-if USE_NSS
-AES_SOURCE = ciphers/aescipher.c
-AES_HEADER = aescipher.h
-endif
-if USE_GNUTLS
-AES_SOURCE = ciphers/aescipher.c
-AES_HEADER = aescipher.h
-endif
-
 purple_coresources = \
 	account.c \
 	accounts.c \
@@ -54,7 +47,7 @@
 	buddylist.c \
 	buddyicon.c \
 	certificate.c \
-	$(AES_SOURCE) \
+	ciphers/aescipher.c \
 	ciphers/descipher.c \
 	ciphers/des3cipher.c \
 	ciphers/hmaccipher.c \
@@ -206,7 +199,7 @@
 	enum-types.h
 
 purple_cipherheaders = \
-	$(AES_HEADER) \
+	aescipher.h \
 	descipher.h \
 	des3cipher.h \
 	hmaccipher.h \
--- a/libpurple/ciphers/aescipher.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/libpurple/ciphers/aescipher.c	Wed Feb 12 21:08:49 2014 +0100
@@ -41,7 +41,7 @@
 #  include <pk11pub.h>
 #  include <prerror.h>
 #else
-#  error "No GnuTLS or NSS support"
+#  warning "No GnuTLS or NSS support"
 #endif
 
 /* 128bit */
@@ -438,7 +438,8 @@
 #elif defined(PURPLE_AES_USE_NSS)
 	encrypt_func = purple_aes_cipher_nss_encrypt;
 #else
-#  error "No matching encrypt_func"
+	purple_debug_error("cipher-aes", "No matching encrypt_func\n");
+	return -1;
 #endif
 
 	succ = encrypt_func(input_padded, output, out_len, priv->iv,
@@ -482,7 +483,8 @@
 #elif defined(PURPLE_AES_USE_NSS)
 	decrypt_func = purple_aes_cipher_nss_decrypt;
 #else
-#  error "No matching encrypt_func"
+	purple_debug_error("cipher-aes", "No matching decrypt_func\n");
+	return -1;
 #endif
 
 	succ = decrypt_func(input, output, in_len, priv->iv, priv->key,
--- a/libpurple/cmds.h	Wed Feb 12 21:04:03 2014 +0100
+++ b/libpurple/cmds.h	Wed Feb 12 21:08:49 2014 +0100
@@ -256,6 +256,7 @@
  * purple_cmds_get_handle:
  *
  * Get the handle for the commands API
+ *
  * Returns: The handle
  */
 gpointer purple_cmds_get_handle(void);
--- a/pidgin/Makefile.am	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/Makefile.am	Wed Feb 12 21:08:49 2014 +0100
@@ -144,6 +144,8 @@
 pidgin_SOURCES = \
 	pidgin.c
 
+noinst_HEADERS= gtkinternal.h
+
 libpidginincludedir=$(includedir)/pidgin
 libpidgininclude_HEADERS = \
 	$(libpidgin_la_headers)
--- a/pidgin/gtk3compat.h	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtk3compat.h	Wed Feb 12 21:08:49 2014 +0100
@@ -31,6 +31,8 @@
  * Also, any public API should not depend on this file.
  */
 
+#include <gtk/gtk.h>
+
 #if !GTK_CHECK_VERSION(3,2,0)
 
 #define GTK_FONT_CHOOSER GTK_FONT_SELECTION_DIALOG
@@ -58,6 +60,90 @@
 #define GDK_IS_QUARTZ_WINDOW(window) TRUE
 #endif
 
+static inline GdkPixbuf *
+gdk_pixbuf_get_from_surface(cairo_surface_t *surface, gint src_x, gint src_y,
+	gint width, gint height)
+{
+	GdkPixmap *pixmap;
+	GdkPixbuf *pixbuf;
+	cairo_t *cr;
+
+	pixmap = gdk_pixmap_new(NULL, width, height, 24);
+
+	cr = gdk_cairo_create(pixmap);
+	cairo_set_source_surface(cr, surface, -src_x, -src_y);
+	cairo_paint(cr);
+	cairo_destroy(cr);
+
+	pixbuf = gdk_pixbuf_get_from_drawable(NULL, pixmap,
+		gdk_drawable_get_colormap(pixmap), 0, 0, 0, 0, width, height);
+
+	g_object_unref(pixmap);
+
+	return pixbuf;
+}
+
+static inline GtkWidget *
+gtk_box_new(GtkOrientation orientation, gint spacing)
+{
+	g_return_val_if_fail(orientation == GTK_ORIENTATION_HORIZONTAL ||
+		orientation == GTK_ORIENTATION_VERTICAL, NULL);
+
+	if (orientation == GTK_ORIENTATION_HORIZONTAL)
+		return gtk_hbox_new(FALSE, spacing);
+	else /* GTK_ORIENTATION_VERTICAL */
+		return gtk_vbox_new(FALSE, spacing);
+}
+
+static inline GtkWidget *
+gtk_separator_new(GtkOrientation orientation)
+{
+	g_return_val_if_fail(orientation == GTK_ORIENTATION_HORIZONTAL ||
+		orientation == GTK_ORIENTATION_VERTICAL, NULL);
+
+	if (orientation == GTK_ORIENTATION_HORIZONTAL)
+		return gtk_hseparator_new();
+	else /* GTK_ORIENTATION_VERTICAL */
+		return gtk_vseparator_new();
+}
+
+static inline GtkWidget *
+gtk_button_box_new(GtkOrientation orientation)
+{
+	g_return_val_if_fail(orientation == GTK_ORIENTATION_HORIZONTAL ||
+		orientation == GTK_ORIENTATION_VERTICAL, NULL);
+
+	if (orientation == GTK_ORIENTATION_HORIZONTAL)
+		return gtk_hbutton_box_new();
+	else /* GTK_ORIENTATION_VERTICAL */
+		return gtk_vbutton_box_new();
+}
+
+static inline GtkWidget *
+gtk_paned_new(GtkOrientation orientation)
+{
+	g_return_val_if_fail(orientation == GTK_ORIENTATION_HORIZONTAL ||
+		orientation == GTK_ORIENTATION_VERTICAL, NULL);
+
+	if (orientation == GTK_ORIENTATION_HORIZONTAL)
+		return gtk_hpaned_new();
+	else /* GTK_ORIENTATION_VERTICAL */
+		return gtk_vpaned_new();
+}
+
+static inline GtkWidget *
+gtk_scale_new_with_range(GtkOrientation orientation, gdouble min, gdouble max,
+	gdouble step)
+{
+	g_return_val_if_fail(orientation == GTK_ORIENTATION_HORIZONTAL ||
+		orientation == GTK_ORIENTATION_VERTICAL, NULL);
+
+	if (orientation == GTK_ORIENTATION_HORIZONTAL)
+		return gtk_hscale_new_with_range(min, max, step);
+	else /* GTK_ORIENTATION_VERTICAL */
+		return gtk_vscale_new_with_range(min, max, step);
+}
+
 #if !GTK_CHECK_VERSION(2,24,0)
 
 #define gdk_x11_set_sm_client_id gdk_set_sm_client_id
--- a/pidgin/gtkaccount.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkaccount.c	Wed Feb 12 21:08:49 2014 +0100
@@ -619,7 +619,7 @@
 	gtk_widget_show(dialog->login_frame);
 
 	/* Main vbox */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 	gtk_widget_show(vbox);
 
@@ -807,7 +807,7 @@
 	gtk_widget_show(dialog->user_frame);
 
 	/* Main vbox */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 	gtk_widget_show(vbox);
 
@@ -827,7 +827,7 @@
 	gtk_widget_show(dialog->icon_check);
 	gtk_box_pack_start(GTK_BOX(vbox), dialog->icon_check, FALSE, FALSE, 0);
 
-	dialog->icon_hbox = hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	dialog->icon_hbox = hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_widget_set_sensitive(hbox, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->icon_check)));
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	gtk_widget_show(hbox);
@@ -850,11 +850,11 @@
 	purple_imgstore_unref(dialog->icon_img);
 	dialog->icon_img = NULL;
 
-	vbox2 = gtk_vbox_new(FALSE, 0);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
 	gtk_widget_show(vbox2);
 
-	hbox2 = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox2), hbox2, FALSE, FALSE, PIDGIN_HIG_BORDER);
 	gtk_widget_show(hbox2);
 
@@ -952,7 +952,7 @@
 	account = dialog->account;
 
 	/* Main vbox */
-	dialog->protocol_frame = vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	dialog->protocol_frame = vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BORDER);
 	gtk_notebook_insert_page(GTK_NOTEBOOK(dialog->notebook), vbox,
 			gtk_label_new_with_mnemonic(_("Ad_vanced")), 1);
@@ -1258,7 +1258,7 @@
 		gtk_widget_destroy(dialog->proxy_frame);
 
 	/* Main vbox */
-	dialog->proxy_frame = vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	dialog->proxy_frame = vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_add(GTK_CONTAINER(parent), vbox);
 	gtk_widget_show(vbox);
 
@@ -1268,7 +1268,7 @@
 	add_pref_box(dialog, vbox, _("Proxy _type:"), dialog->proxy_dropdown);
 
 	/* Setup the second vbox, which may be hidden at times. */
-	dialog->proxy_vbox = vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	dialog->proxy_vbox = vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, PIDGIN_HIG_BORDER);
 	gtk_widget_show(vbox2);
 
@@ -1355,7 +1355,7 @@
 	}
 
 	if (!dialog->voice_frame) {
-		dialog->voice_frame = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+		dialog->voice_frame = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 		gtk_container_set_border_width(GTK_CONTAINER(dialog->voice_frame),
 										PIDGIN_HIG_BORDER);
 
@@ -1776,7 +1776,7 @@
 	gtk_widget_show(GTK_WIDGET(notebook));
 
 	/* Setup the inner vbox */
-	dialog->top_vbox = vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	dialog->top_vbox = vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BORDER);
 	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox,
 			gtk_label_new_with_mnemonic(_("_Basic")));
@@ -1802,7 +1802,7 @@
 	add_protocol_options(dialog);
 
 	/* Setup the page with 'Proxy'. */
-	dbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	dbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_container_set_border_width(GTK_CONTAINER(dbox), PIDGIN_HIG_BORDER);
 	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dbox,
 			gtk_label_new_with_mnemonic(_("P_roxy")));
--- a/pidgin/gtkblist.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkblist.c	Wed Feb 12 21:08:49 2014 +0100
@@ -998,13 +998,13 @@
 	                               PIDGIN_HIG_BOX_SPACE);
 	gtk_window_set_role(GTK_WINDOW(data->window), window_role);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(data->window))),
 	                  hbox);
 	gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
 	gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
 
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(hbox), vbox);
 
 	label = gtk_label_new(label_text);
@@ -1020,7 +1020,7 @@
 			callback_func, filter_func, data);
 	pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_ccount"), data->sg, data->account_menu, TRUE, NULL);
 
-	data->vbox = GTK_BOX(gtk_vbox_new(FALSE, 5));
+	data->vbox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 5));
 	gtk_container_set_border_width(GTK_CONTAINER(data->vbox), 0);
 	gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(data->vbox), FALSE, FALSE, 0);
 
@@ -5423,7 +5423,7 @@
 	char *markup;
 	char *description;
 
-	hbox = gtk_hbox_new(FALSE, 6);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
 	g_object_set_data(G_OBJECT(hbox), OBJECT_DATA_KEY_ACCOUNT, account);
 
 	pack_prpl_icon_start(hbox, account);
@@ -5650,7 +5650,7 @@
 static GtkWidget *
 kiosk_page()
 {
-	GtkWidget *ret = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	GtkWidget *ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	GtkWidget *label;
 	GtkWidget *entry;
 	GtkWidget *bbox;
@@ -5677,7 +5677,7 @@
 	label = gtk_label_new(" ");
 	gtk_box_pack_start(GTK_BOX(ret), label, FALSE, FALSE, 0);
 
-	bbox = gtk_hbutton_box_new();
+	bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
 	button = gtk_button_new_with_mnemonic(_("_Login"));
 	gtk_box_pack_start(GTK_BOX(ret), bbox, FALSE, FALSE, 0);
 	gtk_container_add(GTK_CONTAINER(bbox), button);
@@ -5912,7 +5912,7 @@
 	GTK_WINDOW(gtkblist->window)->allow_shrink = TRUE;
 #endif
 
-	gtkblist->main_vbox = gtk_vbox_new(FALSE, 0);
+	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);
 
@@ -5988,7 +5988,7 @@
 	gtk_label_set_markup(GTK_LABEL(label), pretty);
 	g_free(pretty);
 	gtk_notebook_append_page(GTK_NOTEBOOK(gtkblist->notebook),label, NULL);
-	gtkblist->vbox = gtk_vbox_new(FALSE, 0);
+	gtkblist->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_notebook_append_page(GTK_NOTEBOOK(gtkblist->notebook), gtkblist->vbox, NULL);
 	gtk_widget_show_all(gtkblist->notebook);
 	pidgin_blist_select_notebook_page(gtkblist);
@@ -6033,7 +6033,7 @@
 
 	ebox = gtk_event_box_new();
 	gtk_box_pack_start(GTK_BOX(gtkblist->vbox), ebox, FALSE, FALSE, 0);
-	gtkblist->headline = gtk_hbox_new(FALSE, 3);
+	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);
@@ -6155,7 +6155,7 @@
 		pidgin_make_scrollable(gtkblist->treeview, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_NONE, -1, -1), 
 		TRUE, TRUE, 0);
 
-	sep = gtk_hseparator_new();
+	sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sep, FALSE, FALSE, 0);
 
 	gtkblist->scrollbook = pidgin_scroll_book_new();
--- a/pidgin/gtkcertmgr.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkcertmgr.c	Wed Feb 12 21:08:49 2014 +0100
@@ -30,6 +30,7 @@
 #include "notify.h"
 #include "request.h"
 
+#include "gtk3compat.h"
 #include "gtkblist.h"
 #include "gtkutils.h"
 
@@ -410,9 +411,8 @@
 	/* Create a struct to store context information about this window */
 	tpm_dat = g_new0(tls_peers_mgmt_data, 1);
 
-	tpm_dat->mgmt_widget = mgmt_widget =
-		gtk_hbox_new(FALSE, /* Non-homogeneous */
-			     PIDGIN_HIG_BOX_SPACE);
+	tpm_dat->mgmt_widget = mgmt_widget = gtk_box_new(
+		GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(mgmt_widget),
 		PIDGIN_HIG_BOX_SPACE);
 	gtk_widget_show(mgmt_widget);
@@ -471,7 +471,7 @@
 	tls_peers_mgmt_repopulate_list();
 
 	/* Right-hand side controls box */
-	bbox = gtk_vbutton_box_new();
+	bbox = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
 	gtk_box_pack_end(GTK_BOX(mgmt_widget), bbox,
 			 FALSE, FALSE, /* Do not take up space */
 			 0);
--- a/pidgin/gtkconv.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkconv.c	Wed Feb 12 21:08:49 2014 +0100
@@ -230,6 +230,9 @@
 	float scale;
 
 	col = g_array_index(gtkconv->nick_colors, GdkColor, g_str_hash(name) % gtkconv->nick_colors->len);
+
+	g_return_val_if_fail(style != NULL, &col);
+
 #if GTK_CHECK_VERSION(3,0,0)
 	gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &rgba);
 	scale = (1 - LUMINANCE(rgba)) * ((float)0xffff / MAX(MAX(col.red, col.blue), col.green));
@@ -955,13 +958,13 @@
 		gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BOX_SPACE);
 
 		/* Setup the inner hbox and put the dialog's icon in it. */
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 		gtk_container_add(GTK_CONTAINER(vbox), hbox);
 		gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
 		gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
 
 		/* Setup the right vbox. */
-		vbox = gtk_vbox_new(FALSE, 0);
+		vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 		gtk_container_add(GTK_CONTAINER(hbox), vbox);
 
 		/* Put our happy label in it. */
@@ -974,7 +977,7 @@
 		gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
 
 		/* hbox for the table, and to give it some spacing on the left. */
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_container_add(GTK_CONTAINER(vbox), hbox);
 
 		/* Setup the table we're going to use to lay stuff out. */
@@ -4008,7 +4011,7 @@
 	*group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem));
 
 	/* Do some evil, see some evil, speak some evil. */
-	box = gtk_hbox_new(FALSE, 0);
+	box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 
 	label = gtk_bin_get_child(GTK_BIN(menuitem));
 	g_object_ref(label);
@@ -5048,7 +5051,7 @@
 		GtkWidget *hbox, *label;
 		PidginChatPane *gtkchat = gtkconv->u.chat;
 
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 		label = gtk_label_new(_("Topic:"));
@@ -5113,7 +5116,7 @@
 	PurpleConversation *conv = gtkconv->active_conv;
 
 	/* Build the right pane. */
-	lbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	lbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE);
 	gtk_widget_show(lbox);
 
@@ -5229,7 +5232,8 @@
 pidgin_conv_end_quickfind(PidginConversation *gtkconv)
 {
 #if GTK_CHECK_VERSION(3,0,0)
-	gtk_widget_override_background_color(gtkconv->quickfind_entry, GTK_STATE_FLAG_NORMAL, NULL);
+	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
@@ -5249,18 +5253,15 @@
 		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)
-				gtk_widget_override_background_color(gtkconv->quickfind_entry, GTK_STATE_FLAG_NORMAL, NULL);
+				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)
-				GdkRGBA col;
-				col.red = 1.0;
-				col.green = 0xafff/(double)0xffff;
-				col.blue = 0xafff/(double)0xffff;
-				col.alpha = 1.0;
-				gtk_widget_override_background_color(gtkconv->quickfind_entry, GTK_STATE_FLAG_NORMAL, &col);
+				GtkStyleContext *context = gtk_widget_get_style_context(gtkconv->quickfind_entry);
+				gtk_style_context_add_class(context, "not-found");
 #else
 				GdkColor col;
 				col.red = 0xffff;
@@ -5282,8 +5283,19 @@
 static void
 pidgin_conv_setup_quickfind(PidginConversation *gtkconv, GtkWidget *container)
 {
-	GtkWidget *widget = gtk_hbox_new(FALSE, 0);
+	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[] =
+		".not-found {"
+			"color: @error_fg_color;"
+			"text-shadow: 0 1px @error_text_shadow;"
+			"background-image: none;"
+			"background-color: @error_bg_color;"
+		"}";
+#endif
 
 	gtk_box_pack_start(GTK_BOX(container), widget, FALSE, FALSE, 0);
 
@@ -5296,6 +5308,14 @@
 
 	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;
@@ -5555,14 +5575,14 @@
 	int buddyicon_size = 0;
 
 	/* Setup the top part of the pane */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_widget_show(vbox);
 
 	/* Setup the info pane */
 	event_box = gtk_event_box_new();
 	gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), FALSE);
 	gtk_widget_show(event_box);
-	gtkconv->infopane_hbox = gtk_hbox_new(FALSE, 0);
+	gtkconv->infopane_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_box_pack_start(GTK_BOX(vbox), event_box, FALSE, FALSE, 0);
 	gtk_container_add(GTK_CONTAINER(event_box), gtkconv->infopane_hbox);
 	gtk_widget_show(gtkconv->infopane_hbox);
@@ -5592,13 +5612,13 @@
 		   for both the buddy list and the chat window, but PidginConversation
 		   is pretty much stuck until 3.0. */
 		GtkWidget *sizing_vbox;
-		sizing_vbox = gtk_vbox_new(FALSE, 0);
+		sizing_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 		gtk_widget_set_size_request(sizing_vbox, -1, BUDDYICON_SIZE_MIN);
 		gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), sizing_vbox, FALSE, FALSE, 0);
 		gtk_widget_show(sizing_vbox);
 	}
 	else {
-		gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0);
+		gtkconv->u.im->icon_container = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
 		if ((buddy = purple_blist_find_buddy(purple_conversation_get_account(conv),
 						purple_conversation_get_name(conv))) != NULL) {
@@ -5655,7 +5675,7 @@
 		setup_chat_topic(gtkconv, vbox);
 
 		/* Add the gtkwebview frame */
-		hpaned = gtk_hpaned_new();
+		hpaned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
 		gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0);
 		gtk_widget_show(hpaned);
 		gtk_paned_pack1(GTK_PANED(hpaned), frame, TRUE, TRUE);
@@ -5679,7 +5699,7 @@
 
 	pidgin_conv_setup_quickfind(gtkconv, vbox);
 
-	gtkconv->lower_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	gtkconv->lower_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, FALSE, FALSE, 0);
 	gtk_widget_show(gtkconv->lower_hbox);
 
@@ -6044,7 +6064,7 @@
 	g_signal_connect(gtkconv->webview, "style-set", G_CALLBACK(set_typing_font), gtkconv);
 
 	/* Setup the container for the tab. */
-	gtkconv->tab_cont = tab_cont = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	gtkconv->tab_cont = tab_cont = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	g_object_set_data(G_OBJECT(tab_cont), "PidginConversation", gtkconv);
 	gtk_container_set_border_width(GTK_CONTAINER(tab_cont), PIDGIN_HIG_BOX_SPACE);
 	gtk_container_add(GTK_CONTAINER(tab_cont), pane);
@@ -9165,13 +9185,13 @@
 	img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_WARNING,
 	                               gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE));
 	/* Setup the inner hbox and put the dialog's icon in it. */
-	hbox = gtk_hbox_new(FALSE, 12);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
 	gtk_container_add(GTK_CONTAINER(vbox), hbox);
 	gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
 	gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
 
 	/* Setup the right vbox. */
-	vbox = gtk_vbox_new(FALSE, 12);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
 	gtk_container_add(GTK_CONTAINER(hbox), vbox);
 
 	label = gtk_label_new(_("You have unread messages. Are you sure you want to close the window?"));
@@ -10307,7 +10327,7 @@
 	g_signal_connect(G_OBJECT(win->notebook), "button_release_event",
 	                 G_CALLBACK(notebook_release_cb), win);
 
-	testidea = gtk_vbox_new(FALSE, 0);
+	testidea = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
 	/* Setup the menubar. */
 	menubar = setup_menubar(win);
@@ -10499,7 +10519,7 @@
 #endif
 	gtk_widget_set_name(gtkconv->tab_label, "tab-label");
 
-	gtkconv->menu_tabby = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	gtkconv->menu_tabby = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtkconv->menu_label = gtk_label_new(tmp_lab);
 	gtk_box_pack_start(GTK_BOX(gtkconv->menu_tabby), gtkconv->menu_icon, FALSE, FALSE, 0);
 
@@ -10574,9 +10594,9 @@
 #endif
 
 	if (angle)
-		gtkconv->tabby = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		gtkconv->tabby = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	else
-		gtkconv->tabby = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		gtkconv->tabby = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_widget_set_name(gtkconv->tabby, "tab-container");
 
 	/* select the correct ordering for verticle tabs */
--- a/pidgin/gtkdebug.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkdebug.c	Wed Feb 12 21:08:49 2014 +0100
@@ -464,7 +464,7 @@
 	handle = pidgin_debug_get_handle();
 
 	/* Setup the vbox */
-	vbox = gtk_vbox_new(FALSE, 0);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_container_add(GTK_CONTAINER(win->window), vbox);
 
 	if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/toolbar")) {
--- a/pidgin/gtkdialogs.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkdialogs.c	Wed Feb 12 21:08:49 2014 +0100
@@ -1020,7 +1020,7 @@
 	gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(window))),
 	                               PIDGIN_HIG_BOX_SPACE);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(window))), hbox);
 	img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_COOL, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE));
 	gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
--- a/pidgin/gtklog.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtklog.c	Wed Feb 12 21:08:49 2014 +0100
@@ -587,7 +587,7 @@
 
 	/* Icon *************/
 	if (icon != NULL) {
-		title_box = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		title_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_container_set_border_width(GTK_CONTAINER(title_box), PIDGIN_HIG_BOX_SPACE);
 		gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(lv->window))),
 		                   title_box, FALSE, FALSE, 0);
@@ -607,7 +607,7 @@
 	g_free(text);
 
 	/* Pane *************/
-	pane = gtk_hpaned_new();
+	pane = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_container_set_border_width(GTK_CONTAINER(pane), PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(lv->window))),
 	                   pane, TRUE, TRUE, 0);
@@ -652,7 +652,7 @@
 	}
 
 	/* A fancy little box ************/
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_paned_add2(GTK_PANED(pane), vbox);
 
 	/* Viewer ************/
@@ -663,7 +663,7 @@
 	gtk_widget_show(frame);
 
 	/* Search box **********/
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	lv->entry = gtk_entry_new();
 	gtk_box_pack_start(GTK_BOX(hbox), lv->entry, TRUE, TRUE, 0);
--- a/pidgin/gtkmedia.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkmedia.c	Wed Feb 12 21:08:49 2014 +0100
@@ -331,7 +331,7 @@
 	XSetErrorHandler(pidgin_x_error_handler);
 #endif
 
-	vbox = gtk_vbox_new(FALSE, 0);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_container_add(GTK_CONTAINER(media), vbox);
 
 	media->priv->statusbar = gtk_statusbar_new();
@@ -345,7 +345,7 @@
 	gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar,
 			FALSE, TRUE, 0);
 
-	media->priv->display = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	media->priv->display = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(media->priv->display),
 			PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), media->priv->display,
@@ -706,8 +706,8 @@
 		g_return_val_if_reached(NULL);
 
 	/* Setup widget structure */
-	volume_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
-	progress_parent = gtk_vbox_new(FALSE, 0);
+	volume_widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
+	progress_parent = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_box_pack_start(GTK_BOX(volume_widget),
 			progress_parent, TRUE, TRUE, 0);
 
@@ -755,7 +755,7 @@
 	if (gtkmedia->priv->recv_widget == NULL
 			&& type & (PURPLE_MEDIA_RECV_VIDEO |
 			PURPLE_MEDIA_RECV_AUDIO)) {
-		recv_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		recv_widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
 				recv_widget, TRUE, TRUE, 0);
 		gtk_widget_show(recv_widget);
@@ -765,10 +765,10 @@
 	if (gtkmedia->priv->send_widget == NULL
 			&& type & (PURPLE_MEDIA_SEND_VIDEO |
 			PURPLE_MEDIA_SEND_AUDIO)) {
-		send_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		send_widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
 				send_widget, FALSE, TRUE, 0);
-		button_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		button_widget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_box_pack_end(GTK_BOX(recv_widget), button_widget,
 				FALSE, TRUE, 0);
 		gtk_widget_show(send_widget);
--- a/pidgin/gtkmenutray.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkmenutray.c	Wed Feb 12 21:08:49 2014 +0100
@@ -23,6 +23,7 @@
 
 #include "gtkmenutray.h"
 
+#include "glibcompat.h"
 #include "gtk3compat.h"
 
 /******************************************************************************
@@ -155,10 +156,14 @@
 	GtkSettings *settings;
 	gint height = -1;
 
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+	/* Gtk3 docs says, it should be replaced with gtk_widget_set_hexpand and
+	 * gtk_widget_set_halign. But it doesn't seems to work. */
 	gtk_menu_item_set_right_justified(GTK_MENU_ITEM(menu_tray), TRUE);
+G_GNUC_END_IGNORE_DEPRECATIONS
 
 	if(!GTK_IS_WIDGET(menu_tray->tray))
-		menu_tray->tray = gtk_hbox_new(FALSE, 0);
+		menu_tray->tray = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 
 	settings =
 		gtk_settings_get_for_screen(gtk_widget_get_screen(widget));
--- a/pidgin/gtknotify.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtknotify.c	Wed Feb 12 21:08:49 2014 +0100
@@ -30,6 +30,7 @@
 #include "pidginstock.h"
 #include "util.h"
 
+#include "gtk3compat.h"
 #include "gtkblist.h"
 #include "gtknotify.h"
 #include "gtkpounce.h"
@@ -584,7 +585,7 @@
 	gtk_container_set_border_width(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
 	                               PIDGIN_HIG_BOX_SPACE);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
 	                  hbox);
 
--- a/pidgin/gtkplugin.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkplugin.c	Wed Feb 12 21:08:49 2014 +0100
@@ -741,7 +741,7 @@
 static GtkWidget *
 create_details()
 {
-	GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, 3));
+	GtkBox *vbox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 3));
 	GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 	GtkWidget *label, *view, *website_button;
 
--- a/pidgin/gtkpluginpref.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkpluginpref.c	Wed Feb 12 21:08:49 2014 +0100
@@ -24,9 +24,11 @@
 
 #include "debug.h"
 #include "internal.h"
+#include "pidgin.h"
 #include "pluginpref.h"
 #include "prefs.h"
 
+#include "gtk3compat.h"
 #include "gtkpluginpref.h"
 #include "gtkprefs.h"
 #include "gtkutils.h"
@@ -102,7 +104,7 @@
 				GtkWidget *webview;
 				GtkWidget *frame;
 
-				box = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+				box = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 
 				gtk_widget_show(box);
 				gtk_box_pack_start(GTK_BOX(parent), box, FALSE, FALSE, 0);
@@ -115,7 +117,7 @@
 				if(sg)
 					gtk_size_group_add_widget(sg, gtk_label);
 
-				hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+				hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 				gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
 				gtk_widget_show(hbox);
 
@@ -200,7 +202,7 @@
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-	parent = ret = gtk_vbox_new(FALSE, 16);
+	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
--- a/pidgin/gtkpounce.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkpounce.c	Wed Feb 12 21:08:49 2014 +0100
@@ -31,6 +31,7 @@
 #include "sound.h"
 #include "util.h"
 
+#include "gtk3compat.h"
 #include "gtkblist.h"
 #include "gtkdialogs.h"
 #include "gtkpounce.h"
@@ -555,14 +556,14 @@
 	vbox1 = gtk_dialog_get_content_area(GTK_DIALOG(window));
 
 	/* Create the vbox that will contain all the prefs stuff. */
-	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox1), vbox2, TRUE, TRUE, 0);
 
 	/* Create the "Pounce on Whom" frame. */
 	frame = pidgin_make_frame(vbox2, _("Pounce on Whom"));
 
 	/* Account: */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 	gtk_widget_show(hbox);
 
@@ -582,7 +583,7 @@
 	pidgin_set_accessible_label (dialog->account_menu, label);
 
 	/* Buddy: */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(frame), hbox, FALSE, FALSE, 0);
 	gtk_widget_show(hbox);
 
--- a/pidgin/gtkprefs.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkprefs.c	Wed Feb 12 21:08:49 2014 +0100
@@ -1405,7 +1405,7 @@
 {
 	GtkWidget *label;
 	GtkWidget *combo_box = NULL;
-	GtkWidget *themesel_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	GtkWidget *themesel_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 
 	label = gtk_label_new(label_str);
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -1436,7 +1436,7 @@
 	GtkWidget *themesel_hbox;
 	GtkCellRenderer *cell_rend;
 
-	themesel_hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	themesel_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), themesel_hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new(label_str);
@@ -1467,7 +1467,7 @@
 	GtkSizeGroup *label_sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 	GtkSizeGroup *combo_sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
 
 	vbox = pidgin_make_frame(ret, _("Theme Selections"));
@@ -1723,7 +1723,7 @@
 	GtkSizeGroup *sg;
 	GList *names = NULL;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
@@ -1763,7 +1763,7 @@
 	 * Connect a signal to the above preference.  When conversations are not
 	 * shown in a tabbed window then all tabbing options should be disabled.
 	 */
-	vbox2 = gtk_vbox_new(FALSE, 9);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 9);
 	gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0);
 	purple_prefs_connect_callback(prefs, PIDGIN_PREFS_ROOT "/conversations/tabs",
 	                            conversation_usetabs_cb, vbox2);
@@ -1840,7 +1840,7 @@
 	GtkWidget *checkbox;
 	GtkWidget *spin_button;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
 
 	vbox = pidgin_make_frame(ret, _("Conversations"));
@@ -1876,7 +1876,7 @@
 #ifdef _WIN32
 	pidgin_prefs_checkbox(_("F_lash window when IMs are received"), PIDGIN_PREFS_ROOT "/win32/blink_im", vbox);
 #endif
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 
 	checkbox = pidgin_prefs_checkbox(_("Resize incoming custom smileys"),
 			PIDGIN_PREFS_ROOT "/conversations/resize_custom_smileys", hbox);
@@ -2153,7 +2153,7 @@
 		"}";
 #endif
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
 
 	vbox = pidgin_make_frame (ret, _("IP Address"));
@@ -2169,7 +2169,7 @@
 	pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("ST_UN server:"),
 			sg, entry, TRUE, NULL);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_container_add(GTK_CONTAINER(vbox), hbox);
 
 	label = gtk_label_new(NULL);
@@ -2220,7 +2220,7 @@
 	pidgin_prefs_checkbox(_("_Enable automatic router port forwarding"),
 			"/purple/network/map_ports", vbox);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 
 	ports_checkbox = pidgin_prefs_checkbox(_("_Manually specify range of ports to listen on:"),
 			"/purple/network/ports_range_use", hbox);
@@ -2374,7 +2374,7 @@
 	GtkSizeGroup *sg;
 	GList *browsers = NULL;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
 
 	vbox = pidgin_make_frame (ret, _("Browser Selection"));
@@ -2382,12 +2382,12 @@
 	if (purple_running_gnome()) {
 		gchar *path;
 
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		label = gtk_label_new(_("Browser preferences are configured in GNOME preferences"));
 		gtk_container_add(GTK_CONTAINER(vbox), hbox);
 		gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
 
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_container_add(GTK_CONTAINER(vbox), hbox);
 
 		path = g_find_program_in_path("gnome-control-center");
@@ -2425,7 +2425,7 @@
 			gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 			gtk_size_group_add_widget(sg, label);
 
-			hbox = gtk_hbox_new(FALSE, 0);
+			hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 			label = pidgin_prefs_dropdown(hbox, _("_Open link in:"), PURPLE_PREF_INT,
 				PIDGIN_PREFS_ROOT "/browsers/place",
 				_("Browser default"), PIDGIN_BROWSER_DEFAULT,
@@ -2469,20 +2469,20 @@
 	GtkWidget *prefs_proxy_frame = NULL;
 	PurpleProxyInfo *proxy_info;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
 	vbox = pidgin_make_frame(ret, _("Proxy Server"));
-	prefs_proxy_frame = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	prefs_proxy_frame = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 
 	if(purple_running_gnome()) {
 		gchar *path = NULL;
 
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		label = gtk_label_new(_("Proxy preferences are configured in GNOME preferences"));
 		gtk_container_add(GTK_CONTAINER(vbox), hbox);
 		gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
 
-		hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		gtk_container_add(GTK_CONTAINER(vbox), hbox);
 
 		path = g_find_program_in_path("gnome-network-properties");
@@ -2514,7 +2514,7 @@
 		         which is never */
 		gtk_widget_show_all(ret);
 	} else {
-		GtkWidget *prefs_proxy_subframe = gtk_vbox_new(FALSE, 0);
+		GtkWidget *prefs_proxy_subframe = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
 		/* This is a global option that affects SOCKS4 usage even with
 		 * account-specific proxy settings */
@@ -2559,7 +2559,8 @@
 			gtk_entry_set_text(GTK_ENTRY(entry),
 					   purple_proxy_info_get_host(proxy_info));
 
-		hbox = gtk_hbox_new(TRUE, 5);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+		gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE);
 		gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 		pidgin_set_accessible_label (entry, label);
 
@@ -2593,7 +2594,8 @@
 			gtk_entry_set_text(GTK_ENTRY(entry),
 						   purple_proxy_info_get_username(proxy_info));
 
-		hbox = gtk_hbox_new(TRUE, 5);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+		gtk_box_set_homogeneous(GTK_BOX(hbox), TRUE);
 		gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 		pidgin_set_accessible_label (entry, label);
 
@@ -2629,7 +2631,7 @@
 	GtkWidget *vbox;
 	GList *names;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
 
 
@@ -2885,7 +2887,7 @@
 	g_return_val_if_fail(keyring_page_instance == NULL,
 		keyring_page_instance);
 
-	keyring_page_instance = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	keyring_page_instance = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(keyring_page_instance),
 		PIDGIN_HIG_BORDER);
 
@@ -3161,14 +3163,14 @@
 	GtkWidget *entry;
 	const char *cmd;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
 	vbox2 = pidgin_make_frame(ret, _("Sound Options"));
 
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox2), vbox, FALSE, FALSE, 0);
 
 	dd = pidgin_prefs_dropdown(vbox2, _("_Method:"), PURPLE_PREF_STRING,
@@ -3222,7 +3224,8 @@
 				NULL);
 
 #ifdef USE_GSTREAMER
-	sw = gtk_hscale_new_with_range(0.0, 100.0, 5.0);
+	sw = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,
+		0.0, 100.0, 5.0);
 	gtk_range_set_increments(GTK_RANGE(sw), 5.0, 25.0);
 	gtk_range_set_value(GTK_RANGE(sw), purple_prefs_get_int(PIDGIN_PREFS_ROOT "/sound/volume"));
 	g_signal_connect (G_OBJECT (sw), "format-value",
@@ -3310,7 +3313,7 @@
 		pidgin_make_scrollable(event_view, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC, GTK_SHADOW_IN, -1, 100),
 		TRUE, TRUE, 0);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	sound_entry = gtk_entry_new();
 	pref = g_strdup_printf(PIDGIN_PREFS_ROOT "/sound/file/%s",
@@ -3364,7 +3367,7 @@
 	GtkWidget *menu;
 	GtkSizeGroup *sg;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
@@ -3387,7 +3390,7 @@
 			_("_Minutes before becoming idle:"), "/purple/away/mins_before_away",
 			1, 24 * 60, sg);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	button = pidgin_prefs_checkbox(_("Change to this status when _idle:"),
@@ -3878,7 +3881,7 @@
 	label = gtk_label_new(NULL);
 	gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	label = gtk_label_new(_("Volume:"));
 	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
@@ -3895,7 +3898,8 @@
 	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 	g_free(tmp);
-	threshold = gtk_hscale_new_with_range(0, 100, 1);
+	threshold = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL,
+		0, 100, 1);
 	gtk_box_pack_start(GTK_BOX(vbox), threshold, FALSE, FALSE, 0);
 	gtk_range_set_value(GTK_RANGE(threshold),
 			purple_prefs_get_int("/purple/media/audio/silence_threshold"));
@@ -4070,7 +4074,7 @@
 	GtkWidget *vbox;
 	GtkSizeGroup *sg;
 
-	ret = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
--- a/pidgin/gtkrequest.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkrequest.c	Wed Feb 12 21:08:49 2014 +0100
@@ -562,7 +562,7 @@
 	                    PIDGIN_HIG_BORDER);
 
 	/* Setup the main horizontal box */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
 	                  hbox);
 
@@ -574,7 +574,7 @@
 	pidgin_request_add_help(GTK_DIALOG(dialog), cpar);
 
 	/* Vertical box */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 
 	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
 
@@ -722,7 +722,7 @@
 	                    PIDGIN_HIG_BORDER);
 
 	/* Setup the main horizontal box */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
 	                  hbox);
 
@@ -736,7 +736,7 @@
 	pidgin_request_add_help(GTK_DIALOG(dialog), cpar);
 
 	/* Vertical box */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
 
 	/* Descriptive label */
@@ -759,7 +759,7 @@
 
 	g_free(label_text);
 
-	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0);
 	while ((radio_text = va_arg(args, char*))) {
 		       gpointer resp = va_arg(args, gpointer);
@@ -845,7 +845,7 @@
 	                    PIDGIN_HIG_BORDER);
 
 	/* Setup the main horizontal box */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
 	                  hbox);
 
@@ -854,7 +854,7 @@
 	gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
 
 	/* Vertical box */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
 
 	pidgin_widget_decorate_account(hbox,
@@ -954,7 +954,7 @@
 		GTK_DIALOG(dialog))), PIDGIN_HIG_BORDER);
 
 	/* Setup the main horizontal box */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(
 		GTK_DIALOG(dialog))), hbox);
 
@@ -968,7 +968,7 @@
 	gtk_widget_set_can_default(button, FALSE);
 
 	/* Vertical box */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
 
 	pidgin_widget_decorate_account(hbox,
@@ -1316,9 +1316,9 @@
 		GtkWidget *radio;
 
 		if (num_labels == 2)
-			box = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+			box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 		else
-			box = gtk_vbox_new(FALSE, 0);
+			box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
 		widget = box;
 
@@ -1848,7 +1848,7 @@
 	const GList *it;
 
 	sheet = purple_request_field_datasheet_get_sheet(field);
-	main_box = GTK_HBOX(gtk_hbox_new(FALSE, 0));
+	main_box = GTK_HBOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
 
 	col_count = purple_request_datasheet_get_column_count(sheet);
 
@@ -1914,7 +1914,7 @@
 		GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS, GTK_SHADOW_IN, -1, -1);
 	gtk_widget_show(GTK_WIDGET(view));
 
-	buttons_box = GTK_VBOX(gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER));
+	buttons_box = GTK_VBOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER));
 	gtk_size_group_add_widget(buttons_sg, GTK_WIDGET(buttons_box));
 
 	gtk_box_pack_start(GTK_BOX(main_box), scrollable, TRUE, TRUE, 0);
@@ -2014,7 +2014,7 @@
 					 G_CALLBACK(destroy_multifield_cb), data);
 
 	/* Setup the main horizontal box */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(pidgin_dialog_get_vbox(GTK_DIALOG(win))), hbox);
 	gtk_widget_show(hbox);
 
@@ -2055,7 +2055,7 @@
 		purple_request_cpar_get_account(cpar));
 
 	/* Setup the vbox */
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
 	gtk_widget_show(vbox);
 
@@ -2092,7 +2092,7 @@
 		pages = g_new0(GtkWidget*, tab_count);
 
 		for (i = 0; i < tab_count; i++) {
-			pages[i] = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+			pages[i] = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 			gtk_container_set_border_width(GTK_CONTAINER(pages[i]), PIDGIN_HIG_BORDER);
 			gtk_notebook_append_page(notebook, pages[i], NULL);
 			gtk_notebook_set_tab_label_text(notebook, pages[i], tab_names[i]);
@@ -2120,7 +2120,7 @@
 				GTK_CONTAINER(pages[i]), 0);
 
 			hbox_for_spacing =
-				gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
+				gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BORDER);
 			gtk_box_pack_start(GTK_BOX(pages[i]),
 				pidgin_make_scrollable(hbox_for_spacing,
 					GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC,
@@ -2129,13 +2129,13 @@
 			gtk_widget_show(hbox_for_spacing);
 
 			vbox_for_spacing =
-				gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+				gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 			gtk_box_pack_start(GTK_BOX(hbox_for_spacing),
 				vbox_for_spacing, TRUE, TRUE,
 				PIDGIN_HIG_BOX_SPACE);
 			gtk_widget_show(vbox_for_spacing);
 
-			pages[i] = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+			pages[i] = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 			gtk_box_pack_start(GTK_BOX(vbox_for_spacing),
 				pages[i], TRUE, TRUE, PIDGIN_HIG_BOX_SPACE);
 			gtk_widget_show(pages[i]);
--- a/pidgin/gtkroomlist.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkroomlist.c	Wed Feb 12 21:08:49 2014 +0100
@@ -30,6 +30,7 @@
 #include "connection.h"
 #include "notify.h"
 
+#include "gtk3compat.h"
 #include "gtkroomlist.h"
 
 typedef struct _PidginRoomlistDialog {
@@ -578,7 +579,7 @@
 	/* Create the parent vbox for everything. */
 	vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(window), FALSE, PIDGIN_HIG_BORDER);
 
-	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(vbox), vbox2);
 	gtk_widget_show(vbox2);
 
--- a/pidgin/gtksavedstatuses.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtksavedstatuses.c	Wed Feb 12 21:08:49 2014 +0100
@@ -1158,7 +1158,7 @@
 	gtk_box_pack_start(GTK_BOX(vbox), expander, FALSE, FALSE, 0);
 
 	/* Setup the box that the expander will cover */
-	dbox = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	dbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_add(GTK_CONTAINER(expander), dbox);
 
 	/* Create the list model */
@@ -1414,7 +1414,7 @@
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
 	/* Status type */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new_with_mnemonic(_("_Status:"));
@@ -1448,7 +1448,7 @@
 	gtk_box_pack_start(GTK_BOX(hbox), combo, FALSE, FALSE, 0);
 
 	/* Status mesage */
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
 
 	label = gtk_label_new_with_mnemonic(_("_Message:"));
--- a/pidgin/gtkscrollbook.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkscrollbook.c	Wed Feb 12 21:08:49 2014 +0100
@@ -21,6 +21,7 @@
 
 #include "gtkscrollbook.h"
 
+#include "gtk3compat.h"
 
 static void pidgin_scroll_book_init (PidginScrollBook *scroll_book);
 static void pidgin_scroll_book_class_init (PidginScrollBookClass *klass);
@@ -255,7 +256,7 @@
 	GtkWidget *eb;
 	GtkWidget *close_button;
 
-	scroll_book->hbox = gtk_hbox_new(FALSE, 0);
+	scroll_book->hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 
 	/* Close */
 	eb = gtk_event_box_new();
--- a/pidgin/gtkstatusbox.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkstatusbox.c	Wed Feb 12 21:08:49 2014 +0100
@@ -455,8 +455,14 @@
 		return;
 
 	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
 
 	purple_imgstore_unref(statusbox->buddy_icon_img);
 
@@ -1743,9 +1749,9 @@
 	status_box->connecting = FALSE;
 	status_box->typing = 0;
 	status_box->toggle_button = gtk_toggle_button_new();
-	status_box->hbox = gtk_hbox_new(FALSE, 6);
+	status_box->hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
 	status_box->cell_view = gtk_cell_view_new();
-	status_box->vsep = gtk_vseparator_new();
+	status_box->vsep = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
 	status_box->arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
 
 	status_box->store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING,
@@ -1830,7 +1836,7 @@
 	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(status_box->cell_view), emblem_rend, "pixbuf", EMBLEM_COLUMN, "visible", EMBLEM_VISIBLE_COLUMN, NULL);
 	g_object_set(status_box->text_rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
 
-	status_box->vbox = gtk_vbox_new(0, FALSE);
+	status_box->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, FALSE);
 	status_box->sw = pidgin_create_webview(TRUE, &status_box->webview, NULL);
 	pidgin_webview_hide_toolbar(PIDGIN_WEBVIEW(status_box->webview));
 
--- a/pidgin/gtkutils.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkutils.c	Wed Feb 12 21:08:49 2014 +0100
@@ -222,7 +222,7 @@
 	frame = gtk_frame_new(NULL);
 	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
 
-	vbox = gtk_vbox_new(FALSE, 0);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 	gtk_widget_show(vbox);
 
@@ -231,7 +231,7 @@
 		gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
 		gtk_widget_show(toolbar);
 
-		sep = gtk_hseparator_new();
+		sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
 		gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
 		g_signal_connect_swapped(G_OBJECT(toolbar), "show", G_CALLBACK(gtk_widget_show), sep);
 		g_signal_connect_swapped(G_OBJECT(toolbar), "hide", G_CALLBACK(gtk_widget_hide), sep);
@@ -376,7 +376,7 @@
 	button = gtk_toggle_button_new();
 	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
 
-	bbox = gtk_vbox_new(FALSE, 0);
+	bbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
 	gtk_container_add (GTK_CONTAINER(button), bbox);
 
@@ -397,15 +397,15 @@
 	button = gtk_button_new();
 
 	if (style == PIDGIN_BUTTON_HORIZONTAL) {
-		bbox = gtk_hbox_new(FALSE, 0);
-		ibox = gtk_hbox_new(FALSE, 0);
+		bbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+		ibox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 		if (text)
-			lbox = gtk_hbox_new(FALSE, 0);
+			lbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	} else {
-		bbox = gtk_vbox_new(FALSE, 0);
-		ibox = gtk_vbox_new(FALSE, 0);
+		bbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+		ibox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 		if (text)
-			lbox = gtk_vbox_new(FALSE, 0);
+			lbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	}
 
 	gtk_container_add(GTK_CONTAINER(button), bbox);
@@ -480,7 +480,7 @@
 	GtkWidget *vbox, *vbox2, *label, *hbox;
 	char *labeltitle;
 
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(parent), vbox, FALSE, FALSE, 0);
 	gtk_widget_show(vbox);
 
@@ -495,7 +495,7 @@
 	gtk_widget_show(label);
 	pidgin_set_accessible_label (vbox, label);
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
 	gtk_widget_show(hbox);
 
@@ -503,7 +503,7 @@
 	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
 	gtk_widget_show(label);
 
-	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0);
 	gtk_widget_show(vbox2);
 
@@ -2118,7 +2118,12 @@
 
 	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)));
 }
@@ -2237,7 +2242,7 @@
 	dialog->icon_preview = gtk_image_new();
 	dialog->icon_text = gtk_label_new(NULL);
 
-	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_widget_set_size_request(GTK_WIDGET(vbox), -1, 50);
 	gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(dialog->icon_preview), TRUE, FALSE, 0);
 	gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(dialog->icon_text), FALSE, FALSE, 0);
@@ -2863,7 +2868,7 @@
 	GtkWidget *label = NULL;
 
 	if (widget_label) {
-		hbox = gtk_hbox_new(FALSE, 5);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
 		gtk_widget_show(hbox);
 		gtk_box_pack_start(vbox, hbox, FALSE, FALSE, 0);
 
@@ -3581,14 +3586,18 @@
 		if (width != -1 || height != -1)
 			gtk_widget_set_size_request(sw, width, height);
 		if (child) {
+#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
+#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);
+#endif /* GTK_CHECK_VERSION(3,8,0) */
 		}
 		return sw;
 	}
--- a/pidgin/gtkwebviewtoolbar.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkwebviewtoolbar.c	Wed Feb 12 21:08:49 2014 +0100
@@ -797,7 +797,7 @@
 	if (!list)
 		return;
 
-	line = gtk_hbox_new(FALSE, 0);
+	line = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_box_pack_start(GTK_BOX(container), line, FALSE, FALSE, 0);
 	for (; list; list = list->next) {
 		if (custom != !!(pidgin_webview_smiley_get_flags(list->smiley) & PIDGIN_WEBVIEW_SMILEY_CUSTOM))
@@ -807,7 +807,7 @@
 		line_width += list->width;
 		if (line_width >= max_width) {
 			if (list->next) {
-				line = gtk_hbox_new(FALSE, 0);
+				line = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 				gtk_box_pack_start(GTK_BOX(container), line, FALSE, FALSE, 0);
 			}
 			line_width = 0;
@@ -877,7 +877,7 @@
 		ls = NULL;
 		max_line_width = 0;
 		num_lines = floor(sqrt(g_slist_length(unique_smileys)));
-		smiley_table = gtk_vbox_new(FALSE, 0);
+		smiley_table = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 
 		if (supports_custom) {
 			GtkWidget *manage = gtk_button_new_with_mnemonic(_("_Manage custom smileys"));
@@ -905,7 +905,7 @@
 		/* pack buttons of the list */
 		add_smiley_list(smiley_table, ls, max_line_width, FALSE);
 		if (supports_custom) {
-			gtk_box_pack_start(GTK_BOX(smiley_table), gtk_hseparator_new(), TRUE, FALSE, 0);
+			gtk_box_pack_start(GTK_BOX(smiley_table), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), TRUE, FALSE, 0);
 			add_smiley_list(smiley_table, ls, max_line_width, TRUE);
 		}
 		while (ls) {
--- a/pidgin/gtkwhiteboard.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/gtkwhiteboard.c	Wed Feb 12 21:08:49 2014 +0100
@@ -24,18 +24,15 @@
 #include "internal.h"
 #include "buddylist.h"
 #include "debug.h"
+#include "pidgin.h"
 
+#include "gtk3compat.h"
 #include "gtkwhiteboard.h"
 #include "gtkutils.h"
 
-#if GTK_CHECK_VERSION(3,0,0)
-#define GdkPixType GdkPixbuf
-#else
-#define GdkPixType GdkPixmap
-#endif
 struct _PidginWhiteboardPrivate {
-	GdkPixType *pix;
-	cairo_t   *cr;
+	cairo_t *cr;
+	cairo_surface_t *surface;
 };
 
 /******************************************************************************
@@ -49,7 +46,14 @@
 /*static void pidginwhiteboard_button_start_press(GtkButton *button, gpointer data); */
 
 static gboolean pidgin_whiteboard_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data);
-static gboolean pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data);
+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);
@@ -173,18 +177,18 @@
 	GtkWidget *palette_color_box[PIDGIN_PALETTE_NUM_COLORS];
 
 	/* Create vertical box to place palette above the canvas and controls */
-	vbox_palette_above_canvas_and_controls = gtk_vbox_new(FALSE, 0);
+	vbox_palette_above_canvas_and_controls = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_container_add(GTK_CONTAINER(window), vbox_palette_above_canvas_and_controls);
 	gtk_widget_show(vbox_palette_above_canvas_and_controls);
 
 	/* Create horizontal box for the palette and all its entries */
-	hbox_palette = gtk_hbox_new(FALSE, 0);
+	hbox_palette = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_box_pack_start(GTK_BOX(vbox_palette_above_canvas_and_controls),
 			hbox_palette, FALSE, FALSE, PIDGIN_HIG_BORDER);
 	gtk_widget_show(hbox_palette);
 
 	/* Create horizontal box to seperate the canvas from the controls */
-	hbox_canvas_and_controls = gtk_hbox_new(FALSE, 0);
+	hbox_canvas_and_controls = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_box_pack_start(GTK_BOX(vbox_palette_above_canvas_and_controls),
 			hbox_canvas_and_controls, FALSE, FALSE, PIDGIN_HIG_BORDER);
 	gtk_widget_show(hbox_canvas_and_controls);
@@ -199,7 +203,7 @@
 	}
 #endif
 
-	hbox_canvas_and_controls = gtk_hbox_new(FALSE, 0);
+	hbox_canvas_and_controls = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_widget_show(hbox_canvas_and_controls);
 
 	gtk_container_add(GTK_CONTAINER(window), hbox_canvas_and_controls);
@@ -214,11 +218,19 @@
 	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_CALLBACK(pidgin_whiteboard_expose_event), gtkwb);
 
 	g_signal_connect(G_OBJECT(drawing_area), "configure_event",
-					 G_CALLBACK(pidgin_whiteboard_configure_event), gtkwb);
+		G_CALLBACK(pidgin_whiteboard_configure_event), gtkwb);
+#endif
 
 	/* Event signals */
 	g_signal_connect(G_OBJECT(drawing_area), "button_press_event",
@@ -239,7 +251,7 @@
 						  GDK_POINTER_MOTION_HINT_MASK);
 
 	/* Create vertical box to contain the controls */
-	vbox_controls = gtk_vbox_new(FALSE, 0);
+	vbox_controls = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_box_pack_start(GTK_BOX(hbox_canvas_and_controls),
 					vbox_controls, FALSE, FALSE, PIDGIN_HIG_BOX_SPACE);
 	gtk_widget_show(vbox_controls);
@@ -291,11 +303,13 @@
 	/* TODO Ask if user wants to save picture before the session is closed */
 
 	/* Clear graphical memory */
-	if (gtkwb->priv->pix) {
-		cairo_t *cr = gtkwb->priv->cr;
-		if (cr)
-			cairo_destroy(cr);
-		g_object_unref(gtkwb->priv->pix);
+	if (gtkwb->priv->cr) {
+		cairo_destroy(gtkwb->priv->cr);
+		gtkwb->priv->cr = NULL;
+	}
+	if (gtkwb->priv->surface) {
+		cairo_surface_destroy(gtkwb->priv->surface);
+		gtkwb->priv->surface = NULL;
 	}
 
 	colour_dialog = g_object_get_data(G_OBJECT(gtkwb->window), "colour-dialog");
@@ -367,69 +381,54 @@
 static gboolean pidgin_whiteboard_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data)
 {
 	PidginWhiteboard *gtkwb = (PidginWhiteboard*)data;
-	GdkPixType *pix = gtkwb->priv->pix;
 	cairo_t *cr;
-	GdkWindow *window = gtk_widget_get_window(widget);
 	GtkAllocation allocation;
 
-	if (pix) {
-		cr = gtkwb->priv->cr;
-		if (cr)
-			cairo_destroy(cr);
-		g_object_unref(pix);
-	}
+	if (gtkwb->priv->cr)
+		cairo_destroy(gtkwb->priv->cr);
+	if (gtkwb->priv->surface)
+		cairo_surface_destroy(gtkwb->priv->surface);
 
 	gtk_widget_get_allocation(widget, &allocation);
 
-#if GTK_CHECK_VERSION(3,0,0)
-	pix = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
-	                     FALSE, gdk_visual_get_depth(GDK_VISUAL(window)),
-	                     allocation.width, allocation.height);
-#else
-	pix = gdk_pixmap_new(window,
-	                     allocation.width,
-	                     allocation.height,
-	                     -1);
-#endif
-
-	gtkwb->priv->pix = pix;
-
-#if GTK_CHECK_VERSION(3,0,0)
-	cr = gdk_cairo_create(window);
-#else
-	cr = gdk_cairo_create(GDK_DRAWABLE(pix));
-#endif
-	gtkwb->priv->cr = cr;
+	gtkwb->priv->surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24,
+		allocation.width, allocation.height);
+	gtkwb->priv->cr = cr = cairo_create(gtkwb->priv->surface);
 	gdk_cairo_set_source_color(cr, &gtk_widget_get_style(widget)->white);
-	cairo_rectangle(cr,
-	                0, 0,
-	                allocation.width, allocation.height);
+	cairo_rectangle(cr, 0, 0, allocation.width, allocation.height);
 	cairo_fill(cr);
 
 	return TRUE;
 }
 
-static gboolean pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+static gboolean
+pidgin_whiteboard_draw_event(GtkWidget *widget, cairo_t *cr,
+	gpointer _gtkwb)
 {
-	PidginWhiteboard *gtkwb = (PidginWhiteboard*)(data);
-	GdkPixType *pix = gtkwb->priv->pix;
+	PidginWhiteboard *gtkwb = _gtkwb;
+
+	cairo_set_source_surface(cr, gtkwb->priv->surface, 0, 0);
+	cairo_paint(cr);
+
+	return FALSE;
+}
+
+#if !GTK_CHECK_VERSION(3,0,0)
+static gboolean
+pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event,
+	gpointer _gtkwb)
+{
 	cairo_t *cr;
 
-#if GTK_CHECK_VERSION(3,0,0)
-	cr = gdk_cairo_create(gtk_widget_get_window(widget));
-	gdk_cairo_set_source_pixbuf(cr, pix, 0, 0);
-#else
 	cr = gdk_cairo_create(GDK_DRAWABLE(widget->window));
-	gdk_cairo_set_source_pixmap(cr, pix, 0, 0);
-#endif
-	cairo_rectangle(cr,
-	                event->area.x, event->area.y,
-	                event->area.width, event->area.height);
-	cairo_fill(cr);
+
+	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)
 {
@@ -448,7 +447,7 @@
 
 	BrushState = PIDGIN_BRUSH_STATE_DOWN;
 
-	if(event->button == 1 && gtkwb->priv->pix != NULL)
+	if(event->button == 1 && gtkwb->priv->cr != NULL)
 	{
 		/* Check if draw_list has contents; if so, clear it */
 		if(draw_list)
@@ -504,7 +503,7 @@
 		state = event->state;
 	}
 
-	if(state & GDK_BUTTON1_MASK && gtkwb->priv->pix != NULL)
+	if(state & GDK_BUTTON1_MASK && gtkwb->priv->cr != NULL)
 	{
 		if((BrushState != PIDGIN_BRUSH_STATE_DOWN) && (BrushState != PIDGIN_BRUSH_STATE_MOTION))
 		{
@@ -584,7 +583,7 @@
 	}
 	BrushState = PIDGIN_BRUSH_STATE_UP;
 
-	if(event->button == 1 && gtkwb->priv->pix != NULL)
+	if(event->button == 1 && gtkwb->priv->cr != NULL)
 	{
 		/* If the brush was never moved, express two sets of two deltas That's a
 		 * 'point,' but not for Yahoo!
@@ -738,17 +737,13 @@
 
 	gtk_widget_get_allocation(drawing_area, &allocation);
 
-	gdk_cairo_set_source_color(cr, &gtk_widget_get_style(drawing_area)->white);
-	cairo_rectangle(cr,
-	                0, 0,
-	                allocation.width,
-	                allocation.height);
+	gdk_cairo_set_source_color(cr,
+		&gtk_widget_get_style(drawing_area)->white);
+	cairo_rectangle(cr, 0, 0, allocation.width, allocation.height);
 	cairo_fill(cr);
 
-	gtk_widget_queue_draw_area(drawing_area,
-	                           0, 0,
-	                           allocation.width,
-	                           allocation.height);
+	gtk_widget_queue_draw_area(drawing_area, 0, 0,
+		allocation.width, allocation.height);
 }
 
 static void pidgin_whiteboard_button_clear_press(GtkWidget *widget, gpointer data)
@@ -775,68 +770,52 @@
 	}
 }
 
-static void pidgin_whiteboard_button_save_press(GtkWidget *widget, gpointer data)
+static void
+pidgin_whiteboard_button_save_press(GtkWidget *widget, gpointer _gtkwb)
 {
-	PidginWhiteboard *gtkwb = (PidginWhiteboard*)(data);
+	PidginWhiteboard *gtkwb = _gtkwb;
 	GdkPixbuf *pixbuf;
-
 	GtkWidget *dialog;
-
 	int result;
 
-	dialog = gtk_file_chooser_dialog_new (_("Save File"),
-										  GTK_WINDOW(gtkwb->window),
-										  GTK_FILE_CHOOSER_ACTION_SAVE,
-										  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-										  GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
-										  NULL);
-
-	/* gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), (gboolean)(TRUE)); */
+	dialog = gtk_file_chooser_dialog_new(_("Save File"),
+		GTK_WINDOW(gtkwb->window), GTK_FILE_CHOOSER_ACTION_SAVE,
+		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE,
+		GTK_RESPONSE_ACCEPT, NULL);
 
-	/* if(user_edited_a_new_document) */
-	{
-	/* gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), default_folder_for_saving); */
-		gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "whiteboard.jpg");
-	}
-	/*
-	else
-		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), filename_for_existing_document);
-	*/
+	gtk_file_chooser_set_do_overwrite_confirmation(
+		GTK_FILE_CHOOSER(dialog), TRUE);
+
+	gtk_file_chooser_set_current_name(
+		GTK_FILE_CHOOSER(dialog), "whiteboard.png");
 
 	result = gtk_dialog_run(GTK_DIALOG(dialog));
 
-	if(result == GTK_RESPONSE_ACCEPT)
-	{
-		char *filename;
-
-		filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+	if (result == GTK_RESPONSE_ACCEPT) {
+		gboolean success;
+		gchar *filename =
+			gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
 
 		gtk_widget_destroy(dialog);
 
-		/* Makes an icon from the whiteboard's canvas 'image' */
-#if GTK_CHECK_VERSION(3,0,0)
-		pixbuf = gtkwb->priv->pix;
-#else
-		pixbuf = gdk_pixbuf_get_from_drawable(NULL,
-		                                      (GdkDrawable*)(gtkwb->priv->pix),
-		                                      gdk_drawable_get_colormap(gtkwb->priv->pix),
-		                                      0, 0,
-		                                      0, 0,
-		                                      gtkwb->width, gtkwb->height);
-#endif
+		pixbuf = gdk_pixbuf_get_from_surface(gtkwb->priv->surface, 0, 0,
+			gtkwb->width, gtkwb->height);
 
-		if(gdk_pixbuf_save(pixbuf, filename, "jpeg", NULL, "quality", "100", NULL))
-			purple_debug_info("gtkwhiteboard", "File Saved...\n");
-		else
-			purple_debug_info("gtkwhiteboard", "File not Saved... Error\n");
+		success = gdk_pixbuf_save(pixbuf, filename, "png", NULL,
+			"compression", "9", NULL);
+		g_object_unref(pixbuf);
+		if (success) {
+			purple_debug_info("gtkwhiteboard",
+				"whiteboard saved to \"%s\"", filename);
+		} else {
+			purple_notify_error(NULL, _("Whiteboard"),
+				_("Unable to save the file"), NULL, NULL);
+			purple_debug_error("gtkwhiteboard", "whiteboard "
+				"couldn't be saved to \"%s\"", filename);
+		}
 		g_free(filename);
-	}
-	else if(result == GTK_RESPONSE_CANCEL)
-	{
+	} else if (result == GTK_RESPONSE_CANCEL)
 		gtk_widget_destroy(dialog);
-
-		purple_debug_info("gtkwhiteboard", "File not Saved... Cancelled\n");
-	}
 }
 
 static void pidgin_whiteboard_set_canvas_as_icon(PidginWhiteboard *gtkwb)
@@ -844,18 +823,10 @@
 	GdkPixbuf *pixbuf;
 
 	/* Makes an icon from the whiteboard's canvas 'image' */
-#if GTK_CHECK_VERSION(3,0,0)
-	pixbuf = gtkwb->priv->pix;
-#else
-	pixbuf = gdk_pixbuf_get_from_drawable(NULL,
-	                                      (GdkDrawable*)(gtkwb->priv->pix),
-	                                      gdk_drawable_get_colormap(gtkwb->priv->pix),
-	                                      0, 0,
-	                                      0, 0,
-	                                      gtkwb->width, gtkwb->height);
-#endif
-
-	gtk_window_set_icon((GtkWindow*)(gtkwb->window), pixbuf);
+	pixbuf = gdk_pixbuf_get_from_surface(gtkwb->priv->surface,
+		0, 0, gtkwb->width, gtkwb->height);
+	gtk_window_set_icon(GTK_WINDOW(gtkwb->window), pixbuf);
+	g_object_unref(pixbuf);
 }
 
 static void pidgin_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color)
--- a/pidgin/minidialog.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/minidialog.c	Wed Feb 12 21:08:49 2014 +0100
@@ -24,6 +24,8 @@
 
 #include <gtk/gtk.h>
 
+#include "gtk3compat.h"
+
 #include "libpurple/prefs.h"
 
 #include "pidgin/minidialog.h"
@@ -482,7 +484,7 @@
 
 	gtk_container_set_border_width(GTK_CONTAINER(self), PIDGIN_HIG_BOX_SPACE);
 
-	priv->title_box = GTK_BOX(gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE));
+	priv->title_box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE));
 
 	priv->icon = GTK_IMAGE(gtk_image_new());
 	gtk_misc_set_alignment(GTK_MISC(priv->icon), 0, 0);
@@ -515,9 +517,9 @@
 		blist_width_changed_cb, self);
 #endif
 
-	self->contents = GTK_BOX(gtk_vbox_new(FALSE, 0));
+	self->contents = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
 
-	priv->buttons = GTK_BOX(gtk_hbox_new(FALSE, 0));
+	priv->buttons = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0));
 
 	gtk_box_pack_start(self_box, GTK_WIDGET(priv->title_box), FALSE, FALSE, 0);
 	gtk_box_pack_start(self_box, GTK_WIDGET(priv->desc), FALSE, FALSE, 0);
--- a/pidgin/pidgintooltip.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/pidgintooltip.c	Wed Feb 12 21:08:49 2014 +0100
@@ -149,7 +149,18 @@
 	GdkRectangle mon_size;
 	GtkWidget *tipwindow = pidgin_tooltip.tipwindow;
 
-	gdk_display_get_pointer(gdk_display_get_default(), &screen, &x, &y, NULL);
+#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);
 
--- a/pidgin/plugins/contact_priority.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/contact_priority.c	Wed Feb 12 21:08:49 2014 +0100
@@ -20,6 +20,7 @@
 
 #include "internal.h"
 #include "pidgin.h"
+#include "gtk3compat.h"
 #include "gtkplugin.h"
 #include "gtkutils.h"
 #include "prefs.h"
@@ -84,12 +85,12 @@
 
 	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
-	ret = gtk_vbox_new(FALSE, 18);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
 
 	frame = pidgin_make_frame(ret, _("Point values to use when..."));
 
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	/* Status Spinboxes */
@@ -97,7 +98,7 @@
 	{
 		char *pref = g_strconcat("/purple/status/scores/", statuses[i].id, NULL);
 
-		hbox = gtk_hbox_new(FALSE, 5);
+		hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
 		gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 		label = gtk_label_new_with_mnemonic(_(statuses[i].description));
@@ -120,7 +121,7 @@
 	gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
 
 	/* Last match */
-	hbox = gtk_hbox_new(FALSE, 5);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	check = gtk_check_button_new_with_label(_("Use last buddy when scores are equal"));
@@ -130,11 +131,11 @@
 
 	frame = pidgin_make_frame(ret, _("Point values to use for account..."));
 
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	/* Account */
-	hbox = gtk_hbox_new(FALSE, 5);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	/* make this here so I can use it in the option menu callback, we'll
--- a/pidgin/plugins/disco/gtkdisco.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/disco/gtkdisco.c	Wed Feb 12 21:08:49 2014 +0100
@@ -31,6 +31,7 @@
 #include "request.h"
 #include "pidgintooltip.h"
 
+#include "gtk3compat.h"
 #include "gtkdisco.h"
 #include "xmppdisco.h"
 
@@ -644,7 +645,7 @@
 	/* Create the parent vbox for everything. */
 	vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(window), FALSE, PIDGIN_HIG_BORDER);
 
-	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BORDER);
 	gtk_container_add(GTK_CONTAINER(vbox), vbox2);
 	gtk_widget_show(vbox2);
 
--- a/pidgin/plugins/gestures/gestures.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/gestures/gestures.c	Wed Feb 12 21:08:49 2014 +0100
@@ -26,6 +26,7 @@
 #include "signals.h"
 #include "version.h"
 
+#include "gtk3compat.h"
 #include "gtkconv.h"
 #include "gtkplugin.h"
 #include "gtkutils.h"
@@ -223,7 +224,7 @@
 #endif
 
 	/* Outside container */
-	ret = gtk_vbox_new(FALSE, 18);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
 
 	/* Configuration frame */
@@ -318,8 +319,10 @@
 	purple_prefs_add_none("/plugins/gtk/X11/gestures");
 	purple_prefs_add_bool("/plugins/gtk/X11/gestures/visual", FALSE);
 
-	purple_prefs_connect_callback(plugin, "/plugins/gtk/X11/gestures/visual",
-								visual_pref_cb, NULL);
+	purple_prefs_connect_callback(plugin,
+		"/plugins/gtk/X11/gestures/visual", visual_pref_cb, NULL);
+	gstroke_set_draw_strokes(purple_prefs_get_bool(
+		"/plugins/gtk/X11/gestures/visual"));
 }
 
 PURPLE_INIT_PLUGIN(gestures, init_plugin, info)
--- a/pidgin/plugins/gestures/stroke-draw.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/gestures/stroke-draw.c	Wed Feb 12 21:08:49 2014 +0100
@@ -53,47 +53,53 @@
 static void gstroke_execute (GtkWidget *widget, const gchar *name);
 
 static void
-record_stroke_segment (GtkWidget *widget)
+record_stroke_segment(GtkWidget *widget)
 {
-  gint x, y;
-  struct gstroke_metrics *metrics;
-
-  g_return_if_fail( widget != NULL );
-
-  gtk_widget_get_pointer (widget, &x, &y);
+	gint x, y;
+	struct gstroke_metrics *metrics;
+#if GTK_CHECK_VERSION(3,0,0)
+	GdkDeviceManager *devmgr;
+	GdkDevice *dev;
+#endif
 
-  if (last_mouse_position.invalid)
-    last_mouse_position.invalid = FALSE;
-  else if (gstroke_draw_strokes())
-    {
-#if 1
-      XDrawLine (gstroke_disp, gstroke_window, gstroke_gc,
-                 last_mouse_position.last_point.x,
-                 last_mouse_position.last_point.y,
-                 x, y);
-      /* XFlush (gstroke_disp); */
+	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
-      /* FIXME: this does not work. It will only work if we create a
-         corresponding GDK window for stroke_window and draw on
-         that... */
-      gdk_draw_line (gtk_widget_get_window(widget),
-                     widget->style->fg_gc[GTK_STATE_NORMAL],
-                     last_mouse_position.last_point.x,
-                     last_mouse_position.last_point.y,
-                     x,
-                     y);
+	gtk_widget_get_pointer(widget, &x, &y);
 #endif
-    }
 
-  if (last_mouse_position.last_point.x != x
-      || last_mouse_position.last_point.y != y)
-    {
-      last_mouse_position.last_point.x = x;
-      last_mouse_position.last_point.y = y;
-      metrics = (struct gstroke_metrics *)g_object_get_data(G_OBJECT(widget),
-															GSTROKE_METRICS);
-      _gstroke_record (x, y, metrics);
-    }
+	if (last_mouse_position.invalid)
+		last_mouse_position.invalid = FALSE;
+	else if (gstroke_draw_strokes()) {
+#if 1
+		XDrawLine(gstroke_disp, gstroke_window, gstroke_gc,
+			last_mouse_position.last_point.x,
+			last_mouse_position.last_point.y, x, y);
+		/* XFlush (gstroke_disp); */
+#else
+		/* FIXME: this does not work. It will only work if we create
+		 * a corresponding GDK window for stroke_window and draw on
+		 * that... */
+		gdk_draw_line(gtk_widget_get_window(widget),
+			widget->style->fg_gc[GTK_STATE_NORMAL],
+			last_mouse_position.last_point.x,
+			last_mouse_position.last_point.y, x, y);
+#endif
+	}
+
+	if (last_mouse_position.last_point.x != x ||
+		last_mouse_position.last_point.y != y)
+	{
+		last_mouse_position.last_point.x = x;
+		last_mouse_position.last_point.y = y;
+		metrics = g_object_get_data(G_OBJECT(widget), GSTROKE_METRICS);
+		_gstroke_record (x, y, metrics);
+	}
 }
 
 static gint
--- a/pidgin/plugins/gevolution/add_buddy_dialog.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/gevolution/add_buddy_dialog.c	Wed Feb 12 21:08:49 2014 +0100
@@ -21,6 +21,8 @@
 #include "internal.h"
 #include "gtkblist.h"
 #include "pidgin.h"
+
+#include "gtk3compat.h"
 #include "gtkutils.h"
 
 #include "debug.h"
@@ -453,7 +455,7 @@
 					 G_CALLBACK(delete_win_cb), dialog);
 
 	/* Setup the vbox */
-	vbox = gtk_vbox_new(FALSE, 12);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
 	gtk_container_add(GTK_CONTAINER(dialog->win), vbox);
 	gtk_widget_show(vbox);
 
@@ -466,7 +468,7 @@
 	gtk_widget_show(label);
 
 	/* Add the search hbox */
-	hbox = gtk_hbox_new(FALSE, 6);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
 	gtk_widget_show(hbox);
 
@@ -549,12 +551,12 @@
 	/* Cool. Now we only have a little left... */
 
 	/* Separator. */
-	sep = gtk_hseparator_new();
+	sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
 	gtk_widget_show(sep);
 
 	/* Button box */
-	bbox = gtk_hbutton_box_new();
+	bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_set_spacing(GTK_BOX(bbox), 6);
 	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
 	gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0);
--- a/pidgin/plugins/gevolution/assoc-buddy.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/gevolution/assoc-buddy.c	Wed Feb 12 21:08:49 2014 +0100
@@ -21,6 +21,8 @@
 #include "internal.h"
 #include "gtkblist.h"
 #include "pidgin.h"
+
+#include "gtk3compat.h"
 #include "gtkutils.h"
 
 #include "debug.h"
@@ -333,7 +335,7 @@
 					 G_CALLBACK(delete_win_cb), dialog);
 
 	/* Setup the vbox */
-	vbox = gtk_vbox_new(FALSE, 12);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
 	gtk_container_add(GTK_CONTAINER(dialog->win), vbox);
 	gtk_widget_show(vbox);
 
@@ -346,7 +348,7 @@
 	gtk_widget_show(label);
 
 	/* Add the search hbox */
-	hbox = gtk_hbox_new(FALSE, 6);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
 	gtk_widget_show(hbox);
 
@@ -418,12 +420,12 @@
 	gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->addrbooks_combo), 0);
 
 	/* Separator. */
-	sep = gtk_hseparator_new();
+	sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
 	gtk_widget_show(sep);
 
 	/* Button box */
-	bbox = gtk_hbutton_box_new();
+	bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_set_spacing(GTK_BOX(bbox), 6);
 	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
 	gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0);
--- a/pidgin/plugins/gevolution/gevolution.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/gevolution/gevolution.c	Wed Feb 12 21:08:49 2014 +0100
@@ -29,6 +29,7 @@
 #include "util.h"
 #include "version.h"
 
+#include "gtk3compat.h"
 #include "gtkblist.h"
 #include "gtkconv.h"
 #include "gtkplugin.h"
@@ -426,7 +427,7 @@
 	GList *l;
 
 	/* Outside container */
-	ret = gtk_vbox_new(FALSE, 18);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 12);
 
 	/* Configuration frame */
--- a/pidgin/plugins/gevolution/new_person_dialog.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/gevolution/new_person_dialog.c	Wed Feb 12 21:08:49 2014 +0100
@@ -20,6 +20,8 @@
  */
 #include "internal.h"
 #include "pidgin.h"
+
+#include "gtk3compat.h"
 #include "gtkutils.h"
 
 #include "debug.h"
@@ -33,7 +35,7 @@
 	GtkWidget *hbox;
 	GtkWidget *label;
 
-	hbox = gtk_hbox_new(FALSE, 6);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
 	gtk_box_pack_start(GTK_BOX(parent), hbox, FALSE, FALSE, 0);
 	gtk_widget_show(hbox);
 
@@ -249,7 +251,7 @@
 					 G_CALLBACK(delete_win_cb), dialog);
 
 	/* Setup the vbox */
-	vbox = gtk_vbox_new(FALSE, 12);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
 	gtk_container_add(GTK_CONTAINER(dialog->win), vbox);
 	gtk_widget_show(vbox);
 
@@ -300,7 +302,7 @@
 		gtk_widget_show_all(dialog->group_combo);
 
 		/* Separator */
-		sep = gtk_hseparator_new();
+		sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
 		gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
 		gtk_widget_show(sep);
 
@@ -312,7 +314,7 @@
 	}
 
 	/* Create the parent hbox for this whole thing. */
-	hbox = gtk_hbox_new(FALSE, 12);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
 	gtk_widget_show(hbox);
 
@@ -334,7 +336,7 @@
 #endif
 
 	/* Now the right side. */
-	vbox2 = gtk_vbox_new(FALSE, 12);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
 	gtk_widget_show(vbox2);
 
@@ -383,12 +385,12 @@
 	}
 
 	/* Separator */
-	sep = gtk_hseparator_new();
+	sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
 	gtk_widget_show(sep);
 
 	/* Button box */
-	bbox = gtk_hbutton_box_new();
+	bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_set_spacing(GTK_BOX(bbox), 6);
 	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
 	gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0);
--- a/pidgin/plugins/musicmessaging/musicmessaging.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/musicmessaging/musicmessaging.c	Wed Feb 12 21:08:49 2014 +0100
@@ -24,6 +24,7 @@
 
 #include "conversation.h"
 
+#include "gtk3compat.h"
 #include "gtkconv.h"
 #include "gtkplugin.h"
 #include "gtkutils.h"
@@ -607,7 +608,7 @@
 
 	gtk_container_add((GtkContainer *)button, image);
 
-	sep = gtk_vseparator_new();
+	sep = gtk_separator_new(GTK_ORIENTATION_VERTICAL);
 
 	mmconv->seperator = sep;
 	mmconv->button = button;
@@ -639,7 +640,7 @@
 	GtkWidget *editor_path_button;
 
 	/* Outside container */
-	ret = gtk_vbox_new(FALSE, 18);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
 	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
 
 	/* Configuration frame */
--- a/pidgin/plugins/notify.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/notify.c	Wed Feb 12 21:08:49 2014 +0100
@@ -93,6 +93,7 @@
 #include "version.h"
 #include "debug.h"
 
+#include "gtk3compat.h"
 #include "gtkplugin.h"
 #include "gtkutils.h"
 
@@ -673,12 +674,12 @@
 	GtkWidget *vbox = NULL, *hbox = NULL;
 	GtkWidget *toggle = NULL, *entry = NULL, *ref;
 
-	ret = gtk_vbox_new(FALSE, 18);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
 	gtk_container_set_border_width(GTK_CONTAINER (ret), 12);
 
 	/*---------- "Notify For" ----------*/
 	frame = pidgin_make_frame(ret, _("Notify For"));
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	toggle = gtk_check_button_new_with_mnemonic(_("_IM windows"));
@@ -715,11 +716,11 @@
 
 	/*---------- "Notification Methods" ----------*/
 	frame = pidgin_make_frame(ret, _("Notification Methods"));
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	/* String method button */
-	hbox = gtk_hbox_new(FALSE, 18);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 18);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	toggle = gtk_check_button_new_with_mnemonic(_("Prepend _string into window title:"));
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle),
@@ -785,7 +786,7 @@
 
 	/*---------- "Notification Removals" ----------*/
 	frame = pidgin_make_frame(ret, _("Notification Removal"));
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	/* Remove on focus button */
--- a/pidgin/plugins/raw.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/raw.c	Wed Feb 12 21:08:49 2014 +0100
@@ -29,6 +29,7 @@
 #include "prpl.h"
 #include "version.h"
 
+#include "gtk3compat.h"
 #include "gtkplugin.h"
 #include "gtkutils.h"
 
@@ -126,7 +127,7 @@
 					 G_CALLBACK(window_closed_cb), NULL);
 
 	/* Main hbox */
-	hbox = gtk_hbox_new(FALSE, 6);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
 	gtk_container_add(GTK_CONTAINER(window), hbox);
 
 	/* Account drop-down menu. */
--- a/pidgin/plugins/spellchk.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/spellchk.c	Wed Feb 12 21:08:49 2014 +0100
@@ -39,6 +39,7 @@
 #include "util.h"
 #include "version.h"
 
+#include "gtk3compat.h"
 #include "gtkplugin.h"
 #include "gtkprefs.h"
 #include "gtkutils.h"
@@ -2170,7 +2171,7 @@
 	GtkWidget *vbox2;
 	GtkWidget *vbox3;
 
-	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER(ret), PIDGIN_HIG_BORDER);
 
 	vbox = pidgin_make_frame(ret, _("Text Replacements"));
@@ -2240,7 +2241,7 @@
 		TRUE, TRUE, 0);
 	gtk_widget_show(tree);
 
-	hbox = gtk_hbutton_box_new();
+	hbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	gtk_widget_show(hbox);
 
@@ -2257,10 +2258,10 @@
 
 	vbox = pidgin_make_frame(ret, _("Add a new text replacement"));
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
 	gtk_widget_show(hbox);
-	vbox2 = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
+	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox2, TRUE, TRUE, 0);
 	gtk_widget_show(vbox2);
 
@@ -2295,7 +2296,7 @@
 	button = gtk_button_new_from_stock(GTK_STOCK_ADD);
 	g_signal_connect(G_OBJECT(button), "clicked",
 			   G_CALLBACK(list_add_new), NULL);
-	vbox3 = gtk_vbox_new(FALSE, 0);
+	vbox3 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_box_pack_start(GTK_BOX(hbox), vbox3, TRUE, FALSE, 0);
 	gtk_widget_show(vbox3);
 	gtk_box_pack_end(GTK_BOX(vbox3), button, FALSE, FALSE, 0);
--- a/pidgin/plugins/themeedit-icon.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/themeedit-icon.c	Wed Feb 12 21:08:49 2014 +0100
@@ -25,6 +25,7 @@
 
 #include "theme-manager.h"
 
+#include "gtk3compat.h"
 #include "gtkblist.h"
 #include "gtkblist-theme.h"
 #include "gtkutils.h"
@@ -271,7 +272,7 @@
 	for (s = 0; sections[s].heading; s++) {
 		const char *heading = sections[s].heading;
 
-		box = gtk_vbox_new(FALSE, 0);
+		box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 		gtk_notebook_append_page(GTK_NOTEBOOK(notebook), box, gtk_label_new(heading));
 
 		vbox = pidgin_make_frame(box, heading);
@@ -281,7 +282,7 @@
 			const char *id = sections[s].options[i].stockid;
 			const char *text = _(sections[s].options[i].text);
 
-			GtkWidget *hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+			GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_CAT_SPACE);
 			GtkWidget *label = gtk_label_new(text);
 			GtkWidget *image = gtk_image_new_from_stock(id,
 					gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL));
--- a/pidgin/plugins/themeedit.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/themeedit.c	Wed Feb 12 21:08:49 2014 +0100
@@ -168,7 +168,7 @@
 	GtkWidget *color;
 	GtkWidget *hbox, *label;
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_CAT_SPACE);
 
 	label = gtk_label_new(_(text));
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -192,7 +192,7 @@
 	GtkWidget *color, *font;
 	GtkWidget *hbox, *label;
 
-	hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_CAT_SPACE);
 
 	label = gtk_label_new(_(text));
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
--- a/pidgin/plugins/ticker/ticker.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/ticker/ticker.c	Wed Feb 12 21:08:49 2014 +0100
@@ -34,6 +34,7 @@
 #include "signals.h"
 #include "version.h"
 
+#include "gtk3compat.h"
 #include "gtkblist.h"
 #include "gtkplugin.h"
 #include "gtkutils.h"
@@ -166,7 +167,7 @@
 
 	td->ebox = gtk_event_box_new();
 	gtk_ticker_add(GTK_TICKER(ticker), td->ebox);
-	hbox = gtk_hbox_new(FALSE, 0);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
 	gtk_container_add(GTK_CONTAINER(td->ebox), hbox);
 	buddy_ticker_set_pixmap(contact);
 	gtk_box_pack_start(GTK_BOX(hbox), td->icon, FALSE, FALSE, 0);
--- a/pidgin/plugins/unity.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/unity.c	Wed Feb 12 21:08:49 2014 +0100
@@ -17,10 +17,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 #include "internal.h"
-#include "version.h"
 #include "account.h"
 #include "savedstatuses.h"
+#include "version.h"
 
+#include "gtk3compat.h"
 #include "gtkplugin.h"
 #include "gtkconv.h"
 #include "gtkutils.h"
@@ -431,13 +432,13 @@
 	GtkWidget *ret = NULL, *frame = NULL;
 	GtkWidget *vbox = NULL, *toggle = NULL;
 
-	ret = gtk_vbox_new(FALSE, 18);
+	ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, 18);
 	gtk_container_set_border_width(GTK_CONTAINER (ret), 12);
 
 	/* Alerts */
 
 	frame = pidgin_make_frame(ret, _("Chatroom alerts"));
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	toggle = gtk_check_button_new_with_mnemonic(_("Chatroom message alerts _only where someone says your username"));
@@ -450,7 +451,7 @@
 	/* Launcher integration */
 
 	frame = pidgin_make_frame(ret, _("Launcher Icon"));
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	toggle = gtk_radio_button_new_with_mnemonic(NULL, _("_Disable launcher integration"));
@@ -479,7 +480,7 @@
 	/* Messaging menu integration */
 
 	frame = pidgin_make_frame(ret, _("Messaging Menu"));
-	vbox = gtk_vbox_new(FALSE, 5);
+	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), vbox);
 
 	toggle = gtk_radio_button_new_with_mnemonic(NULL,
--- a/pidgin/plugins/win32/transparency/win2ktrans.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/win32/transparency/win2ktrans.c	Wed Feb 12 21:08:49 2014 +0100
@@ -30,6 +30,7 @@
 #include "prefs.h"
 #include "debug.h"
 
+#include "gtk3compat.h"
 #include "gtkconv.h"
 #include "gtkplugin.h"
 #include "gtkprefs.h"
@@ -166,7 +167,7 @@
 	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_NONE);
 	gtk_widget_show(frame);
 
-	hbox = gtk_hbox_new(FALSE, 5);
+	hbox = gtk_hbox_new(GTK_ORIENTATION_HORIZONTAL, 5);
 	gtk_container_add(GTK_CONTAINER(frame), hbox);
 
 	label = gtk_label_new(_("Opacity:"));
@@ -582,7 +583,7 @@
 	gtk_box_pack_start(GTK_BOX(imtransbox), trans_box, FALSE, FALSE, 5);
 
 	/* IM transparency slider */
-	hbox = gtk_hbox_new(FALSE, 5);
+	hbox = gtk_hbox_new(GTK_ORIENTATION_HORIZONTAL, 5);
 
 	label = gtk_label_new(_("Opacity:"));
 	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
@@ -629,7 +630,7 @@
 	gtk_box_pack_start(GTK_BOX(bltransbox), trans_box, FALSE, FALSE, 5);
 
 	/* IM transparency slider */
-	hbox = gtk_hbox_new(FALSE, 5);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
 
 	label = gtk_label_new(_("Opacity:"));
 	gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
--- a/pidgin/plugins/xmppconsole.c	Wed Feb 12 21:04:03 2014 +0100
+++ b/pidgin/plugins/xmppconsole.c	Wed Feb 12 21:08:49 2014 +0100
@@ -314,7 +314,7 @@
 	gtk_container_set_border_width(GTK_CONTAINER(dialog), 12);
 	vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("To:");
@@ -326,7 +326,7 @@
 	gtk_entry_set_activates_default (GTK_ENTRY (to_entry), TRUE);
 	gtk_box_pack_start(GTK_BOX(hbox), to_entry, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	label = gtk_label_new("Type:");
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -400,7 +400,7 @@
 	gtk_container_set_border_width(GTK_CONTAINER(dialog), 12);
 	vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("To:");
@@ -412,7 +412,7 @@
 	gtk_entry_set_activates_default (GTK_ENTRY (to_entry), TRUE);
 	gtk_box_pack_start(GTK_BOX(hbox), to_entry, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	label = gtk_label_new("Type:");
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -430,7 +430,7 @@
 	gtk_combo_box_set_active(GTK_COMBO_BOX(type_combo), 0);
 	gtk_box_pack_start(GTK_BOX(hbox), type_combo, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	label = gtk_label_new("Show:");
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -446,7 +446,7 @@
 	gtk_combo_box_set_active(GTK_COMBO_BOX(show_combo), 0);
 	gtk_box_pack_start(GTK_BOX(hbox), show_combo, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("Status:");
@@ -458,7 +458,7 @@
 	gtk_entry_set_activates_default (GTK_ENTRY (status_entry), TRUE);
 	gtk_box_pack_start(GTK_BOX(hbox), status_entry, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("Priority:");
@@ -556,7 +556,7 @@
 	gtk_container_set_border_width(GTK_CONTAINER(dialog), 12);
 	vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("To:");
@@ -568,7 +568,7 @@
 	gtk_entry_set_activates_default (GTK_ENTRY (to_entry), TRUE);
 	gtk_box_pack_start(GTK_BOX(hbox), to_entry, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 	label = gtk_label_new("Type:");
 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
@@ -583,7 +583,7 @@
 	gtk_combo_box_set_active(GTK_COMBO_BOX(type_combo), 0);
 	gtk_box_pack_start(GTK_BOX(hbox), type_combo, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("Body:");
@@ -595,7 +595,7 @@
 	gtk_entry_set_activates_default (GTK_ENTRY (body_entry), TRUE);
 	gtk_box_pack_start(GTK_BOX(hbox), body_entry, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("Subject:");
@@ -607,7 +607,7 @@
 	gtk_entry_set_activates_default (GTK_ENTRY (subject_entry), TRUE);
 	gtk_box_pack_start(GTK_BOX(hbox), subject_entry, FALSE, FALSE, 0);
 
-	hbox = gtk_hbox_new(FALSE, 3);
+	hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
 	label = gtk_label_new("Thread:");
@@ -794,7 +794,7 @@
 static void
 create_console(PurplePluginAction *action)
 {
-	GtkWidget *vbox = gtk_vbox_new(FALSE, 6);
+	GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
 	GtkWidget *label;
 	GtkWidget *toolbar;
 	GList *connections;
@@ -812,7 +812,7 @@
 	gtk_window_set_default_size(GTK_WINDOW(console->window), 580, 400);
 	gtk_container_add(GTK_CONTAINER(console->window), vbox);
 
-	console->hbox = gtk_hbox_new(FALSE, 3);
+	console->hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
 	gtk_box_pack_start(GTK_BOX(vbox), console->hbox, FALSE, FALSE, 0);
 	label = gtk_label_new(_("Account: "));
 	gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
--- a/po/POTFILES.in	Wed Feb 12 21:04:03 2014 +0100
+++ b/po/POTFILES.in	Wed Feb 12 21:08:49 2014 +0100
@@ -18,6 +18,7 @@
 finch/gntstatus.c
 finch/gntui.c
 finch/gntxfer.c
+finch/libfinch.c
 finch/libgnt/gntbox.c
 finch/libgnt/gntbutton.c
 finch/libgnt/gntcheckbox.c
@@ -219,7 +220,6 @@
 pidgin/gtkdialogs.c
 pidgin/gtkdocklet.c
 pidgin/gtklog.c
-pidgin/gtkmain.c
 pidgin/gtkmedia.c
 pidgin/gtknotify.c
 pidgin/gtkplugin.c
@@ -237,6 +237,7 @@
 pidgin/gtkwebviewtoolbar.c
 pidgin/gtkwhiteboard.c
 pidgin/gtkxfer.c
+pidgin/libpidgin.c
 pidgin/pidgin.h
 pidgin/pidginstock.c
 pidgin/pidgintooltip.c

mercurial