Mon, 03 Jun 2013 15:26:52 +0530
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"