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