pidgin:add pisi-2.0
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Licensed under the GNU General Public License, version 3.
|
||||
# See the file http://www.gnu.org/licenses/gpl.txt
|
||||
|
||||
from pisi.actionsapi import autotools
|
||||
from pisi.actionsapi import pisitools
|
||||
from pisi.actionsapi import shelltools
|
||||
from pisi.actionsapi import perlmodules
|
||||
from pisi.actionsapi import get
|
||||
|
||||
def setup():
|
||||
#shelltools.export("CFLAGS","%s -fstack-protector-all" % get.CFLAGS())
|
||||
#shelltools.export("CXXFLAGS", "%s -fstack-protector-all" % get.CXXFLAGS())
|
||||
#shelltools.export("LDFLAGS", "%s -pie" % get.LDFLAGS())
|
||||
#autotools.autoreconf("-fi")
|
||||
autotools.configure("--prefix=/usr \
|
||||
--enable-dbus \
|
||||
--enable-cyrus-sasl \
|
||||
--enable-gnutls=yes \
|
||||
--enable-nss=yes \
|
||||
--enable-nm \
|
||||
--enable-cap \
|
||||
--enable-mono \
|
||||
--disable-schemas-install \
|
||||
--disable-meanwhile \
|
||||
--disable-vv \
|
||||
--enable-nm \
|
||||
--enable-tcl \
|
||||
--enable-tk \
|
||||
--with-python=/usr/bin/python2.7 \
|
||||
--x-includes=/usr/include/X11 \
|
||||
--with-gnutls-includes=/usr/include/gnutls \
|
||||
--with-gnutls-libs=/usr/lib \
|
||||
--with-system-ssl-certs=/etc/ssl/certs")
|
||||
|
||||
#pisitools.dosed("libtool", " -shared ", " -Wl,-O1,--as-needed -shared ")
|
||||
|
||||
def build():
|
||||
autotools.make()
|
||||
|
||||
def install():
|
||||
autotools.rawInstall("DESTDIR=%s" % get.installDIR())
|
||||
|
||||
pisitools.dosym("../icons/hicolor/48x48/apps/pidgin.png", "/usr/share/pixmaps/pidgin.png")
|
||||
|
||||
pisitools.dodoc("AUTHORS", "COPYING", "HACKING", "NEWS", "README", "ChangeLog")
|
||||
|
||||
perlmodules.removePodfiles()
|
||||
@@ -0,0 +1,17 @@
|
||||
pidgin-2.7.2.tar.bz2
|
||||
pidgin-2.7.3.tar.bz2
|
||||
/pidgin-2.7.4.tar.bz2
|
||||
/pidgin-2.7.5.tar.bz2
|
||||
/pidgin-2.7.7.tar.bz2
|
||||
/pidgin-2.7.9.tar.bz2
|
||||
/pidgin-2.7.10.tar.bz2
|
||||
/pidgin-2.7.11.tar.bz2
|
||||
/pidgin-2.8.0.tar.bz2
|
||||
/pidgin-2.9.0.tar.bz2
|
||||
/pidgin-2.10.0.tar.bz2
|
||||
/pidgin-2.10.1.tar.bz2
|
||||
/pidgin-2.10.2.tar.bz2
|
||||
/pidgin-2.10.4.tar.bz2
|
||||
/pidgin-2.10.5.tar.bz2
|
||||
/pidgin-2.10.6.tar.bz2
|
||||
/pidgin-2.10.7.tar.bz2
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
diff -urN pidgin-2.5.2.orig/pidgin/gtksound.c pidgin-2.5.2/pidgin/gtksound.c
|
||||
--- pidgin-2.5.2.orig/pidgin/gtksound.c 2008-07-13 22:05:38.000000000 -0400
|
||||
+++ pidgin-2.5.2/pidgin/gtksound.c 2008-11-22 13:36:54.000000000 -0500
|
||||
@@ -298,6 +298,9 @@
|
||||
purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/mute", FALSE);
|
||||
purple_prefs_add_path(PIDGIN_PREFS_ROOT "/sound/command", "");
|
||||
purple_prefs_add_string(PIDGIN_PREFS_ROOT "/sound/method", "automatic");
|
||||
+#ifndef USE_GSTREAMER
|
||||
+ purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/sound/rhel4migrated", FALSE);
|
||||
+#endif
|
||||
purple_prefs_add_int(PIDGIN_PREFS_ROOT "/sound/volume", 50);
|
||||
|
||||
#ifdef USE_GSTREAMER
|
||||
@@ -433,6 +436,19 @@
|
||||
return;
|
||||
}
|
||||
|
||||
+#ifndef USE_GSTREAMER
|
||||
+ /* RHEL4 migration code */
|
||||
+ if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/sound/rhel4migrated")) {
|
||||
+ purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/sound/rhel4migrated", TRUE);
|
||||
+ if(!strcmp(method, "automatic") ||
|
||||
+ !strcmp(method, "esd") ||
|
||||
+ !strcmp(method, "arts")) {
|
||||
+ purple_prefs_set_string(PIDGIN_PREFS_ROOT "/sound/method", "custom");
|
||||
+ purple_prefs_set_path(PIDGIN_PREFS_ROOT "/sound/command", "aplay %s");
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
#ifndef _WIN32
|
||||
if (!strcmp(method, "custom")) {
|
||||
const char *sound_cmd;
|
||||
@@ -0,0 +1,23 @@
|
||||
--- pidgin-2.10.0/libpurple/protocols/gg/gg.c.orig 2011-08-18 10:51:03.000000000 +0200
|
||||
+++ pidgin-2.10.0/libpurple/protocols/gg/gg.c 2011-08-21 09:54:41.000000000 +0200
|
||||
@@ -533,6 +533,8 @@
|
||||
purple_request_fields_get_string(fields, "firstname"));
|
||||
form->nickname = g_strdup(
|
||||
purple_request_fields_get_string(fields, "nickname"));
|
||||
+ form->uin = g_strdup(
|
||||
+ purple_request_fields_get_string(fields, "uin"));
|
||||
form->city = g_strdup(
|
||||
purple_request_fields_get_string(fields, "city"));
|
||||
form->birthyear = g_strdup(
|
||||
@@ -586,6 +588,11 @@
|
||||
purple_request_field_string_set_masked(field, FALSE);
|
||||
purple_request_field_group_add_field(group, field);
|
||||
|
||||
+ field = purple_request_field_string_new("uin",
|
||||
+ _("UIN"), NULL, FALSE);
|
||||
+ purple_request_field_string_set_masked(field, FALSE);
|
||||
+ purple_request_field_group_add_field(group, field);
|
||||
+
|
||||
field = purple_request_field_string_new("city",
|
||||
_("City"), NULL, FALSE);
|
||||
purple_request_field_string_set_masked(field, FALSE);
|
||||
@@ -0,0 +1,20 @@
|
||||
--- libpurple/protocols/jabber/Makefile.am.orig 2010-02-16 10:34:06.000000000 +0100
|
||||
+++ libpurple/protocols/jabber/Makefile.am 2010-02-18 10:31:46.828001077 +0100
|
||||
@@ -80,6 +80,7 @@
|
||||
|
||||
AM_CFLAGS = $(st)
|
||||
|
||||
+libjabber_la_LDFLAGS = -module -avoid-version
|
||||
libxmpp_la_LDFLAGS = -module -avoid-version
|
||||
|
||||
if USE_CYRUS_SASL
|
||||
--- libpurple/protocols/oscar/Makefile.am.orig 2010-02-16 10:34:06.000000000 +0100
|
||||
+++ libpurple/protocols/oscar/Makefile.am 2010-02-18 10:31:46.828001077 +0100
|
||||
@@ -50,6 +50,7 @@
|
||||
|
||||
libaim_la_LDFLAGS = -module -avoid-version
|
||||
libicq_la_LDFLAGS = -module -avoid-version
|
||||
+liboscar_la_LDFLAGS = -module -avoid-version
|
||||
if STATIC_OSCAR
|
||||
|
||||
st = -DPURPLE_STATIC_PRPL
|
||||
@@ -0,0 +1,20 @@
|
||||
diff -p -up pidgin-2.7.0/configure.ac~ pidgin-2.7.0/configure.ac
|
||||
--- pidgin-2.7.0/configure.ac~ 2010-05-13 22:24:35.000000000 +0200
|
||||
+++ pidgin-2.7.0/configure.ac 2010-05-13 22:28:11.000000000 +0200
|
||||
@@ -1522,7 +1522,7 @@ dnl # Check for Mono support
|
||||
dnl #######################################################################
|
||||
AC_ARG_ENABLE(mono, [AC_HELP_STRING([--enable-mono], [compile with Mono runtime support (experimental)])], , enable_mono=no)
|
||||
if test x"$enable_mono" = x"yes" ; then
|
||||
- PKG_CHECK_MODULES(MONO, mono, [
|
||||
+ PKG_CHECK_MODULES(MONO, mono glib-2.0 gthread-2.0, [
|
||||
AC_SUBST(MONO_CFLAGS)
|
||||
AC_SUBST(MONO_LIBS)
|
||||
enable_mono=yes
|
||||
diff -p -up pidgin-2.7.0/libpurple/plugins/mono/loader/status-glue.c~ pidgin-2.7.0/libpurple/plugins/mono/loader/status-glue.c
|
||||
--- pidgin-2.7.0/libpurple/plugins/mono/loader/status-glue.c~ 2010-05-12 06:36:11.000000000 +0200
|
||||
+++ pidgin-2.7.0/libpurple/plugins/mono/loader/status-glue.c 2010-05-13 22:33:45.000000000 +0200
|
||||
@@ -1,3 +1,4 @@
|
||||
+#include <glib.h>
|
||||
#include "status.h"
|
||||
#include "mono-helper.h"
|
||||
#include "mono-glue.h"
|
||||
@@ -0,0 +1,24 @@
|
||||
diff -p -up pidgin-2.7.0/pidgin/pixmaps/emotes/default/24/theme.smiley pidgin-2.7.0/pidgin/pixmaps/emotes/default/24/theme
|
||||
--- pidgin-2.7.0/pidgin/pixmaps/emotes/default/24/theme.smiley 2010-05-12 06:37:31.000000000 +0200
|
||||
+++ pidgin-2.7.0/pidgin/pixmaps/emotes/default/24/theme 2010-05-13 21:15:22.000000000 +0200
|
||||
@@ -6,9 +6,9 @@ Author=Hylke Bons
|
||||
|
||||
# Default smileys
|
||||
[default]
|
||||
-happy.png :) :-)
|
||||
+happy.png :) :-) =)
|
||||
excited.png :-D :-d :D :d
|
||||
-sad.png :-( :(
|
||||
+sad.png :-( :( =(
|
||||
wink.png ;-) ;)
|
||||
tongue.png :P :p :-P :-p
|
||||
shocked.png =-O =-o
|
||||
@@ -16,7 +16,7 @@ kiss.png :-*
|
||||
glasses-cool.png 8-)
|
||||
embarrassed.png :-[
|
||||
crying.png :'( :'-(
|
||||
-thinking.png :-/ :-\\
|
||||
+thinking.png :-/ :-\ :\
|
||||
angel.png O:-) o:-)
|
||||
shut-mouth.png :-X
|
||||
moneymouth.png :-$
|
||||
@@ -0,0 +1,14 @@
|
||||
--- pidgin-2.8.0/libpurple/protocols/gg/gg.c.orig 2011-06-08 03:10:11.000000000 +0200
|
||||
+++ pidgin-2.8.0/libpurple/protocols/gg/gg.c 2011-06-08 03:13:44.000000000 +0200
|
||||
@@ -1816,6 +1816,11 @@
|
||||
case GG_EVENT_PUBDIR50_SEARCH_REPLY:
|
||||
ggp_pubdir_reply_handler(gc, ev->event.pubdir50);
|
||||
break;
|
||||
+ case GG_EVENT_DISCONNECT:
|
||||
+ purple_connection_error_reason (gc,
|
||||
+ PURPLE_CONNECTION_ERROR_OTHER_ERROR,
|
||||
+ _("Server Disconnect."));
|
||||
+ break;
|
||||
case GG_EVENT_TYPING_NOTIFICATION:
|
||||
ggp_typing_notification_handler(gc, ev->event.typing_notification.uin,
|
||||
ev->event.typing_notification.length);
|
||||
@@ -0,0 +1,11 @@
|
||||
--- pidgin-2.8.0/libpurple/network.c.reread-resolvconf 2011-06-09 16:30:04.764927571 +0200
|
||||
+++ pidgin-2.8.0/libpurple/network.c 2011-06-09 16:31:29.356249181 +0200
|
||||
@@ -874,8 +874,6 @@
|
||||
#else
|
||||
case NM_STATE_CONNECTED:
|
||||
#endif
|
||||
- /* Call res_init in case DNS servers have changed */
|
||||
- res_init();
|
||||
/* update STUN IP in case we it changed (theoretically we could
|
||||
have gone from IPv4 to IPv6, f.ex. or we were previously
|
||||
offline */
|
||||
@@ -0,0 +1,9 @@
|
||||
--- pidgin.desktop.in 2009-08-18 23:48:30.163325146 +0300
|
||||
+++ pidgin.desktop2 2009-08-18 23:47:51.648352181 +0300
|
||||
@@ -1,5 +1,5 @@
|
||||
[Desktop Entry]
|
||||
-_Name=Pidgin Internet Messenger
|
||||
+_Name=Pidgin
|
||||
_GenericName=Internet Messenger
|
||||
_Comment=Send instant messages over multiple protocols
|
||||
Exec=pidgin
|
||||
@@ -0,0 +1,22 @@
|
||||
# HG changeset patch
|
||||
# User Youness Alaoui <kakaroto@kakaroto.homelinux.net>
|
||||
# Date 1404159462 14400
|
||||
# Node ID 2b41ba1fde8a80a4f2d715874a0b02449d4b66ad
|
||||
# Parent f02f7d1fb4d545c6d7353745094e1afcf0428ca9
|
||||
Fix send-video enum typo
|
||||
|
||||
Refs #16315
|
||||
|
||||
diff --git a/libpurple/media/enum-types.c b/libpurple/media/enum-types.c
|
||||
--- a/libpurple/media/enum-types.c
|
||||
+++ b/libpurple/media/enum-types.c
|
||||
@@ -175,7 +175,7 @@
|
||||
{ PURPLE_MEDIA_RECV_VIDEO,
|
||||
"PURPLE_MEDIA_RECV_VIDEO", "recv-video" },
|
||||
{ PURPLE_MEDIA_SEND_VIDEO,
|
||||
- "PURPLE_MEDIA_SEND_VIDEO", "send-audio" },
|
||||
+ "PURPLE_MEDIA_SEND_VIDEO", "send-video" },
|
||||
{ PURPLE_MEDIA_AUDIO,
|
||||
"PURPLE_MEDIA_AUDIO", "audio" },
|
||||
{ PURPLE_MEDIA_VIDEO,
|
||||
|
||||
@@ -0,0 +1,350 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User David Woodhouse <David.Woodhouse@intel.com>
|
||||
# Date 1425675783 0
|
||||
# Node ID 6b4576edf2a694ab55d0d06d3643c44601a75b15
|
||||
# Parent 714ba418d0aa5ba0cc4cc3b9db37296cd2bbf041
|
||||
Add out-of-band DTMF support and dialpad to use it
|
||||
|
||||
This is a backport of e4c122196b08 from the trunk. It adds the UI and
|
||||
farstream backend support for sending DTMF.
|
||||
|
||||
Fixes #15575
|
||||
|
||||
diff --git a/libpurple/media.c b/libpurple/media.c
|
||||
--- a/libpurple/media.c
|
||||
+++ b/libpurple/media.c
|
||||
@@ -1439,3 +1439,46 @@
|
||||
}
|
||||
#endif /* USE_GSTREAMER */
|
||||
|
||||
+gboolean
|
||||
+purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id,
|
||||
+ gchar dtmf, guint8 volume, guint16 duration)
|
||||
+{
|
||||
+#ifdef USE_VV
|
||||
+ PurpleAccount *account = NULL;
|
||||
+ PurpleConnection *gc = NULL;
|
||||
+ PurplePlugin *prpl = NULL;
|
||||
+ PurplePluginProtocolInfo *prpl_info = NULL;
|
||||
+ PurpleMediaBackendIface *backend_iface = NULL;
|
||||
+
|
||||
+ if (media)
|
||||
+ {
|
||||
+ account = purple_media_get_account(media);
|
||||
+ backend_iface = PURPLE_MEDIA_BACKEND_GET_INTERFACE(media->priv->backend);
|
||||
+ }
|
||||
+ if (account)
|
||||
+ gc = purple_account_get_connection(account);
|
||||
+ if (gc)
|
||||
+ prpl = purple_connection_get_prpl(gc);
|
||||
+ if (prpl)
|
||||
+ prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
|
||||
+
|
||||
+ if (dtmf == 'a')
|
||||
+ dtmf = 'A';
|
||||
+ else if (dtmf == 'b')
|
||||
+ dtmf = 'B';
|
||||
+ else if (dtmf == 'c')
|
||||
+ dtmf = 'C';
|
||||
+ else if (dtmf == 'd')
|
||||
+ dtmf = 'D';
|
||||
+
|
||||
+ g_return_val_if_fail(strchr("0123456789ABCD#*", dtmf), FALSE);
|
||||
+
|
||||
+ if (backend_iface && backend_iface->send_dtmf
|
||||
+ && backend_iface->send_dtmf(media->priv->backend,
|
||||
+ session_id, dtmf, volume, duration))
|
||||
+ {
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+#endif
|
||||
+ return FALSE;
|
||||
+}
|
||||
diff --git a/libpurple/media.h b/libpurple/media.h
|
||||
--- a/libpurple/media.h
|
||||
+++ b/libpurple/media.h
|
||||
@@ -437,6 +437,21 @@
|
||||
*/
|
||||
void purple_media_remove_output_windows(PurpleMedia *media);
|
||||
|
||||
+/**
|
||||
+ * Sends a DTMF signal out-of-band.
|
||||
+ *
|
||||
+ * @param media The media instance to send a DTMF signal to.
|
||||
+ * @param sess_id The session id of the session to send the DTMF signal on.
|
||||
+ * @param dtmf The character representing the DTMF in the range [0-9#*A-D].
|
||||
+ * @param volume The power level expressed in dBm0 after dropping the sign
|
||||
+ * in the range of 0 to 63. A larger value represents a lower volume.
|
||||
+ * @param duration The duration of the tone in milliseconds.
|
||||
+ *
|
||||
+ * @since 2.11
|
||||
+ */
|
||||
+gboolean purple_media_send_dtmf(PurpleMedia *media, const gchar *session_id,
|
||||
+ gchar dtmf, guint8 volume, guint16 duration);
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
|
||||
--- a/libpurple/media/backend-fs2.c
|
||||
+++ b/libpurple/media/backend-fs2.c
|
||||
@@ -94,6 +94,9 @@
|
||||
static void purple_media_backend_fs2_set_params(PurpleMediaBackend *self,
|
||||
guint num_params, GParameter *params);
|
||||
static const gchar **purple_media_backend_fs2_get_available_params(void);
|
||||
+static gboolean purple_media_backend_fs2_send_dtmf(
|
||||
+ PurpleMediaBackend *self, const gchar *sess_id,
|
||||
+ gchar dtmf, guint8 volume, guint16 duration);
|
||||
|
||||
static void free_stream(PurpleMediaBackendFs2Stream *stream);
|
||||
static void free_session(PurpleMediaBackendFs2Session *session);
|
||||
@@ -499,6 +502,7 @@
|
||||
iface->set_send_codec = purple_media_backend_fs2_set_send_codec;
|
||||
iface->set_params = purple_media_backend_fs2_set_params;
|
||||
iface->get_available_params = purple_media_backend_fs2_get_available_params;
|
||||
+ iface->send_dtmf = purple_media_backend_fs2_send_dtmf;
|
||||
}
|
||||
|
||||
static FsMediaType
|
||||
@@ -2436,6 +2440,65 @@
|
||||
|
||||
return supported_params;
|
||||
}
|
||||
+static gboolean
|
||||
+send_dtmf_callback(gpointer userdata)
|
||||
+{
|
||||
+ FsSession *session = userdata;
|
||||
+
|
||||
+ fs_session_stop_telephony_event(session);
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+static gboolean
|
||||
+purple_media_backend_fs2_send_dtmf(PurpleMediaBackend *self,
|
||||
+ const gchar *sess_id, gchar dtmf, guint8 volume,
|
||||
+ guint16 duration)
|
||||
+{
|
||||
+ PurpleMediaBackendFs2Session *session;
|
||||
+ FsDTMFEvent event;
|
||||
+
|
||||
+ g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
|
||||
+
|
||||
+ session = get_session(PURPLE_MEDIA_BACKEND_FS2(self), sess_id);
|
||||
+ if (session == NULL)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ /* Convert DTMF char into FsDTMFEvent enum */
|
||||
+ switch(dtmf) {
|
||||
+ case '0': event = FS_DTMF_EVENT_0; break;
|
||||
+ case '1': event = FS_DTMF_EVENT_1; break;
|
||||
+ case '2': event = FS_DTMF_EVENT_2; break;
|
||||
+ case '3': event = FS_DTMF_EVENT_3; break;
|
||||
+ case '4': event = FS_DTMF_EVENT_4; break;
|
||||
+ case '5': event = FS_DTMF_EVENT_5; break;
|
||||
+ case '6': event = FS_DTMF_EVENT_6; break;
|
||||
+ case '7': event = FS_DTMF_EVENT_7; break;
|
||||
+ case '8': event = FS_DTMF_EVENT_8; break;
|
||||
+ case '9': event = FS_DTMF_EVENT_9; break;
|
||||
+ case '*': event = FS_DTMF_EVENT_STAR; break;
|
||||
+ case '#': event = FS_DTMF_EVENT_POUND; break;
|
||||
+ case 'A': event = FS_DTMF_EVENT_A; break;
|
||||
+ case 'B': event = FS_DTMF_EVENT_B; break;
|
||||
+ case 'C': event = FS_DTMF_EVENT_C; break;
|
||||
+ case 'D': event = FS_DTMF_EVENT_D; break;
|
||||
+ default:
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ if (!fs_session_start_telephony_event(session->session,
|
||||
+ event, volume)) {
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ if (duration <= 50) {
|
||||
+ fs_session_stop_telephony_event(session->session);
|
||||
+ } else {
|
||||
+ purple_timeout_add(duration, send_dtmf_callback,
|
||||
+ session->session);
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
#else
|
||||
GType
|
||||
purple_media_backend_fs2_get_type(void)
|
||||
diff --git a/libpurple/media/backend-iface.h b/libpurple/media/backend-iface.h
|
||||
--- a/libpurple/media/backend-iface.h
|
||||
+++ b/libpurple/media/backend-iface.h
|
||||
@@ -71,6 +71,9 @@
|
||||
void (*set_params) (PurpleMediaBackend *self,
|
||||
guint num_params, GParameter *params);
|
||||
const gchar **(*get_available_params) (void);
|
||||
+ gboolean (*send_dtmf) (PurpleMediaBackend *self,
|
||||
+ const gchar *sess_id, gchar dtmf, guint8 volume,
|
||||
+ guint16 duration);
|
||||
};
|
||||
|
||||
/**
|
||||
diff --git a/pidgin/gtkmedia.c b/pidgin/gtkmedia.c
|
||||
--- a/pidgin/gtkmedia.c
|
||||
+++ b/pidgin/gtkmedia.c
|
||||
@@ -41,6 +41,7 @@
|
||||
#ifdef _WIN32
|
||||
#include <gdk/gdkwin32.h>
|
||||
#endif
|
||||
+#include <gdk/gdkkeysyms.h>
|
||||
|
||||
#include <gst/interfaces/xoverlay.h>
|
||||
|
||||
@@ -759,6 +760,136 @@
|
||||
}
|
||||
|
||||
static void
|
||||
+phone_dtmf_pressed_cb(GtkButton *button, gpointer user_data)
|
||||
+{
|
||||
+ PidginMedia *gtkmedia = user_data;
|
||||
+ gint num;
|
||||
+ gchar *sid;
|
||||
+
|
||||
+ num = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button), "dtmf-digit"));
|
||||
+ sid = g_object_get_data(G_OBJECT(button), "session-id");
|
||||
+
|
||||
+ purple_media_send_dtmf(gtkmedia->priv->media, sid, num, 25, 50);
|
||||
+}
|
||||
+
|
||||
+static inline GtkWidget *
|
||||
+phone_create_button(const gchar *text_hi, const gchar *text_lo)
|
||||
+{
|
||||
+ GtkWidget *button;
|
||||
+ GtkWidget *label_hi;
|
||||
+ GtkWidget *label_lo;
|
||||
+ GtkWidget *grid;
|
||||
+ const gchar *text_hi_local;
|
||||
+
|
||||
+ if (text_hi)
|
||||
+ text_hi_local = _(text_hi);
|
||||
+ else
|
||||
+ text_hi_local = "";
|
||||
+
|
||||
+ grid = gtk_vbox_new(TRUE, 0);
|
||||
+
|
||||
+ button = gtk_button_new();
|
||||
+ label_hi = gtk_label_new(text_hi_local);
|
||||
+ gtk_misc_set_alignment(GTK_MISC(label_hi), 0.5, 0.5);
|
||||
+ gtk_box_pack_end(GTK_BOX(grid), label_hi, FALSE, TRUE, 0);
|
||||
+ label_lo = gtk_label_new(text_lo);
|
||||
+ gtk_misc_set_alignment(GTK_MISC(label_lo), 0.5, 0.5);
|
||||
+ gtk_label_set_use_markup(GTK_LABEL(label_lo), TRUE);
|
||||
+ gtk_box_pack_end(GTK_BOX(grid), label_lo, FALSE, TRUE, 0);
|
||||
+ gtk_container_add(GTK_CONTAINER(button), grid);
|
||||
+
|
||||
+ return button;
|
||||
+}
|
||||
+
|
||||
+static struct phone_label {
|
||||
+ gchar *subtext;
|
||||
+ gchar *text;
|
||||
+ gchar chr;
|
||||
+} phone_labels[] = {
|
||||
+ {"<b>1</b>", NULL, '1'},
|
||||
+ /* Translators note: These are the letters on the keys of a numeric
|
||||
+ keypad; translate according to §7.2.4 of
|
||||
+ http://www.etsi.org/deliver/etsi_es/202100_202199/202130/01.01.01_60/es_20213 */
|
||||
+ /* Letters on the '2' key of a numeric keypad */
|
||||
+ {"<b>2</b>", N_("ABC"), '2'},
|
||||
+ /* Letters on the '3' key of a numeric keypad */
|
||||
+ {"<b>3</b>", N_("DEF"), '3'},
|
||||
+ /* Letters on the '4' key of a numeric keypad */
|
||||
+ {"<b>4</b>", N_("GHI"), '4'},
|
||||
+ /* Letters on the '5' key of a numeric keypad */
|
||||
+ {"<b>5</b>", N_("JKL"), '5'},
|
||||
+ /* Letters on the '6' key of a numeric keypad */
|
||||
+ {"<b>6</b>", N_("MNO"), '6'},
|
||||
+ /* Letters on the '7' key of a numeric keypad */
|
||||
+ {"<b>7</b>", N_("PQRS"), '7'},
|
||||
+ /* Letters on the '8' key of a numeric keypad */
|
||||
+ {"<b>8</b>", N_("TUV"), '8'},
|
||||
+ /* Letters on the '9' key of a numeric keypad */
|
||||
+ {"<b>9</b>", N_("WXYZ"), '9'},
|
||||
+ {"<b>*</b>", NULL, '*'},
|
||||
+ {"<b>0</b>", NULL, '0'},
|
||||
+ {"<b>#</b>", NULL, '#'},
|
||||
+ {NULL, NULL, 0}
|
||||
+};
|
||||
+
|
||||
+static gboolean
|
||||
+pidgin_media_dtmf_key_press_event_cb(GtkWidget *widget,
|
||||
+ GdkEvent *event, gpointer user_data)
|
||||
+{
|
||||
+ PidginMedia *gtkmedia = user_data;
|
||||
+ GdkEventKey *key = (GdkEventKey *) event;
|
||||
+
|
||||
+ if (event->type != GDK_KEY_PRESS) {
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ if ((key->keyval >= GDK_KEY_0 && key->keyval <= GDK_KEY_9) ||
|
||||
+ key->keyval == GDK_KEY_asterisk ||
|
||||
+ key->keyval == GDK_KEY_numbersign) {
|
||||
+ gchar *sid = g_object_get_data(G_OBJECT(widget), "session-id");
|
||||
+
|
||||
+ purple_media_send_dtmf(gtkmedia->priv->media, sid, key->keyval, 25, 50);
|
||||
+ }
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+static GtkWidget *
|
||||
+pidgin_media_add_dtmf_widget(PidginMedia *gtkmedia,
|
||||
+ PurpleMediaSessionType type, const gchar *_sid)
|
||||
+{
|
||||
+ GtkWidget *grid = gtk_table_new(4, 3, TRUE);
|
||||
+ GtkWidget *button;
|
||||
+ gint index = 0;
|
||||
+ GtkWindow *win = >kmedia->parent;
|
||||
+
|
||||
+ /* Add buttons */
|
||||
+ for (index = 0; phone_labels[index].subtext != NULL; index++) {
|
||||
+ button = phone_create_button(phone_labels[index].text,
|
||||
+ phone_labels[index].subtext);
|
||||
+ g_signal_connect(button, "pressed",
|
||||
+ G_CALLBACK(phone_dtmf_pressed_cb), gtkmedia);
|
||||
+ g_object_set_data(G_OBJECT(button), "dtmf-digit",
|
||||
+ GINT_TO_POINTER(phone_labels[index].chr));
|
||||
+ g_object_set_data_full(G_OBJECT(button), "session-id",
|
||||
+ g_strdup(_sid), g_free);
|
||||
+ gtk_table_attach(GTK_TABLE(grid), button, index % 3,
|
||||
+ index % 3 + 1, index / 3, index / 3 + 1,
|
||||
+ GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND,
|
||||
+ 2, 2);
|
||||
+ }
|
||||
+
|
||||
+ g_signal_connect(G_OBJECT(win), "key-press-event",
|
||||
+ G_CALLBACK(pidgin_media_dtmf_key_press_event_cb), gtkmedia);
|
||||
+ g_object_set_data_full(G_OBJECT(win), "session-id",
|
||||
+ g_strdup(_sid), g_free);
|
||||
+
|
||||
+ gtk_widget_show_all(grid);
|
||||
+
|
||||
+ return grid;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia, const gchar *sid)
|
||||
{
|
||||
GtkWidget *send_widget = NULL, *recv_widget = NULL, *button_widget = NULL;
|
||||
@@ -888,7 +1019,11 @@
|
||||
|
||||
gtk_box_pack_end(GTK_BOX(recv_widget),
|
||||
pidgin_media_add_audio_widget(gtkmedia,
|
||||
- PURPLE_MEDIA_SEND_AUDIO, NULL), FALSE, FALSE, 0);
|
||||
+ PURPLE_MEDIA_SEND_AUDIO, sid), FALSE, FALSE, 0);
|
||||
+
|
||||
+ gtk_box_pack_end(GTK_BOX(recv_widget),
|
||||
+ pidgin_media_add_dtmf_widget(gtkmedia,
|
||||
+ PURPLE_MEDIA_SEND_AUDIO, sid), FALSE, FALSE, 0);
|
||||
}
|
||||
|
||||
if (type & PURPLE_MEDIA_AUDIO &&
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,38 @@
|
||||
--- a/finch/gntsound.c
|
||||
+++ b/finch/gntsound.c
|
||||
@@ -449,6 +449,7 @@ bus_call (GstBus *bus, GstMessage *msg,
|
||||
case GST_MESSAGE_EOS:
|
||||
gst_element_set_state(play, GST_STATE_NULL);
|
||||
gst_object_unref(GST_OBJECT(play));
|
||||
+ return FALSE;
|
||||
break;
|
||||
case GST_MESSAGE_WARNING:
|
||||
gst_message_parse_warning(msg, &err, NULL);
|
||||
--- a/libpurple/mediamanager.c
|
||||
+++ b/libpurple/mediamanager.c
|
||||
@@ -288,6 +288,7 @@ pipeline_bus_call(GstBus *bus, GstMessag
|
||||
switch(GST_MESSAGE_TYPE(msg)) {
|
||||
case GST_MESSAGE_EOS:
|
||||
purple_debug_info("mediamanager", "End of Stream\n");
|
||||
+ return FALSE;
|
||||
break;
|
||||
case GST_MESSAGE_ERROR: {
|
||||
gchar *debug = NULL;
|
||||
@@ -305,6 +306,7 @@
|
||||
"Debug details: %s\n", debug);
|
||||
g_free (debug);
|
||||
}
|
||||
+ return FALSE;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
--- a/pidgin/gtksound.c
|
||||
+++ b/pidgin/gtksound.c
|
||||
@@ -394,6 +394,7 @@ bus_call (GstBus *bus,
|
||||
case GST_MESSAGE_EOS:
|
||||
gst_element_set_state(play, GST_STATE_NULL);
|
||||
gst_object_unref(GST_OBJECT(play));
|
||||
+ return FALSE;
|
||||
break;
|
||||
case GST_MESSAGE_WARNING:
|
||||
gst_message_parse_warning(msg, &err, NULL);
|
||||
@@ -0,0 +1,44 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Youness Alaoui <kakaroto@kakaroto.homelinux.net>
|
||||
# Date 1404874798 14400
|
||||
# Node ID b52be4fef1ded825e262095480915f2c675a5694
|
||||
# Parent 2b41ba1fde8a80a4f2d715874a0b02449d4b66ad
|
||||
Fix gstreamer elements references
|
||||
In backend-fs2, the create_src will unref the src after it's done with
|
||||
it, if we simply return the created source, it will segfault.
|
||||
The issue never happened before because every source so far also has
|
||||
the UNIQUE flag, which causes it to go in a different branch of the
|
||||
code which does ref the element and add it to the bin.
|
||||
|
||||
Refs #16315
|
||||
|
||||
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
|
||||
--- a/libpurple/mediamanager.c
|
||||
+++ b/libpurple/mediamanager.c
|
||||
@@ -443,7 +443,11 @@
|
||||
|
||||
if (src) {
|
||||
GstElement *capsfilter = gst_bin_get_by_name(GST_BIN(src), "prpl_video_caps");
|
||||
- g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);
|
||||
+ if (capsfilter) {
|
||||
+ g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);
|
||||
+ gst_object_unref (capsfilter);
|
||||
+ }
|
||||
+ gst_object_unref (src);
|
||||
}
|
||||
|
||||
g_free(id);
|
||||
@@ -550,6 +554,11 @@
|
||||
} else {
|
||||
ret = purple_media_element_info_call_create(info,
|
||||
media, session_id, participant);
|
||||
+ if (element_type & PURPLE_MEDIA_ELEMENT_SRC) {
|
||||
+ gst_object_ref(ret);
|
||||
+ gst_bin_add(GST_BIN(purple_media_manager_get_pipeline(manager)),
|
||||
+ ret);
|
||||
+ }
|
||||
}
|
||||
|
||||
if (ret == NULL)
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Jakub Adam <jakub.adam@ktknet.cz>
|
||||
# Date 1407847148 -7200
|
||||
# Node ID 7767aaeade6404396204794f9bc75d9a2cb723f0
|
||||
# Parent 8e4fa54f166211ffd6cd869cca611e8d64ea1fdf
|
||||
media: make "init-media" signal handler optional
|
||||
|
||||
Change the logic so that the PurpleMedia instance isn't disposed when
|
||||
"init-media" has no connected handlers.
|
||||
|
||||
We want the media object freed only when some signal callback function
|
||||
explicitly returns FALSE, indicating an error during the initialization.
|
||||
|
||||
This is mostly useful for the imminent addition of private media streams.
|
||||
|
||||
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
|
||||
--- a/libpurple/mediamanager.c
|
||||
+++ b/libpurple/mediamanager.c
|
||||
@@ -334,7 +334,7 @@
|
||||
{
|
||||
#ifdef USE_VV
|
||||
PurpleMedia *media;
|
||||
- gboolean signal_ret;
|
||||
+ guint signal_id;
|
||||
|
||||
media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
|
||||
"manager", manager,
|
||||
@@ -343,12 +343,17 @@
|
||||
"initiator", initiator,
|
||||
NULL));
|
||||
|
||||
- g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0,
|
||||
- media, account, remote_user, &signal_ret);
|
||||
+ signal_id = purple_media_manager_signals[INIT_MEDIA];
|
||||
|
||||
- if (signal_ret == FALSE) {
|
||||
- g_object_unref(media);
|
||||
- return NULL;
|
||||
+ if (g_signal_has_handler_pending(manager, signal_id, 0, FALSE)) {
|
||||
+ gboolean signal_ret;
|
||||
+
|
||||
+ g_signal_emit(manager, signal_id, 0, media, account, remote_user,
|
||||
+ &signal_ret);
|
||||
+ if (signal_ret == FALSE) {
|
||||
+ g_object_unref(media);
|
||||
+ return NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
manager->priv->medias = g_list_append(manager->priv->medias, media);
|
||||
|
||||
@@ -0,0 +1,290 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Youness Alaoui <kakaroto@kakaroto.homelinux.net>
|
||||
# Date 1404764862 14400
|
||||
# Node ID d729a9b2126594df3e38647e926ac7c0a7db807b
|
||||
# Parent 7767aaeade6404396204794f9bc75d9a2cb723f0
|
||||
Add Private media API
|
||||
|
||||
Creating a private media can be useful for plugins that want to create a
|
||||
PurpleMedia for internal use without the front-end being notified of its
|
||||
creation.
|
||||
|
||||
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
|
||||
--- a/libpurple/mediamanager.c
|
||||
+++ b/libpurple/mediamanager.c
|
||||
@@ -86,6 +86,7 @@
|
||||
GstElement *pipeline;
|
||||
PurpleMediaCaps ui_caps;
|
||||
GList *medias;
|
||||
+ GList *private_medias;
|
||||
GList *elements;
|
||||
GList *output_windows;
|
||||
gulong next_output_window_id;
|
||||
@@ -111,6 +112,7 @@
|
||||
|
||||
enum {
|
||||
INIT_MEDIA,
|
||||
+ INIT_PRIVATE_MEDIA,
|
||||
UI_CAPS_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
@@ -161,6 +163,15 @@
|
||||
G_TYPE_BOOLEAN, 3, PURPLE_TYPE_MEDIA,
|
||||
G_TYPE_POINTER, G_TYPE_STRING);
|
||||
|
||||
+ purple_media_manager_signals[INIT_PRIVATE_MEDIA] =
|
||||
+ g_signal_new ("init-private-media",
|
||||
+ G_TYPE_FROM_CLASS (klass),
|
||||
+ G_SIGNAL_RUN_LAST,
|
||||
+ 0, NULL, NULL,
|
||||
+ purple_smarshal_BOOLEAN__OBJECT_POINTER_STRING,
|
||||
+ G_TYPE_BOOLEAN, 3, PURPLE_TYPE_MEDIA,
|
||||
+ G_TYPE_POINTER, G_TYPE_STRING);
|
||||
+
|
||||
purple_media_manager_signals[UI_CAPS_CHANGED] = g_signal_new ("ui-caps-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
@@ -177,6 +188,7 @@
|
||||
{
|
||||
media->priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media);
|
||||
media->priv->medias = NULL;
|
||||
+ media->priv->private_medias = NULL;
|
||||
media->priv->next_output_window_id = 1;
|
||||
#ifdef USE_VV
|
||||
media->priv->backend_type = PURPLE_TYPE_MEDIA_BACKEND_FS2;
|
||||
@@ -198,6 +210,10 @@
|
||||
g_list_delete_link(priv->medias, priv->medias)) {
|
||||
g_object_unref(priv->medias->data);
|
||||
}
|
||||
+ for (; priv->private_medias; priv->private_medias =
|
||||
+ g_list_delete_link(priv->private_medias, priv->private_medias)) {
|
||||
+ g_object_unref(priv->private_medias->data);
|
||||
+ }
|
||||
for (; priv->elements; priv->elements =
|
||||
g_list_delete_link(priv->elements, priv->elements)) {
|
||||
g_object_unref(priv->elements->data);
|
||||
@@ -325,12 +341,13 @@
|
||||
}
|
||||
#endif /* USE_GSTREAMER */
|
||||
|
||||
-PurpleMedia *
|
||||
-purple_media_manager_create_media(PurpleMediaManager *manager,
|
||||
- PurpleAccount *account,
|
||||
- const char *conference_type,
|
||||
- const char *remote_user,
|
||||
- gboolean initiator)
|
||||
+static PurpleMedia *
|
||||
+create_media(PurpleMediaManager *manager,
|
||||
+ PurpleAccount *account,
|
||||
+ const char *conference_type,
|
||||
+ const char *remote_user,
|
||||
+ gboolean initiator,
|
||||
+ gboolean private)
|
||||
{
|
||||
#ifdef USE_VV
|
||||
PurpleMedia *media;
|
||||
@@ -343,7 +360,9 @@
|
||||
"initiator", initiator,
|
||||
NULL));
|
||||
|
||||
- signal_id = purple_media_manager_signals[INIT_MEDIA];
|
||||
+ signal_id = private ?
|
||||
+ purple_media_manager_signals[INIT_PRIVATE_MEDIA] :
|
||||
+ purple_media_manager_signals[INIT_MEDIA];
|
||||
|
||||
if (g_signal_has_handler_pending(manager, signal_id, 0, FALSE)) {
|
||||
gboolean signal_ret;
|
||||
@@ -356,26 +375,33 @@
|
||||
}
|
||||
}
|
||||
|
||||
- manager->priv->medias = g_list_append(manager->priv->medias, media);
|
||||
+ if (private)
|
||||
+ manager->priv->private_medias = g_list_append(
|
||||
+ manager->priv->private_medias, media);
|
||||
+ else
|
||||
+ manager->priv->medias = g_list_append(manager->priv->medias, media);
|
||||
return media;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
-GList *
|
||||
-purple_media_manager_get_media(PurpleMediaManager *manager)
|
||||
+static GList *
|
||||
+get_media(PurpleMediaManager *manager, gboolean private)
|
||||
{
|
||||
#ifdef USE_VV
|
||||
- return manager->priv->medias;
|
||||
+ if (private)
|
||||
+ return manager->priv->private_medias;
|
||||
+ else
|
||||
+ return manager->priv->medias;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
-GList *
|
||||
-purple_media_manager_get_media_by_account(PurpleMediaManager *manager,
|
||||
- PurpleAccount *account)
|
||||
+static GList *
|
||||
+get_media_by_account(PurpleMediaManager *manager,
|
||||
+ PurpleAccount *account, gboolean private)
|
||||
{
|
||||
#ifdef USE_VV
|
||||
GList *media = NULL;
|
||||
@@ -383,7 +409,10 @@
|
||||
|
||||
g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), NULL);
|
||||
|
||||
- iter = manager->priv->medias;
|
||||
+ if (private)
|
||||
+ iter = manager->priv->private_medias;
|
||||
+ else
|
||||
+ iter = manager->priv->medias;
|
||||
for (; iter; iter = g_list_next(iter)) {
|
||||
if (purple_media_get_account(iter->data) == account) {
|
||||
media = g_list_prepend(media, iter->data);
|
||||
@@ -397,21 +426,73 @@
|
||||
}
|
||||
|
||||
void
|
||||
-purple_media_manager_remove_media(PurpleMediaManager *manager,
|
||||
- PurpleMedia *media)
|
||||
+purple_media_manager_remove_media(PurpleMediaManager *manager, PurpleMedia *media)
|
||||
{
|
||||
#ifdef USE_VV
|
||||
GList *list;
|
||||
+ GList **medias;
|
||||
|
||||
g_return_if_fail(manager != NULL);
|
||||
|
||||
- list = g_list_find(manager->priv->medias, media);
|
||||
+ if ((list = g_list_find(manager->priv->medias, media))) {
|
||||
+ medias = &manager->priv->medias;
|
||||
+ } else if ((list = g_list_find(manager->priv->private_medias, media))) {
|
||||
+ medias = &manager->priv->private_medias;
|
||||
+ }
|
||||
+
|
||||
if (list)
|
||||
- manager->priv->medias =
|
||||
- g_list_delete_link(manager->priv->medias, list);
|
||||
+ *medias = g_list_delete_link(*medias, list);
|
||||
#endif
|
||||
}
|
||||
|
||||
+PurpleMedia *
|
||||
+purple_media_manager_create_media(PurpleMediaManager *manager,
|
||||
+ PurpleAccount *account,
|
||||
+ const char *conference_type,
|
||||
+ const char *remote_user,
|
||||
+ gboolean initiator)
|
||||
+{
|
||||
+ return create_media (manager, account, conference_type,
|
||||
+ remote_user, initiator, FALSE);
|
||||
+}
|
||||
+
|
||||
+GList *
|
||||
+purple_media_manager_get_media(PurpleMediaManager *manager)
|
||||
+{
|
||||
+ return get_media (manager, FALSE);
|
||||
+}
|
||||
+
|
||||
+GList *
|
||||
+purple_media_manager_get_media_by_account(PurpleMediaManager *manager,
|
||||
+ PurpleAccount *account)
|
||||
+{
|
||||
+ return get_media_by_account (manager, account, FALSE);
|
||||
+}
|
||||
+
|
||||
+PurpleMedia *
|
||||
+purple_media_manager_create_private_media(PurpleMediaManager *manager,
|
||||
+ PurpleAccount *account,
|
||||
+ const char *conference_type,
|
||||
+ const char *remote_user,
|
||||
+ gboolean initiator)
|
||||
+{
|
||||
+ return create_media (manager, account, conference_type,
|
||||
+ remote_user, initiator, TRUE);
|
||||
+}
|
||||
+
|
||||
+GList *
|
||||
+purple_media_manager_get_private_media(PurpleMediaManager *manager)
|
||||
+{
|
||||
+ return get_media (manager, TRUE);
|
||||
+}
|
||||
+
|
||||
+GList *
|
||||
+purple_media_manager_get_private_media_by_account(PurpleMediaManager *manager,
|
||||
+ PurpleAccount *account)
|
||||
+{
|
||||
+ return get_media_by_account (manager, account, TRUE);
|
||||
+}
|
||||
+
|
||||
#ifdef USE_VV
|
||||
static void
|
||||
request_pad_unlinked_cb(GstPad *pad, GstPad *peer, gpointer user_data)
|
||||
diff --git a/libpurple/mediamanager.h b/libpurple/mediamanager.h
|
||||
--- a/libpurple/mediamanager.h
|
||||
+++ b/libpurple/mediamanager.h
|
||||
@@ -130,6 +130,56 @@
|
||||
PurpleMedia *media);
|
||||
|
||||
/**
|
||||
+ * Creates a private media session. A private media session is a
|
||||
+ * media session which is private to the caller. It is meant to be
|
||||
+ * used by plugins to create a media session that the front-end does
|
||||
+ * not get notified about. It is useful especially for sessions with a
|
||||
+ * type of PURPLE_MEDIA_APPLICATION which the front-end wouldn't know
|
||||
+ * how to handle.
|
||||
+ *
|
||||
+ * @param manager The media manager to create the session under.
|
||||
+ * @param account The account to create the session on.
|
||||
+ * @param conference_type The conference type to feed into Farsight2.
|
||||
+ * @param remote_user The remote user to initiate the session with.
|
||||
+ * @param initiator TRUE if the local user is the initiator of this media
|
||||
+ * call, FALSE otherwise.
|
||||
+ *
|
||||
+ * @return A newly created media session.
|
||||
+ *
|
||||
+ * @since 2.11.0
|
||||
+ */
|
||||
+PurpleMedia *purple_media_manager_create_private_media(
|
||||
+ PurpleMediaManager *manager,
|
||||
+ PurpleAccount *account,
|
||||
+ const char *conference_type,
|
||||
+ const char *remote_user,
|
||||
+ gboolean initiator);
|
||||
+
|
||||
+/**
|
||||
+ * Gets all of the private media sessions.
|
||||
+ *
|
||||
+ * @param manager The media manager to get all of the sessions from.
|
||||
+ *
|
||||
+ * @return A list of all the private media sessions.
|
||||
+ *
|
||||
+ * @since 2.11.0
|
||||
+ */
|
||||
+GList *purple_media_manager_get_private_media(PurpleMediaManager *manager);
|
||||
+
|
||||
+/**
|
||||
+ * Gets all of the private media sessions for a given account.
|
||||
+ *
|
||||
+ * @param manager The media manager to get the sessions from.
|
||||
+ * @param account The account the sessions are on.
|
||||
+ *
|
||||
+ * @return A list of the private media sessions on the given account.
|
||||
+ *
|
||||
+ * @since 2.11.0
|
||||
+ */
|
||||
+GList *purple_media_manager_get_private_media_by_account(
|
||||
+ PurpleMediaManager *manager, PurpleAccount *account);
|
||||
+
|
||||
+/**
|
||||
* Signals that output windows should be created for the chosen stream.
|
||||
*
|
||||
* This shouldn't be called outside of mediamanager.c and media.c
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
Index: pidgin-2.10.11/finch/libgnt/gntwm.c
|
||||
===================================================================
|
||||
--- pidgin-2.10.11.orig/finch/libgnt/gntwm.c
|
||||
+++ pidgin-2.10.11/finch/libgnt/gntwm.c
|
||||
@@ -174,37 +174,37 @@ work_around_for_ncurses_bug(void)
|
||||
cchar_t ch;
|
||||
PANEL *below = panel;
|
||||
|
||||
- sx = panel->win->_begx;
|
||||
- ex = panel->win->_maxx + sx;
|
||||
- sy = panel->win->_begy;
|
||||
- ey = panel->win->_maxy + sy;
|
||||
+ sx = getbegx(panel->win);
|
||||
+ ex = getmaxx(panel->win) + sx;
|
||||
+ sy = getbegy(panel->win);
|
||||
+ ey = getmaxy(panel->win) + sy;
|
||||
|
||||
while ((below = panel_below(below)) != NULL) {
|
||||
- if (sy > below->win->_begy + below->win->_maxy ||
|
||||
- ey < below->win->_begy)
|
||||
+ if (sy > getbegy(below->win) + getmaxy(below->win) ||
|
||||
+ ey < getbegy(below->win))
|
||||
continue;
|
||||
- if (sx > below->win->_begx + below->win->_maxx ||
|
||||
- ex < below->win->_begx)
|
||||
+ if (sx > getbegx(below->win) + getmaxx(below->win) ||
|
||||
+ ex < getbegx(below->win))
|
||||
continue;
|
||||
- for (y = MAX(sy, below->win->_begy); y <= MIN(ey, below->win->_begy + below->win->_maxy); y++) {
|
||||
- if (mvwin_wch(below->win, y - below->win->_begy, sx - 1 - below->win->_begx, &ch) != OK)
|
||||
+ for (y = MAX(sy, getbegy(below->win)); y <= MIN(ey, getbegy(below->win) + getmaxy(below->win)); y++) {
|
||||
+ if (mvwin_wch(below->win, y - getbegy(below->win), sx - 1 - getbegx(below->win), &ch) != OK)
|
||||
goto right;
|
||||
w = widestringwidth(ch.chars);
|
||||
if (w > 1 && (ch.attr & 1)) {
|
||||
ch.chars[0] = ' ';
|
||||
ch.attr &= ~ A_CHARTEXT;
|
||||
- mvwadd_wch(below->win, y - below->win->_begy, sx - 1 - below->win->_begx, &ch);
|
||||
- touchline(below->win, y - below->win->_begy, 1);
|
||||
+ mvwadd_wch(below->win, y - getbegy(below->win), sx - 1 - getbegx(below->win), &ch);
|
||||
+ touchline(below->win, y - getbegy(below->win), 1);
|
||||
}
|
||||
right:
|
||||
- if (mvwin_wch(below->win, y - below->win->_begy, ex + 1 - below->win->_begx, &ch) != OK)
|
||||
+ if (mvwin_wch(below->win, y - getbegy(below->win), ex + 1 - getbegx(below->win), &ch) != OK)
|
||||
continue;
|
||||
w = widestringwidth(ch.chars);
|
||||
if (w > 1 && !(ch.attr & 1)) {
|
||||
ch.chars[0] = ' ';
|
||||
ch.attr &= ~ A_CHARTEXT;
|
||||
- mvwadd_wch(below->win, y - below->win->_begy, ex + 1 - below->win->_begx, &ch);
|
||||
- touchline(below->win, y - below->win->_begy, 1);
|
||||
+ mvwadd_wch(below->win, y - getbegy(below->win), ex + 1 - getbegx(below->win), &ch);
|
||||
+ touchline(below->win, y - getbegy(below->win), 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,270 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>pidgin</Name>
|
||||
<Homepage>http://www.pidgin.im</Homepage>
|
||||
<Packager>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admins@pisilinux.org</Email>
|
||||
</Packager>
|
||||
<License>GPLv2</License>
|
||||
<Icon>pidgin</Icon>
|
||||
<Summary>Instant messaging application previously known as gaim</Summary>
|
||||
<Description>Multi-protocol instant messaging tool for MSN, Yahoo, IRC, Jabber and Gadu-Gadu protocols.</Description>
|
||||
<Archive sha1sum="5e0062b81bdb01300804e12bc0b6a04a91984631" type="tarbz2">mirrors://sourceforge/pidgin/pidgin-2.10.11.tar.bz2</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>intltool</Dependency>
|
||||
<Dependency>glib2-devel</Dependency>
|
||||
<Dependency>gtk2-devel</Dependency>
|
||||
<Dependency>libXScrnSaver-devel</Dependency>
|
||||
<Dependency>libSM-devel</Dependency>
|
||||
<Dependency>gtkspell-devel</Dependency>
|
||||
<Dependency>sqlite-devel</Dependency>
|
||||
<Dependency>libxml2-devel</Dependency>
|
||||
<Dependency>gstreamer-devel</Dependency>
|
||||
<Dependency>farstream-devel</Dependency>
|
||||
<Dependency>gst-plugins-base-devel</Dependency>
|
||||
<Dependency>libidn-devel</Dependency>
|
||||
<Dependency>avahi-glib-devel</Dependency>
|
||||
<Dependency>dbus-glib-devel</Dependency>
|
||||
<Dependency>NetworkManager-devel</Dependency>
|
||||
<Dependency>nss-devel</Dependency>
|
||||
<Dependency>tcl-devel</Dependency>
|
||||
<Dependency>tcltk-devel</Dependency>
|
||||
<Dependency>cyrus-sasl-devel</Dependency>
|
||||
<Dependency>doxygen</Dependency>
|
||||
<Dependency>libxslt-devel</Dependency>
|
||||
<Dependency>gnutls-devel</Dependency>
|
||||
<Dependency>mono-devel</Dependency>
|
||||
<Dependency>atk-devel</Dependency>
|
||||
<Dependency>cairo-devel</Dependency>
|
||||
<Dependency>gdk-pixbuf-devel</Dependency>
|
||||
<Dependency>ncurses-devel</Dependency>
|
||||
<Dependency>python-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!--<Patch level="0">pidgin-desktop.patch</Patch> -->
|
||||
<!-- <Patch level="1">mageia/pidgin-2.7.0-smiley.patch</Patch> -->
|
||||
<!-- <Patch level="1">mageia/pidgin-2.8.0-reread-resolvconf.patch</Patch> -->
|
||||
<!-- <Patch level="1">mageia/pidgin-2.10.0-gg-search-by-uin.patch</Patch> -->
|
||||
<!-- <Patch level="0">mageia/pidgin-2.4.2-set-jabber-as-module.patch</Patch> -->
|
||||
<!-- <Patch level="1">mageia/pidgin-2.8.0-gg-disconnect.patch</Patch> -->
|
||||
<!-- <Patch level="1">mageia/pidgin-2.7.0-mono-build.patch</Patch> -->
|
||||
<!-- <Patch level="1">fedora/pidgin-NOT-UPSTREAM-2.5.2-rhel4-sound-migration.patch</Patch> -->
|
||||
<Patch level="1">suse/ pidgin-2.10.11-send-video-enum.patch</Patch>
|
||||
<Patch level="1">suse/pidgin-2.10.11-add-dtmf-support.patch</Patch>
|
||||
<!-- <Patch level="1">suse/pidgin-2.10.11-application-media.patch</Patch> -->
|
||||
<Patch level="1">suse/pidgin-2.10.11-fix-sound-play-fd-leak.patch</Patch>
|
||||
<Patch level="1">suse/pidgin-2.10.11-gst-references.patch</Patch>
|
||||
<Patch level="1">suse/pidgin-2.10.11-init-media-optional.patch</Patch>
|
||||
<Patch level="1">suse/pidgin-2.10.11-private-media.patch</Patch>
|
||||
<Patch level="1">suse/pidgin-ncurses-6.0-accessors.patch</Patch>
|
||||
<!-- <Patch level="1">suse/pidgin-port-to-gst-1.0.patch</Patch> -->
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>pidgin</Name>
|
||||
<IsA>app:gui</IsA>
|
||||
<RuntimeDependencies>
|
||||
<Dependency>atk</Dependency>
|
||||
<Dependency>dbus</Dependency>
|
||||
<Dependency>gtk2</Dependency>
|
||||
<Dependency>cairo</Dependency>
|
||||
<Dependency>glib2</Dependency>
|
||||
<Dependency>libSM</Dependency>
|
||||
<Dependency>pango</Dependency>
|
||||
<Dependency>libICE</Dependency>
|
||||
<Dependency>sqlite</Dependency>
|
||||
<Dependency>freetype</Dependency>
|
||||
<Dependency>gtkspell</Dependency>
|
||||
<Dependency>dbus-glib</Dependency>
|
||||
<Dependency>gstreamer</Dependency>
|
||||
<Dependency>fontconfig</Dependency>
|
||||
<Dependency>gdk-pixbuf</Dependency>
|
||||
<Dependency>libXScrnSaver</Dependency>
|
||||
<Dependency release="current">libpurple</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="man">/usr/share/man</Path>
|
||||
<Path fileType="doc">/usr/share/doc</Path>
|
||||
<Path fileType="executable">/usr/bin</Path>
|
||||
<Path fileType="data">/usr/share/icons</Path>
|
||||
<Path fileType="data">/usr/share/sounds</Path>
|
||||
<Path fileType="data">/usr/share/dbus-1</Path>
|
||||
<Path fileType="data">/usr/share/purple</Path>
|
||||
<Path fileType="data">/usr/share/pixmaps</Path>
|
||||
<Path fileType="library">/usr/lib/pidgin</Path>
|
||||
<Path fileType="config">/etc/gconf/schemas</Path>
|
||||
<Path fileType="data">/usr/share/appdata/</Path>
|
||||
<Path fileType="localedata">/usr/share/locale</Path>
|
||||
<Path fileType="data">/usr/share/applications</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>pidgin-devel</Name>
|
||||
<IsA>library</IsA>
|
||||
<Summary>Development files of pidgin</Summary>
|
||||
<RuntimeDependencies>
|
||||
<Dependency release="current">pidgin</Dependency>
|
||||
<Dependency release="current">libpurple-devel</Dependency>
|
||||
<Dependency>gtk2-devel</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="header">/usr/include/pidgin</Path>
|
||||
<Path fileType="executable">/usr/bin/dh_pidgin</Path>
|
||||
<Path fileType="man">/usr/share/man/man3/Pidgin*</Path>
|
||||
<Path fileType="data">/usr/lib/pkgconfig/pidgin.pc</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>finch</Name>
|
||||
<IsA>app:console</IsA>
|
||||
<Summary>Console based instant messaging application</Summary>
|
||||
<RuntimeDependencies>
|
||||
<Dependency>glib2</Dependency>
|
||||
<Dependency>libX11</Dependency>
|
||||
<Dependency>python</Dependency>
|
||||
<Dependency>libxml2</Dependency>
|
||||
<Dependency>ncurses</Dependency>
|
||||
<Dependency>gstreamer</Dependency>
|
||||
<Dependency release="current">libpurple</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="library">/usr/lib/gnt</Path>
|
||||
<Path fileType="library">/usr/lib/finch</Path>
|
||||
<Path fileType="library">/usr/lib/libgnt*</Path>
|
||||
<Path fileType="executable">/usr/bin/finch</Path>
|
||||
<Path fileType="man">/usr/share/man/man1/finch*</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>finch-devel</Name>
|
||||
<IsA>library</IsA>
|
||||
<Summary>Development files of finch</Summary>
|
||||
<RuntimeDependencies>
|
||||
<Dependency release="current">finch</Dependency>
|
||||
<Dependency release="current">libpurple-devel</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="header">/usr/include/gnt</Path>
|
||||
<Path fileType="header">/usr/include/finch</Path>
|
||||
<Path fileType="data">/usr/lib/pkgconfig/gnt*</Path>
|
||||
<Path fileType="data">/usr/lib/pkgconfig/finch*</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>libpurple</Name>
|
||||
<IsA>library</IsA>
|
||||
<Summary>The core library of pidgin, supports MSN, XMPP, ICQ, Gadu-Gadu and etc.</Summary>
|
||||
<RuntimeDependencies>
|
||||
<Dependency>nss</Dependency>
|
||||
<Dependency>tcl</Dependency>
|
||||
<Dependency>dbus</Dependency>
|
||||
<Dependency>nspr</Dependency>
|
||||
<Dependency>perl</Dependency>
|
||||
<Dependency>glib2</Dependency>
|
||||
<Dependency>tcltk</Dependency>
|
||||
<Dependency>gnutls</Dependency>
|
||||
<Dependency>libidn</Dependency>
|
||||
<Dependency>libxml2</Dependency>
|
||||
<Dependency>dbus-glib</Dependency>
|
||||
<Dependency>gstreamer</Dependency>
|
||||
<Dependency>avahi-glib</Dependency>
|
||||
<Dependency>avahi-libs</Dependency>
|
||||
<Dependency>cyrus-sasl</Dependency>
|
||||
<Dependency>gst-plugins-base</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="library">/usr/lib/purple-2</Path>
|
||||
<Path fileType="executable">/usr/bin/purple*</Path>
|
||||
<Path fileType="library">/usr/lib/libpurple*</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>libpurple-devel</Name>
|
||||
<IsA>library</IsA>
|
||||
<Summary>Development files of libpurple</Summary>
|
||||
<RuntimeDependencies>
|
||||
<Dependency release="current">libpurple</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="data">/usr/share/aclocal</Path>
|
||||
<Path fileType="header">/usr/include/libpurple</Path>
|
||||
<Path fileType="man">/usr/share/man/man3/Purple*</Path>
|
||||
<Path fileType="data">/usr/lib/pkgconfig/purple.pc</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="9">
|
||||
<Date>2015-11-20</Date>
|
||||
<Version>2.10.11</Version>
|
||||
<Comment>rebuild and add pisi-2.0.</Comment>
|
||||
<Name>Alihan Öztürk</Name>
|
||||
<Email>alihan@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="8">
|
||||
<Date>2015-02-17</Date>
|
||||
<Version>2.10.11</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Stefan Gronewold(groni)</Name>
|
||||
<Email>groni@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="7">
|
||||
<Date>2014-02-17</Date>
|
||||
<Version>2.10.9</Version>
|
||||
<Comment>Rebuild Unused</Comment>
|
||||
<Name>Varol Maksutoğlu</Name>
|
||||
<Email>waroi@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="6">
|
||||
<Date>2014-02-04</Date>
|
||||
<Version>2.10.9</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Yusuf Aydemir</Name>
|
||||
<Email>yusuf.aydemir@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="5">
|
||||
<Date>2014-01-11</Date>
|
||||
<Version>2.10.7</Version>
|
||||
<Comment>Rebuild</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvarice@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="4">
|
||||
<Date>2013-07-29</Date>
|
||||
<Version>2.10.7</Version>
|
||||
<Comment>Dep Fixed</Comment>
|
||||
<Name>Osman Erkan</Name>
|
||||
<Email>osman.erkan@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2013-03-22</Date>
|
||||
<Version>2.10.7</Version>
|
||||
<Comment>fixing some errors</Comment>
|
||||
<Name>Erdinç Gültekin</Name>
|
||||
<Email>admins@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="2">
|
||||
<Date>2013-01-16</Date>
|
||||
<Version>2.10.7</Version>
|
||||
<Comment>Updated</Comment>
|
||||
<Name>Osman Erkan</Name>
|
||||
<Email>osman.erkan@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="1">
|
||||
<Date>2012-07-25</Date>
|
||||
<Version>2.10.6</Version>
|
||||
<Comment>First release</Comment>
|
||||
<Name>Yusuf Aydemir</Name>
|
||||
<Email>yusuf.aydemir@pisilinux.org</Email>
|
||||
</Update>
|
||||
</History>
|
||||
</PISI>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" ?>
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>pidgin</Name>
|
||||
<Summary xml:lang="tr">Eski sürümleri gaim olarak bilinen, hızlı haberleşme aracı</Summary>
|
||||
<Description xml:lang="tr">Birçok protokolü (MSN Messenger, Yahoo, IRC, Jabber, Gadu-Gadu gibi) destekleyen hızlı haberleşme aracıdır.</Description>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>pidgin-devel</Name>
|
||||
<Summary xml:lang="tr">pidgin paketine ait geliştirme dosyaları</Summary>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>finch</Name>
|
||||
<Summary xml:lang="tr">Konsol tabanlı anında mesajlaşma istemcisi</Summary>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>finch-devel</Name>
|
||||
<Summary xml:lang="tr">finch paketine ait geliştirme dosyaları</Summary>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>libpurple</Name>
|
||||
<Summary xml:lang="tr">Pidgin projesine ait, MSN, XMPP, ICQ, Gadu-Gadu gibi protokolleri destekleyen anında mesajlaşma kitaplığı</Summary>
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>libpurple-devel</Name>
|
||||
<Summary xml:lang="tr">libpurple paketine ait geliştirme dosyaları</Summary>
|
||||
</Package>
|
||||
</PISI>
|
||||
Reference in New Issue
Block a user