merge changes from default soc.2013.gobjectification

Mon, 03 Jun 2013 15:26:52 +0530

author
Ankit Vani <a@nevitus.org>
date
Mon, 03 Jun 2013 15:26:52 +0530
branch
soc.2013.gobjectification
changeset 34526
b8d598da7311
parent 34525
e6704a43a580 (current diff)
parent 33956
84f5fef32685 (diff)
child 34527
b711c042ec8b

merge changes from default

pidgin/plugins/vvconfig.c file | annotate | diff | comparison | revisions
--- a/ChangeLog	Fri May 31 19:02:45 2013 +0530
+++ b/ChangeLog	Mon Jun 03 15:26:52 2013 +0530
@@ -722,7 +722,7 @@
 	* Added extended capabilities support (none implemented).
 	* Merged the work done on the Google SoC (major rewrite of SLP code)
 	* Reworked the data transfer architecture.
-	  (http://developer.pidgin.im/wiki/SlpArchitecture)
+	  (https://developer.pidgin.im/wiki/SlpArchitecture)
 	* Lots of little changes.
 	* Don't process zero-length DC messages. (#12660)
 	* Fixed a bunch of memory leaks.
@@ -2123,7 +2123,7 @@
 	* Various memory leak fixes
 
 version 2.4.2 (05/17/2008):
-	http://developer.pidgin.im/query?status=closed&milestone=2.4.2
+	https://developer.pidgin.im/query?status=closed&milestone=2.4.2
 	libpurple:
 	* In MySpaceIM, messages from spambots are discarded (Justin Williams)
 	* Strip mIRC formatting codes from quit and part messages.
@@ -2189,7 +2189,7 @@
 	  enabled).
 
 version 2.4.1 (03/31/2008):
-	http://developer.pidgin.im/query?status=closed&milestone=2.4.1
+	https://developer.pidgin.im/query?status=closed&milestone=2.4.1
 
 	libpurple:
 	* Treat AIM Unicode messages as UTF-16 rather than UCS-2; this
@@ -2225,7 +2225,7 @@
 	  on the right to show it.
 
 version 2.4.0 (02/29/2008):
-	http://developer.pidgin.im/query?status=closed&milestone=2.4.0
+	https://developer.pidgin.im/query?status=closed&milestone=2.4.0
 
 	libpurple:
 	* Added support for offline messages for AIM accounts (thanks to
@@ -2284,7 +2284,7 @@
 	* Fixed a bug preventing finch working on x86_64
 
 version 2.3.1 (12/7/2007):
-	http://developer.pidgin.im/query?status=closed&milestone=2.3.1
+	https://developer.pidgin.im/query?status=closed&milestone=2.3.1
 		NOTE: Due to the way this release was made, it is possible that
 		      bugs marked as fixed in 2.3.1 will not be fixed until the
 		      next release.
@@ -2305,7 +2305,7 @@
 	* Prevent autoaccept plugin overwriting existing files
 
 version 2.3.0 (11/24/2007):
-	http://developer.pidgin.im/query?status=closed&milestone=2.3.0
+	https://developer.pidgin.im/query?status=closed&milestone=2.3.0
 		NOTE: Some bugs marked fixed in 2.2.1, 2.2.2 or 2.2.3 may not
 		      have been fixed until this release (2.3.0).
 
@@ -2378,7 +2378,7 @@
 	* 'yank' operation for the entry boxes. The default binding is ctrl+y.
 
 version 2.2.2 (10/23/2007):
-	http://developer.pidgin.im/query?status=closed&milestone=2.2.2
+	https://developer.pidgin.im/query?status=closed&milestone=2.2.2
 		NOTE: Due to the way this release was made, it is possible that
 			  bugs marked as fixed in 2.2.1 or 2.2.2 will not be fixed
 			  until the next release.
@@ -2390,7 +2390,7 @@
 	  how this is done on other platforms.
 
 version 2.2.1 (09/29/2007):
-	http://developer.pidgin.im/query?status=closed&milestone=2.2.1
+	https://developer.pidgin.im/query?status=closed&milestone=2.2.1
 		NOTE: Due to the backporting that happened for the actual
 		      release, it is possible bugs marked as fixed in 2.2.1
 		      will not be fixed until 2.2.2.
@@ -2415,7 +2415,7 @@
 	  dialog.
 
 version 2.2.0 (09/13/2007):
-	http://developer.pidgin.im/query?status=closed&milestone=2.2.0
+	https://developer.pidgin.im/query?status=closed&milestone=2.2.0
 
 	libpurple:
 	* New protocol plugin: MySpaceIM (Jeff Connelly, Google Summer of
@@ -2793,7 +2793,7 @@
 	  Summer of Code)
 	* Updated Gadu-Gadu protocol support (Bartosz Oler, Google Summer of
 	  Code).  This requires the libgadu library.  See
-	  http://pidgin.im/faq.php#libgadu for more information.
+	  https://pidgin.im/faq.php#libgadu for more information.
 	* SIP/SIMPLE support (Thomas Butter, Google Summer of Code)
 	* Sametime protocol support
 	  Requires the meanwhile library: http://meanwhile.sourceforge.net
--- a/HACKING	Fri May 31 19:02:45 2013 +0530
+++ b/HACKING	Mon Jun 03 15:26:52 2013 +0530
@@ -1,2 +1,2 @@
 For information on hacking on Pidgin, Finch, or libpurple, see:
-	http://developer.pidgin.im
+	https://developer.pidgin.im
--- a/NEWS	Fri May 31 19:02:45 2013 +0530
+++ b/NEWS	Mon Jun 03 15:26:52 2013 +0530
@@ -1,6 +1,6 @@
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
-Our development blog is available at: http://planet.pidgin.im
+Our development blog is available at: https://planet.pidgin.im
 
 2.8.0 (06/07/2011):
 	Paul: I fixed a few things in this release, and committed some
@@ -537,7 +537,7 @@
 2.0.1 (5/24/2007):
 	Sean: 2.0.1!  Three weeks later, as scheduled!  It is so nice to have
 	regular, frequent, releases again!  This is a bugfix release; We have
-	fixed over 100 issues reported to us at http://developer.pidgin.im.
+	fixed over 100 issues reported to us at https://developer.pidgin.im.
 	Thanks to everyone for their great work, and look for the next release
 	in another three weeks!
 
@@ -669,7 +669,7 @@
 	branding and organizational changes that have been going on for
 	the last few months, so there are likely to be some snags --
 	please help us out by trying beta 7, searching for any bugs you
-	find in the bug tracker at http://developer.pidgin.im/, and
+	find in the bug tracker at https://developer.pidgin.im/, and
 	documenting them if they are unknown or you can provide new
 	information.  Help us make 2.0.0 final a release to be remembered
 	(in a good way)!  I'd like to give huge thanks to all of the
--- a/PLUGIN_HOWTO	Fri May 31 19:02:45 2013 +0530
+++ b/PLUGIN_HOWTO	Mon Jun 03 15:26:52 2013 +0530
@@ -1,5 +1,5 @@
 For information on writing a plugin for Purple, Pidgin or Finch, go
-http://developer.pidgin.im and click on API.  From there, see the
+https://developer.pidgin.im and click on API.  From there, see the
 HOWTOs in the "Related Pages" section.
 
 You can also generate this documentation locally by installing
--- a/README	Fri May 31 19:02:45 2013 +0530
+++ b/README	Mon Jun 03 15:26:52 2013 +0530
@@ -43,7 +43,7 @@
 
 To get started, simply add a new account.
 
-If you come across a bug, please report it at: http://developer.pidgin.im
+If you come across a bug, please report it at: https://developer.pidgin.im
 
 PLUGINS
 =======
--- a/README.hg	Fri May 31 19:02:45 2013 +0530
+++ b/README.hg	Mon Jun 03 15:26:52 2013 +0530
@@ -16,7 +16,7 @@
 development bugs that we already know about but haven't gotten around to fixing.
 
 If you are interested in hacking on Pidgin, Finch, and/or libpurple, please
-check out the information available at: http://developer.pidgin.im
+check out the information available at: https://developer.pidgin.im
 
 By far the best documentation, however, is the documented code.  If you have
 doxygen, you can run "make docs" in the toplevel directory to generate pretty
@@ -30,4 +30,4 @@
 in #pidgin.  Please do as much homework as you can before contacting us; the
 more you know about your question, the faster and more effectively we can help!
 
-Patches should be posted as Trac tickets at: http://developer.pidgin.im
+Patches should be posted as Trac tickets at: https://developer.pidgin.im
--- a/README.mingw	Fri May 31 19:02:45 2013 +0530
+++ b/README.mingw	Mon Jun 03 15:26:52 2013 +0530
@@ -3,4 +3,4 @@
 
 For the latest build instructions, please refer to:
 
-http://developer.pidgin.im/wiki/BuildingWinPidgin
+https://developer.pidgin.im/wiki/BuildingWinPidgin
--- a/autogen.sh	Fri May 31 19:02:45 2013 +0530
+++ b/autogen.sh	Mon Jun 03 15:26:52 2013 +0530
@@ -150,7 +150,7 @@
 run_or_die ${GLIB_GETTEXTIZE} ${GLIB_GETTEXTIZE_FLAGS:-"--force --copy"}
 run_or_die ${INTLTOOLIZE} ${INTLTOOLIZE_FLAGS:-"-c -f --automake"}
 # This call to sed is needed to work around an annoying bug in intltool 0.40.6
-# See http://developer.pidgin.im/ticket/9520 for details
+# See https://developer.pidgin.im/ticket/9520 for details
 run_or_die ${SED} -i.bak -e "s:'\^\$\$lang\$\$':\^\$\$lang\$\$:g" po/Makefile.in.in
 run_or_die ${ACLOCAL} ${ACLOCAL_FLAGS:-"-I m4macros"}
 run_or_die ${AUTOHEADER} ${AUTOHEADER_FLAGS}
--- a/config.h.mingw	Fri May 31 19:02:45 2013 +0530
+++ b/config.h.mingw	Mon Jun 03 15:26:52 2013 +0530
@@ -362,7 +362,12 @@
 /* #undef TM_IN_SYS_TIME */
 
 /* Use GStreamer for playing sounds */
-/* #define USE_GSTREAMER 1 */
+/* It's defined in global.mak. */
+/* #undef USE_GSTREAMER */
+
+/* Use voice and video */
+/* It's defined in global.mak. */
+/* #undef USE_VV */
 
 /* Define if we're using GtkSpell */
 #define USE_GTKSPELL 1
--- a/doc/PERL-HOWTO.dox	Fri May 31 19:02:45 2013 +0530
+++ b/doc/PERL-HOWTO.dox	Mon Jun 03 15:26:52 2013 +0530
@@ -19,7 +19,7 @@
 	summary => "Test plugin for the Perl interpreter.",
 	description => "Your description here",
 	author => "John H. Kelm <johnhkelm\@gmail.com",
-	url => "http://pidgin.im",
+	url => "https://pidgin.im",
 
 	load => "plugin_load",
 	unload => "plugin_unload"
--- a/doc/TCL-HOWTO.dox	Fri May 31 19:02:45 2013 +0530
+++ b/doc/TCL-HOWTO.dox	Mon Jun 03 15:26:52 2013 +0530
@@ -37,7 +37,7 @@
 		"Example plugin registration" \
 		"Example of how to register a plugin for the Tcl HOWTO" \
 		"Ethan Blanton <eblanton@cs.purdue.edu>" \
-		"http://pidgin.im/" ]
+		"https://pidgin.im/" ]
 }
 @endcode
 
--- a/doc/finch.1.in	Fri May 31 19:02:45 2013 +0530
+++ b/doc/finch.1.in	Mon Jun 03 15:26:52 2013 +0530
@@ -566,12 +566,12 @@
 .SH FAQ
 FAQ for \fBfinch\fR is located at
 .br
-\fIhttp://developer.pidgin.im/wiki/Using%20Finch\fR
+\fIhttps://developer.pidgin.im/wiki/Using%20Finch\fR
 
 .SH BUGS
 Known bugs are listed at
 .br
-\fIhttp://developer.pidgin.im/query?status=new&status=assigned&status=reopened&component=finch+%28gnt%2Fncurses%29&order=priority\fR
+\fIhttps://developer.pidgin.im/query?status=new&status=assigned&status=reopened&component=finch+%28gnt%2Fncurses%29&order=priority\fR
 
 Before sending a bug report, please verify that you have the latest
 version of \fBfinch\fR and libpurple.  Many bugs (major and minor) are
@@ -581,15 +581,15 @@
 .SH PATCHES
 If you fix a bug in \fBfinch\fR (or otherwise enhance it), please submit a
 patch (using \fBmtn diff > my.diff\fR against the latest version from the
-Monotone repository) at \fIhttp://developer.pidgin.im/simpleticket\fR
+Monotone repository) at \fIhttps://developer.pidgin.im/simpleticket\fR
 
 You are also encouraged to drop by at \fB#pidgin\fR on \fIirc.freenode.net\fR
 to discuss development.
 
 .SH SEE ALSO
-\fIhttp://pidgin.im/\fR
+\fIhttps://pidgin.im/\fR
 .br
-\fIhttp://developer.pidgin.im/\fR
+\fIhttps://developer.pidgin.im/\fR
 .br
 \fBpurple-remote\fR(1)
 .br
--- a/doc/pidgin.1.in	Fri May 31 19:02:45 2013 +0530
+++ b/doc/pidgin.1.in	Mon Jun 03 15:26:52 2013 +0530
@@ -509,7 +509,7 @@
 .SH PLUGINS
 Pidgin allows for dynamic loading of plugins to add extra functionality
 to Pidgin.  See \fIplugins/HOWTO\fR or
-\fIhttp://developer.pidgin.im/wiki/CHowTo\fR for information on writing
+\fIhttps://developer.pidgin.im/wiki/CHowTo\fR for information on writing
 plugins.
 
 The plugins dialog can be accessed by selecting \fIPlugins\fR from the
@@ -559,7 +559,7 @@
   \fI~/.purple/plugins/\fR: users' local plugins
 
 .SH BUGS
-The bug tracker can be reached by visiting \fIhttp://developer.pidgin.im/query\fR
+The bug tracker can be reached by visiting \fIhttps://developer.pidgin.im/query\fR
 
 Before sending a bug report, please verify that you have the latest
 version of Pidgin.  Many bugs (major and minor) are fixed
