Mon, 08 Jun 2009 02:24:49 +0000
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 | 1 | /** |
| 2 | * @file media.c Account API | |
| 3 | * @ingroup core | |
| 4 | * | |
| 5 | * Pidgin | |
| 6 | * | |
| 7 | * Pidgin is the legal property of its developers, whose names are too numerous | |
| 8 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 9 | * source distribution. | |
| 10 | * | |
| 11 | * This program is free software; you can redistribute it and/or modify | |
| 12 | * it under the terms of the GNU General Public License as published by | |
| 13 | * the Free Software Foundation; either version 2 of the License, or | |
| 14 | * (at your option) any later version. | |
| 15 | * | |
| 16 | * This program is distributed in the hope that it will be useful, | |
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 | * GNU General Public License for more details. | |
| 20 | * | |
| 21 | * You should have received a copy of the GNU General Public License | |
| 22 | * along with this program; if not, write to the Free Software | |
| 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 24 | */ | |
| 25 | ||
| 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 | 28 | #include "internal.h" |
| 29 | #include "connection.h" | |
| 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 | 34 | |
| 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 | 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 | 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 | 77 | struct _PidginMediaPrivate |
| 78 | { | |
| 79 | PurpleMedia *media; | |
|
26184
db732f8c4d29
Remove the screenname attribute from PurpleMedia.
Michael Ruprecht <maiku@pidgin.im>
parents:
26182
diff
changeset
|
80 | gchar *screenname; |
| 19886 | 81 | GstElement *send_level; |
| 82 | GstElement *recv_level; | |
| 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 | 90 | GtkWidget *send_progress; |
| 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 | 103 | }; |
| 104 | ||
| 105 | #define PIDGIN_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_MEDIA, PidginMediaPrivate)) | |
| 106 | ||
| 107 | static void pidgin_media_class_init (PidginMediaClass *klass); | |
| 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 | 110 | static void pidgin_media_finalize (GObject *object); |
| 111 | static void pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); | |
| 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 | 114 | |
|
26269
cacc598079e4
Separate PidginMedia from PidginConversation.
Michael Ruprecht <maiku@pidgin.im>
parents:
26267
diff
changeset
|
115 | static GtkWindowClass *parent_class = NULL; |
| 19886 | 116 | |
| 117 | ||
|
26269
cacc598079e4
Separate PidginMedia from PidginConversation.
Michael Ruprecht <maiku@pidgin.im>
parents:
26267
diff
changeset
|
118 | #if 0 |
| 19886 | 119 | enum { |
| 120 | LAST_SIGNAL | |
| 121 | }; | |
| 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 | 124 | |
| 125 | enum { | |
| 126 | PROP_0, | |
| 127 | PROP_MEDIA, | |
|
26184
db732f8c4d29
Remove the screenname attribute from PurpleMedia.
Michael Ruprecht <maiku@pidgin.im>
parents:
26182
diff
changeset
|
128 | PROP_SCREENNAME, |
| 19886 | 129 | PROP_SEND_LEVEL, |
| 130 | PROP_RECV_LEVEL | |
| 131 | }; | |
| 132 | ||
| 26509 | 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 | 135 | { |
| 136 | static GType type = 0; | |
| 137 | ||
| 138 | if (type == 0) { | |
| 139 | static const GTypeInfo info = { | |
| 140 | sizeof(PidginMediaClass), | |
| 141 | NULL, | |
| 142 | NULL, | |
| 143 | (GClassInitFunc) pidgin_media_class_init, | |
| 144 | NULL, | |
| 145 | NULL, | |
| 146 | sizeof(PidginMedia), | |
| 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 | 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 | 152 | } |
| 153 | return type; | |
| 154 | } | |
| 155 | ||
| 156 | ||
| 157 | static void | |
| 158 | pidgin_media_class_init (PidginMediaClass *klass) | |
| 159 | { | |
| 160 | GObjectClass *gobject_class = (GObjectClass*)klass; | |
| 23729 | 161 | /* GtkContainerClass *container_class = (GtkContainerClass*)klass; */ |
| 19886 | 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 | 165 | gobject_class->finalize = pidgin_media_finalize; |
| 166 | gobject_class->set_property = pidgin_media_set_property; | |
| 167 | gobject_class->get_property = pidgin_media_get_property; | |
| 168 | ||
| 169 | g_object_class_install_property(gobject_class, PROP_MEDIA, | |
| 170 | g_param_spec_object("media", | |
| 171 | "PurpleMedia", | |
| 172 | "The PurpleMedia associated with this media.", | |
| 173 | PURPLE_TYPE_MEDIA, | |
| 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 | 181 | g_object_class_install_property(gobject_class, PROP_SEND_LEVEL, |
| 182 | g_param_spec_object("send-level", | |
| 183 | "Send level", | |
| 184 | "The GstElement of this media's send 'level'", | |
| 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 | 187 | g_object_class_install_property(gobject_class, PROP_RECV_LEVEL, |
| 188 | g_param_spec_object("recv-level", | |
| 189 | "Receive level", | |
| 190 | "The GstElement of this media's recv 'level'", | |
| 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 | 193 | |
| 194 | g_type_class_add_private(klass, sizeof(PidginMediaPrivate)); | |
| 195 | } | |
| 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 | 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 | 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 | 301 | pidgin_media_init (PidginMedia *media) |
| 302 | { | |
|
26624
d8be4ebac4f0
Improve the padding around the mute button.
Michael Ruprecht <maiku@pidgin.im>
parents:
26623
diff
changeset
|
303 | GtkWidget *vbox; |
| 19886 | 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 | 331 | } |
| 332 | ||
| 333 | static gboolean | |
| 334 | level_message_cb(GstBus *bus, GstMessage *message, PidginMedia *gtkmedia) | |
| 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 | 338 | const GValue *list; |
| 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 | 343 | |
| 344 | if (message->type != GST_MESSAGE_ELEMENT) | |
| 345 | return TRUE; | |
| 346 | ||
| 26439 | 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 | 349 | return TRUE; |
| 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 | 360 | |
| 361 | /* Only bother with the first channel. */ | |
| 362 | value = gst_value_list_get_value(list, 0); | |
| 363 | rms_db = g_value_get_double(value); | |
| 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 | 371 | return TRUE; |
| 372 | } | |
| 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 | 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 | 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 | 749 | gtkmedia->priv->send_level = gst_bin_get_by_name( |
| 750 | GST_BIN(media_src), "sendlevel"); | |
| 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 | 800 | purple_media_get_session_type(media, sid) & |
| 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 | 819 | } |
| 820 | ||
| 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 | 833 | pidgin_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) |
| 834 | { | |
| 835 | PidginMedia *media; | |
| 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 | 838 | media = PIDGIN_MEDIA(object); |
| 839 | switch (prop_id) { | |
| 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 | 842 | if (media->priv->media) |
| 843 | g_object_unref(media->priv->media); | |
| 844 | media->priv->media = g_value_get_object(value); | |
| 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 | 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 | 868 | case PROP_SEND_LEVEL: |
| 869 | if (media->priv->send_level) | |
| 870 | gst_object_unref(media->priv->send_level); | |
| 871 | media->priv->send_level = g_value_get_object(value); | |
| 872 | g_object_ref(media->priv->send_level); | |
| 873 | break; | |
| 874 | case PROP_RECV_LEVEL: | |
| 875 | if (media->priv->recv_level) | |
| 876 | gst_object_unref(media->priv->recv_level); | |
| 877 | media->priv->recv_level = g_value_get_object(value); | |
| 878 | g_object_ref(media->priv->recv_level); | |
| 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 | 881 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
| 882 | break; | |
| 883 | } | |
| 884 | } | |
| 885 | ||
| 886 | static void | |
| 887 | pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) | |
| 888 | { | |
| 889 | PidginMedia *media; | |
| 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 | 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 | 894 | switch (prop_id) { |
| 895 | case PROP_MEDIA: | |
| 896 | g_value_set_object(value, media->priv->media); | |
| 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 | 901 | case PROP_SEND_LEVEL: |
| 902 | g_value_set_object(value, media->priv->send_level); | |
| 903 | break; | |
| 904 | case PROP_RECV_LEVEL: | |
| 905 | g_value_set_object(value, media->priv->recv_level); | |
| 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 | 909 | break; |
| 910 | } | |
| 911 | } | |
| 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 | 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 | 926 | } |
| 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 |