pidgin/gtkmedia.c

Wed, 21 Sep 2011 06:45:26 +0000

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Wed, 21 Sep 2011 06:45:26 +0000
changeset 32575
eb4fc932fae9
parent 31966
82265c009a63
child 32055
b1715ca1b7d8
child 32433
f539a2c083b2
child 32695
f86582a6bc5b
child 32900
9985c4a0e27b
permissions
-rw-r--r--

Apply conversation theme when opening the GTK conversation. All the
parsing stuff was moved out of the theme code and into the conversation
code.

Someone (not me!) needs to check the code I commented out and see if
we really need that stuff (and then port it to WebKit/styling).

We also need to determine where to place Template.html and the rest
of our (not-yet-written) default theme.

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

mercurial