@@ -569,16 +569,16 @@
 .SH PATCHES
 If you fix a bug in Pidgin (or otherwise enhance it), please submit a
 patch (using \fBmtn diff > my.diff\fR against the latest version from the
-Monotone repository) at \fIhttp://developer.pidgin.im/simpleticket\fR
+Monotone repository) at \fIhttps://developer.pidgin.im/simpleticket\fR
 
 You are also encouraged to drop by at \fB#pidgin\fR on \fIirc.freenode.net\fR
 to discuss development.
 
 
 .SH SEE ALSO
-\fIhttp://pidgin.im/\fR
+\fIhttps://pidgin.im/\fR
 .br
-\fIhttp://developer.pidgin.im/\fR
+\fIhttps://developer.pidgin.im/\fR
 .br
 \fBpurple-remote\fR(1)
 .br
@@ -610,44 +610,28 @@
 .br
   Ethan 'Paco-Paco' Blanton (developer)
 .br
-  Thomas Butter (developer)
-.br
-  Ka-Hing Cheung (developer)
-.br
   Sadrul Habib Chowdhury (developer)
 .br
   Mark 'KingAnt' Doliner (developer) <\fIthekingant@users.sourceforge.net\fR>
 .br
-  Sean Egan (developer) <\fIseanegan@gmail.com\fR>
-.br
-  Casey Harkins (developer)
-.br
-  Ivan Komarov
-.br
   Gary 'grim' Kramlich (developer)
 .br
   Richard 'rlaager' Laager (developer) <\fIrlaager@pidgin.im\fR>
 .br
+  Marcus 'malu' Lundblad (developer)
+.br
   Sulabh 'sulabh_m' Mahajan (developer)
 .br
   Richard 'wabz' Nelson (developer)
 .br
-  Christopher 'siege' O'Brien (developer)
-.br
-  Bartosz Oler (developer)
-.br
   Etan 'deryni' Reisner (developer)
 .br
-  Tim 'marv' Ringenbach (developer) <\fImarv_sf@users.sf.net\fR>
-.br
   Michael 'Maiku' Ruprecht (developer, voice and video)
 .br
   Elliott 'QuLogic' Sales de Andrade (developer)
 .br
   Luke 'LSchiere' Schierer (support)
 .br
-  Megan 'Cae' Schneider (support/QA)
-.br
   Evan Schoenberg (developer)
 .br
   Kevin 'SimGuy' Stange (developer and webmaster)
@@ -656,21 +640,19 @@
 .br
   Stu 'nosnilmot' Tomlinson (developer)
 .br
-  Nathan 'faceprint' Walp (developer)
+  Jorge 'Masca' VillaseƱor
+.br
+  Tomasz Wasilczyk
 .br
 
 
 Our crazy patch writers include:
 .br
-  Marcus 'malu' Lundblad
-.br
-  Dennis 'EvilDennisR' Ristuccia
+  Jakub 'haakon' Adam
 .br
-  Peter 'fmoo' Ruibal
+  Krzysztof Klinikowski
 .br
-  Gabriel 'Nix' Schulhof
-.br
-  Jorge 'Masca' VillaseƱor
+  Eion Robb
 .br
 
 
@@ -684,20 +666,40 @@
 .br
   Herman Bloggs (win32 port) <\fIherman@bluedigits.com\fR>
 .br
+  Thomas Butter (developer)
+.br
+  Ka-Hing Cheung (developer)
+.br
   Jim Duchek <\fIjim@linuxpimps.com\fR> (maintainer)
 .br
+  Sean Egan (developer) <\fIseanegan@gmail.com\fR>
+.br
   Rob Flynn <\fIgaim@robflynn.com\fR> (maintainer)
 .br
   Adam Fritzler (libfaim maintainer)
 .br
   Christian 'ChipX86' Hammond (developer & webmaster) <\fIchipx86@chipx86.com\fR>
 .br
+  Casey Harkins (developer)
+.br
+  Ivan Komarov
+.br
   Syd Logan (hacker and designated driver [lazy bum])
 .br
+  Christopher 'siege' O'Brien (developer)
+.br
+  Bartosz Oler (developer)
+.br
+  Tim 'marv' Ringenbach (developer) <\fImarv_sf@users.sf.net\fR>
+.br
+  Megan 'Cae' Schneider (support/QA)
+.br
   Jim Seymour (XMPP developer)
 .br
   Mark Spencer (original author) <\fImarkster@marko.net\fR>
 .br
+  Nathan 'faceprint' Walp (developer)
+.br
   Eric Warmenhoven (former lead developer) <\fIeric@warmenhoven.org\fR>
 .br
 
@@ -714,6 +716,12 @@
 .br
   Benjamin Miller
 .br
+  Dennis 'EvilDennisR' Ristuccia
+.br
+  Peter 'fmoo' Ruibal
+.br
+  Gabriel 'Nix' Schulhof
+.br
 
 
 This manpage was originally written by Dennis Ristuccia
--- a/doc/plugin-ids.dox	Fri May 31 19:02:45 2013 +0530
+++ b/doc/plugin-ids.dox	Mon Jun 03 15:26:52 2013 +0530
@@ -36,9 +36,9 @@
     - qpe       - A plugin for the (now-abandoned) Qutopia user interface.
 
   The @em username must be a unique identifier for you. It
-  @em should be your http://developer.pidgin.im Trac user ID. Failing that, you
+  @em should be your https://developer.pidgin.im Trac user ID. Failing that, you
   could use your SourceForge user ID or your Freenode IRC nickname, if you
-  have either. The http://developer.pidgin.im Trac user ID is preferred.
+  have either. The https://developer.pidgin.im Trac user ID is preferred.
   Do @em not leave this field blank!
 
   The @em pluginname is the name of your plugin. It is usually all
--- a/finch/finch.c	Fri May 31 19:02:45 2013 +0530
+++ b/finch/finch.c	Mon Jun 03 15:26:52 2013 +0530
@@ -65,8 +65,8 @@
 
 		g_hash_table_insert(ui_info, "name", (char*)_("Finch"));
 		g_hash_table_insert(ui_info, "version", VERSION);
-		g_hash_table_insert(ui_info, "website", "http://pidgin.im");
-		g_hash_table_insert(ui_info, "dev_website", "http://developer.pidgin.im");
+		g_hash_table_insert(ui_info, "website", "https://pidgin.im");
+		g_hash_table_insert(ui_info, "dev_website", "https://developer.pidgin.im");
 		g_hash_table_insert(ui_info, "client_type", "console");
 
 		/*
--- a/libpurple/Makefile.mingw	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/Makefile.mingw	Mon Jun 03 15:26:52 2013 +0530
@@ -33,15 +33,27 @@
 			-I$(GTK_TOP)/include/glib-2.0 \
 			-I$(GTK_TOP)/lib/glib-2.0/include \
 			-I$(JSON_GLIB_TOP)/include/json-glib-1.0 \
-			-I$(LIBXML2_TOP)/include/libxml2
+			-I$(LIBXML2_TOP)/include/libxml2 \
+			$(VV_INCLUDE_PATHS)
 
 LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(JSON_GLIB_TOP)/lib \
-			-L$(LIBXML2_TOP)/lib
+			-L$(LIBXML2_TOP)/lib \
+			$(VV_LIB_PATHS)
 
 ##
 ##  SOURCES, OBJECTS
 ##
+ifeq "$(USE_VV)" "1"
+VV_SRC = \
+	media/backend-fs2.c \
+	media/backend-iface.c \
+	media/codec.c \
+	marshallers.c
+else
+VV_SRC =
+endif
+
 C_SRC =	\
 			account.c \
 			accountopt.c \
@@ -109,7 +121,8 @@
 			xmlnode.c \
 			win32/giowin32.c \
 			win32/libc_interface.c \
-			win32/win32dep.c
+			win32/win32dep.c \
+			$(VV_SRC)
 
 RC_SRC = win32/libpurplerc.rc
 
@@ -127,7 +140,8 @@
 		-lintl \
 		-lws2_32 \
 		-lxml2 \
-		-ljson-glib-1.0
+		-ljson-glib-1.0 \
+		$(VV_LIBS)
 
 include $(PIDGIN_COMMON_RULES)
 
@@ -159,6 +173,19 @@
 
 $(OBJECTS): $(PURPLE_CONFIG_H) $(PURPLE_VERSION_H) $(PURPLE_PURPLE_H)
 
+marshallers.h: marshallers.list
+	@echo -e "  GEN\t$@"
+	@$(GLIB_GENMARSHAL) --prefix=purple_smarshal $< --header > marshallers.h
+
+marshallers.c: marshallers.list marshallers.h
+	@echo -e "  GEN\t$@"
+	@echo "#include \"marshallers.h\"" > marshallers.c
+	@$(GLIB_GENMARSHAL) --prefix=purple_smarshal $< --body >> marshallers.c
+
+ifeq "$(USE_VV)" "1"
+mediamanager.c media/backend-iface.c: marshallers.h
+endif
+
 $(TARGET).dll $(TARGET).dll.a: $(OBJECTS)
 	$(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -Wl,--output-def,$(TARGET).def,--out-implib,$(TARGET).dll.a -o $(TARGET).dll
 
@@ -166,7 +193,7 @@
 ## CLEAN RULES
 ##
 clean:
-	rm -f $(OBJECTS) $(RC_SRC) $(PURPLE_VERSION_H) $(PURPLE_PURPLE_H)
+	rm -f $(OBJECTS) $(RC_SRC) $(PURPLE_VERSION_H) $(PURPLE_PURPLE_H) marshallers.h marshallers.c
 	rm -f $(TARGET).dll $(TARGET).dll.a $(TARGET).def
 	$(MAKE_at) $(MAKE) -C $(PURPLE_PROTOS_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE_at) $(MAKE) -C $(PURPLE_PLUGINS_TOP) -f $(MINGW_MAKEFILE) clean
--- a/libpurple/core.h	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/core.h	Mon Jun 03 15:26:52 2013 +0530
@@ -177,10 +177,10 @@
  *   <dd>a user-readable description of the current version of the UI.</dd>
  *
  *   <dt><tt>website</tt></dt>
- *   <dd>the UI's website, such as http://pidgin.im.</dd>
+ *   <dd>the UI's website, such as https://pidgin.im.</dd>
  *
  *   <dt><tt>dev_website</tt></dt>
- *   <dd>the UI's development/support website, such as http://developer.pidgin.im.</dd>
+ *   <dd>the UI's development/support website, such as https://developer.pidgin.im.</dd>
  *
  *   <dt><tt>client_type</tt></dt>
  *   <dd>the type of UI. Possible values include 'pc', 'console', 'phone',
--- a/libpurple/internal.h	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/internal.h	Mon Jun 03 15:26:52 2013 +0530
@@ -150,8 +150,8 @@
 
 #include <glib-object.h>
 
-#define PURPLE_WEBSITE "http://pidgin.im/"
-#define PURPLE_DEVEL_WEBSITE "http://developer.pidgin.im/"
+#define PURPLE_WEBSITE "https://pidgin.im/"
+#define PURPLE_DEVEL_WEBSITE "https://developer.pidgin.im/"
 
 
 /* INTERNAL FUNCTIONS */
--- a/libpurple/media/backend-fs2.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/media/backend-fs2.c	Mon Jun 03 15:26:52 2013 +0530
@@ -1661,11 +1661,14 @@
 	gst_object_unref(session->src);
 	gst_object_unref(sinkpad);
 
-	gst_element_set_state(session->src, GST_STATE_PLAYING);
-
 	purple_media_manager_create_output_window(purple_media_get_manager(
 			priv->media), priv->media, sess_id, NULL);
 
+	purple_debug_info("backend-fs2", "create_src: setting source "
+		"state to GST_STATE_PLAYING - it may hang here on win32\n");
+	gst_element_set_state(session->src, GST_STATE_PLAYING);
+	purple_debug_info("backend-fs2", "create_src: state set\n");
+
 	return TRUE;
 }
 
@@ -2096,8 +2099,8 @@
 	if (!fs_stream_set_transmitter(fsstream, transmitter,
 			_params, _num_params, &err)) {
 		purple_debug_error("backend-fs2",
-				"Could not set transmitter %s: %s.\n",
-				transmitter, err->message);
+			"Could not set transmitter %s: %s.\n",
+			transmitter, err ? err->message : NULL);
 		g_clear_error(&err);
 		g_free(_params);
 		return FALSE;
--- a/libpurple/mediamanager.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/mediamanager.c	Mon Jun 03 15:26:52 2013 +0530
@@ -830,7 +830,7 @@
 				if (g_object_class_find_property(klass,
 						"sync"))
 					g_object_set(G_OBJECT(ow->sink),
-							"sync", "FALSE", NULL);
+							"sync", FALSE, NULL);
 				if (g_object_class_find_property(klass,
 						"async"))
 					g_object_set(G_OBJECT(ow->sink),
--- a/libpurple/plugins/debug_example.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/debug_example.c	Mon Jun 03 15:26:52 2013 +0530
@@ -113,7 +113,7 @@
 	"Debug API Example",        /* summary */
 	"Debug API Example",        /* description */
 	PLUGIN_AUTHOR,              /* author */
-	"http://pidgin.im",         /* homepage */
+	"https://pidgin.im",         /* homepage */
 
 	plugin_load,                /* load */
 	NULL,                       /* unload */
--- a/libpurple/plugins/fortuneprofile.pl	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/fortuneprofile.pl	Mon Jun 03 15:26:52 2013 +0530
@@ -51,7 +51,7 @@
 	summary          => "Sets your AIM profile to a fortune (with a header and footer of your choice).",
 	description      => "Sets your AIM profile to a fortune (with a header and footer of your choice).",
 	author           => "Sean Egan <seanegan\@gmail.com>",
-	url              => "http://pidgin.im/",
+	url              => "https://pidgin.im/",
 
 	load             => "plugin_load"
 );
--- a/libpurple/plugins/notify_example.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/notify_example.c	Mon Jun 03 15:26:52 2013 +0530
@@ -87,7 +87,7 @@
 notify_uri_cb(PurplePluginAction *action)
 {
 	/* This one should open your web browser of choice. */
-	purple_notify_uri(notify_example, "http://www.pidgin.im/");
+	purple_notify_uri(notify_example, "https://www.pidgin.im/");
 }
 
 static GList *
