annotate pidgin/gtkmedia.c @ 27109:fdc0035bea5a

Change the way we parse messages on MySpace a little bit. This fixes #8846: people using web myspaceIM can't respond to pidgin myspaceIM For some reason IMs send using the myspace web site are sent so that they won't become offline messages if the other person is offline. I'm not really sure why that decision was made. So now we treat messages with bm 1 the same as messages with bm 121. This means we have to combine the function that parses out typing notification with the function that parses IMs. And we check for typing notifications by looking for %typing%. Which means if someone sends the IM "%typing%" with no markup then we'll interpret it as a typing notification. And there's nothing we can do to differentiate between the two. I asked.
author Mark Doliner <mark@kingant.net>
date Thu, 04 Jun 2009 05:19:49 +0000
parents df9042312063
children 6e3c83e1057c 20798dc089af
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file media.c Account API
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 * @ingroup core
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
4 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 * Pidgin
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * Pidgin is the legal property of its developers, whose names are too numerous
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * source distribution.
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * (at your option) any later version.
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * GNU General Public License for more details.
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24 */
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26 #include <string.h>
25678
1fb16d784ccb Listen to the media pipeline and display errors.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25674
diff changeset
27 #include "debug.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "internal.h"
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "connection.h"
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "media.h"
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
31 #include "mediamanager.h"
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
32 #include "pidgin.h"
26149
a6e53d23bcbb Use request API for a media invitation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26148
diff changeset
33 #include "request.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
35 #include "gtkmedia.h"
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
36 #include "gtkutils.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37
25654
cbe97caec684 Use USE_VV instead of USE_FARSIGHT.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25651
diff changeset
38 #ifdef USE_VV
26506
beb22a90bf5d Gstreamer shouldn't be a requirement if USE_VV isn't defined.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 26497
diff changeset
39 #include "media-gst.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
41 #include <gst/interfaces/xoverlay.h>
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
42
26455
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
43 #define PIDGIN_TYPE_MEDIA (pidgin_media_get_type())
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
44 #define PIDGIN_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_MEDIA, PidginMedia))
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
45 #define PIDGIN_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PIDGIN_TYPE_MEDIA, PidginMediaClass))
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
46 #define PIDGIN_IS_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PIDGIN_TYPE_MEDIA))
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
47 #define PIDGIN_IS_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PIDGIN_TYPE_MEDIA))
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
48 #define PIDGIN_MEDIA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PIDGIN_TYPE_MEDIA, PidginMediaClass))
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
49
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
50 typedef struct _PidginMedia PidginMedia;
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
51 typedef struct _PidginMediaClass PidginMediaClass;
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
52 typedef struct _PidginMediaPrivate PidginMediaPrivate;
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
53
25643
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
54 typedef enum
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
55 {
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
56 /* Waiting for response */
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
57 PIDGIN_MEDIA_WAITING = 1,
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
58 /* Got request */
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
59 PIDGIN_MEDIA_REQUESTED,
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
60 /* Accepted call */
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
61 PIDGIN_MEDIA_ACCEPTED,
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
62 /* Rejected call */
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
63 PIDGIN_MEDIA_REJECTED,
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
64 } PidginMediaState;
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
65
26455
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
66 struct _PidginMediaClass
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
67 {
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
68 GtkWindowClass parent_class;
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
69 };
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
70
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
71 struct _PidginMedia
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
72 {
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
73 GtkWindow parent;
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
74 PidginMediaPrivate *priv;
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
75 };
84374a764255 Hide PidginMedia and related structs.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26454
diff changeset
76
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
77 struct _PidginMediaPrivate
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
78 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
79 PurpleMedia *media;
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
80 gchar *screenname;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81 GstElement *send_level;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
82 GstElement *recv_level;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83
26175
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
84 GtkItemFactory *item_factory;
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
85 GtkWidget *menubar;
26161
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
86 GtkWidget *statusbar;
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
87
25713
4eae2d40f11b Added a mute button for the local microphone.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25706
diff changeset
88 GtkWidget *mute;
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
89
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
90 GtkWidget *send_progress;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
91 GtkWidget *recv_progress;
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
92
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
93 PidginMediaState state;
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
94
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
95 GtkWidget *display;
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
96 GtkWidget *send_widget;
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
97 GtkWidget *recv_widget;
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
98 GtkWidget *local_video;
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
99 GtkWidget *remote_video;
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
100
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
101 guint timeout_id;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
102 PurpleMediaSessionType request_type;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
103 };
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
104
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105 #define PIDGIN_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_MEDIA, PidginMediaPrivate))
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
106
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 static void pidgin_media_class_init (PidginMediaClass *klass);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108 static void pidgin_media_init (PidginMedia *media);
26087
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
109 static void pidgin_media_dispose (GObject *object);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
110 static void pidgin_media_finalize (GObject *object);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111 static void pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 static void pidgin_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
25643
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
113 static void pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
115 static GtkWindowClass *parent_class = NULL;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
118 #if 0
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119 enum {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
120 LAST_SIGNAL
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
121 };
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122 static guint pidgin_media_signals[LAST_SIGNAL] = {0};
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
123 #endif
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
124
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
125 enum {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126 PROP_0,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127 PROP_MEDIA,
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
128 PROP_SCREENNAME,
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129 PROP_SEND_LEVEL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
130 PROP_RECV_LEVEL
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
131 };
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
132
26456
aa85cf759b98 Silence warning.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26455
diff changeset
133 static GType
25634
741a702033e0 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25561
diff changeset
134 pidgin_media_get_type(void)
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
135 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
136 static GType type = 0;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
137
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
138 if (type == 0) {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
139 static const GTypeInfo info = {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
140 sizeof(PidginMediaClass),
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
141 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
142 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
143 (GClassInitFunc) pidgin_media_class_init,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
144 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
145 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
146 sizeof(PidginMedia),
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
147 0,
25561
1ec6a26cfefc Remove a compile error, and a few warnings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25550
diff changeset
148 (GInstanceInitFunc) pidgin_media_init,
1ec6a26cfefc Remove a compile error, and a few warnings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25550
diff changeset
149 NULL
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
150 };
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
151 type = g_type_register_static(GTK_TYPE_WINDOW, "PidginMedia", &info, 0);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
152 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
153 return type;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
154 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
155
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
156
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
157 static void
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
158 pidgin_media_class_init (PidginMediaClass *klass)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
159 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
160 GObjectClass *gobject_class = (GObjectClass*)klass;
25679
54adcf17d271 Silence warning.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25678
diff changeset
161 /* GtkContainerClass *container_class = (GtkContainerClass*)klass; */
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
162 parent_class = g_type_class_peek_parent(klass);
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
163
26087
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
164 gobject_class->dispose = pidgin_media_dispose;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
165 gobject_class->finalize = pidgin_media_finalize;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
166 gobject_class->set_property = pidgin_media_set_property;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
167 gobject_class->get_property = pidgin_media_get_property;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
169 g_object_class_install_property(gobject_class, PROP_MEDIA,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
170 g_param_spec_object("media",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
171 "PurpleMedia",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
172 "The PurpleMedia associated with this media.",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
173 PURPLE_TYPE_MEDIA,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
174 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
175 g_object_class_install_property(gobject_class, PROP_SCREENNAME,
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
176 g_param_spec_string("screenname",
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
177 "Screenname",
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
178 "The screenname of the user this session is with.",
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
179 NULL,
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
180 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
181 g_object_class_install_property(gobject_class, PROP_SEND_LEVEL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
182 g_param_spec_object("send-level",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
183 "Send level",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
184 "The GstElement of this media's send 'level'",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
185 GST_TYPE_ELEMENT,
25671
12a16471f94e Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
186 G_PARAM_READWRITE));
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
187 g_object_class_install_property(gobject_class, PROP_RECV_LEVEL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
188 g_param_spec_object("recv-level",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
189 "Receive level",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
190 "The GstElement of this media's recv 'level'",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
191 GST_TYPE_ELEMENT,
25671
12a16471f94e Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
192 G_PARAM_READWRITE));
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
193
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
194 g_type_class_add_private(klass, sizeof(PidginMediaPrivate));
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
195 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
196
25713
4eae2d40f11b Added a mute button for the local microphone.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25706
diff changeset
197 static void
4eae2d40f11b Added a mute button for the local microphone.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25706
diff changeset
198 pidgin_media_mute_toggled(GtkToggleButton *toggle, PidginMedia *media)
4eae2d40f11b Added a mute button for the local microphone.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25706
diff changeset
199 {
26454
d254bc6b4d60 Remove purple_media_mute.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26453
diff changeset
200 purple_media_stream_info(media->priv->media,
d254bc6b4d60 Remove purple_media_mute.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26453
diff changeset
201 gtk_toggle_button_get_active(toggle) ?
d254bc6b4d60 Remove purple_media_mute.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26453
diff changeset
202 PURPLE_MEDIA_INFO_MUTE : PURPLE_MEDIA_INFO_UNMUTE,
d254bc6b4d60 Remove purple_media_mute.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26453
diff changeset
203 NULL, NULL, TRUE);
25713
4eae2d40f11b Added a mute button for the local microphone.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25706
diff changeset
204 }
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
205
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
206 static gboolean
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
207 pidgin_media_delete_event_cb(GtkWidget *widget,
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
208 GdkEvent *event, PidginMedia *media)
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
209 {
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
210 if (media->priv->media)
26451
2862fee7acf2 Remove purple_media_hangup.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26448
diff changeset
211 purple_media_stream_info(media->priv->media,
2862fee7acf2 Remove purple_media_hangup.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26448
diff changeset
212 PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE);
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
213 return FALSE;
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
214 }
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
215
26159
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
216 static int
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
217 pidgin_x_error_handler(Display *display, XErrorEvent *event)
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
218 {
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
219 const gchar *error_type;
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
220 switch (event->error_code) {
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
221 #define XERRORCASE(type) case type: error_type = #type; break
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
222 XERRORCASE(BadAccess);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
223 XERRORCASE(BadAlloc);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
224 XERRORCASE(BadAtom);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
225 XERRORCASE(BadColor);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
226 XERRORCASE(BadCursor);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
227 XERRORCASE(BadDrawable);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
228 XERRORCASE(BadFont);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
229 XERRORCASE(BadGC);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
230 XERRORCASE(BadIDChoice);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
231 XERRORCASE(BadImplementation);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
232 XERRORCASE(BadLength);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
233 XERRORCASE(BadMatch);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
234 XERRORCASE(BadName);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
235 XERRORCASE(BadPixmap);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
236 XERRORCASE(BadRequest);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
237 XERRORCASE(BadValue);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
238 XERRORCASE(BadWindow);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
239 #undef XERRORCASE
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
240 default:
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
241 error_type = "unknown";
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
242 break;
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
243 }
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
244 purple_debug_error("media", "A %s Xlib error has occurred. "
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
245 "The program would normally crash now.\n",
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
246 error_type);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
247 return 0;
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
248 }
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
249
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
250 static void
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
251 menu_hangup(gpointer data, guint action, GtkWidget *item)
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
252 {
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
253 PidginMedia *gtkmedia = PIDGIN_MEDIA(data);
26451
2862fee7acf2 Remove purple_media_hangup.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26448
diff changeset
254 purple_media_stream_info(gtkmedia->priv->media,
2862fee7acf2 Remove purple_media_hangup.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26448
diff changeset
255 PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE);
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
256 }
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
257
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
258 static GtkItemFactoryEntry menu_items[] = {
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
259 { N_("/_Media"), NULL, NULL, 0, "<Branch>", NULL },
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
260 { N_("/Media/_Hangup"), NULL, menu_hangup, 0, "<Item>", NULL },
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
261 };
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
262
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
263 static gint menu_item_count = sizeof(menu_items) / sizeof(menu_items[0]);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
264
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
265 static const char *
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
266 item_factory_translate_func (const char *path, gpointer func_data)
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
267 {
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
268 return _(path);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
269 }
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
270
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
271 static GtkWidget *
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
272 setup_menubar(PidginMedia *window)
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
273 {
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
274 GtkAccelGroup *accel_group;
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
275 GtkWidget *menu;
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
276
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
277 accel_group = gtk_accel_group_new ();
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
278 gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
279 g_object_unref(accel_group);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
280
26175
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
281 window->priv->item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
282 "<main>", accel_group);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
283
26175
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
284 gtk_item_factory_set_translate_func(window->priv->item_factory,
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
285 (GtkTranslateFunc)item_factory_translate_func,
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
286 NULL, NULL);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
287
26175
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
288 gtk_item_factory_create_items(window->priv->item_factory,
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
289 menu_item_count, menu_items, window);
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
290 g_signal_connect(G_OBJECT(accel_group), "accel-changed",
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
291 G_CALLBACK(pidgin_save_accels_cb), NULL);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
292
26175
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
293 menu = gtk_item_factory_get_widget(
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
294 window->priv->item_factory, "<main>");
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
295
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
296 gtk_widget_show(menu);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
297 return menu;
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
298 }
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
299
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
300 static void
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
301 pidgin_media_init (PidginMedia *media)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
302 {
26492
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
303 GtkWidget *vbox;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
304 media->priv = PIDGIN_MEDIA_GET_PRIVATE(media);
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
305
26159
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
306 XSetErrorHandler(pidgin_x_error_handler);
46a6ba93c376 Implement an X error handler to prevent Pidgin from crashing on
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26158
diff changeset
307
26433
0dfd05966e09 Improve padding in media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26431
diff changeset
308 vbox = gtk_vbox_new(FALSE, 0);
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
309 gtk_container_add(GTK_CONTAINER(media), vbox);
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
310
26161
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
311 media->priv->statusbar = gtk_statusbar_new();
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
312 gtk_box_pack_end(GTK_BOX(vbox), media->priv->statusbar,
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
313 FALSE, FALSE, 0);
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
314 gtk_statusbar_push(GTK_STATUSBAR(media->priv->statusbar),
26176
08a3749993fe Remove unnecessary buttons and change statusbar to say "Calling..."
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
315 0, _("Calling..."));
26161
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
316 gtk_widget_show(media->priv->statusbar);
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
317
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
318 media->priv->menubar = setup_menubar(media);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
319 gtk_box_pack_start(GTK_BOX(vbox), media->priv->menubar,
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
320 FALSE, TRUE, 0);
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
321
26160
27b553a07800 Make the sinks better default sizes and display them immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26159
diff changeset
322 media->priv->display = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
26433
0dfd05966e09 Improve padding in media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26431
diff changeset
323 gtk_container_set_border_width(GTK_CONTAINER(media->priv->display),
0dfd05966e09 Improve padding in media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26431
diff changeset
324 PIDGIN_HIG_BOX_SPACE);
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
325 gtk_box_pack_start(GTK_BOX(vbox), media->priv->display,
26131
6eeb500ce9a2 Remove unneeded pidgin_media_get_display_widget function.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26130
diff changeset
326 TRUE, TRUE, PIDGIN_HIG_BOX_SPACE);
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
327 gtk_widget_show(vbox);
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
328
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
329 g_signal_connect(G_OBJECT(media), "delete-event",
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
330 G_CALLBACK(pidgin_media_delete_event_cb), media);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
331 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
332
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
333 static gboolean
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
334 level_message_cb(GstBus *bus, GstMessage *message, PidginMedia *gtkmedia)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
335 {
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
336 gdouble rms_db;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
337 gdouble percent;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
338 const GValue *list;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
339 const GValue *value;
25634
741a702033e0 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25561
diff changeset
340
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
341 GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(message));
26152
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
342 GtkWidget *progress;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
343
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
344 if (message->type != GST_MESSAGE_ELEMENT)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
345 return TRUE;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
346
26401
7909c74618fc Fix audio levels.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26198
diff changeset
347 if (!gst_structure_has_name(
26152
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
348 gst_message_get_structure(message), "level"))
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
349 return TRUE;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
350
26152
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
351 if (src == gtkmedia->priv->send_level)
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
352 progress = gtkmedia->priv->send_progress;
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
353 else if (src == gtkmedia->priv->recv_level)
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
354 progress = gtkmedia->priv->recv_progress;
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
355 else
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
356 return TRUE;
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
357
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
358 list = gst_structure_get_value(
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
359 gst_message_get_structure(message), "rms");
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
360
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
361 /* Only bother with the first channel. */
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
362 value = gst_value_list_get_value(list, 0);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
363 rms_db = g_value_get_double(value);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
364
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
365 percent = pow(10, rms_db / 20) * 5;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
366
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
367 if(percent > 1.0)
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
368 percent = 1.0;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
369
26152
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26151
diff changeset
370 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress), percent);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
371 return TRUE;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
372 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
373
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
374
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
375 static void
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
376 pidgin_media_disconnect_levels(PurpleMedia *media, PidginMedia *gtkmedia)
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
377 {
26475
462e5c27dbd7 Use purple_media_manager_get_pipeline instead.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26474
diff changeset
378 PurpleMediaManager *manager = purple_media_get_manager(media);
462e5c27dbd7 Use purple_media_manager_get_pipeline instead.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26474
diff changeset
379 GstElement *element = purple_media_manager_get_pipeline(manager);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
380 gulong handler_id = g_signal_handler_find(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))),
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
381 G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
382 NULL, G_CALLBACK(level_message_cb), gtkmedia);
25651
43b3b9ff6028 Added better Farsight error handling. Fixes several crash bugs related
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
383 if (handler_id)
43b3b9ff6028 Added better Farsight error handling. Fixes several crash bugs related
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
384 g_signal_handler_disconnect(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))),
43b3b9ff6028 Added better Farsight error handling. Fixes several crash bugs related
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
385 handler_id);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
386 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
387
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
388 static void
26087
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
389 pidgin_media_dispose(GObject *media)
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
390 {
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
391 PidginMedia *gtkmedia = PIDGIN_MEDIA(media);
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
392 purple_debug_info("gtkmedia", "pidgin_media_dispose\n");
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
393
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
394 if (gtkmedia->priv->media) {
26177
8b95080061ed Close the request dialog if the remote user hung up.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26176
diff changeset
395 purple_request_close_with_handle(gtkmedia);
26157
1aed9a92b657 Implement *_remove_output_window and *_remove_output_windows.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26152
diff changeset
396 purple_media_remove_output_windows(gtkmedia->priv->media);
26087
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
397 pidgin_media_disconnect_levels(gtkmedia->priv->media, gtkmedia);
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
398 g_object_unref(gtkmedia->priv->media);
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
399 gtkmedia->priv->media = NULL;
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
400 }
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
401
26175
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
402 if (gtkmedia->priv->item_factory) {
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
403 g_object_unref(gtkmedia->priv->item_factory);
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
404 gtkmedia->priv->item_factory = NULL;
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
405 }
1830d339f9b9 Properly free item factory. Should fix a crash on close.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26174
diff changeset
406
26087
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
407 if (gtkmedia->priv->send_level) {
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
408 gst_object_unref(gtkmedia->priv->send_level);
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
409 gtkmedia->priv->send_level = NULL;
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
410 }
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
411
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
412 if (gtkmedia->priv->recv_level) {
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
413 gst_object_unref(gtkmedia->priv->recv_level);
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
414 gtkmedia->priv->recv_level = NULL;
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
415 }
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
416
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
417 G_OBJECT_CLASS(parent_class)->dispose(media);
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
418 }
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
419
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
420 static void
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
421 pidgin_media_finalize(GObject *media)
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
422 {
26131
6eeb500ce9a2 Remove unneeded pidgin_media_get_display_widget function.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26130
diff changeset
423 /* PidginMedia *gtkmedia = PIDGIN_MEDIA(media); */
26014
bd598b606ca4 Restructure Jingle code to more easily support multiple application types.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26013
diff changeset
424 purple_debug_info("gtkmedia", "pidgin_media_finalize\n");
26087
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
425
83704757fa36 Use the dispose method too.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26060
diff changeset
426 G_OBJECT_CLASS(parent_class)->finalize(media);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
427 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
428
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
429 static void
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
430 pidgin_media_emit_message(PidginMedia *gtkmedia, const char *msg)
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
431 {
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
432 PurpleConversation *conv = purple_find_conversation_with_account(
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
433 PURPLE_CONV_TYPE_ANY, gtkmedia->priv->screenname,
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
434 purple_media_get_account(gtkmedia->priv->media));
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
435 if (conv != NULL)
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
436 purple_conversation_write(conv, NULL, msg,
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
437 PURPLE_MESSAGE_SYSTEM, time(NULL));
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
438 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25643
diff changeset
439
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
440 typedef struct
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
441 {
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
442 PidginMedia *gtkmedia;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
443 gchar *session_id;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
444 gchar *participant;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
445 } PidginMediaRealizeData;
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
446
26107
4859b0b82289 Hopefully stop the last of the BadWindow errors.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26089
diff changeset
447 static gboolean
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
448 realize_cb_cb(PidginMediaRealizeData *data)
26107
4859b0b82289 Hopefully stop the last of the BadWindow errors.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26089
diff changeset
449 {
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
450 PidginMediaPrivate *priv = data->gtkmedia->priv;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
451 gulong window_id;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
452
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
453 if (data->participant == NULL)
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
454 window_id = GDK_WINDOW_XWINDOW(priv->local_video->window);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
455 else
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
456 window_id = GDK_WINDOW_XWINDOW(priv->remote_video->window);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
457
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
458 purple_media_set_output_window(priv->media, data->session_id,
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
459 data->participant, window_id);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
460
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
461 g_free(data->session_id);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
462 g_free(data->participant);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
463 g_free(data);
26107
4859b0b82289 Hopefully stop the last of the BadWindow errors.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26089
diff changeset
464 return FALSE;
4859b0b82289 Hopefully stop the last of the BadWindow errors.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26089
diff changeset
465 }
4859b0b82289 Hopefully stop the last of the BadWindow errors.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26089
diff changeset
466
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
467 static void
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
468 realize_cb(GtkWidget *widget, PidginMediaRealizeData *data)
26053
99c3489e06b0 Wait for local video frame to be realized before starting local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26034
diff changeset
469 {
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
470 g_timeout_add(0, (GSourceFunc)realize_cb_cb, data);
26053
99c3489e06b0 Wait for local video frame to be realized before starting local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26034
diff changeset
471 }
99c3489e06b0 Wait for local video frame to be realized before starting local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26034
diff changeset
472
99c3489e06b0 Wait for local video frame to be realized before starting local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26034
diff changeset
473 static void
26058
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
474 pidgin_media_error_cb(PidginMedia *media, const char *error, PidginMedia *gtkmedia)
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
475 {
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
476 PurpleConversation *conv = purple_find_conversation_with_account(
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
477 PURPLE_CONV_TYPE_ANY, gtkmedia->priv->screenname,
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
478 purple_media_get_account(gtkmedia->priv->media));
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
479 if (conv != NULL)
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
480 purple_conversation_write(conv, NULL, error,
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
481 PURPLE_MESSAGE_ERROR, time(NULL));
26161
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
482 gtk_statusbar_push(GTK_STATUSBAR(gtkmedia->priv->statusbar),
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
483 0, error);
26058
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
484 }
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
485
26143
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
486 static void
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
487 pidgin_media_accepted_cb(PurpleMedia *media, const gchar *session_id,
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
488 const gchar *participant, PidginMedia *gtkmedia)
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
489 {
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
490 pidgin_media_set_state(gtkmedia, PIDGIN_MEDIA_ACCEPTED);
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
491 pidgin_media_emit_message(gtkmedia, _("Call in progress."));
26161
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
492 gtk_statusbar_push(GTK_STATUSBAR(gtkmedia->priv->statusbar),
2b843d38d1f2 Add statusbar to eventually replace the label.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26160
diff changeset
493 0, _("Call in progress."));
26149
a6e53d23bcbb Use request API for a media invitation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26148
diff changeset
494 gtk_widget_show(GTK_WIDGET(gtkmedia));
26143
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
495 }
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
496
26058
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
497 static void
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
498 pidgin_media_accept_cb(PurpleMedia *media, int index)
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
499 {
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
500 purple_media_stream_info(media, PURPLE_MEDIA_INFO_ACCEPT,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
501 NULL, NULL, TRUE);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
502 }
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
503
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
504 static void
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
505 pidgin_media_reject_cb(PurpleMedia *media, int index)
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
506 {
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
507 purple_media_stream_info(media, PURPLE_MEDIA_INFO_REJECT,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
508 NULL, NULL, TRUE);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
509 }
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
510
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
511 static gboolean
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
512 pidgin_request_timeout_cb(PidginMedia *gtkmedia)
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
513 {
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
514 PurpleAccount *account;
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
515 PurpleBuddy *buddy;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
516 const gchar *alias;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
517 PurpleMediaSessionType type;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
518 gchar *message = NULL;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
519
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
520 account = purple_media_get_account(gtkmedia->priv->media);
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
521 buddy = purple_find_buddy(account, gtkmedia->priv->screenname);
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
522 alias = buddy ? purple_buddy_get_contact_alias(buddy) :
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
523 gtkmedia->priv->screenname;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
524 type = gtkmedia->priv->request_type;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
525 gtkmedia->priv->timeout_id = 0;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
526
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
527 if (type & PURPLE_MEDIA_AUDIO && type & PURPLE_MEDIA_VIDEO) {
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
528 message = g_strdup_printf(_("%s wishes to start an audio/video session with you."),
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
529 alias);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
530 } else if (type & PURPLE_MEDIA_AUDIO) {
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
531 message = g_strdup_printf(_("%s wishes to start an audio session with you."),
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
532 alias);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
533 } else if (type & PURPLE_MEDIA_VIDEO) {
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
534 message = g_strdup_printf(_("%s wishes to start a video session with you."),
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
535 alias);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
536 }
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
537
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
538 gtkmedia->priv->request_type = PURPLE_MEDIA_NONE;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
539
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
540 purple_request_accept_cancel(gtkmedia, "Media invitation",
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
541 message, NULL, PURPLE_DEFAULT_ACTION_NONE,
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
542 (void*)account, gtkmedia->priv->screenname, NULL,
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
543 gtkmedia->priv->media,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
544 pidgin_media_accept_cb,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
545 pidgin_media_reject_cb);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
546 pidgin_media_emit_message(gtkmedia, message);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
547 g_free(message);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
548 return FALSE;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
549 }
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
550
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
551 static void
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
552 #if GTK_CHECK_VERSION(2,12,0)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
553 pidgin_media_input_volume_changed(GtkScaleButton *range, double value,
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
554 PurpleMedia *media)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
555 {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
556 double val = (double)value * 100.0;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
557 #else
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
558 pidgin_media_input_volume_changed(GtkRange *range, PurpleMedia *media)
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
559 {
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
560 double val = (double)gtk_range_get_value(GTK_RANGE(range));
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
561 #endif
26497
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
562 purple_prefs_set_int("/pidgin/media/audio/volume/input", val);
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
563 purple_media_set_input_volume(media, NULL, val / 10.0);
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
564 }
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
565
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
566 static void
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
567 #if GTK_CHECK_VERSION(2,12,0)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
568 pidgin_media_output_volume_changed(GtkScaleButton *range, double value,
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
569 PurpleMedia *media)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
570 {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
571 double val = (double)value * 100.0;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
572 #else
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
573 pidgin_media_output_volume_changed(GtkRange *range, PurpleMedia *media)
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
574 {
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
575 double val = (double)gtk_range_get_value(GTK_RANGE(range));
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
576 #endif
26497
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
577 purple_prefs_set_int("/pidgin/media/audio/volume/output", val);
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
578 purple_media_set_output_volume(media, NULL, NULL, val / 10.0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
579 }
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
580
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
581 static GtkWidget *
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
582 pidgin_media_add_audio_widget(PidginMedia *gtkmedia,
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
583 PurpleMediaSessionType type)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
584 {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
585 GtkWidget *volume_widget, *progress_parent, *volume, *progress;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
586 double value;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
587
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
588 if (type & PURPLE_MEDIA_SEND_AUDIO) {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
589 value = purple_prefs_get_int(
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
590 "/pidgin/media/audio/volume/input");
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
591 } else if (type & PURPLE_MEDIA_RECV_AUDIO) {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
592 value = purple_prefs_get_int(
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
593 "/pidgin/media/audio/volume/output");
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
594 } else
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
595 g_return_val_if_reached(NULL);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
597 #if GTK_CHECK_VERSION(2,12,0)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
598 /* Setup widget structure */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
599 volume_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
600 progress_parent = gtk_vbox_new(FALSE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
601 gtk_box_pack_start(GTK_BOX(volume_widget),
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
602 progress_parent, TRUE, TRUE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
603
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
604 /* Volume button */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
605 volume = gtk_volume_button_new();
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
606 gtk_scale_button_set_value(GTK_SCALE_BUTTON(volume), value/100.0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
607 gtk_box_pack_end(GTK_BOX(volume_widget),
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
608 volume, FALSE, FALSE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
609 #else
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
610 /* Setup widget structure */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
611 volume_widget = gtk_vbox_new(FALSE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
612 progress_parent = volume_widget;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
613
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
614 /* Volume slider */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
615 volume = gtk_hscale_new_with_range(0.0, 100.0, 5.0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
616 gtk_range_set_increments(GTK_RANGE(volume), 5.0, 25.0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
617 gtk_range_set_value(GTK_RANGE(volume), value);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
618 gtk_scale_set_draw_value(GTK_SCALE(volume), FALSE);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
619 gtk_box_pack_end(GTK_BOX(volume_widget),
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
620 volume, TRUE, FALSE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
621 #endif
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
622
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
623 /* Volume level indicator */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
624 progress = gtk_progress_bar_new();
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
625 gtk_widget_set_size_request(progress, 250, 10);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
626 gtk_box_pack_end(GTK_BOX(progress_parent), progress, TRUE, FALSE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
627
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
628 if (type & PURPLE_MEDIA_SEND_AUDIO) {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
629 g_signal_connect (G_OBJECT(volume), "value-changed",
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
630 G_CALLBACK(pidgin_media_input_volume_changed),
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
631 gtkmedia->priv->media);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
632 gtkmedia->priv->send_progress = progress;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
633 } else if (type & PURPLE_MEDIA_RECV_AUDIO) {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
634 g_signal_connect (G_OBJECT(volume), "value-changed",
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
635 G_CALLBACK(pidgin_media_output_volume_changed),
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
636 gtkmedia->priv->media);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
637 gtkmedia->priv->recv_progress = progress;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
638 }
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
639
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
640 gtk_widget_show_all(volume_widget);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
641
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
642 return volume_widget;
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
643 }
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
644
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
645 static void
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
646 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia, const gchar *sid)
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
647 {
26475
462e5c27dbd7 Use purple_media_manager_get_pipeline instead.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26474
diff changeset
648 PurpleMediaManager *manager = purple_media_get_manager(media);
462e5c27dbd7 Use purple_media_manager_get_pipeline instead.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26474
diff changeset
649 GstElement *pipeline = purple_media_manager_get_pipeline(manager);
26027
94224a5563db Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26014
diff changeset
650 GtkWidget *send_widget = NULL, *recv_widget = NULL;
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
651 PurpleMediaSessionType type =
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
652 purple_media_get_session_type(media, sid);
25671
12a16471f94e Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
653
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
654 if (gtkmedia->priv->recv_widget == NULL
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
655 && type & (PURPLE_MEDIA_RECV_VIDEO |
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
656 PURPLE_MEDIA_RECV_AUDIO)) {
26147
09386489e6d1 Change the media window items' orientations to look better.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26146
diff changeset
657 recv_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
658 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
659 recv_widget, TRUE, TRUE, 0);
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
660 gtk_widget_show(recv_widget);
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
661 } else
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
662 recv_widget = gtkmedia->priv->recv_widget;
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
663 if (gtkmedia->priv->send_widget == NULL
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
664 && type & (PURPLE_MEDIA_SEND_VIDEO |
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
665 PURPLE_MEDIA_SEND_AUDIO)) {
26147
09386489e6d1 Change the media window items' orientations to look better.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26146
diff changeset
666 send_widget = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
667 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
668 send_widget, TRUE, TRUE, 0);
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
669 gtk_widget_show(send_widget);
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
670 } else
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
671 send_widget = gtkmedia->priv->send_widget;
25688
9c6915254610 Move the audio progress bar widgets to be beside the video displays.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25687
diff changeset
672
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
673 if (type & PURPLE_MEDIA_RECV_VIDEO) {
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
674 PidginMediaRealizeData *data;
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
675 GtkWidget *aspect;
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
676 GtkWidget *remote_video;
26158
bb8d4ff8276a Make the backgrounds of the drawing areas black so it doesn't look as
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26157
diff changeset
677 GdkColor color = {0, 0, 0, 0};
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
678
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
679 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
680 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
25693
b8e0a56cd6cf Fix the order of the send/recv audio/video display widgets.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25692
diff changeset
681 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0);
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
682
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
683 data = g_new0(PidginMediaRealizeData, 1);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
684 data->gtkmedia = gtkmedia;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
685 data->session_id = g_strdup(sid);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
686 data->participant = g_strdup(gtkmedia->priv->screenname);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
687
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
688 remote_video = gtk_drawing_area_new();
26158
bb8d4ff8276a Make the backgrounds of the drawing areas black so it doesn't look as
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26157
diff changeset
689 gtk_widget_modify_bg(remote_video, GTK_STATE_NORMAL, &color);
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
690 g_signal_connect(G_OBJECT(remote_video), "realize",
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
691 G_CALLBACK(realize_cb), data);
26516
30c870ee4ec9 Remove old GtkPlug and GtkSocket code.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26506
diff changeset
692 gtk_container_add(GTK_CONTAINER(aspect), remote_video);
26160
27b553a07800 Make the sinks better default sizes and display them immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26159
diff changeset
693 gtk_widget_set_size_request (GTK_WIDGET(remote_video), 320, 240);
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
694 gtk_widget_show(remote_video);
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
695 gtk_widget_show(aspect);
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
696
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
697 gtkmedia->priv->remote_video = remote_video;
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
698 }
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
699 if (type & PURPLE_MEDIA_SEND_VIDEO) {
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
700 PidginMediaRealizeData *data;
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
701 GtkWidget *aspect;
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
702 GtkWidget *local_video;
26158
bb8d4ff8276a Make the backgrounds of the drawing areas black so it doesn't look as
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26157
diff changeset
703 GdkColor color = {0, 0, 0, 0};
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
704
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
705 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
706 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
25693
b8e0a56cd6cf Fix the order of the send/recv audio/video display widgets.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25692
diff changeset
707 gtk_box_pack_start(GTK_BOX(send_widget), aspect, TRUE, TRUE, 0);
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
708
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
709 data = g_new0(PidginMediaRealizeData, 1);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
710 data->gtkmedia = gtkmedia;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
711 data->session_id = g_strdup(sid);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
712 data->participant = NULL;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
713
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
714 local_video = gtk_drawing_area_new();
26158
bb8d4ff8276a Make the backgrounds of the drawing areas black so it doesn't look as
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26157
diff changeset
715 gtk_widget_modify_bg(local_video, GTK_STATE_NORMAL, &color);
26053
99c3489e06b0 Wait for local video frame to be realized before starting local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26034
diff changeset
716 g_signal_connect(G_OBJECT(local_video), "realize",
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
717 G_CALLBACK(realize_cb), data);
26516
30c870ee4ec9 Remove old GtkPlug and GtkSocket code.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26506
diff changeset
718 gtk_container_add(GTK_CONTAINER(aspect), local_video);
26160
27b553a07800 Make the sinks better default sizes and display them immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26159
diff changeset
719 gtk_widget_set_size_request (GTK_WIDGET(local_video), 160, 120);
26053
99c3489e06b0 Wait for local video frame to be realized before starting local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26034
diff changeset
720
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
721 gtk_widget_show(local_video);
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
722 gtk_widget_show(aspect);
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
723
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
724 gtkmedia->priv->local_video = local_video;
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
725 }
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
726
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
727 if (type & PURPLE_MEDIA_RECV_AUDIO) {
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
728 gtk_box_pack_end(GTK_BOX(recv_widget),
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
729 pidgin_media_add_audio_widget(gtkmedia,
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
730 PURPLE_MEDIA_RECV_AUDIO), FALSE, FALSE, 0);
25688
9c6915254610 Move the audio progress bar widgets to be beside the video displays.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25687
diff changeset
731 }
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
732 if (type & PURPLE_MEDIA_SEND_AUDIO) {
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
733 GstElement *media_src;
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
734 GtkWidget *hbox;
26492
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
735
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
736 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
737 gtk_box_pack_end(GTK_BOX(send_widget), hbox, FALSE, FALSE, 0);
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
738 gtkmedia->priv->mute =
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
739 gtk_toggle_button_new_with_mnemonic("_Mute");
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
740 g_signal_connect(gtkmedia->priv->mute, "toggled",
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
741 G_CALLBACK(pidgin_media_mute_toggled),
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
742 gtkmedia);
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
743 gtk_box_pack_end(GTK_BOX(hbox), gtkmedia->priv->mute,
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
744 FALSE, FALSE, 0);
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
745 gtk_widget_show(gtkmedia->priv->mute);
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
746 gtk_widget_show(GTK_WIDGET(hbox));
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
747
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
748 media_src = purple_media_get_src(media, sid);
26401
7909c74618fc Fix audio levels.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26198
diff changeset
749 gtkmedia->priv->send_level = gst_bin_get_by_name(
7909c74618fc Fix audio levels.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26198
diff changeset
750 GST_BIN(media_src), "sendlevel");
7909c74618fc Fix audio levels.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26198
diff changeset
751
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
752 gtk_box_pack_end(GTK_BOX(send_widget),
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
753 pidgin_media_add_audio_widget(gtkmedia,
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
754 PURPLE_MEDIA_SEND_AUDIO), FALSE, FALSE, 0);
25726
eb289e9086bf Only show the mute button when sending an audio stream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25725
diff changeset
755
eb289e9086bf Only show the mute button when sending an audio stream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25725
diff changeset
756 gtk_widget_show(gtkmedia->priv->mute);
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
757 }
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
758
26027
94224a5563db Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26014
diff changeset
759
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
760 if (type & PURPLE_MEDIA_AUDIO) {
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
761 GstBus *bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
26027
94224a5563db Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26014
diff changeset
762 g_signal_connect(G_OBJECT(bus), "message::element",
94224a5563db Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26014
diff changeset
763 G_CALLBACK(level_message_cb), gtkmedia);
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
764 gst_object_unref(bus);
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
765 }
26027
94224a5563db Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26014
diff changeset
766
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
767 if (send_widget != NULL)
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
768 gtkmedia->priv->send_widget = send_widget;
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
769 if (recv_widget != NULL)
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
770 gtkmedia->priv->recv_widget = recv_widget;
26027
94224a5563db Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26014
diff changeset
771
26466
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
772 if (purple_media_is_initiator(media, sid, NULL) == FALSE) {
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
773 if (gtkmedia->priv->timeout_id != 0)
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
774 g_source_remove(gtkmedia->priv->timeout_id);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
775 gtkmedia->priv->request_type |= type;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
776 gtkmedia->priv->timeout_id = g_timeout_add(500,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
777 (GSourceFunc)pidgin_request_timeout_cb,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
778 gtkmedia);
25687
ddbea813862e Notify the user which type of media session the remote user wants to initiate.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25686
diff changeset
779 }
26160
27b553a07800 Make the sinks better default sizes and display them immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26159
diff changeset
780
27b553a07800 Make the sinks better default sizes and display them immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26159
diff changeset
781 gtk_widget_show(gtkmedia->priv->display);
25687
ddbea813862e Notify the user which type of media session the remote user wants to initiate.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25686
diff changeset
782 }
ddbea813862e Notify the user which type of media session the remote user wants to initiate.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25686
diff changeset
783
ddbea813862e Notify the user which type of media session the remote user wants to initiate.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25686
diff changeset
784 static void
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
785 pidgin_media_state_changed_cb(PurpleMedia *media, PurpleMediaState state,
26114
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
786 gchar *sid, gchar *name, PidginMedia *gtkmedia)
25634
741a702033e0 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25561
diff changeset
787 {
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
788 purple_debug_info("gtkmedia", "state: %d sid: %s name: %s\n",
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
789 state, sid, name);
26114
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
790 if (sid == NULL && name == NULL) {
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
791 if (state == PURPLE_MEDIA_STATE_END) {
26114
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
792 pidgin_media_emit_message(gtkmedia,
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
793 _("The call has been terminated."));
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
794 gtk_widget_destroy(GTK_WIDGET(gtkmedia));
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
795 }
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
796 } else if (state == PURPLE_MEDIA_STATE_NEW &&
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
797 sid != NULL && name != NULL) {
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
798 pidgin_media_ready_cb(media, gtkmedia, sid);
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
799 } else if (state == PURPLE_MEDIA_STATE_CONNECTED &&
26401
7909c74618fc Fix audio levels.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26198
diff changeset
800 purple_media_get_session_type(media, sid) &
7909c74618fc Fix audio levels.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26198
diff changeset
801 PURPLE_MEDIA_RECV_AUDIO) {
26419
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
802 GstElement *tee = purple_media_get_tee(media, sid, name);
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
803 GstIterator *iter = gst_element_iterate_src_pads(tee);
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
804 GstPad *sinkpad;
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
805 if (gst_iterator_next(iter, (gpointer)&sinkpad)
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
806 == GST_ITERATOR_OK) {
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
807 GstPad *peer = gst_pad_get_peer(sinkpad);
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
808 if (peer != NULL) {
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
809 gtkmedia->priv->recv_level =
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
810 gst_bin_get_by_name(
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
811 GST_BIN(GST_OBJECT_PARENT(
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
812 peer)), "recvlevel");
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
813 gst_object_unref(peer);
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
814 }
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
815 gst_object_unref(sinkpad);
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
816 }
dd45432d6b69 Use purple_media_get_tee instead of purple_media_get_sink.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26411
diff changeset
817 gst_iterator_free(iter);
26114
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
818 }
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
819 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
820
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
821 static void
26406
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
822 pidgin_media_stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type,
26448
4e1286e76f1f Create purple_media_stream_info. Add local parameter to stream-info signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26446
diff changeset
823 gchar *sid, gchar *name, gboolean local,
4e1286e76f1f Create purple_media_stream_info. Add local parameter to stream-info signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26446
diff changeset
824 PidginMedia *gtkmedia)
26406
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
825 {
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
826 if (type == PURPLE_MEDIA_INFO_REJECT) {
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
827 pidgin_media_emit_message(gtkmedia,
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
828 _("You have rejected the call."));
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
829 }
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
830 }
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
831
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
832 static void
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
833 pidgin_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
834 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
835 PidginMedia *media;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
836 g_return_if_fail(PIDGIN_IS_MEDIA(object));
25634
741a702033e0 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25561
diff changeset
837
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
838 media = PIDGIN_MEDIA(object);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
839 switch (prop_id) {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
840 case PROP_MEDIA:
26115
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
841 {
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
842 if (media->priv->media)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
843 g_object_unref(media->priv->media);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
844 media->priv->media = g_value_get_object(value);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
845 g_object_ref(media->priv->media);
26115
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
846
26466
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
847 if (purple_media_is_initiator(media->priv->media,
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
848 NULL, NULL) == TRUE)
26115
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
849 pidgin_media_set_state(media, PIDGIN_MEDIA_WAITING);
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
850 else
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
851 pidgin_media_set_state(media, PIDGIN_MEDIA_REQUESTED);
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
852
26058
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
853 g_signal_connect(G_OBJECT(media->priv->media), "error",
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
854 G_CALLBACK(pidgin_media_error_cb), media);
26143
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
855 g_signal_connect(G_OBJECT(media->priv->media), "accepted",
f6a98b2b8d92 Add the accepted signal and make the accept button go away immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26135
diff changeset
856 G_CALLBACK(pidgin_media_accepted_cb), media);
26114
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
857 g_signal_connect(G_OBJECT(media->priv->media), "state-changed",
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
858 G_CALLBACK(pidgin_media_state_changed_cb), media);
26406
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
859 g_signal_connect(G_OBJECT(media->priv->media), "stream-info",
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
860 G_CALLBACK(pidgin_media_stream_info_cb), media);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
861 break;
26115
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
862 }
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
863 case PROP_SCREENNAME:
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
864 if (media->priv->screenname)
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
865 g_free(media->priv->screenname);
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
866 media->priv->screenname = g_value_dup_string(value);
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
867 break;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
868 case PROP_SEND_LEVEL:
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
869 if (media->priv->send_level)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
870 gst_object_unref(media->priv->send_level);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
871 media->priv->send_level = g_value_get_object(value);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
872 g_object_ref(media->priv->send_level);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
873 break;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
874 case PROP_RECV_LEVEL:
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
875 if (media->priv->recv_level)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
876 gst_object_unref(media->priv->recv_level);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
877 media->priv->recv_level = g_value_get_object(value);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
878 g_object_ref(media->priv->recv_level);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
879 break;
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
880 default:
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
881 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
882 break;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
883 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
884 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
885
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
886 static void
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
887 pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
888 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
889 PidginMedia *media;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
890 g_return_if_fail(PIDGIN_IS_MEDIA(object));
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
891
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
892 media = PIDGIN_MEDIA(object);
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
893
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
894 switch (prop_id) {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
895 case PROP_MEDIA:
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
896 g_value_set_object(value, media->priv->media);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
897 break;
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
898 case PROP_SCREENNAME:
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
899 g_value_set_string(value, media->priv->screenname);
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
900 break;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
901 case PROP_SEND_LEVEL:
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
902 g_value_set_object(value, media->priv->send_level);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
903 break;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
904 case PROP_RECV_LEVEL:
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
905 g_value_set_object(value, media->priv->recv_level);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
906 break;
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
907 default:
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
908 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
909 break;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
910 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
911 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
912
26446
e114ed3c8cfe No reason for this to be public API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26440
diff changeset
913 static GtkWidget *
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
914 pidgin_media_new(PurpleMedia *media, const gchar *screenname)
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
915 {
25671
12a16471f94e Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
916 PidginMedia *gtkmedia = g_object_new(pidgin_media_get_type(),
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
917 "media", media,
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
918 "screenname", screenname, NULL);
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
919 return GTK_WIDGET(gtkmedia);
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
920 }
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
921
25643
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
922 static void
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
923 pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state)
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
924 {
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
925 gtkmedia->priv->state = state;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
926 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
927
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
928 static gboolean
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
929 pidgin_media_new_cb(PurpleMediaManager *manager, PurpleMedia *media,
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
930 PurpleAccount *account, gchar *screenname, gpointer nul)
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
931 {
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
932 PidginMedia *gtkmedia = PIDGIN_MEDIA(
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
933 pidgin_media_new(media, screenname));
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
934 PurpleBuddy *buddy = purple_find_buddy(account, screenname);
26151
e6d548856fcd Use aliases for the media window title and the request window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26149
diff changeset
935 const gchar *alias = buddy ?
e6d548856fcd Use aliases for the media window title and the request window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26149
diff changeset
936 purple_buddy_get_contact_alias(buddy) : screenname;
e6d548856fcd Use aliases for the media window title and the request window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26149
diff changeset
937 gtk_window_set_title(GTK_WINDOW(gtkmedia), alias);
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
938
26466
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
939 if (purple_media_is_initiator(media, NULL, NULL) == TRUE)
26149
a6e53d23bcbb Use request API for a media invitation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26148
diff changeset
940 gtk_widget_show(GTK_WIDGET(gtkmedia));
a6e53d23bcbb Use request API for a media invitation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26148
diff changeset
941
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
942 return TRUE;
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
943 }
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
944
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
945 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
946 create_default_video_src(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
947 const gchar *session_id, const gchar *participant)
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
948 {
26424
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
949 GstElement *sendbin, *src, *videoscale, *capsfilter;
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
950 GstPad *pad;
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
951 GstPad *ghost;
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
952 GstCaps *caps;
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
953
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
954 src = gst_element_factory_make("gconfvideosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
955 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
956 src = gst_element_factory_make("autovideosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
957 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
958 src = gst_element_factory_make("v4l2src", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
959 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
960 src = gst_element_factory_make("v4lsrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
961 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
962 src = gst_element_factory_make("ksvideosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
963 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
964 src = gst_element_factory_make("dshowvideosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
965 if (src == NULL) {
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
966 purple_debug_error("gtkmedia", "Unable to find a suitable "
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
967 "element for the default video source.\n");
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
968 return NULL;
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
969 }
26424
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
970
26459
452be048bded Unique elements ought to be named the same as their id.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26457
diff changeset
971 sendbin = gst_bin_new("pidgindefaultvideosrc");
26424
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
972 videoscale = gst_element_factory_make("videoscale", NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
973 capsfilter = gst_element_factory_make("capsfilter", NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
974
26439
c3ea7e628e58 Extend the range for video dimensions just a hair.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26433
diff changeset
975 /* It was recommended to set the size <= 352x288 and framerate <= 20 */
c3ea7e628e58 Extend the range for video dimensions just a hair.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26433
diff changeset
976 caps = gst_caps_from_string("video/x-raw-yuv , width=[250,352] , "
26487
70ab418e9d4f Have "no minimum framerate". Fixes khc's cam.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26484
diff changeset
977 "height=[200,288] , framerate=[1/1,20/1]");
26424
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
978 g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
979
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
980 gst_bin_add_many(GST_BIN(sendbin), src,
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
981 videoscale, capsfilter, NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
982 gst_element_link_many(src, videoscale, capsfilter, NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
983
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
984 pad = gst_element_get_static_pad(capsfilter, "src");
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
985 ghost = gst_ghost_pad_new("ghostsrc", pad);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
986 gst_object_unref(pad);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
987 gst_element_add_pad(sendbin, ghost);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
988
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
989 return sendbin;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
990 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
991
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
992 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
993 create_default_video_sink(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
994 const gchar *session_id, const gchar *participant)
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
995 {
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
996 GstElement *sink = gst_element_factory_make("gconfvideosink", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
997 if (sink == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
998 sink = gst_element_factory_make("autovideosink", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
999 if (sink == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1000 purple_debug_error("gtkmedia", "Unable to find a suitable "
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1001 "element for the default video sink.\n");
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1002 return sink;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1003 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1004
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1005 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
1006 create_default_audio_src(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
1007 const gchar *session_id, const gchar *participant)
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1008 {
26425
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1009 GstElement *bin, *src, *volume, *level;
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1010 GstPad *pad, *ghost;
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1011 double input_volume = purple_prefs_get_int(
26497
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1012 "/pidgin/media/audio/volume/input")/10.0;
26425
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1013
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1014 src = gst_element_factory_make("gconfaudiosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1015 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1016 src = gst_element_factory_make("autoaudiosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1017 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1018 src = gst_element_factory_make("alsasrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1019 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1020 src = gst_element_factory_make("osssrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1021 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1022 src = gst_element_factory_make("dshowaudiosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1023 if (src == NULL) {
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1024 purple_debug_error("gtkmedia", "Unable to find a suitable "
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1025 "element for the default audio source.\n");
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1026 return NULL;
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1027 }
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1028
26459
452be048bded Unique elements ought to be named the same as their id.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26457
diff changeset
1029 bin = gst_bin_new("pidgindefaultaudiosrc");
26425
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1030 volume = gst_element_factory_make("volume", "purpleaudioinputvolume");
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1031 g_object_set(volume, "volume", input_volume, NULL);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1032 level = gst_element_factory_make("level", "sendlevel");
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1033 gst_bin_add_many(GST_BIN(bin), src, volume, level, NULL);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1034 gst_element_link(src, volume);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1035 gst_element_link(volume, level);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1036 pad = gst_element_get_pad(level, "src");
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1037 ghost = gst_ghost_pad_new("ghostsrc", pad);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1038 gst_element_add_pad(bin, ghost);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1039 g_object_set(G_OBJECT(level), "message", TRUE, NULL);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1040
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1041 return bin;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1042 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1043
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1044 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
1045 create_default_audio_sink(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
1046 const gchar *session_id, const gchar *participant)
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1047 {
26425
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1048 GstElement *bin, *sink, *volume, *level, *queue;
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1049 GstPad *pad, *ghost;
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1050 double output_volume = purple_prefs_get_int(
26497
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1051 "/pidgin/media/audio/volume/output")/10.0;
26425
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1052
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1053 sink = gst_element_factory_make("gconfaudiosink", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1054 if (sink == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1055 sink = gst_element_factory_make("autoaudiosink",NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1056 if (sink == NULL) {
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1057 purple_debug_error("gtkmedia", "Unable to find a suitable "
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1058 "element for the default audio sink.\n");
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1059 return NULL;
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1060 }
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
1061
26425
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1062 bin = gst_bin_new("pidginrecvaudiobin");
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1063 volume = gst_element_factory_make("volume", "purpleaudiooutputvolume");
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1064 g_object_set(volume, "volume", output_volume, NULL);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1065 level = gst_element_factory_make("level", "recvlevel");
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1066 queue = gst_element_factory_make("queue", NULL);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1067 gst_bin_add_many(GST_BIN(bin), sink, volume, level, queue, NULL);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1068 gst_element_link(level, sink);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1069 gst_element_link(volume, level);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1070 gst_element_link(queue, volume);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1071 pad = gst_element_get_pad(queue, "sink");
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1072 ghost = gst_ghost_pad_new("ghostsink", pad);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1073 gst_element_add_pad(bin, ghost);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1074 g_object_set(G_OBJECT(level), "message", TRUE, NULL);
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1075
722527dc050f Implement create_default_audio_* functions in gtkmedia.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26424
diff changeset
1076 return bin;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
1077 }
26457
0ee10b3e8ee6 Fix compiling with --disable-vv.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26455
diff changeset
1078 #endif /* USE_VV */
26163
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26161
diff changeset
1079
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1080 void
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1081 pidgin_medias_init(void)
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1082 {
26457
0ee10b3e8ee6 Fix compiling with --disable-vv.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26455
diff changeset
1083 #ifdef USE_VV
26163
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26161
diff changeset
1084 PurpleMediaManager *manager = purple_media_manager_get();
26484
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1085 PurpleMediaElementInfo *default_video_src =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1086 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1087 "id", "pidgindefaultvideosrc",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1088 "name", "Pidgin Default Video Source",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1089 "type", PURPLE_MEDIA_ELEMENT_VIDEO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1090 | PURPLE_MEDIA_ELEMENT_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1091 | PURPLE_MEDIA_ELEMENT_ONE_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1092 | PURPLE_MEDIA_ELEMENT_UNIQUE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1093 "create-cb", create_default_video_src, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1094 PurpleMediaElementInfo *default_video_sink =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1095 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1096 "id", "pidgindefaultvideosink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1097 "name", "Pidgin Default Video Sink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1098 "type", PURPLE_MEDIA_ELEMENT_VIDEO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1099 | PURPLE_MEDIA_ELEMENT_SINK
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1100 | PURPLE_MEDIA_ELEMENT_ONE_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1101 "create-cb", create_default_video_sink, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1102 PurpleMediaElementInfo *default_audio_src =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1103 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1104 "id", "pidgindefaultaudiosrc",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1105 "name", "Pidgin Default Audio Source",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1106 "type", PURPLE_MEDIA_ELEMENT_AUDIO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1107 | PURPLE_MEDIA_ELEMENT_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1108 | PURPLE_MEDIA_ELEMENT_ONE_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1109 | PURPLE_MEDIA_ELEMENT_UNIQUE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1110 "create-cb", create_default_audio_src, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1111 PurpleMediaElementInfo *default_audio_sink =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1112 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1113 "id", "pidgindefaultaudiosink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1114 "name", "Pidgin Default Audio Sink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1115 "type", PURPLE_MEDIA_ELEMENT_AUDIO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1116 | PURPLE_MEDIA_ELEMENT_SINK
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1117 | PURPLE_MEDIA_ELEMENT_ONE_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1118 "create-cb", create_default_audio_sink, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1119
26163
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26161
diff changeset
1120 g_signal_connect(G_OBJECT(manager), "init-media",
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1121 G_CALLBACK(pidgin_media_new_cb), NULL);
26163
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26161
diff changeset
1122
26473
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1123 purple_media_manager_set_ui_caps(manager,
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1124 PURPLE_MEDIA_CAPS_AUDIO |
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1125 PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION |
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1126 PURPLE_MEDIA_CAPS_VIDEO |
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1127 PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION |
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1128 PURPLE_MEDIA_CAPS_AUDIO_VIDEO);
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1129
26163
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26161
diff changeset
1130 purple_debug_info("gtkmedia", "Registering media element types\n");
26484
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1131 purple_media_manager_set_active_element(manager, default_video_src);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1132 purple_media_manager_set_active_element(manager, default_video_sink);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1133 purple_media_manager_set_active_element(manager, default_audio_src);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1134 purple_media_manager_set_active_element(manager, default_audio_sink);
26497
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1135
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1136 purple_prefs_add_none("/pidgin/media");
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1137 purple_prefs_add_none("/pidgin/media/audio");
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1138 purple_prefs_add_none("/pidgin/media/audio/volume");
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1139 purple_prefs_add_int("/pidgin/media/audio/volume/input", 10);
da3f44d6cd52 Change volume preference and make sure it exists.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26495
diff changeset
1140 purple_prefs_add_int("/pidgin/media/audio/volume/output", 10);
26457
0ee10b3e8ee6 Fix compiling with --disable-vv.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26455
diff changeset
1141 #endif
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1142 }
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1143