annotate pidgin/gtkmedia.c @ 29499:94f85ba7e5a9

This effectively moves Etan's API addition off im.pidgin.pidgin and onto im.pidgin.pidgin.next.minor so we don't force a 2.7.0 too soon. *** Plucked rev f7d26d95395d5013710b12cfdfcf131aa1033e0c (deryni@pidgin.im): Add a purple_account_get_name_for_display function (I'm not a huge fan of that name but didn't want to use get_display_name as that means something else for connections). This wants to be used in places where we need to display an identifier for the account to the user and honor the appropriate aliases/etc. Refs #8391
author John Bailey <rekkanoryo@rekkanoryo.org>
date Wed, 16 Sep 2009 15:44:26 +0000
parents 8c991e09efcb
children 7a66b8d66456
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file media.c Account API
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 * @ingroup core
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
4 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 * Pidgin
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * Pidgin is the legal property of its developers, whose names are too numerous
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * source distribution.
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * (at your option) any later version.
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * GNU General Public License for more details.
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 *
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24 */
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26 #include <string.h>
25678
1fb16d784ccb Listen to the media pipeline and display errors.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25674
diff changeset
27 #include "debug.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "internal.h"
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "connection.h"
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "media.h"
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
31 #include "mediamanager.h"
25686
3bf9748fdef0 Preliminary video embedded in the conversation window. It's still kind of buggy.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25679
diff changeset
32 #include "pidgin.h"
26149
a6e53d23bcbb Use request API for a media invitation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26148
diff changeset
33 #include "request.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
35 #include "gtkmedia.h"
26174
cc96a5ec4782 Add a basic menu to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26165
diff changeset
36 #include "gtkutils.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
37
25654
cbe97caec684 Use USE_VV instead of USE_FARSIGHT.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25651
diff changeset
38 #ifdef USE_VV
26506
beb22a90bf5d Gstreamer shouldn't be a requirement if USE_VV isn't defined.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 26497
diff changeset
39 #include "media-gst.h"
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81 struct _PidginMediaPrivate
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
82 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
94 GtkWidget *send_progress;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108 };
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
109
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
110 #define PIDGIN_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_MEDIA, PidginMediaPrivate))
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 static void pidgin_media_class_init (PidginMediaClass *klass);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
115 static void pidgin_media_finalize (GObject *object);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116 static void pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
120 static GtkWindowClass *parent_class = NULL;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
121
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
123 #if 0
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
124 enum {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
125 LAST_SIGNAL
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126 };
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
130 enum {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
131 PROP_0,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
134 };
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
135
26456
aa85cf759b98 Silence warning.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26455
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
138 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
139 static GType type = 0;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
140
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
141 if (type == 0) {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
142 static const GTypeInfo info = {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
143 sizeof(PidginMediaClass),
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
144 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
145 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
146 (GClassInitFunc) pidgin_media_class_init,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
147 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
148 NULL,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
149 sizeof(PidginMedia),
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
155 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
156 return type;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
157 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
158
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
159
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
160 static void
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
161 pidgin_media_class_init (PidginMediaClass *klass)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
162 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
163 GObjectClass *gobject_class = (GObjectClass*)klass;
25679
54adcf17d271 Silence warning.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25678
diff changeset
164 /* GtkContainerClass *container_class = (GtkContainerClass*)klass; */
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168 gobject_class->finalize = pidgin_media_finalize;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
169 gobject_class->set_property = pidgin_media_set_property;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
170 gobject_class->get_property = pidgin_media_get_property;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
171
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
172 g_object_class_install_property(gobject_class, PROP_MEDIA,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
173 g_param_spec_object("media",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
174 "PurpleMedia",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
175 "The PurpleMedia associated with this media.",
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
176 PURPLE_TYPE_MEDIA,
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
184
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
185 g_type_class_add_private(klass, sizeof(PidginMediaPrivate));
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
186 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
303 pidgin_media_init (PidginMedia *media)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
304 {
26492
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
305 GtkWidget *vbox;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
335 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
347 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
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;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
502
28207
5a277e6625fc This string should have been marked for translation :-(
Mark Doliner <mark@kingant.net>
parents: 28206
diff changeset
503 purple_request_accept_cancel(gtkmedia, _("Incoming Call"),
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
504 message, NULL, PURPLE_DEFAULT_ACTION_NONE,
26606
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26596
diff changeset
505 (void*)account, gtkmedia->priv->screenname, NULL,
26464
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
506 gtkmedia->priv->media,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
507 pidgin_media_accept_cb,
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
508 pidgin_media_reject_cb);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
509 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
510 g_free(message);
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
511 return FALSE;
f42892982e30 Display which type of media session is being requested.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26462
diff changeset
512 }
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 static void
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
515 #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
516 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
517 PurpleMedia *media)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
518 {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
519 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
520 #else
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
521 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
522 {
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
523 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
524 #endif
28191
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28176
diff changeset
525 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
526 }
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 static void
26596
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
529 #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
530 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
531 PurpleMedia *media)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
532 {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
533 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
534 #else
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
535 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
536 {
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
537 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
538 #endif
28191
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28176
diff changeset
539 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
540 }
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 static GtkWidget *
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
543 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
544 PurpleMediaSessionType type)
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
545 {
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
546 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
547 double value;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
548
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
549 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
550 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
551 "/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
552 } 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
553 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
554 "/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
555 } else
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
556 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
557
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
558 #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
559 /* Setup widget structure */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
560 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
561 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
562 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
563 progress_parent, TRUE, TRUE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
564
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
565 /* Volume button */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
566 volume = gtk_volume_button_new();
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
567 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
568 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
569 volume, FALSE, FALSE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
570 #else
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
571 /* Setup widget structure */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
572 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
573 progress_parent = volume_widget;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
574
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
575 /* Volume slider */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
576 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
577 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
578 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
579 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
580 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
581 volume, TRUE, FALSE, 0);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
582 #endif
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
583
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
584 /* Volume level indicator */
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
585 progress = gtk_progress_bar_new();
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
586 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
587 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
588
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
589 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
590 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
591 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
592 gtkmedia->priv->media);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
593 gtkmedia->priv->send_progress = progress;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
594 } 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
595 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
596 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
597 gtkmedia->priv->media);
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
598 gtkmedia->priv->recv_progress = progress;
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
599 }
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 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
602
9cb62ecb4715 Use GtkVolumeButtons for audio if it's available.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26516
diff changeset
603 return volume_widget;
26490
ee0282fe3673 Move volume levels for media to the media window.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26487
diff changeset
604 }
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 static void
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
607 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia, const gchar *sid)
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
608 {
28199
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
609 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
610 PurpleMediaSessionType type =
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
611 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
612
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
613 if (gtkmedia->priv->recv_widget == NULL
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
614 && type & (PURPLE_MEDIA_RECV_VIDEO |
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
615 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
616 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
617 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
618 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
619 gtk_widget_show(recv_widget);
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
620 } else
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
621 recv_widget = gtkmedia->priv->recv_widget;
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
622 if (gtkmedia->priv->send_widget == NULL
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
623 && type & (PURPLE_MEDIA_SEND_VIDEO |
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
624 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
625 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
626 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
627 send_widget, TRUE, TRUE, 0);
28199
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
628 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
629 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
630 FALSE, FALSE, 0);
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
631 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
632 gtk_widget_show(send_widget);
28199
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
633 } else {
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
634 send_widget = gtkmedia->priv->send_widget;
28199
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
635 button_widget = gtkmedia->priv->button_widget;
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
636 }
25688
9c6915254610 Move the audio progress bar widgets to be beside the video displays.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25687
diff changeset
637
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
638 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
639 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
640 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
641 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
642 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
643
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 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
645 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
646 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
647
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
648 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
649 data->gtkmedia = gtkmedia;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
650 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
651 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
652
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
653 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
654 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
655 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
656 G_CALLBACK(realize_cb), data);
26516
30c870ee4ec9 Remove old GtkPlug and GtkSocket code.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26506
diff changeset
657 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
658 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
659 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
660 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
661
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
662 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
663 }
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
664 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
665 PidginMediaRealizeData *data;
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
666 GtkWidget *aspect;
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
667 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
668 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
669
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
670 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
671 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
672 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
673
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
674 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
675 data->gtkmedia = gtkmedia;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
676 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
677 data->participant = NULL;
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
678
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
679 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
680 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
681 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
682 G_CALLBACK(realize_cb), data);
26516
30c870ee4ec9 Remove old GtkPlug and GtkSocket code.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26506
diff changeset
683 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
684 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
685
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
686 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
687 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
688
28199
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
689 gtkmedia->priv->pause =
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
690 gtk_toggle_button_new_with_mnemonic(_("_Pause"));
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
691 g_signal_connect(gtkmedia->priv->pause, "toggled",
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
692 G_CALLBACK(pidgin_media_pause_toggled),
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
693 gtkmedia);
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
694 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
695 FALSE, FALSE, 0);
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
696 gtk_widget_show(gtkmedia->priv->pause);
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
697
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
698 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
699 }
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
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
701 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
702 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
703 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
704 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
705 }
26146
4f013819e4e3 Create the media srcs inside PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26145
diff changeset
706 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
707 gtkmedia->priv->mute =
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
708 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
709 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
710 G_CALLBACK(pidgin_media_mute_toggled),
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
711 gtkmedia);
28199
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
712 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
713 FALSE, FALSE, 0);
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
714 gtk_widget_show(gtkmedia->priv->mute);
343ca84d5997 Improve the padding around the mute button.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26491
diff changeset
715
25725
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
716 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
717 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
718 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
719 }
64080c01ee50 Decouple stream direction. Allows send only or recv only streams.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25720
diff changeset
720
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
721
28191
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28176
diff changeset
722 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
723 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
724 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
725 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
726 gtkmedia);
26135
c334a9e17426 Wait to create the sinks until the frames are ready.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26131
diff changeset
727 }
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
728
26116
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
729 if (send_widget != NULL)
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
730 gtkmedia->priv->send_widget = send_widget;
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
731 if (recv_widget != NULL)
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
732 gtkmedia->priv->recv_widget = recv_widget;
28199
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
733 if (button_widget != NULL)
c1687897825f Add pause capability for local video.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28192
diff changeset
734 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
735
26466
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
736 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
737 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
738 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
739 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
740 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
741 (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
742 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
743 }
26160
27b553a07800 Make the sinks better default sizes and display them immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26159
diff changeset
744
27b553a07800 Make the sinks better default sizes and display them immediately.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26159
diff changeset
745 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
746 }
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 static void
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
749 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
750 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
751 {
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
752 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
753 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
754 if (sid == NULL && name == NULL) {
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
755 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
756 pidgin_media_emit_message(gtkmedia,
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
757 _("The call has been terminated."));
2809a63dbadf Convert PidginMedia to use the state-changed signal.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26108
diff changeset
758 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
759 }
26411
86bc2d34f689 Rename state-changed enum and values.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26406
diff changeset
760 } 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
761 sid != NULL && name != NULL) {
3b82059e4069 Replace the ready signal in PidginMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26115
diff changeset
762 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
763 }
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
764 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
765
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
766 static void
26406
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
767 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
768 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
769 PidginMedia *gtkmedia)
26406
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
770 {
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
771 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
772 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
773 _("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
774 } else if (type == PURPLE_MEDIA_INFO_ACCEPT) {
584fa66dfb31 Remove the "accepted" signal from PurpleMedia as it was redundant.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28045
diff changeset
775 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
776 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
777 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
778 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
779 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
780 }
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
781 }
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
782
065d865e7dd1 Use stream-info for reject instead of state-changed.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26401
diff changeset
783 static void
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
784 pidgin_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
785 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
786 PidginMedia *media;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
787 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
788
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
789 media = PIDGIN_MEDIA(object);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
790 switch (prop_id) {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
791 case PROP_MEDIA:
26115
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
792 {
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
793 if (media->priv->media)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
794 g_object_unref(media->priv->media);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
795 media->priv->media = g_value_get_object(value);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
796 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
797
26466
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
798 if (purple_media_is_initiator(media->priv->media,
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
799 NULL, NULL) == TRUE)
26115
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
800 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
801 else
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
802 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
803
26058
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
804 g_signal_connect(G_OBJECT(media->priv->media), "error",
0ad1b8e950d7 Add purple_media_error.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26053
diff changeset
805 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
806 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
807 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
808 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
809 G_CALLBACK(pidgin_media_stream_info_cb), media);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
810 break;
26115
366f68124622 Convert more PidginMedia signals to the newer API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
811 }
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
812 case PROP_SCREENNAME:
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
813 if (media->priv->screenname)
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
814 g_free(media->priv->screenname);
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
815 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
816 break;
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
817 default:
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
818 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
819 break;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
820 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
821 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
822
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
823 static void
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
824 pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
825 {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
826 PidginMedia *media;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
827 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
828
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
829 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
830
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
831 switch (prop_id) {
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
832 case PROP_MEDIA:
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
833 g_value_set_object(value, media->priv->media);
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
834 break;
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
835 case PROP_SCREENNAME:
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
836 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
837 break;
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
838 default:
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
839 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
840 break;
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
841 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
842 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
843
26446
e114ed3c8cfe No reason for this to be public API.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26440
diff changeset
844 static GtkWidget *
26060
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
845 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
846 {
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
847 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
848 "media", media,
0829a08038c6 Remove the screenname attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26058
diff changeset
849 "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
850 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
851 }
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
852
25643
befeece4dd48 Change a few things:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25637
diff changeset
853 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
854 pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state)
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
855 {
25637
92e71f6e10d4 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25634
diff changeset
856 gtkmedia->priv->state = state;
25550
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
857 }
8067ba21fdd0 Missing files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
858
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
859 static gboolean
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
860 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
861 PurpleAccount *account, gchar *screenname, gpointer nul)
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
862 {
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
863 PidginMedia *gtkmedia = PIDGIN_MEDIA(
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
864 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
865 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
866 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
867 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
868 gtk_window_set_title(GTK_WINDOW(gtkmedia), alias);
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
869
26466
bea334b214fa Add purple_media_is_initiator.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26464
diff changeset
870 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
871 gtk_widget_show(GTK_WIDGET(gtkmedia));
a6e53d23bcbb Use request API for a media invitation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26148
diff changeset
872
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
873 return TRUE;
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
874 }
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
875
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
876 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
877 create_default_video_src(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
878 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
879 {
26424
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
880 GstElement *sendbin, *src, *videoscale, *capsfilter;
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
881 GstPad *pad;
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
882 GstPad *ghost;
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
883 GstCaps *caps;
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
884
28231
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
885 #ifdef _WIN32
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
886 /* autovideosrc doesn't pick ksvideosrc for some reason */
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
887 src = gst_element_factory_make("ksvideosrc", NULL);
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
888 if (src == NULL)
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
889 src = gst_element_factory_make("dshowvideosrc", NULL);
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
890 if (src == NULL)
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
891 src = gst_element_factory_make("autovideosrc", NULL);
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
892 #else
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
893 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
894 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
895 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
896 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
897 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
898 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
899 src = gst_element_factory_make("v4lsrc", NULL);
28231
2333ab5777eb Handle sources for Windows better.
maiku@pidgin.im
parents: 28207
diff changeset
900 #endif
26495
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 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
903 "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
904 return NULL;
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
905 }
26424
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
906
26459
452be048bded Unique elements ought to be named the same as their id.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26457
diff changeset
907 sendbin = gst_bin_new("pidgindefaultvideosrc");
26424
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
908 videoscale = gst_element_factory_make("videoscale", NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
909 capsfilter = gst_element_factory_make("capsfilter", NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
910
26439
c3ea7e628e58 Extend the range for video dimensions just a hair.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26433
diff changeset
911 /* 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
912 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
913 "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
914 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
915
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
916 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
917 videoscale, capsfilter, NULL);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
918 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
919
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
920 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
921 ghost = gst_ghost_pad_new("ghostsrc", pad);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
922 gst_object_unref(pad);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
923 gst_element_add_pad(sendbin, ghost);
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
924
0c96ac2ea5f8 Remove purple_media_video_init_* functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26419
diff changeset
925 return sendbin;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
926 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
927
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
928 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
929 create_default_video_sink(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
930 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
931 {
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
932 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
933 if (sink == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
934 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
935 if (sink == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
936 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
937 "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
938 return sink;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
939 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
940
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
941 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
942 create_default_audio_src(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
943 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
944 {
28191
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28176
diff changeset
945 GstElement *src;
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
946 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
947 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
948 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
949 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
950 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
951 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
952 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
953 if (src == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
954 src = gst_element_factory_make("dshowaudiosrc", NULL);
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
955 if (src == NULL) {
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
956 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
957 "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
958 return NULL;
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
959 }
28191
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28176
diff changeset
960 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
961 return src;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
962 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
963
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
964 static GstElement *
26474
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
965 create_default_audio_sink(PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26473
diff changeset
966 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
967 {
28191
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28176
diff changeset
968 GstElement *sink;
26495
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
969 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
970 if (sink == NULL)
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
971 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
972 if (sink == NULL) {
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
973 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
974 "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
975 return NULL;
a198f064a42c Use better choices for default elements and have fallbacks.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26492
diff changeset
976 }
28191
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 28176
diff changeset
977 return sink;
26165
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26164
diff changeset
978 }
26457
0ee10b3e8ee6 Fix compiling with --disable-vv.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26455
diff changeset
979 #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
980
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
981 void
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
982 pidgin_medias_init(void)
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
983 {
26457
0ee10b3e8ee6 Fix compiling with --disable-vv.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26455
diff changeset
984 #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
985 PurpleMediaManager *manager = purple_media_manager_get();
26484
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
986 PurpleMediaElementInfo *default_video_src =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
987 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
988 "id", "pidgindefaultvideosrc",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
989 "name", "Pidgin Default Video Source",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
990 "type", PURPLE_MEDIA_ELEMENT_VIDEO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
991 | PURPLE_MEDIA_ELEMENT_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
992 | PURPLE_MEDIA_ELEMENT_ONE_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
993 | PURPLE_MEDIA_ELEMENT_UNIQUE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
994 "create-cb", create_default_video_src, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
995 PurpleMediaElementInfo *default_video_sink =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
996 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
997 "id", "pidgindefaultvideosink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
998 "name", "Pidgin Default Video Sink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
999 "type", PURPLE_MEDIA_ELEMENT_VIDEO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1000 | PURPLE_MEDIA_ELEMENT_SINK
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1001 | PURPLE_MEDIA_ELEMENT_ONE_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1002 "create-cb", create_default_video_sink, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1003 PurpleMediaElementInfo *default_audio_src =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1004 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1005 "id", "pidgindefaultaudiosrc",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1006 "name", "Pidgin Default Audio Source",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1007 "type", PURPLE_MEDIA_ELEMENT_AUDIO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1008 | PURPLE_MEDIA_ELEMENT_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1009 | PURPLE_MEDIA_ELEMENT_ONE_SRC
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1010 | PURPLE_MEDIA_ELEMENT_UNIQUE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1011 "create-cb", create_default_audio_src, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1012 PurpleMediaElementInfo *default_audio_sink =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1013 g_object_new(PURPLE_TYPE_MEDIA_ELEMENT_INFO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1014 "id", "pidgindefaultaudiosink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1015 "name", "Pidgin Default Audio Sink",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1016 "type", PURPLE_MEDIA_ELEMENT_AUDIO
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1017 | PURPLE_MEDIA_ELEMENT_SINK
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1018 | PURPLE_MEDIA_ELEMENT_ONE_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1019 "create-cb", create_default_audio_sink, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26475
diff changeset
1020
26163
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26161
diff changeset
1021 g_signal_connect(G_OBJECT(manager), "init-media",
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1022 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
1023
26473
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1024 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
1025 PURPLE_MEDIA_CAPS_AUDIO |
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1026 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
1027 PURPLE_MEDIA_CAPS_VIDEO |
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1028 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
1029 PURPLE_MEDIA_CAPS_AUDIO_VIDEO);
24feaf9cfbf1 Declare which media caps Pidgin and Finch handle.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26466
diff changeset
1030
26163
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26161
diff changeset
1031 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
1032 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
1033 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
1034 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
1035 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
1036 #endif
26145
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1037 }
685c8f5f85c7 Separate PidginMedia from PidginConversation.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26143
diff changeset
1038