@@ -139,7 +139,7 @@
 	"Notify API Example",       /* summary */
 	"Notify API Example",       /* description */
 	PLUGIN_AUTHOR,              /* author */
-	"http://pidgin.im",         /* homepage */
+	"https://pidgin.im",        /* homepage */
 
 	plugin_load,                /* load */
 	NULL,                       /* unload */
--- a/libpurple/plugins/perl/common/Makefile.PL.in	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/perl/common/Makefile.PL.in	Mon Jun 03 15:26:52 2013 +0530
@@ -8,7 +8,7 @@
     'PREREQ_PM'         => {}, # e.g., Module::Name => 1.1
     ($] >= 5.005 ? ## Add these new keywords supported since 5.005
       (ABSTRACT_FROM    => '@srcdir@/Purple.pm', # finds $ABSTRACT
-       AUTHOR           => 'Purple <http://pidgin.im/>') : ()),
+       AUTHOR           => 'Purple <https://pidgin.im/>') : ()),
     'DEFINE'            => '@DEBUG_CFLAGS@',
     'dynamic_lib'       => { 'OTHERLDFLAGS' => '@LDFLAGS@' },
     'INC'               => '-I. -I@srcdir@ -I@top_srcdir@ -I@top_srcdir@/libpurple @GLIB_CFLAGS@',
--- a/libpurple/plugins/perl/common/Purple.pm	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/perl/common/Purple.pm	Mon Jun 03 15:26:52 2013 +0530
@@ -77,7 +77,7 @@
 accounts, the buddy list, libpurple signals, and more.
 
 The API for the perl interface is very similar to that of the Purple C
-API, which can be viewed at http://developer.pidgin.im/doxygen/ or in
+API, which can be viewed at https://developer.pidgin.im/doxygen/ or in
 the header files in the Purple source tree.
 
 =head1 FUNCTIONS
@@ -112,9 +112,9 @@
 
 =head1 SEE ALSO
 
-Purple C API documentation - http://developer.pidgin.im/doxygen/
+Purple C API documentation - https://developer.pidgin.im/doxygen/
 
-Purple website - http://pidgin.im/
+Purple website - https://pidgin.im/
 
 =head1 AUTHOR
 
--- a/libpurple/plugins/perl/scripts/count_down.pl	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/perl/scripts/count_down.pl	Mon Jun 03 15:26:52 2013 +0530
@@ -7,7 +7,7 @@
 	summary => "Makes a countdown in days from today.", 
 	description => "Long description coming....", 
 	author => "John H. Kelm <johnhkelm\@gmail.com>", 
-	url => "http://pidgin.im", 
+	url => "https://pidgin.im", 
 	
 	load => "plugin_load", 
 	unload => "plugin_unload" 
--- a/libpurple/plugins/perl/scripts/gtk_frame_test.pl	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/perl/scripts/gtk_frame_test.pl	Mon Jun 03 15:26:52 2013 +0530
@@ -9,7 +9,7 @@
 	summary => "Test plugin for the Perl interpreter.", 
 	description => "Implements a set of test proccedures to ensure all functions that work in the C API still work in the Perl plugin interface.  As XSUBs are added, this *should* be updated to test the changes.  Furthermore, this will function as the tutorial perl plugin.", 
 	author => "John H. Kelm <johnhkelm\@gmail.com>", 
-	url => "http://pidgin.im", 
+	url => "https://pidgin.im", 
 	
 	GTK_UI => TRUE,
 	gtk_prefs_info => "foo",
--- a/libpurple/plugins/perl/scripts/signals-test.pl	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/perl/scripts/signals-test.pl	Mon Jun 03 15:26:52 2013 +0530
@@ -10,7 +10,7 @@
 	description => "Demonstrate the use of purple signals from " .
 		       "a perl plugin.",
 	author => "Sadrul Habib Chowdhury <sadrul\@pidgin.im>",
-	url => "http://developer.pidgin.im/wiki/sadrul/",
+	url => "https://developer.pidgin.im/wiki/sadrul/",
 
 	load => "plugin_load",
 	unload => "plugin_unload"
--- a/libpurple/plugins/tcl/signal-test.tcl	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/tcl/signal-test.tcl	Mon Jun 03 15:26:52 2013 +0530
@@ -119,5 +119,5 @@
 	     "Tests Tcl signal handlers" \
              "Debugs a ridiculous amount of signal information." \
              "Ethan Blanton <elb@pidgin.im>" \
-             "http://www.pidgin.im/"
+             "https://www.pidgin.im/"
 }
--- a/libpurple/plugins/test.pl	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/plugins/test.pl	Mon Jun 03 15:26:52 2013 +0530
@@ -7,7 +7,7 @@
 	summary          => 'Provides as a test base for the perl plugin.',
 	description      => 'Provides as a test base for the perl plugin.',
 	author           => 'Etan Reisner <deryni\@pidgin.im>',
-	url              => 'http://pidgin.im',
+	url              => 'https://pidgin.im',
 
 	load             => "plugin_load"
 );
--- a/libpurple/protocols/bonjour/bonjour.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/bonjour/bonjour.c	Mon Jun 03 15:26:52 2013 +0530
@@ -97,7 +97,8 @@
 		purple_connection_error(gc,
 				PURPLE_CONNECTION_ERROR_OTHER_ERROR,
 				_("Unable to find Apple's \"Bonjour for Windows\" toolkit, see "
-				  "http://d.pidgin.im/BonjourWindows for more information."));
+				  "https://developer.pidgin.im/BonjourWindows for more "
+				  "information."));
 		return;
 	}
 #endif /* _WIN32 */
--- a/libpurple/protocols/jabber/Makefile.mingw	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/jabber/Makefile.mingw	Mon Jun 03 15:26:52 2013 +0530
@@ -34,16 +34,24 @@
 			-I$(LIBXML2_TOP)/include/libxml2 \
 			-I$(PURPLE_TOP) \
 			-I$(PURPLE_TOP)/win32 \
-			-I$(PIDGIN_TREE_TOP)
+			-I$(PIDGIN_TREE_TOP) \
+			$(VV_INCLUDE_PATHS)
 
 LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(LIBXML2_TOP)/lib \
 			-L$(PURPLE_TOP) \
-			-L.
+			-L. \
+			$(VV_LIB_PATHS)
 
 ##
 ##  SOURCES, OBJECTS
 ##
+ifeq "$(USE_VV)" "1"
+VV_SRC = google/google_p2p.c
+else
+VV_SRC =
+endif
+
 C_SRC =	\
 			adhoccommands.c \
 			auth.c \
@@ -88,7 +96,8 @@
 			usernick.c \
 			usertune.c \
 			xdata.c \
-			win32/posix.uname.c
+			win32/posix.uname.c \
+			$(VV_SRC)
 
 OBJECTS = $(C_SRC:%.c=%.o)
 
@@ -107,6 +116,7 @@
 LIBS = \
 			-lglib-2.0 \
 			-lgobject-2.0 \
+			$(VV_LIBS) \
 			-lxml2 \
 			-lws2_32 \
 			-lintl \
--- a/libpurple/protocols/jabber/google/gmail.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/jabber/google/gmail.c	Mon Jun 03 15:26:52 2013 +0530
@@ -188,7 +188,7 @@
 		return;
 
 	/*
-	 * Quoting http://code.google.com/apis/talk/jep_extensions/usersettings.html:
+	 * Quoting https://developers.google.com/talk/jep_extensions/usersettings:
 	 * To ensure better compatibility with other clients, rather than
 	 * setting this value to "false" to turn off notifications, it is
 	 * recommended that a client set this to "true" and filter incoming
--- a/libpurple/protocols/jabber/google/jingleinfo.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/jabber/google/jingleinfo.c	Mon Jun 03 15:26:52 2013 +0530
@@ -81,7 +81,7 @@
 
 	/*
 	 * Make sure that random people aren't sending us STUN servers. Per
-	 * http://code.google.com/apis/talk/jep_extensions/jingleinfo.html, these
+	 * https://developers.google.com/talk/jep_extensions/jingleinfo, these
 	 * stanzas are stamped from our bare JID.
 	 */
 	if (from) {
--- a/libpurple/protocols/jabber/jabber.h	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/jabber/jabber.h	Mon Jun 03 15:26:52 2013 +0530
@@ -37,7 +37,7 @@
 	JABBER_CAP_IQ_REGISTER    = 1 << 8,
 
 	/* Google Talk extensions:
-	 * http://code.google.com/apis/talk/jep_extensions/extensions.html
+	 * https://developers.google.com/talk/jep_extensions/extensions
 	 */
 	JABBER_CAP_GMAIL_NOTIFY   = 1 << 9,
 	JABBER_CAP_GOOGLE_ROSTER  = 1 << 10,
@@ -78,7 +78,7 @@
 #include <sasl/sasl.h>
 #endif
 
-#define CAPS0115_NODE "http://pidgin.im/"
+#define CAPS0115_NODE "https://pidgin.im/"
 
 #define JABBER_DEFAULT_REQUIRE_TLS    "require_starttls"
 #define JABBER_DEFAULT_FT_PROXIES     "proxy.eu.jabber.org"
@@ -150,9 +150,9 @@
 	 * when we receive a roster push.
 	 *
 	 * See these bug reports:
-	 * http://trac.adiumx.com/ticket/8834
-	 * http://developer.pidgin.im/ticket/5484
-	 * http://developer.pidgin.im/ticket/6188
+	 * https://trac.adium.im/ticket/8834
+	 * https://developer.pidgin.im/ticket/5484
+	 * https://developer.pidgin.im/ticket/6188
 	 */
 	gboolean currently_parsing_roster_push;
 
@@ -353,7 +353,7 @@
 
 /** Adds an identity to this jabber library instance. For list of valid values
  * visit the website of the XMPP Registrar
- * (http://www.xmpp.org/registrar/disco-categories.html#client).
+ * (http://xmpp.org/registrar/disco-categories.html#client)
  *
  * Like with jabber_add_feature, if you call this while accounts are connected,
  * Bad Things will happen.
--- a/libpurple/protocols/myspace/README	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/myspace/README	Mon Jun 03 15:26:52 2013 +0530
@@ -7,7 +7,7 @@
 
 This code was initially developed under Google Summer of Code 2007.
 
-For features and TODO, see http://developer.pidgin.im/wiki/MySpaceIM
+For features and TODO, see https://developer.pidgin.im/wiki/MySpaceIM
 
 Usage:
 
--- a/libpurple/protocols/myspace/myspace.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/myspace/myspace.c	Mon Jun 03 15:26:52 2013 +0530
@@ -363,7 +363,7 @@
 msim_list_icon(PurpleAccount *acct, PurpleBuddy *buddy)
 {
 	/* Use a MySpace icon submitted by hbons at
-	 * http://developer.pidgin.im/wiki/MySpaceIM. */
+	 * https://developer.pidgin.im/wiki/MySpaceIM. */
 	return "myspace";
 }
 
@@ -3211,7 +3211,7 @@
 	                                                  /**  description    */
 	"MySpaceIM Protocol Plugin",
 	"Jeff Connelly <jeff2@soc.pidgin.im>",            /**< author         */
-	"http://developer.pidgin.im/wiki/MySpaceIM/",     /**< homepage       */
+	"https://developer.pidgin.im/wiki/MySpaceIM/",    /**< homepage       */
 
 	msim_load,                                        /**< load           */
 	NULL,                                             /**< unload         */
--- a/libpurple/protocols/oscar/oscar.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/oscar/oscar.c	Mon Jun 03 15:26:52 2013 +0530
@@ -53,7 +53,7 @@
 #include "oscar.h"
 #include "peer.h"
 
-#define AIMHASHDATA "http://pidgin.im/aim_data.php3"
+#define AIMHASHDATA "https://pidgin.im/aim_data.php3"
 
 static guint64 purple_caps =
 	OSCAR_CAPABILITY_CHAT
