diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-08-05 18:06:53 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-08-05 18:06:53 +0800 |
commit | d4397c1120f65ce0f4051156c255857d08b1b4ae (patch) | |
tree | 5aa19f107ddd1be34fcaebe33c067610b1cd3b7c /src | |
parent | 493056ec895710376ee79e403e6c17ea93029e4a (diff) | |
parent | 6d744e08f1cc7169b79fedade4681d5c67fadcd4 (diff) | |
download | gsoc2013-empathy-d4397c1120f65ce0f4051156c255857d08b1b4ae.tar gsoc2013-empathy-d4397c1120f65ce0f4051156c255857d08b1b4ae.tar.gz gsoc2013-empathy-d4397c1120f65ce0f4051156c255857d08b1b4ae.tar.bz2 gsoc2013-empathy-d4397c1120f65ce0f4051156c255857d08b1b4ae.tar.lz gsoc2013-empathy-d4397c1120f65ce0f4051156c255857d08b1b4ae.tar.xz gsoc2013-empathy-d4397c1120f65ce0f4051156c255857d08b1b4ae.tar.zst gsoc2013-empathy-d4397c1120f65ce0f4051156c255857d08b1b4ae.zip |
Merge branch 'av-candidate-624344'
Diffstat (limited to 'src')
-rw-r--r-- | src/empathy-call-window.c | 120 | ||||
-rw-r--r-- | src/empathy-call-window.ui | 321 |
2 files changed, 433 insertions, 8 deletions
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c index ffdcb5c71..d64d59302 100644 --- a/src/empathy-call-window.c +++ b/src/empathy-call-window.c @@ -174,6 +174,15 @@ struct _EmpathyCallWindowPriv GtkWidget *vcodec_decoding_label; GtkWidget *acodec_decoding_label; + GtkWidget *audio_remote_candidate_label; + GtkWidget *audio_local_candidate_label; + GtkWidget *video_remote_candidate_label; + GtkWidget *video_local_candidate_label; + GtkWidget *video_remote_candidate_info_img; + GtkWidget *video_local_candidate_info_img; + GtkWidget *audio_remote_candidate_info_img; + GtkWidget *audio_local_candidate_info_img; + GstElement *video_input; GstElement *audio_input; GstElement *audio_output; @@ -1051,6 +1060,14 @@ empathy_call_window_init (EmpathyCallWindow *self) "acodec_encoding_label", &priv->acodec_encoding_label, "acodec_decoding_label", &priv->acodec_decoding_label, "vcodec_decoding_label", &priv->vcodec_decoding_label, + "audio_remote_candidate_label", &priv->audio_remote_candidate_label, + "audio_local_candidate_label", &priv->audio_local_candidate_label, + "video_remote_candidate_label", &priv->video_remote_candidate_label, + "video_local_candidate_label", &priv->video_local_candidate_label, + "video_remote_candidate_info_img", &priv->video_remote_candidate_info_img, + "video_local_candidate_info_img", &priv->video_local_candidate_info_img, + "audio_remote_candidate_info_img", &priv->audio_remote_candidate_info_img, + "audio_local_candidate_info_img", &priv->audio_local_candidate_info_img, NULL); g_free (filename); @@ -1450,6 +1467,106 @@ recv_video_codecs_notify_cb (GObject *object, update_recv_codec (self, FALSE); } +static const gchar * +candidate_type_to_str (FsCandidate *candidate) +{ + switch (candidate->type) + { + case FS_CANDIDATE_TYPE_HOST: + return "host"; + case FS_CANDIDATE_TYPE_SRFLX: + return "server reflexive"; + case FS_CANDIDATE_TYPE_PRFLX: + return "peer reflexive"; + case FS_CANDIDATE_TYPE_RELAY: + return "relay"; + case FS_CANDIDATE_TYPE_MULTICAST: + return "multicast"; + } + + return NULL; +} + +static const gchar * +candidate_type_to_desc (FsCandidate *candidate) +{ + switch (candidate->type) + { + case FS_CANDIDATE_TYPE_HOST: + return _("The IP address as seen by the machine"); + case FS_CANDIDATE_TYPE_SRFLX: + return _("The IP address as seen by a server on the Internet"); + case FS_CANDIDATE_TYPE_PRFLX: + return _("The IP address of the peer as seen by the other side"); + case FS_CANDIDATE_TYPE_RELAY: + return _("The IP address of a relay server"); + case FS_CANDIDATE_TYPE_MULTICAST: + return _("The IP address of the multicast group"); + } + + return NULL; +} + +static void +update_candidat_widget (EmpathyCallWindow *self, + GtkWidget *label, + GtkWidget *img, + FsCandidate *candidate) +{ + gchar *str; + + g_assert (candidate != NULL); + str = g_strdup_printf ("%s %u (%s)", candidate->ip, + candidate->port, candidate_type_to_str (candidate)); + + gtk_label_set_text (GTK_LABEL (label), str); + gtk_widget_set_tooltip_text (img, candidate_type_to_desc (candidate)); + + g_free (str); +} + +static void +candidates_changed_cb (GObject *object, + FsMediaType type, + EmpathyCallWindow *self) +{ + EmpathyCallWindowPriv *priv = GET_PRIV (self); + FsCandidate *candidate = NULL; + + if (type == FS_MEDIA_TYPE_VIDEO) + { + /* Update remote candidate */ + candidate = empathy_call_handler_get_video_remote_candidate ( + priv->handler); + + update_candidat_widget (self, priv->video_remote_candidate_label, + priv->video_remote_candidate_info_img, candidate); + + /* Update local candidate */ + candidate = empathy_call_handler_get_video_local_candidate ( + priv->handler); + + update_candidat_widget (self, priv->video_local_candidate_label, + priv->video_local_candidate_info_img, candidate); + } + else + { + /* Update remote candidate */ + candidate = empathy_call_handler_get_audio_remote_candidate ( + priv->handler); + + update_candidat_widget (self, priv->audio_remote_candidate_label, + priv->audio_remote_candidate_info_img, candidate); + + /* Update local candidate */ + candidate = empathy_call_handler_get_audio_local_candidate ( + priv->handler); + + update_candidat_widget (self, priv->audio_local_candidate_label, + priv->audio_local_candidate_info_img, candidate); + } +} + static void empathy_call_window_constructed (GObject *object) { @@ -1488,6 +1605,9 @@ empathy_call_window_constructed (GObject *object) G_CALLBACK (recv_audio_codecs_notify_cb), self, 0); tp_g_signal_connect_object (priv->handler, "notify::recv-video-codecs", G_CALLBACK (recv_video_codecs_notify_cb), self, 0); + + tp_g_signal_connect_object (priv->handler, "candidates-changed", + G_CALLBACK (candidates_changed_cb), self, 0); } static void empathy_call_window_dispose (GObject *object); diff --git a/src/empathy-call-window.ui b/src/empathy-call-window.ui index 781de76d9..5ad7399b9 100644 --- a/src/empathy-call-window.ui +++ b/src/empathy-call-window.ui @@ -348,7 +348,7 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> @@ -358,7 +358,7 @@ <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="x_options">expand|shrink|fill</property> + <property name="x_options">fill</property> <property name="y_options"/> </packing> </child> @@ -409,7 +409,7 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> @@ -419,11 +419,164 @@ <property name="right_attach">2</property> <property name="top_attach">2</property> <property name="bottom_attach">3</property> - <property name="x_options">expand|shrink|fill</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkLabel" id="vrc_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Remote Candidate:</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="style" value="PANGO_STYLE_ITALIC"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkLabel" id="video_remote_candidate_label"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Unknown</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">True</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> <property name="y_options"/> </packing> </child> + <child> + <object class="GtkImage" id="video_remote_candidate_info_img"> + <property name="visible">True</property> + <property name="stock">gtk-info</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + + <child> + <object class="GtkLabel" id="vlc_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Local Candidate:</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="style" value="PANGO_STYLE_ITALIC"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkLabel" id="video_local_candidate_label"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Unknown</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">True</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkImage" id="video_local_candidate_info_img"> + <property name="visible">True</property> + <property name="stock">gtk-info</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">4</property> + <property name="bottom_attach">5</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + </object> </child> </object> @@ -542,7 +695,7 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> @@ -552,7 +705,7 @@ <property name="right_attach">2</property> <property name="top_attach">0</property> <property name="bottom_attach">1</property> - <property name="x_options">expand|shrink|fill</property> + <property name="x_options">fill</property> <property name="y_options"/> </packing> </child> @@ -602,7 +755,7 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> @@ -612,11 +765,163 @@ <property name="right_attach">2</property> <property name="top_attach">1</property> <property name="bottom_attach">2</property> - <property name="x_options">expand|shrink|fill</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkLabel" id="arc_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Remote Candidate:</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="style" value="PANGO_STYLE_ITALIC"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkLabel" id="audio_remote_candidate_label"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Unknown</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">True</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> <property name="y_options"/> </packing> </child> + <child> + <object class="GtkImage" id="audio_remote_candidate_info_img"> + <property name="visible">True</property> + <property name="stock">gtk-info</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">2</property> + <property name="bottom_attach">3</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkLabel" id="alc_label"> + <property name="visible">True</property> + <property name="label" translatable="yes">Local Candidate:</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + <attributes> + <attribute name="style" value="PANGO_STYLE_ITALIC"/> + </attributes> + </object> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkLabel" id="audio_local_candidate_label"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Unknown</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">True</property> + <property name="xalign">0</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> + <property name="width_chars">-1</property> + <property name="single_line_mode">False</property> + <property name="angle">0</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + + <child> + <object class="GtkImage" id="audio_local_candidate_info_img"> + <property name="visible">True</property> + <property name="stock">gtk-info</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">2</property> + <property name="right_attach">3</property> + <property name="top_attach">3</property> + <property name="bottom_attach">4</property> + <property name="x_options">fill</property> + <property name="y_options"/> + </packing> + </child> + </object> </child> </object> |