pidgin/gtkmedia.c

Mon, 08 Jun 2009 02:24:49 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Mon, 08 Jun 2009 02:24:49 +0000
changeset 27314
402d25ce01da
parent 26746
2a2d45ac9774
child 27915
63a66ba36891
child 27972
54d25d73c6c8
permissions
-rw-r--r--

Use the JID for adding a chat/buddy because the name is for descriptive
purpose only, and using it will not fill in the Add Chat dialog correctly.
Because the JID is not visible, the user will not know what to actually put
there instead.

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

mercurial