--- a/libpurple/protocols/yahoo/util.c	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/protocols/yahoo/util.c	Mon Jun 03 15:26:52 2013 +0530
@@ -830,9 +830,9 @@
 
 					/*
 					 * TODO: Ideally we would replace this:
-					 * <a href="http://pidgin.im/">Pidgin</a>
+					 * <a href="https://pidgin.im/">Pidgin</a>
 					 * with this:
-					 * Pidgin (http://pidgin.im/)
+					 * Pidgin (https://pidgin.im/)
 					 *
 					 * Currently we drop the text within the <a> tag and
 					 * just show the URL.  Doing it the fancy way is
--- a/libpurple/win32/global.mak	Fri May 31 19:02:45 2013 +0530
+++ b/libpurple/win32/global.mak	Mon Jun 03 15:26:52 2013 +0530
@@ -121,11 +121,33 @@
 INTLTOOL_MERGE ?= $(INTLTOOL_TOP)/bin/intltool-merge
 MONO_SIGNCODE ?= signcode
 GPG_SIGN ?= gpg
+GLIB_GENMARSHAL ?= $(GTK_BIN)/glib-genmarshal
 
 PIDGIN_COMMON_RULES := $(PURPLE_TOP)/win32/rules.mak
 PIDGIN_COMMON_TARGETS := $(PURPLE_TOP)/win32/targets.mak
 MINGW_MAKEFILE := Makefile.mingw
 MAKE_at := @
 
+USE_VV ?= 0
+
+ifeq "$(USE_VV)" "1"
+VV_LIBS := \
+	-lgstreamer-0.10 \
+	-lgstvideo-0.10 \
+	-lgstinterfaces-0.10 \
+	-lfarstream-0.1
+VV_INCLUDE_PATHS := \
+	-I$(GSTREAMER_TOP)/include/gstreamer-0.10 \
+	-I$(GSTREAMER_TOP)/include/farstream-0.1 \
+	-I$(LIBXML2_TOP)/include/libxml2
+VV_LIB_PATHS := \
+	-L$(GSTREAMER_TOP)/lib
+DEFINES += -DUSE_GSTREAMER -DUSE_VV
+else
+VV_LIBS :=
+VV_INCLUDE_PATHS :=
+VV_LIB_PATHS :=
+endif
+
 INSTALL_PIXMAPS ?= 1
 INSTALL_SSL_CERTIFICATES ?= 1
--- a/m4macros/purple.m4	Fri May 31 19:02:45 2013 +0530
+++ b/m4macros/purple.m4	Mon Jun 03 15:26:52 2013 +0530
@@ -84,7 +84,7 @@
 		if test x"found_version" != x"" ; then
 			echo "*** A new enough version of purple was not found."
 			echo "*** You have version $found_version"
-			echo "*** See http://pidgin.im/"
+			echo "*** See https://pidgin.im/"
 		fi
 
 		PURPLE_CFLAGS=""
--- a/pidgin.apspec.in	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin.apspec.in	Mon Jun 03 15:26:52 2013 +0530
@@ -5,7 +5,7 @@
 DisplayName: Pidgin Internet Messenger
 ShortName: Pidgin
 Maintainer: The Pidgin Developers
-URL: http://pidgin.im/
+URL: https://pidgin.im/
 Packager: Tim Ringenbach <marv_sf@users.sourceforge.net>
 Summary: A GTK+ based multiprotocol instant messaging client
 SoftwareVersion: @VERSION@
--- a/pidgin.spec.in	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin.spec.in	Mon Jun 03 15:26:52 2013 +0530
@@ -23,7 +23,7 @@
 Release:    0%{?beta:.beta%{beta}}
 License:    GPL
 Group:      Applications/Internet
-URL:        http://pidgin.im/
+URL:        https://pidgin.im/
 Source:     %{name}-@VERSION@.tar.bz2
 BuildRoot:  %{_tmppath}/%{name}-%{version}-root
 
--- a/pidgin/Makefile.mingw	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/Makefile.mingw	Mon Jun 03 15:26:52 2013 +0530
@@ -35,6 +35,7 @@
 			$(PURPLE_INCLUDE_PATHS) \
 			-I$(PIDGIN_TOP) \
 			-I$(PIDGIN_TOP)/win32 \
+			$(VV_INCLUDE_PATHS) \
 			-I$(GTK_TOP)/include/gtk-2.0 \
 			-I$(GTK_TOP)/include/pango-1.0 \
 			-I$(GTK_TOP)/include/atk-1.0 \
@@ -48,7 +49,8 @@
 LIB_PATHS +=		-L$(GTK_TOP)/lib \
 			-L$(WEBKITGTK_TOP)/lib \
 			-L$(PURPLE_TOP) \
-			-L$(PIDGIN_TOP)
+			-L$(PIDGIN_TOP) \
+			$(VV_LIB_PATHS)
 
 ##
 ##  SOURCES, OBJECTS
@@ -134,6 +136,7 @@
 		-lgdk_pixbuf-2.0 \
 		-lgdi32 \
 		-lwinmm \
+		$(VV_LIBS) \
 		-lwebkitgtk-1.0
 
 include $(PIDGIN_COMMON_RULES)
@@ -146,6 +149,8 @@
 all: $(EXE_TARGET).exe $(PIDGIN_TARGET).dll
 	$(MAKE_at) $(MAKE) -C $(PIDGIN_PLUGINS_TOP) -f $(MINGW_MAKEFILE)
 
+gtkdialogs.c: $(PIDGIN_REVISION_H)
+
 win32/pidgin_exe_rc.rc: win32/pidgin_exe_rc.rc.in $(PIDGIN_TREE_TOP)/VERSION
 	@echo -e "  GEN\t$@"
 	@sed -e 's/@PIDGIN_VERSION@/$(PIDGIN_VERSION)/g' \
--- a/pidgin/gtkblist.c	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/gtkblist.c	Mon Jun 03 15:26:52 2013 +0530
@@ -5297,7 +5297,7 @@
 		purple_account_clear_current_error(account);
 }
 
-#define SSL_FAQ_URI "http://d.pidgin.im/wiki/FAQssl"
+#define SSL_FAQ_URI "https://developer.pidgin.im/wiki/FAQssl"
 
 static void
 ssl_faq_clicked_cb(PidginMiniDialog *mini_dialog,
--- a/pidgin/gtkdialogs.c	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/gtkdialogs.c	Mon Jun 03 15:26:52 2013 +0530
@@ -44,11 +44,9 @@
 #include "gtkwebview.h"
 #include "pidginstock.h"
 
-#ifndef _WIN32
 #ifdef USE_GSTREAMER
 #include <gst/gst.h>
 #endif
-#endif
 
 #include "gtk3compat.h"
 
@@ -100,6 +98,7 @@
 	{"Will 'resiak' Thompson",             NULL,                  NULL},
 	{"Stu 'nosnilmot' Tomlinson",          NULL,                  NULL},
 	{"Jorge 'Masca' VillaseƱor",           NULL,                  NULL},
+	{"Tomasz Wasilczyk",                   NULL,                  NULL},
 	{NULL, NULL, NULL}
 };
 
@@ -108,9 +107,6 @@
 	{"Jakub 'haakon' Adam",            NULL,                        NULL},
 	{"Krzysztof Klinikowski",          NULL,                        NULL},
 	{"Eion Robb",                      NULL,                        NULL},
-	{"Peter 'Fmoo' Ruibal",            NULL,                        NULL},
-	{"Gabriel 'Nix' Schulhof",         NULL,                        NULL},
-	{"Tomasz Wasilczyk",               NULL,                        NULL},
 	{NULL, NULL, NULL}
 };
 
@@ -144,10 +140,12 @@
 static const struct developer retired_patch_writers[] = {
 	{"Felipe 'shx' Contreras",    NULL, NULL},
 	{"Decklin Foster",            NULL, NULL},
-	{"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL},
 	{"Peter 'Bleeter' Lawler",    NULL, NULL},
 	{"Robert 'Robot101' McQueen", NULL, NULL},
 	{"Benjamin Miller",           NULL, NULL},
+	{"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL},
+	{"Peter 'Fmoo' Ruibal",       NULL, NULL},
+	{"Gabriel 'Nix' Schulhof",    NULL, NULL},
 	{NULL, NULL, NULL}
 };
 
@@ -533,8 +531,8 @@
 			  "<li>XMPP MUC: devel@conference.pidgin.im</li>"
 			  "</ul>"),
 			PURPLE_WEBSITE, PURPLE_WEBSITE,
-			"http://developer.pidgin.im/wiki/FAQ",
-			"http://developer.pidgin.im/wiki/FAQ");
+			"https://developer.pidgin.im/wiki/FAQ",
+			"https://developer.pidgin.im/wiki/FAQ");
 
 	g_string_append(str,
 			"<p><strong>Help for Oracle Employees</strong> is "
@@ -553,8 +551,8 @@
 			  "are welcome to post in another language, but the responses may "
 			  "be less helpful.</p>"),
 			"support@pidgin.im", "support@pidgin.im",
-			"http://pidgin.im/pipermail/support/",
-			"http://pidgin.im/pipermail/support/");
+			"https://pidgin.im/pipermail/support/",
+			"https://pidgin.im/pipermail/support/");
 
 	tmp = g_strdup_printf(_("About %s"), PIDGIN_NAME);
 	about = pidgin_build_help_dialog(tmp, "about", str);
@@ -658,7 +656,6 @@
 	g_string_append(str, "<dt>GnuTLS:</dt><dd>Disabled</dd>");
 #endif
 
-#ifndef _WIN32
 #ifdef USE_GSTREAMER
 	tmp = gst_version_string();
 	g_string_append_printf(str, "<dt>GStreamer:</dt><dd>%s</dd>", tmp);
@@ -666,7 +663,6 @@
 #else
 	g_string_append(str, "<dt>GStreamer:</dt><dd>Disabled</dd>");
 #endif
-#endif
 
 #ifndef _WIN32
 #ifdef ENABLE_MONO
--- a/pidgin/gtkmain.c	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/gtkmain.c	Mon Jun 03 15:26:52 2013 +0530
@@ -320,8 +320,8 @@
 
 		g_hash_table_insert(ui_info, "name", (char*)PIDGIN_NAME);
 		g_hash_table_insert(ui_info, "version", VERSION);
-		g_hash_table_insert(ui_info, "website", "http://pidgin.im");
-		g_hash_table_insert(ui_info, "dev_website", "http://developer.pidgin.im");
+		g_hash_table_insert(ui_info, "website", "https://pidgin.im");
+		g_hash_table_insert(ui_info, "dev_website", "https://developer.pidgin.im");
 		g_hash_table_insert(ui_info, "client_type", "pc");
 
 		/*
--- a/pidgin/gtkmedia.c	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/gtkmedia.c	Mon Jun 03 15:26:52 2013 +0530
@@ -556,7 +556,7 @@
 		gulong window_id = 0;
 #ifdef GDK_WINDOWING_WIN32
 		if (GDK_IS_WIN32_WINDOW(window))
-			window_id = GDK_WINDOW_HWND(window);
+			window_id = GPOINTER_TO_UINT(GDK_WINDOW_HWND(window));
 		else
 #endif
 #ifdef GDK_WINDOWING_X11
@@ -1057,6 +1057,49 @@
 }
 
 static GstElement *
+create_configured_vv_element(const gchar *type, const gchar *dir)
+{
+	gchar *tmp;
+	const gchar *plugin, *device;
+	GstElement *ret;
+
+	tmp = g_strdup_printf(PIDGIN_PREFS_ROOT "/vvconfig/%s/%s/plugin", type, dir);
+	plugin = purple_prefs_get_string(tmp);
+	g_free(tmp);
+
+	tmp = g_strdup_printf(PIDGIN_PREFS_ROOT "/vvconfig/%s/%s/device", type, dir);
+	device = purple_prefs_get_string(tmp);
+	g_free(tmp);
+
+	if (plugin == NULL || plugin[0] == '\0')
+		return NULL;
+
+	if (g_strcmp0(type, "video") == 0 && g_strcmp0(dir, "src") == 0 &&
+		g_strcmp0(plugin, "disabled") == 0)
+	{
+		ret = gst_element_factory_make("videotestsrc", NULL);
+		g_object_set(G_OBJECT(ret), "is-live", 1, NULL);
+		if (g_strcmp0(device, "snow") == 0) {
+			/* GST_VIDEO_TEST_SRC_SNOW */
+			g_object_set(G_OBJECT(ret), "pattern", 1, NULL);
+		} else {
+			/* GST_VIDEO_TEST_SRC_BLACK */
+			g_object_set(G_OBJECT(ret), "pattern", 2, NULL);
+		}
+		return ret;
+	}
+
+	ret = gst_element_factory_make(plugin, NULL);
+	if (device != NULL && device[0] != '\0')
+		g_object_set(G_OBJECT(ret), "device", device, NULL);
+
+	if (g_strcmp0(plugin, "videotestsrc") == 0)
+		g_object_set(G_OBJECT(ret), "is-live", 1, NULL);
+
+	return ret;
+}
+
+static GstElement *
 create_default_video_src(PurpleMedia *media,
 		const gchar *session_id, const gchar *participant)
 {
@@ -1064,19 +1107,24 @@
 	GstPad *pad;
 	GstPad *ghost;
 
+	src = create_configured_vv_element("video", "src");
+
 #ifdef _WIN32
 	/* autovideosrc doesn't pick ksvideosrc for some reason */
-	src = gst_element_factory_make("ksvideosrc", NULL);
+	if (src == NULL)
+		src = gst_element_factory_make("ksvideosrc", NULL);
 	if (src == NULL)
 		src = gst_element_factory_make("dshowvideosrc", NULL);
 	if (src == NULL)
 		src = gst_element_factory_make("autovideosrc", NULL);
 #elif defined(__APPLE__)
-	src = gst_element_factory_make("osxvideosrc", NULL);
+	if (src == NULL)
+		src = gst_element_factory_make("osxvideosrc", NULL);
 	if (src == NULL)
 		src = gst_element_factory_make("autovideosrc", NULL);
 #else
-	src = gst_element_factory_make("gconfvideosrc", NULL);
+	if (src == NULL)
+		src = gst_element_factory_make("gconfvideosrc", NULL);
 	if (src == NULL)
 		src = gst_element_factory_make("autovideosrc", NULL);
 	if (src == NULL)
@@ -1085,6 +1133,11 @@
 		src = gst_element_factory_make("v4lsrc", NULL);
 #endif
 	if (src == NULL) {
+		src = gst_element_factory_make("videotestsrc", NULL);
+		if (src != NULL)
+			g_object_set(G_OBJECT(src), "is-live", TRUE, NULL);
+	}
+	if (src == NULL) {
 		purple_debug_error("gtkmedia", "Unable to find a suitable "
 				"element for the default video source.\n");
 		return NULL;
@@ -1106,7 +1159,14 @@
 create_default_video_sink(PurpleMedia *media,
 		const gchar *session_id, const gchar *participant)
 {
-	GstElement *sink = gst_element_factory_make("gconfvideosink", NULL);
+	GstElement *sink;
+
+	sink = create_configured_vv_element("video", "sink");
+
+	if (sink == NULL)
+		sink = gst_element_factory_make("directdrawsink", NULL);
+	if (sink == NULL)
+		sink = gst_element_factory_make("gconfvideosink", NULL);
 	if (sink == NULL)
 		sink = gst_element_factory_make("autovideosink", NULL);
 	if (sink == NULL)
@@ -1120,7 +1180,13 @@
 		const gchar *session_id, const gchar *participant)
 {
 	GstElement *src;
-	src = gst_element_factory_make("gconfaudiosrc", NULL);
+
+	src = create_configured_vv_element("audio", "src");
+
+	if (src == NULL)
+		src = gst_element_factory_make("directsoundsrc", NULL);
+	if (src == NULL)
+		src = gst_element_factory_make("gconfaudiosrc", NULL);
 	if (src == NULL)
 		src = gst_element_factory_make("autoaudiosrc", NULL);
 	if (src == NULL)
@@ -1145,7 +1211,13 @@
 		const gchar *session_id, const gchar *participant)
 {
 	GstElement *sink;
-	sink = gst_element_factory_make("gconfaudiosink", NULL);
+
+	sink = create_configured_vv_element("audio", "sink");
+
+	if (sink == NULL)
+		sink = gst_element_factory_make("directsoundsink", NULL);
+	if (sink == NULL)
+		sink = gst_element_factory_make("gconfaudiosink", NULL);
 	if (sink == NULL)
 		sink = gst_element_factory_make("autoaudiosink",NULL);
 	if (sink == NULL) {
--- a/pidgin/gtkprefs.c	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/gtkprefs.c	Mon Jun 03 15:26:52 2013 +0530
@@ -127,6 +127,7 @@
 
 static const gchar *AUDIO_SRC_PLUGINS[] = {
 	"alsasrc",	"ALSA",
+	"directsoundsrc", "DirectSound",
 	/* "esdmon",	"ESD", ? */
 	"osssrc",	"OSS",
 	"pulsesrc",	"PulseAudio",
@@ -138,6 +139,8 @@
 
 static const gchar *AUDIO_SINK_PLUGINS[] = {
 	"alsasink",	"ALSA",
+	"directsoundsink", "DirectSound",
+	/* "gconfaudiosink", "GConf", */
 	"artsdsink",	"aRts",
 	"esdsink",	"ESD",
 	"osssink",	"OSS",
@@ -147,6 +150,7 @@
 };
 
 static const gchar *VIDEO_SRC_PLUGINS[] = {
+	"disabled",	N_("Disabled"),
 	"videotestsrc",	"Test Input",
 	"dshowvideosrc","DirectDraw",
 	"ksvideosrc",	"KS Video",
@@ -159,7 +163,8 @@
 
 static const gchar *VIDEO_SINK_PLUGINS[] = {
 	/* "aasink",	"AALib", Didn't work for me */
-	"directdrawsink","DirectDraw",
+	"directdrawsink", "DirectDraw",
+	/* "gconfvideosink", "GConf", */
 	"glimagesink",	"OpenGL",
 	"ximagesink",	"X Window System",
 	"xvimagesink",	"X Window System (Xv)",
@@ -1515,7 +1520,7 @@
 }
 
 
-#define CONVERSATION_CLOSE_ACCEL_PATH "<main>/Conversation/Close"
+#define CONVERSATION_CLOSE_ACCEL_PATH "<Actions>/ConversationActions/Close"
 
 /* Filled in in keyboard_shortcuts(). */
 static GtkAccelKey ctrl_w = { 0, 0, 0 };
@@ -2554,7 +2559,6 @@
 	return ret;
 }
 
-#ifndef _WIN32
 static gint
 sound_cmd_yeah(GtkEntry *entry, gpointer d)
 {
@@ -2582,7 +2586,6 @@
 
 	gtk_widget_set_sensitive(vbox, strcmp(method, "none"));
 }
-#endif /* !_WIN32 */
 
 #ifdef USE_GSTREAMER
 static void
@@ -2595,7 +2598,9 @@
 	gtk_widget_set_sensitive(hbox,
 			!strcmp(method, "automatic") ||
 			!strcmp(method, "alsa") ||
-			!strcmp(method, "esd"));
+			!strcmp(method, "esd") ||
+			!strcmp(method, "waveform") ||
+			!strcmp(method, "directsound"));
 }
 #endif /* USE_GSTREAMER */
 
@@ -2803,11 +2808,9 @@
 	int j;
 	const char *file;
 	char *pref;
-#ifndef _WIN32
 	GtkWidget *dd;
 	GtkWidget *entry;
 	const char *cmd;
-#endif
 
 	ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
 	gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
@@ -2819,16 +2822,24 @@
 	vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
 	gtk_box_pack_start(GTK_BOX(vbox2), vbox, FALSE, FALSE, 0);
 
-#ifndef _WIN32
 	dd = pidgin_prefs_dropdown(vbox2, _("_Method:"), PURPLE_PREF_STRING,
 			PIDGIN_PREFS_ROOT "/sound/method",
-			_("Console beep"), "beep",
+			_("Automatic"), "automatic",
 #ifdef USE_GSTREAMER
-			_("Automatic"), "automatic",
+#ifdef _WIN32
+/*			"WaveForm", "waveform", */
+			"DirectSound", "directsound",
+#else
 			"ESD", "esd",
 			"ALSA", "alsa",
-#endif
+#endif /* _WIN32 */
+#endif /* USE_GSTREAMER */
+#ifdef _WIN32
+			"PlaySound", "playsoundw",
+#else
+			_("Console beep"), "beep",
 			_("Command"), "custom",
+#endif /* _WIN32 */
 			_("No sounds"), "none",
 			NULL);
 	gtk_size_group_add_widget(sg, dd);
@@ -2848,7 +2859,6 @@
 	gtk_widget_set_sensitive(hbox,
 			!strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"),
 					"custom"));
-#endif /* _WIN32 */
 
 	button = pidgin_prefs_checkbox(_("M_ute sounds"), PIDGIN_PREFS_ROOT "/sound/mute", vbox);
 	purple_prefs_connect_callback(prefs, PIDGIN_PREFS_ROOT "/sound/mute", mute_changed_cb, button);
@@ -2880,12 +2890,10 @@
 			  purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"), hbox);
 #endif
 
-#ifndef _WIN32
 	gtk_widget_set_sensitive(vbox,
 			strcmp(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/sound/method"), "none"));
 	purple_prefs_connect_callback(prefs, PIDGIN_PREFS_ROOT "/sound/method",
 								sound_changed2_cb, vbox);
-#endif
 	vbox = pidgin_make_frame(ret, _("Sound Events"));
 
 	/* The following is an ugly hack to make the frame expand so the
@@ -3106,6 +3114,13 @@
 		return g_list_reverse(ret);
 	}
 
+	if (g_strcmp0(element_name, "disabled") == 0) {
+		ret = g_list_prepend(ret, (gpointer)_("Random noise"));
+		ret = g_list_prepend(ret, "snow");
+
+		return g_list_reverse(ret);
+	}
+
 	element = gst_element_factory_make(element_name, "test");
 	if (!element) {
 		purple_debug_info("vvconfig", "'%s' - unable to find element\n",
@@ -3186,10 +3201,12 @@
 	for (; plugins[0] && plugins[1]; plugins += 2) {
 #if GST_CHECK_VERSION(1,0,0)
 		if (gst_registry_check_feature_version(gst_registry_get(),
-		                                       plugins[0], 0, 0, 0)) {
+			plugins[0], 0, 0, 0)
 #else
-		if (gst_default_registry_check_feature_version(plugins[0], 0, 0, 0)) {
+		if (gst_default_registry_check_feature_version(plugins[0], 0, 0, 0)
 #endif
+			|| g_strcmp0(plugins[0], "disabled") == 0)
+		{
 			ret = g_list_prepend(ret, (gpointer)plugins[1]);
 			ret = g_list_prepend(ret, (gpointer)plugins[0]);
 		}
@@ -3270,31 +3287,16 @@
 }
 
 static GstElement *
-create_test_element(const char *type, const char *dir, PurpleMediaElementInfo *info)
+create_test_element(PurpleMediaElementType type)
 {
-	char *tmp;
-	const gchar *plugin;
-	const gchar *device;
-	GstElement *ret;
-
-	tmp = g_strdup_printf(PIDGIN_PREFS_ROOT "/vvconfig/%s/%s/plugin", type, dir);
-	plugin = purple_prefs_get_string(tmp);
-	g_free(tmp);
-
-	tmp = g_strdup_printf(PIDGIN_PREFS_ROOT "/vvconfig/%s/%s/device", type, dir);
-	device = purple_prefs_get_string(tmp);
-	g_free(tmp);
-
-	if (plugin[0] == '\0')
-		return purple_media_element_info_call_create(info, NULL, NULL, NULL);
-
-	ret = gst_element_factory_make(plugin, NULL);
-	if (device[0] != '\0')
-		g_object_set(G_OBJECT(ret), "device", device, NULL);
-	if (!strcmp(plugin, "videotestsrc"))
-		g_object_set(G_OBJECT(ret), "is-live", 1, NULL);
-
-	return ret;
+	PurpleMediaElementInfo *element_info;
+
+	element_info = purple_media_manager_get_active_element(purple_media_manager_get(), type);
+
+	g_return_val_if_fail(element_info, NULL);
+
+	return purple_media_element_info_call_create(element_info,
+		NULL, NULL, NULL);
 }
 
 static void
@@ -3307,23 +3309,16 @@
 static GstElement *
 create_voice_pipeline(void)
 {
-	PurpleMediaManager *manager;
-	PurpleMediaElementInfo *audio_src, *audio_sink;
 	GstElement *pipeline;
 	GstElement *src, *sink;
 	GstElement *volume;
 	GstElement *level;
 	GstElement *valve;
 
-	manager = purple_media_manager_get();
-	audio_src = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_AUDIO | PURPLE_MEDIA_ELEMENT_SRC);
-	audio_sink = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_AUDIO | PURPLE_MEDIA_ELEMENT_SINK);
-
 	pipeline = gst_pipeline_new("voicetest");
-	src = create_test_element("audio", "src", audio_src);
-	sink = create_test_element("audio", "sink", audio_sink);
+
+	src = create_test_element(PURPLE_MEDIA_ELEMENT_AUDIO | PURPLE_MEDIA_ELEMENT_SRC);
+	sink = create_test_element(PURPLE_MEDIA_ELEMENT_AUDIO | PURPLE_MEDIA_ELEMENT_SINK);
 	volume = gst_element_factory_make("volume", "volume");
 	level = gst_element_factory_make("level", "level");
 	valve = gst_element_factory_make("valve", "valve");
@@ -3331,7 +3326,10 @@
 	gst_bin_add_many(GST_BIN(pipeline), src, volume, level, valve, sink, NULL);
 	gst_element_link_many(src, volume, level, valve, sink, NULL);
 
+	purple_debug_info("gtkprefs", "create_voice_pipeline: setting pipeline "
+		"state to GST_STATE_PLAYING - it may hang here on win32\n");
 	gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING);
+	purple_debug_info("gtkprefs", "create_voice_pipeline: state is set\n");
 
 	return pipeline;
 }
@@ -3525,26 +3523,18 @@
 static GstElement *
 create_video_pipeline(void)
 {
-	PurpleMediaManager *manager;
-	PurpleMediaElementInfo *video_src, *video_sink;
 	GstElement *pipeline;
 	GstElement *src, *sink;
 
-	manager = purple_media_manager_get();
-	video_src = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_VIDEO | PURPLE_MEDIA_ELEMENT_SRC);
-	video_sink = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_VIDEO | PURPLE_MEDIA_ELEMENT_SINK);
-
 	pipeline = gst_pipeline_new("videotest");
-	src = create_test_element("video", "src", video_src);
-	sink = create_test_element("video", "sink", video_sink);
+	src = create_test_element(PURPLE_MEDIA_ELEMENT_VIDEO | PURPLE_MEDIA_ELEMENT_SRC);
+	sink = create_test_element(PURPLE_MEDIA_ELEMENT_VIDEO | PURPLE_MEDIA_ELEMENT_SINK);
+
+	g_object_set_data(G_OBJECT(pipeline), "sink", sink);
 
 	gst_bin_add_many(GST_BIN(pipeline), src, sink, NULL);
 	gst_element_link_many(src, sink, NULL);
 
-	gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING);
-
 	return pipeline;
 }
 
@@ -3566,6 +3556,7 @@
 #if GST_CHECK_VERSION(1,0,0)
 	 || !gst_is_video_overlay_prepare_window_handle_message(msg))
 #else
+	/* there may be have-xwindow-id also, in case something went wrong */
 	 || !gst_structure_has_name(msg->structure, "prepare-xwindow-id"))
 #endif
 		return;
@@ -3596,9 +3587,10 @@
 	if (gtk_toggle_button_get_active(test)) {
 		GdkWindow *window = gtk_widget_get_window(video);
 		gulong window_id = 0;
+
 #ifdef GDK_WINDOWING_WIN32
 		if (GDK_IS_WIN32_WINDOW(window))
-			window_id = GDK_WINDOW_HWND(window);
+			window_id = GPOINTER_TO_UINT(GDK_WINDOW_HWND(window));
 		else
 #endif
 #ifdef GDK_WINDOWING_X11
@@ -3629,6 +3621,8 @@
 		                 G_CALLBACK(window_id_cb), (gpointer)window_id);
 		gst_object_unref(bus);
 
+		gst_element_set_state(GST_ELEMENT(video_pipeline), GST_STATE_PLAYING);
+
 		g_signal_connect(test, "destroy",
 		                 G_CALLBACK(video_test_destroy_cb), NULL);
 		g_signal_connect(prefsnotebook, "switch-page",
--- a/pidgin/gtksound.c	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/gtksound.c	Mon Jun 03 15:26:52 2013 +0530
@@ -424,6 +424,18 @@
 }
 #endif
 
+#ifdef _WIN32
+static void
+pidgin_sound_play_file_win32(const char *filename)
+{
+	wchar_t *wc_filename = g_utf8_to_utf16(filename,
+			-1, NULL, NULL, NULL);
+	if (!PlaySoundW(wc_filename, NULL, SND_ASYNC | SND_FILENAME))
+		purple_debug(PURPLE_DEBUG_ERROR, "sound", "Error playing sound.\n");
+	g_free(wc_filename);
+}
+#endif /* _WIN32 */
+
 static void
 pidgin_sound_play_file(const char *filename)
 {
@@ -447,6 +459,12 @@
 		gdk_beep();
 		return;
 	}
+#ifdef _WIN32
+	else if (!strcmp(method, "playsoundw")) {
+		pidgin_sound_play_file_win32(filename);
+		return;
+	}
+#endif /* _WIN32 */
 
 	if (!g_file_test(filename, G_FILE_TEST_EXISTS)) {
 		purple_debug_error("gtksound", "sound file (%s) does not exist.\n", filename);
@@ -507,11 +525,22 @@
 	if (gst_init_failed)  /* Perhaps do gdk_beep instead? */
 		return;
 	volume = (float)(CLAMP(purple_prefs_get_int(PIDGIN_PREFS_ROOT "/sound/volume"),0,100)) / 50;
+#ifdef _WIN32
+	if (!strcmp(method, "automatic")) {
+		sink = gst_element_factory_make("directsoundsink", "sink");
+		if (sink == NULL)
+			sink = gst_element_factory_make("waveformsink", "sink");
+		if (sink == NULL)
+			sink = gst_element_factory_make("gconfaudiosink", "sink");
+	} else if (!strcmp(method, "directsound")) {
+		sink = gst_element_factory_make("directsoundsink", "sink");
+	} else if (!strcmp(method, "waveform")) {
+		sink = gst_element_factory_make("waveformsink", "sink");
+	}
+#else
 	if (!strcmp(method, "automatic")) {
 		sink = gst_element_factory_make("gconfaudiosink", "sink");
-	}
-#ifndef _WIN32
-	else if (!strcmp(method, "esd")) {
+	} else if (!strcmp(method, "esd")) {
 		sink = gst_element_factory_make("esdsink", "sink");
 	} else if (!strcmp(method, "alsa")) {
 		sink = gst_element_factory_make("alsasink", "sink");
@@ -537,7 +566,12 @@
 		return;
 	}
 
+#ifdef _WIN32
+	uri = g_strdup_printf("file:///%s", filename);
+	g_strdelimit(uri, "\\", '/');
+#else
 	uri = g_strdup_printf("file://%s", filename);
+#endif
 
 	g_object_set(G_OBJECT(play), "uri", uri,
 		                     "volume", volume,
@@ -556,15 +590,7 @@
 #ifndef _WIN32
 	gdk_beep();
 #else /* _WIN32 */
-	purple_debug_info("sound", "Playing %s\n", filename);
-
-	{
-		wchar_t *wc_filename = g_utf8_to_utf16(filename,
-				-1, NULL, NULL, NULL);
-		if (!PlaySoundW(wc_filename, NULL, SND_ASYNC | SND_FILENAME))
-			purple_debug(PURPLE_DEBUG_ERROR, "sound", "Error playing sound.\n");
-		g_free(wc_filename);
-	}
+	pidgin_sound_play_file_win32(filename);
 #endif /* _WIN32 */
 
 #endif /* USE_GSTREAMER */
--- a/pidgin/plugins/perl/common/Makefile.PL.in	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/plugins/perl/common/Makefile.PL.in	Mon Jun 03 15:26:52 2013 +0530
@@ -7,7 +7,7 @@
     'VERSION_FROM'     => '@srcdir@/Pidgin.pm', # finds $VERSION
     ($] >= 5.005 ? ## Add these new keywords supported since 5.005
       ('ABSTRACT_FROM' => '@srcdir@/Pidgin.pm', # finds $ABSTRACT
-       'AUTHOR'        => 'Pidgin <http://pidgin.im/>') :  ()),
+       'AUTHOR'        => 'Pidgin <https://pidgin.im/>') :  ()),
     'DEFINE'        => '@DEBUG_CFLAGS@',
     'dynamic_lib'       => { 'OTHERLDFLAGS' => '@LDFLAGS@' },
     'INC'           => '-I. -I@srcdir@ -I@top_srcdir@ -I@top_srcdir@/libpurple -I@top_srcdir@/pidgin @GTK_CFLAGS@ @WEBKIT_CFLAGS@',
--- a/pidgin/plugins/perl/common/Pidgin.pm	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/plugins/perl/common/Pidgin.pm	Mon Jun 03 15:26:52 2013 +0530
@@ -36,7 +36,7 @@
 interact with IMs, chats, accounts, the buddy list, pidgin signals, and more.
 
 The API for the perl interface is very similar to that of the Pidgin C API,
-which can be viewed at http://developer.pidgin.im/doxygen/ or in the header files
+which can be viewed at https://developer.pidgin.im/doxygen/ or in the header files
 in the Pidgin source tree.
 
 =head1 FUNCTIONS
@@ -46,11 +46,11 @@
 =back
 
 =head1 SEE ALSO
-Pidgin C API documentation - http://developer.pidgin.im/doxygen/
+Pidgin C API documentation - https://developer.pidgin.im/doxygen/
 
 The Pidgin perl module.
 
-Pidgin website - http://pidgin.im/
+Pidgin website - https://pidgin.im/
 
 =head1 AUTHOR
 
--- a/pidgin/plugins/pidginrc.c	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/plugins/pidginrc.c	Mon Jun 03 15:26:52 2013 +0530
@@ -216,7 +216,7 @@
 purplerc_write(GtkWidget *widget, gpointer data)
 {
 	GString *str = make_gtkrc_string();
-	str = g_string_prepend(str, "# This file automatically written by the Pidgin GTK+ Theme Control plugin.\n# Any changes to this file will be overwritten by the plugin when told to\n# write the settings again.\n# The FAQ (http://developer.pidgin.im/wiki/FAQ) contains some further examples\n# of possible pidgin gtkrc settings.\n");
+	str = g_string_prepend(str, "# This file automatically written by the Pidgin GTK+ Theme Control plugin.\n# Any changes to this file will be overwritten by the plugin when told to\n# write the settings again.\n# The FAQ (https://developer.pidgin.im/wiki/FAQ) contains some further examples\n# of possible pidgin gtkrc settings.\n");
 	purple_util_write_data_to_file("gtkrc-2.0", str->str, -1);
 	g_string_free(str, TRUE);
 }
--- a/pidgin/plugins/vvconfig.c	Fri May 31 19:02:45 2013 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,804 +0,0 @@
-/*
- * Configures microphones and webcams for voice and video
- * Copyright (C) 2009 Mike Ruprecht <cmaiku@gmail.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA.
- */
-#include "internal.h"
-
-#include "debug.h"
-#include "mediamanager.h"
-#include "media-gst.h"
-#include "version.h"
-#include "gtkplugin.h"
-#include "gtkutils.h"
-#include "gtkprefs.h"
-
-#include <gst/interfaces/propertyprobe.h>
-
-/* container window for showing a stand-alone configurator */
-static GtkWidget *window = NULL;
-
-static PurpleMediaElementInfo *old_video_src = NULL, *old_video_sink = NULL,
-		*old_audio_src = NULL, *old_audio_sink = NULL;
-
-static const gchar *AUDIO_SRC_PLUGINS[] = {
-	"alsasrc",	"ALSA",
-	/* "esdmon",	"ESD", ? */
-	"osssrc",	"OSS",
-	"pulsesrc",	"PulseAudio",
-	"sndiosrc",	"sndio",
-	/* "audiotestsrc wave=silence", "Silence", */
-	"audiotestsrc",	"Test Sound",
-	NULL
-};
-
-static const gchar *AUDIO_SINK_PLUGINS[] = {
-	"alsasink",	"ALSA",
-	"artsdsink",	"aRts",
-	"esdsink",	"ESD",
-	"osssink",	"OSS",
-	"pulsesink",	"PulseAudio",
-	"sndiosink",	"sndio",
-	NULL
-};
-
-static const gchar *VIDEO_SRC_PLUGINS[] = {
-	"videotestsrc",	"Test Input",
-	"dshowvideosrc","DirectDraw",
-	"ksvideosrc",	"KS Video",
-	"qcamsrc",	"Quickcam",
-	"v4lsrc",	"Video4Linux",
-	"v4l2src",	"Video4Linux2",
-	"v4lmjpegsrc",	"Video4Linux MJPEG",
-	NULL
-};
-
-static const gchar *VIDEO_SINK_PLUGINS[] = {
-	/* "aasink",	"AALib", Didn't work for me */
-	"directdrawsink","DirectDraw",
-	"glimagesink",	"OpenGL",
-	"ximagesink",	"X Window System",
-	"xvimagesink",	"X Window System (Xv)",
-	NULL
-};
-
-static GList *
-get_element_devices(const gchar *element_name)
-{
-	GList *ret = NULL;
-	GstElement *element;
-	GObjectClass *klass;
-	GstPropertyProbe *probe;
-	const GParamSpec *pspec;
-
-	ret = g_list_prepend(ret, (gpointer)_("Default"));
-	ret = g_list_prepend(ret, "");
-
-	if (!strcmp(element_name, "<custom>") || (*element_name == '\0')) {
-		return g_list_reverse(ret);
-	}
-
-	element = gst_element_factory_make(element_name, "test");
-	if(!element) {
-		purple_debug_info("vvconfig", "'%s' - unable to find element\n", element_name);
-		return g_list_reverse(ret);
-	}
-
-	klass = G_OBJECT_GET_CLASS (element);
-	if(!klass) {
-		purple_debug_info("vvconfig", "'%s' - unable to find G_Object Class\n", element_name);
-		return g_list_reverse(ret);
-	}
-
-	if (!g_object_class_find_property(klass, "device") ||
-			!GST_IS_PROPERTY_PROBE(element) ||
-			!(probe = GST_PROPERTY_PROBE(element)) ||
-			!(pspec = gst_property_probe_get_property(probe, "device"))) {
-		purple_debug_info("vvconfig", "'%s' - no device\n", element_name);
-	} else {
-		gint n;
-		GValueArray *array;
-
-		/* Set autoprobe[-fps] to FALSE to avoid delays when probing. */
-		if (g_object_class_find_property (klass, "autoprobe")) {
-			g_object_set (G_OBJECT (element), "autoprobe", FALSE, NULL);
-			if (g_object_class_find_property (klass, "autoprobe-fps")) {
-				g_object_set (G_OBJECT (element), "autoprobe-fps", FALSE, NULL);
-			}
-		}
-
-		array = gst_property_probe_probe_and_get_values (probe, pspec);
-		if (array == NULL) {
-			purple_debug_info("vvconfig", "'%s' has no devices\n", element_name);
-			return g_list_reverse(ret);
-		}
-
-		for (n=0; n < array->n_values; ++n) {
-			GValue *device;
-			const gchar *name;
-			const gchar *device_name;
-
-			device = g_value_array_get_nth(array, n);
-			g_object_set_property(G_OBJECT(element), "device", device);
-			if (gst_element_set_state(element, GST_STATE_READY)
-					!= GST_STATE_CHANGE_SUCCESS) {
-				purple_debug_warning("vvconfig",
-						"Error changing state of %s\n",
-						element_name);
-				continue;
-			}
-
-			g_object_get(G_OBJECT(element), "device-name", &name, NULL);
-			device_name = g_value_get_string(device);
-			if (name == NULL)
-				name = _("Unknown");
-			purple_debug_info("vvconfig", "Found device %s : %s for %s\n",
-					device_name, name, element_name);
-			ret = g_list_prepend(ret, (gpointer)name);
-			ret = g_list_prepend(ret, (gpointer)device_name);
-			gst_element_set_state(element, GST_STATE_NULL);
-		}
-	}
-	gst_object_unref(element);
-
-	return g_list_reverse(ret);
-}
-
-static GList *
-get_element_plugins(const gchar **plugins)
-{
-	GList *ret = NULL;
-
-	ret = g_list_prepend(ret, "Default");
-	ret = g_list_prepend(ret, "");
-	for (; plugins[0] && plugins[1]; plugins += 2) {
-		if (gst_default_registry_check_feature_version(
-				plugins[0], 0, 0, 0)) {
-			ret = g_list_prepend(ret, (gpointer)plugins[1]);
-			ret = g_list_prepend(ret, (gpointer)plugins[0]);
-		}
-	}
-	ret = g_list_reverse(ret);
-	return ret;
-}
-
-static void
-device_changed_cb(const gchar *name, PurplePrefType type,
-		gconstpointer value, gpointer data)
-{
-	GtkSizeGroup *sg = data;
-	GtkWidget *parent, *widget;
-	GSList *widgets;
-	GList *devices;
-	GValue gvalue;
-	gint position;
-	gchar *label, *pref;
-
-	widgets = gtk_size_group_get_widgets(GTK_SIZE_GROUP(sg));
-	for (; widgets; widgets = g_slist_next(widgets)) {
-		const gchar *widget_name =
-				gtk_widget_get_name(GTK_WIDGET(widgets->data));
-		if (!strcmp(widget_name, name)) {
-			gchar *temp_str;
-			gchar delimiters[3] = {0, 0, 0};
-			const gchar *text;
-			gint keyval, pos;
-
-			widget = widgets->data;
-			/* Get label with _ from the GtkLabel */
-			text = gtk_label_get_text(GTK_LABEL(widget));
-			keyval = gtk_label_get_mnemonic_keyval(GTK_LABEL(widget));
-			delimiters[0] = g_ascii_tolower(keyval);
-			delimiters[1] = g_ascii_toupper(keyval);
-			pos = strcspn(text, delimiters);
-			if (pos != -1) {
-				temp_str = g_strndup(text, pos);
-				label = g_strconcat(temp_str, "_",
-						text + pos, NULL);
-				g_free(temp_str);
-			} else {
-				label = g_strdup(text);
-			}
-			break;
-		}
-	}
-
-	if (widgets == NULL)
-		return;
-
-	parent = gtk_widget_get_parent(widget);
-	widget = parent;
-	parent = gtk_widget_get_parent(GTK_WIDGET(widget));
-	gvalue.g_type = 0;
-	g_value_init(&gvalue, G_TYPE_INT);
-	gtk_container_child_get_property(GTK_CONTAINER(parent),
-			GTK_WIDGET(widget), "position", &gvalue);
-	position = g_value_get_int(&gvalue);
-	g_value_unset(&gvalue);
-	gtk_widget_destroy(widget);
-
-	pref = g_strdup(name);
-	strcpy(pref + strlen(pref) - strlen("plugin"), "device");
-	devices = get_element_devices(value);
-	if (g_list_find_custom(devices, purple_prefs_get_string(pref),
-			(GCompareFunc)strcmp) == NULL)
-		purple_prefs_set_string(pref, g_list_next(devices)->data);
-	widget = pidgin_prefs_dropdown_from_list(parent,
-			label, PURPLE_PREF_STRING,
-			pref, devices);
-	g_list_free(devices);
-	g_signal_connect_swapped(widget, "destroy",
-			G_CALLBACK(g_free), pref);
-	g_free(label);
-	gtk_misc_set_alignment(GTK_MISC(widget), 0, 0.5);
-	gtk_widget_set_name(widget, name);
-	gtk_size_group_add_widget(sg, widget);
-	gtk_box_reorder_child(GTK_BOX(parent),
-			gtk_widget_get_parent(GTK_WIDGET(widget)), position);
-}
-
-static void
-get_plugin_frame(GtkWidget *parent, GtkSizeGroup *sg,
-		const gchar *name, const gchar *plugin_label,
-		const gchar **plugin_strs, const gchar *plugin_pref,
-		const gchar *device_label, const gchar *device_pref)
-{
-	GtkWidget *vbox, *widget;
-	GList *plugins, *devices;
-
-	vbox = pidgin_make_frame(parent, name);
-
-	/* Setup plugin preference */
-	plugins = get_element_plugins(plugin_strs);
-	widget = pidgin_prefs_dropdown_from_list(vbox, plugin_label,
-			PURPLE_PREF_STRING, plugin_pref, plugins);
-	g_list_free(plugins);
-	gtk_size_group_add_widget(sg, widget);
-	gtk_misc_set_alignment(GTK_MISC(widget), 0, 0.5);
-
-	/* Setup device preference */
-	devices = get_element_devices(purple_prefs_get_string(plugin_pref));
-	if (g_list_find_custom(devices, purple_prefs_get_string(device_pref),
-			(GCompareFunc) strcmp) == NULL)
-		purple_prefs_set_string(device_pref, g_list_next(devices)->data);
-	widget = pidgin_prefs_dropdown_from_list(vbox, device_label,
-			PURPLE_PREF_STRING, device_pref, devices);
-	g_list_free(devices);
-	gtk_widget_set_name(widget, plugin_pref);
-	gtk_size_group_add_widget(sg, widget);
-	gtk_misc_set_alignment(GTK_MISC(widget), 0, 0.5);
-
-	purple_prefs_connect_callback(vbox, plugin_pref,
-			device_changed_cb, sg);
-	g_signal_connect_swapped(vbox, "destroy",
-			G_CALLBACK(purple_prefs_disconnect_by_handle), vbox);
-}
-
-static GtkWidget *
-get_plugin_config_frame(PurplePlugin *plugin) {
-	GtkWidget *notebook, *vbox_audio, *vbox_video;
-	GtkSizeGroup *sg;
-
-	notebook = gtk_notebook_new();
-	gtk_container_set_border_width(GTK_CONTAINER(notebook),
-			PIDGIN_HIG_BORDER);
-	gtk_widget_show(notebook);
-
-	vbox_audio = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-	vbox_video = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
-			vbox_audio, gtk_label_new(_("Audio")));
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
-			vbox_video, gtk_label_new(_("Video")));
-	gtk_container_set_border_width(GTK_CONTAINER (vbox_audio),
-			PIDGIN_HIG_BORDER);
-	gtk_container_set_border_width(GTK_CONTAINER (vbox_video),
-			PIDGIN_HIG_BORDER);
-
-	gtk_widget_show(vbox_audio);
-	gtk_widget_show(vbox_video);
-
-	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-	get_plugin_frame(vbox_audio, sg, _("Output"), _("_Plugin"), AUDIO_SINK_PLUGINS,
-			"/plugins/core/vvconfig/audio/sink/plugin", _("_Device"),
-			"/plugins/core/vvconfig/audio/sink/device");
-	get_plugin_frame(vbox_audio, sg, _("Input"), _("P_lugin"), AUDIO_SRC_PLUGINS,
-			"/plugins/core/vvconfig/audio/src/plugin", _("D_evice"),
-			"/plugins/core/vvconfig/audio/src/device");
-
-	get_plugin_frame(vbox_video, sg, _("Output"), _("_Plugin"), VIDEO_SINK_PLUGINS,
-			"/plugins/gtk/vvconfig/video/sink/plugin", _("_Device"),
-			"/plugins/gtk/vvconfig/video/sink/device");
-	get_plugin_frame(vbox_video, sg, _("Input"), _("P_lugin"), VIDEO_SRC_PLUGINS,
-			"/plugins/core/vvconfig/video/src/plugin", _("D_evice"),
-			"/plugins/core/vvconfig/video/src/device");
-
-	return notebook;
-}
-
-static GstElement *
-create_video_src(PurpleMedia *media,
-		const gchar *session_id, const gchar *participant)
-{
-	const gchar *plugin = purple_prefs_get_string(
-			"/plugins/core/vvconfig/video/src/plugin");
-	const gchar *device = purple_prefs_get_string(
-			"/plugins/core/vvconfig/video/src/device");
-	GstElement *ret;
-
-	if (plugin[0] == '\0')
-		return purple_media_element_info_call_create(old_video_src,
-				media, session_id, participant);
-
-	ret = gst_element_factory_make(plugin, "vvconfig-videosrc");
-	if (device[0] != '\0')
-		g_object_set(G_OBJECT(ret), "device", device, NULL);
-	if (!strcmp(plugin, "videotestsrc"))
-		g_object_set(G_OBJECT(ret), "is-live", 1, NULL);
-	return ret;
-}
-
-static GstElement *
-create_video_sink(PurpleMedia *media,
-		const gchar *session_id, const gchar *participant)
-{
-	const gchar *plugin = purple_prefs_get_string(
-			"/plugins/gtk/vvconfig/video/sink/plugin");
-	const gchar *device = purple_prefs_get_string(
-			"/plugins/gtk/vvconfig/video/sink/device");
-	GstElement *ret;
-
-	if (plugin[0] == '\0')
-		return purple_media_element_info_call_create(old_video_sink,
-				media, session_id, participant);
-
-	ret = gst_element_factory_make(plugin, NULL);
-	if (device[0] != '\0')
-		g_object_set(G_OBJECT(ret), "device", device, NULL);
-	return ret;
-}
-
-static GstElement *
-create_audio_src(PurpleMedia *media,
-		const gchar *session_id, const gchar *participant)
-{
-	const gchar *plugin = purple_prefs_get_string(
-			"/plugins/core/vvconfig/audio/src/plugin");
-	const gchar *device = purple_prefs_get_string(
-			"/plugins/core/vvconfig/audio/src/device");
-	GstElement *ret;
-
-	if (plugin[0] == '\0')
-		return purple_media_element_info_call_create(old_audio_src,
-				media, session_id, participant);
-
-	ret = gst_element_factory_make(plugin, NULL);
-	if (device[0] != '\0')
-		g_object_set(G_OBJECT(ret), "device", device, NULL);
-	return ret;
-}
-
-static GstElement *
-create_audio_sink(PurpleMedia *media,
-		const gchar *session_id, const gchar *participant)
-{
-	const gchar *plugin = purple_prefs_get_string(
-			"/plugins/core/vvconfig/audio/sink/plugin");
-	const gchar *device = purple_prefs_get_string(
-			"/plugins/core/vvconfig/audio/sink/device");
-	GstElement *ret;
-
-	if (plugin[0] == '\0')
-		return purple_media_element_info_call_create(old_audio_sink,
-				media, session_id, participant);
-
-	ret = gst_element_factory_make(plugin, NULL);
-	if (device[0] != '\0')
-		g_object_set(G_OBJECT(ret), "device", device, NULL);
-	return ret;
-}
-
-static void
-set_element_info_cond(PurpleMediaElementInfo *old_info,
-		PurpleMediaElementInfo *new_info, const gchar *id)
-{
-	gchar *element_id = purple_media_element_info_get_id(old_info);
-	if (!strcmp(element_id, id))
-		purple_media_manager_set_active_element(
-				purple_media_manager_get(), new_info);
-	g_free(element_id);
-}
-
-static gboolean
-plugin_load(PurplePlugin *plugin)
-{
-	PurpleMediaManager *manager;
-	PurpleMediaElementInfo *video_src, *video_sink,
-			*audio_src, *audio_sink;
-
-	/* Disable the plugin if the UI doesn't support VV */
-	if (purple_media_manager_get_ui_caps(purple_media_manager_get()) ==
-			PURPLE_MEDIA_CAPS_NONE)
-		return FALSE;
-
-	purple_prefs_add_none("/plugins/core/vvconfig");
-	purple_prefs_add_none("/plugins/core/vvconfig/audio");
-	purple_prefs_add_none("/plugins/core/vvconfig/audio/src");
-	purple_prefs_add_string("/plugins/core/vvconfig/audio/src/plugin", "");
-	purple_prefs_add_string("/plugins/core/vvconfig/audio/src/device", "");
-	purple_prefs_add_none("/plugins/core/vvconfig/audio/sink");
-	purple_prefs_add_string("/plugins/core/vvconfig/audio/sink/plugin", "");
-	purple_prefs_add_string("/plugins/core/vvconfig/audio/sink/device", "");
-	purple_prefs_add_none("/plugins/core/vvconfig/video");
-	purple_prefs_add_none("/plugins/core/vvconfig/video/src");
-	purple_prefs_add_string("/plugins/core/vvconfig/video/src/plugin", "");
-	purple_prefs_add_string("/plugins/core/vvconfig/video/src/device", "");
-	purple_prefs_add_none("/plugins/gtk/vvconfig");
-	purple_prefs_add_none("/plugins/gtk/vvconfig/video");
-	purple_prefs_add_none("/plugins/gtk/vvconfig/video/sink");
-	purple_prefs_add_string("/plugins/gtk/vvconfig/video/sink/plugin", "");
-	purple_prefs_add_string("/plugins/gtk/vvconfig/video/sink/device", "");
-
-	video_src = g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
-			"id", "vvconfig-videosrc",
-			"name", "VV Conf Plugin Video Source",
-			"type", PURPLE_MEDIA_ELEMENT_VIDEO
-					| PURPLE_MEDIA_ELEMENT_SRC
-					| PURPLE_MEDIA_ELEMENT_ONE_SRC
-					| PURPLE_MEDIA_ELEMENT_UNIQUE,
-			"create-cb", create_video_src, NULL);
-	video_sink = g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
-			"id", "vvconfig-videosink",
-			"name", "VV Conf Plugin Video Sink",
-			"type", PURPLE_MEDIA_ELEMENT_VIDEO
-					| PURPLE_MEDIA_ELEMENT_SINK
-					| PURPLE_MEDIA_ELEMENT_ONE_SINK,
-			"create-cb", create_video_sink, NULL);
-	audio_src = g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
-			"id", "vvconfig-audiosrc",
-			"name", "VV Conf Plugin Audio Source",
-			"type", PURPLE_MEDIA_ELEMENT_AUDIO
-					| PURPLE_MEDIA_ELEMENT_SRC
-					| PURPLE_MEDIA_ELEMENT_ONE_SRC
-					| PURPLE_MEDIA_ELEMENT_UNIQUE,
-			"create-cb", create_audio_src, NULL);
-	audio_sink = g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
-			"id", "vvconfig-audiosink",
-			"name", "VV Conf Plugin Audio Sink",
-			"type", PURPLE_MEDIA_ELEMENT_AUDIO
-					| PURPLE_MEDIA_ELEMENT_SINK
-					| PURPLE_MEDIA_ELEMENT_ONE_SINK,
-			"create-cb", create_audio_sink, NULL);
-
-	purple_debug_info("gtkmedia", "Registering media element types\n");
-	manager = purple_media_manager_get();
-
-	old_video_src = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_VIDEO | PURPLE_MEDIA_ELEMENT_SRC);
-	old_video_sink = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_VIDEO | PURPLE_MEDIA_ELEMENT_SINK);
-	old_audio_src = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_AUDIO | PURPLE_MEDIA_ELEMENT_SRC);
-	old_audio_sink = purple_media_manager_get_active_element(manager,
-			PURPLE_MEDIA_ELEMENT_AUDIO | PURPLE_MEDIA_ELEMENT_SINK);
-
-	set_element_info_cond(old_video_src, video_src, "pidgindefaultvideosrc");
-	set_element_info_cond(old_video_sink, video_sink, "pidgindefaultvideosink");
-	set_element_info_cond(old_audio_src, audio_src, "pidgindefaultaudiosrc");
-	set_element_info_cond(old_audio_sink, audio_sink, "pidgindefaultaudiosink");
-
-	return TRUE;
-}
-
-static void
-config_destroy(GtkWidget *w, gpointer nul)
-{
-	purple_debug_info("vvconfig", "closing vv configuration window\n");
-	window = NULL;
-}
-
-static void
-config_close(GtkWidget *w, gpointer nul)
-{
-	gtk_widget_destroy(GTK_WIDGET(window));
-}
-
-typedef GtkWidget *(*FrameCreateCb)(PurplePlugin *plugin);
-
-static void
-show_config(PurplePluginAction *action)
-{
-	if (!window) {
-		FrameCreateCb create_frame = action->user_data;
-		GtkWidget *vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
-		GtkWidget *hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER);
-		GtkWidget *config_frame = create_frame(NULL);
-		GtkWidget *close = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
-
-		gtk_container_add(GTK_CONTAINER(vbox), config_frame);
-		gtk_container_add(GTK_CONTAINER(vbox), hbox);
-		window = pidgin_create_window(action->label,
-			PIDGIN_HIG_BORDER, NULL, FALSE);
-		g_signal_connect(G_OBJECT(window), "destroy",
-			G_CALLBACK(config_destroy), NULL);
-		g_signal_connect(G_OBJECT(close), "clicked",
-		    G_CALLBACK(config_close), NULL);
-		gtk_box_pack_end(GTK_BOX(hbox), close, FALSE, FALSE, PIDGIN_HIG_BORDER);
-		gtk_container_add(GTK_CONTAINER(window), vbox);
-		gtk_widget_show(GTK_WIDGET(close));
-		gtk_widget_show(GTK_WIDGET(vbox));
-		gtk_widget_show(GTK_WIDGET(hbox));
-	}
-	gtk_window_present(GTK_WINDOW(window));
-}
-
-static GstElement *
-create_pipeline()
-{
-	GstElement *pipeline = gst_pipeline_new("voicetest");
-	GstElement *src = create_audio_src(NULL, NULL, NULL);
-	GstElement *sink = create_audio_sink(NULL, NULL, NULL);
-	GstElement *volume = gst_element_factory_make("volume", "volume");
-	GstElement *level = gst_element_factory_make("level", "level");
-	GstElement *valve = gst_element_factory_make("valve", "valve");
-
-	gst_bin_add_many(GST_BIN(pipeline), src, volume, level, valve, sink, NULL);
-	gst_element_link_many(src, volume, level, valve, sink, NULL);
-
-	gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_PLAYING);
-
-	return pipeline;
-}
-
-static void
-on_volume_change_cb(GtkRange *range, GstBin *pipeline)
-{
-	GstElement *volume;
-
-	g_return_if_fail(pipeline != NULL);
-
-	volume = gst_bin_get_by_name(pipeline, "volume");
-	g_object_set(volume, "volume", gtk_range_get_value(range) / 10.0, NULL);
-}
-
-static gdouble
-gst_msg_db_to_percent(GstMessage *msg, gchar *value_name)
-{
-	const GValue *list;
-	const GValue *value;
-	gdouble value_db;
-	gdouble percent;
-
-	list = gst_structure_get_value(
-				gst_message_get_structure(msg), value_name);
-	value = gst_value_list_get_value(list, 0);
-	value_db = g_value_get_double(value);
-	percent = pow(10, value_db / 20);
-	return (percent > 1.0) ? 1.0 : percent;
-}
-
-typedef struct
-{
-	GtkProgressBar *level;
-	GtkRange *threshold;
-} BusCbCtx;
-
-static gboolean
-gst_bus_cb(GstBus *bus, GstMessage *msg, BusCbCtx *ctx)
-{
-	if (GST_MESSAGE_TYPE(msg) == GST_MESSAGE_ELEMENT &&
-		gst_structure_has_name(msg->structure, "level")) {
-
-		GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg));
-		gchar *name = gst_element_get_name(src);
-
-		if (!strcmp(name, "level")) {
-			gdouble percent;
-			gdouble threshold;
-			GstElement *valve;
-
-			percent = gst_msg_db_to_percent(msg, "rms");
-			gtk_progress_bar_set_fraction(ctx->level, percent);
-
-			percent = gst_msg_db_to_percent(msg, "decay");
-			threshold = gtk_range_get_value(ctx->threshold) / 100.0;
-			valve = gst_bin_get_by_name(GST_BIN(GST_ELEMENT_PARENT(src)), "valve");
-			g_object_set(valve, "drop", (percent < threshold), NULL);
-			g_object_set(ctx->level,
-					"text", (percent < threshold) ? _("DROP") : " ", NULL);
-		}
-
-		g_free(name);
-	}
-
-	return TRUE;
-}
-
-static void
-voice_test_frame_destroy_cb(GtkWidget *w, GstElement *pipeline)
-{
-	g_return_if_fail(GST_IS_ELEMENT(pipeline));
-
-	gst_element_set_state(pipeline, GST_STATE_NULL);
-	gst_object_unref(pipeline);
-}
-
-static void
-volume_scale_destroy_cb(GtkRange *volume, gpointer nul)
-{
-	purple_prefs_set_int("/purple/media/audio/volume/input",
-			gtk_range_get_value(volume));
-}
-
-static gchar*
-threshold_value_format_cb(GtkScale *scale, gdouble value)
-{
-	return g_strdup_printf ("%.*f%%", gtk_scale_get_digits(scale), value);
-}
-
-static void
-threshold_scale_destroy_cb(GtkRange *threshold, gpointer nul)
-{
-	purple_prefs_set_int("/purple/media/audio/silence_threshold",
-			gtk_range_get_value(threshold));
-}
-
-static GtkWidget *
-get_voice_test_frame(PurplePlugin *plugin)
-{
-	GtkWidget *vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BORDER);
-	GtkWidget *level = gtk_progress_bar_new();
-	GtkWidget *volume = gtk_hscale_new_with_range(0, 100, 1);
-	GtkWidget *threshold = gtk_hscale_new_with_range(0, 100, 1);
-	GtkWidget *label;
-	GtkTable *table = GTK_TABLE(gtk_table_new(2, 2, FALSE));
-
-	GstElement *pipeline;
-	GstBus *bus;
-	BusCbCtx *ctx;
-
-	g_object_set(vbox, "width-request", 500, NULL);
-
-	gtk_table_set_row_spacings(table, PIDGIN_HIG_BOX_SPACE);
-	gtk_table_set_col_spacings(table, PIDGIN_HIG_BOX_SPACE);
-
-	label = gtk_label_new(_("Volume:"));
-	g_object_set(label, "xalign", 0.0, NULL);
-	gtk_table_attach(table, label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
-	gtk_table_attach_defaults(table, volume, 1, 2, 0, 1);
-	label = gtk_label_new(_("Silence threshold:"));
-	g_object_set(label, "xalign", 0.0, "yalign", 1.0, NULL);
-	gtk_table_attach(table, label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
-	gtk_table_attach_defaults(table, threshold, 1, 2, 1, 2);
-
-	gtk_container_add(GTK_CONTAINER(vbox), level);
-	gtk_container_add(GTK_CONTAINER(vbox), GTK_WIDGET(table));
-	gtk_widget_show_all(vbox);
-
-	pipeline = create_pipeline();
-	bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
-	gst_bus_add_signal_watch(bus);
-	ctx = g_new(BusCbCtx, 1);
-	ctx->level = GTK_PROGRESS_BAR(level);
-	ctx->threshold = GTK_RANGE(threshold);
-	g_signal_connect_data(bus, "message", G_CALLBACK(gst_bus_cb),
-			ctx, (GClosureNotify)g_free, 0);
-	gst_object_unref(bus);
-
-	g_signal_connect(volume, "value-changed",
-			(GCallback)on_volume_change_cb, pipeline);
-
-	gtk_range_set_value(GTK_RANGE(volume),
-			purple_prefs_get_int("/purple/media/audio/volume/input"));
-	gtk_scale_set_draw_value(GTK_SCALE(volume), FALSE);
-
-	gtk_range_set_value(GTK_RANGE(threshold),
-			purple_prefs_get_int("/purple/media/audio/silence_threshold"));
-
-	g_signal_connect(vbox, "destroy",
-			G_CALLBACK(voice_test_frame_destroy_cb), pipeline);
-	g_signal_connect(volume, "destroy",
-			G_CALLBACK(volume_scale_destroy_cb), NULL);
-	g_signal_connect(threshold, "format-value",
-			G_CALLBACK(threshold_value_format_cb), NULL);
-	g_signal_connect(threshold, "destroy",
-			G_CALLBACK(threshold_scale_destroy_cb), NULL);
-
-	return vbox;
-}
-
-static GList *
-actions(PurplePlugin *plugin, gpointer context)
-{
-	GList *l = NULL;
-	PurplePluginAction *act = NULL;
-
-	act = purple_plugin_action_new(_("Input and Output Settings"),
-		show_config);
-	act->user_data = get_plugin_config_frame;
-	l = g_list_append(l, act);
-
-	act = purple_plugin_action_new(_("Microphone Test"),
-		show_config);
-	act->user_data = get_voice_test_frame;
-	l = g_list_append(l, act);
-
-	return l;
-}
-
-static gboolean
-plugin_unload(PurplePlugin *plugin)
-{
-	PurpleMediaManager *manager = purple_media_manager_get();
-	purple_media_manager_set_active_element(manager, old_video_src);
-	purple_media_manager_set_active_element(manager, old_video_sink);
-	purple_media_manager_set_active_element(manager, old_audio_src);
-	purple_media_manager_set_active_element(manager, old_audio_sink);
-	return TRUE;
-}
-
-static PidginPluginUiInfo ui_info = {
-	get_plugin_config_frame,
-	0,   /* page_num (Reserved) */
-	/* Padding */
-	NULL,
-	NULL,
-	NULL,
-	NULL
-};
-
-static PurplePluginInfo info =
-{
-	PURPLE_PLUGIN_MAGIC,                         /**< magic          */
-	PURPLE_MAJOR_VERSION,                        /**< major version  */
-	PURPLE_MINOR_VERSION,                        /**< minor version  */
-	PURPLE_PLUGIN_STANDARD,                      /**< type           */
-	PIDGIN_PLUGIN_TYPE,                          /**< ui_requirement */
-	0,                                           /**< flags          */
-	NULL,                                        /**< dependencies   */
-	PURPLE_PRIORITY_DEFAULT,                     /**< priority       */
-
-	"gtk-maiku-vvconfig",                        /**< id             */
-	N_("Voice/Video Settings"),                  /**< name           */
-	DISPLAY_VERSION,                             /**< version        */
-	N_("Configure your microphone and webcam."), /**< summary        */
-	N_("Configure microphone and webcam "
-	   "settings for voice/video calls."),       /**< description    */
-	"Mike Ruprecht <cmaiku@gmail.com>",          /**< author         */
-	PURPLE_WEBSITE,                              /**< homepage       */
-
-	plugin_load,                                 /**< load           */
-	plugin_unload,                               /**< unload         */
-	NULL,                                        /**< destroy        */
-
-	&ui_info,                                    /**< ui_info        */
-	NULL,                                        /**< extra_info     */
-	NULL,                                        /**< prefs_info     */
-	actions,                                     /**< actions        */
-
-	/* padding */
-	NULL,
-	NULL,
-	NULL,
-	NULL
-};
-
-static void
-init_plugin(PurplePlugin *plugin) {
-}
-
-PURPLE_INIT_PLUGIN(vvconfig, init_plugin, info)
--- a/pidgin/win32/nsis/nsis_translations.desktop.in	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/win32/nsis/nsis_translations.desktop.in	Mon Jun 03 15:26:52 2013 +0530
@@ -47,15 +47,15 @@
 #Installer Subsection Text
 _PIDGINSPELLCHECKSECTIONTITLE=Spellchecking Support
 # $R3 will display the URL that the Dictionary failed to download from
-_PIDGINSPELLCHECKERROR=Error Installing Spellchecking ($R3).$\rIf retrying fails, manual installation instructions are at: http://developer.pidgin.im/wiki/Installing%20Pidgin#manual_win32_spellcheck_installation
+_PIDGINSPELLCHECKERROR=Error Installing Spellchecking ($R3).$\rIf retrying fails, manual installation instructions are at: https://developer.pidgin.im/wiki/Installing%20Pidgin#manual_win32_spellcheck_installation
 #Installer Subsection Detailed Description
 _PIDGINSPELLCHECKSECTIONDESCRIPTION=Support for Spellchecking.  (Internet connection required for installation)
 
 # $R2 will display the URL that the Debug Symbols failed to download from
-_PIDGINDEBUGSYMBOLSERROR=Error Installing Debug Symbols ($R2).$\rIf retrying fails, you may need to use the 'Offline Installer' from http://pidgin.im/download/windows/ .
+_PIDGINDEBUGSYMBOLSERROR=Error Installing Debug Symbols ($R2).$\rIf retrying fails, you may need to use the 'Offline Installer' from https://pidgin.im/download/windows/ .
 
 # $R2 will display the URL that the GTK+ Runtime failed to download from
-_PIDGINGTKDOWNLOADERROR=Error Downloading the GTK+ Runtime ($R2).$\rThis is required for Pidgin to function; if retrying fails, you may need to use the 'Offline Installer' from http://pidgin.im/download/windows/ .
+_PIDGINGTKDOWNLOADERROR=Error Downloading the GTK+ Runtime ($R2).$\rThis is required for Pidgin to function; if retrying fails, you may need to use the 'Offline Installer' from https://pidgin.im/download/windows/ .
 
 _PIDGINUNINSTALLERROR1=The uninstaller could not find registry entries for Pidgin.$\rIt is likely that another user installed this application.
 _PIDGINUNINSTALLERROR2=You do not have permission to uninstall this application.
--- a/pidgin/win32/nsis/pidgin-installer.nsi	Fri May 31 19:02:45 2013 +0530
+++ b/pidgin/win32/nsis/pidgin-installer.nsi	Mon Jun 03 15:26:52 2013 +0530
@@ -121,7 +121,7 @@
   ;!define MUI_FINISHPAGE_RUN			"$INSTDIR\pidgin.exe"
   ;!define MUI_FINISHPAGE_RUN_NOTCHECKED
   !define MUI_FINISHPAGE_LINK			$(PIDGINFINISHVISITWEBSITE)
-  !define MUI_FINISHPAGE_LINK_LOCATION		"http://pidgin.im"
+  !define MUI_FINISHPAGE_LINK_LOCATION		"https://pidgin.im"
 
 ;--------------------------------
 ;Pages
@@ -310,7 +310,7 @@
     WriteRegStr HKLM "${PIDGIN_UNINSTALL_KEY}" "DisplayIcon" "$INSTDIR\pidgin.exe"
     WriteRegStr HKLM "${PIDGIN_UNINSTALL_KEY}" "DisplayName" "Pidgin"
     WriteRegStr HKLM "${PIDGIN_UNINSTALL_KEY}" "DisplayVersion" "${PIDGIN_VERSION}"
-    WriteRegStr HKLM "${PIDGIN_UNINSTALL_KEY}" "HelpLink" "http://developer.pidgin.im/wiki/Using Pidgin"
+    WriteRegStr HKLM "${PIDGIN_UNINSTALL_KEY}" "HelpLink" "https://developer.pidgin.im/wiki/Using Pidgin"
     WriteRegDWORD HKLM "${PIDGIN_UNINSTALL_KEY}" "NoModify" 1
     WriteRegDWORD HKLM "${PIDGIN_UNINSTALL_KEY}" "NoRepair" 1
     WriteRegStr HKLM "${PIDGIN_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${PIDGIN_UNINST_EXE}"
@@ -324,7 +324,7 @@
     WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "DisplayIcon" "$INSTDIR\pidgin.exe"
     WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "DisplayName" "Pidgin"
     WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "DisplayVersion" "${PIDGIN_VERSION}"
-    WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "HelpLink" "http://developer.pidgin.im/wiki/Using Pidgin"
+    WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "HelpLink" "https://developer.pidgin.im/wiki/Using Pidgin"
     WriteRegDWORD HKCU "${PIDGIN_UNINSTALL_KEY}" "NoModify" 1
     WriteRegDWORD HKCU "${PIDGIN_UNINSTALL_KEY}" "NoRepair" 1
     WriteRegStr HKCU "${PIDGIN_UNINSTALL_KEY}" "UninstallString" "$INSTDIR\${PIDGIN_UNINST_EXE}"
--- a/po/README	Fri May 31 19:02:45 2013 +0530
+++ b/po/README	Mon Jun 03 15:26:52 2013 +0530
@@ -1,2 +1,2 @@
 For information on translating Pidgin, libpurple, and Finch, please see
-our wiki page at http://developer.pidgin.im/wiki/TipsForTranslators.
+our wiki page at https://developer.pidgin.im/wiki/TipsForTranslators.
--- a/po/mai.po	Fri May 31 19:02:45 2013 +0530
+++ b/po/mai.po	Mon Jun 03 15:26:52 2013 +0530
@@ -10,7 +10,7 @@
 "POT-Creation-Date: 2012-03-12 02:49-0700\n"
 "PO-Revision-Date: 2010-09-02 18:48+0530\n"
 "Last-Translator: sangeeta_0975@yahoo.com>\n"
-"Language-Team: Maithili <http://code.google.com/p/bhashaghar>\n"
+"Language-Team: Maithili <https://code.google.com/p/bhashaghar/>\n"
 "Language: mai\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"

mercurial