diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-08-03 23:00:49 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2010-08-05 17:08:22 +0800 |
commit | c2aacd4f46a4fbb449f78809a88aff08d3084974 (patch) | |
tree | a7c03f072aa19d6df6c8869498cbda262857cec6 | |
parent | 81e35b4237433cf031004aa840e94d5f03c1b2f8 (diff) | |
download | gsoc2013-empathy-c2aacd4f46a4fbb449f78809a88aff08d3084974.tar gsoc2013-empathy-c2aacd4f46a4fbb449f78809a88aff08d3084974.tar.gz gsoc2013-empathy-c2aacd4f46a4fbb449f78809a88aff08d3084974.tar.bz2 gsoc2013-empathy-c2aacd4f46a4fbb449f78809a88aff08d3084974.tar.lz gsoc2013-empathy-c2aacd4f46a4fbb449f78809a88aff08d3084974.tar.xz gsoc2013-empathy-c2aacd4f46a4fbb449f78809a88aff08d3084974.tar.zst gsoc2013-empathy-c2aacd4f46a4fbb449f78809a88aff08d3084974.zip |
call-window: display candidates info (#599166)
-rw-r--r-- | src/empathy-call-window.c | 129 | ||||
-rw-r--r-- | src/empathy-call-window.ui | 241 |
2 files changed, 370 insertions, 0 deletions
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c index ffdcb5c71..1d2b0f509 100644 --- a/src/empathy-call-window.c +++ b/src/empathy-call-window.c @@ -173,6 +173,10 @@ struct _EmpathyCallWindowPriv GtkWidget *acodec_encoding_label; 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; GstElement *video_input; GstElement *audio_input; @@ -1051,6 +1055,10 @@ 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, NULL); g_free (filename); @@ -1450,6 +1458,119 @@ 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 void +update_candidate (EmpathyCallWindow *self, + gboolean video, + gboolean remote) +{ + EmpathyCallWindowPriv *priv = GET_PRIV (self); + GtkWidget *widget; + gchar *str; + FsCandidate *candidate = NULL; + + if (video) + { + if (remote) + { + widget = priv->video_remote_candidate_label; + + candidate = empathy_call_handler_get_video_remote_candidate ( + priv->handler); + } + else + { + widget = priv->video_local_candidate_label; + + candidate = empathy_call_handler_get_video_local_candidate ( + priv->handler); + } + } + else + { + if (remote) + { + widget = priv->audio_remote_candidate_label; + + candidate = empathy_call_handler_get_audio_remote_candidate ( + priv->handler); + } + else + { + widget = priv->audio_local_candidate_label; + + candidate = empathy_call_handler_get_audio_local_candidate ( + priv->handler); + } + } + + 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 (widget), str); + g_free (str); +} + +static void +audio_remote_candidate_notify_cb (GObject *object, + GParamSpec *pspec, + gpointer user_data) +{ + EmpathyCallWindow *self = user_data; + + update_candidate (self, FALSE, TRUE); +} + +static void +audio_local_candidate_notify_cb (GObject *object, + GParamSpec *pspec, + gpointer user_data) +{ + EmpathyCallWindow *self = user_data; + + update_candidate (self, FALSE, FALSE); +} + +static void +video_remote_candidate_notify_cb (GObject *object, + GParamSpec *pspec, + gpointer user_data) +{ + EmpathyCallWindow *self = user_data; + + update_candidate (self, TRUE, TRUE); +} + +static void +video_local_candidate_notify_cb (GObject *object, + GParamSpec *pspec, + gpointer user_data) +{ + EmpathyCallWindow *self = user_data; + + update_candidate (self, TRUE, FALSE); +} + static void empathy_call_window_constructed (GObject *object) { @@ -1488,6 +1609,14 @@ 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, "notify::audio-remote-candidate", + G_CALLBACK (audio_remote_candidate_notify_cb), self, 0); + tp_g_signal_connect_object (priv->handler, "notify::audio-local-candidate", + G_CALLBACK (audio_local_candidate_notify_cb), self, 0); + tp_g_signal_connect_object (priv->handler, "notify::video-remote-candidate", + G_CALLBACK (video_remote_candidate_notify_cb), self, 0); + tp_g_signal_connect_object (priv->handler, "notify::video-local-candidate", + G_CALLBACK (video_local_candidate_notify_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..dccabea35 100644 --- a/src/empathy-call-window.ui +++ b/src/empathy-call-window.ui @@ -424,6 +424,126 @@ </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_END</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">expand|shrink|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_END</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">expand|shrink|fill</property> + <property name="y_options"/> + </packing> + </child> + </object> </child> </object> @@ -617,6 +737,127 @@ </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_END</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">expand|shrink|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_END</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">expand|shrink|fill</property> + <property name="y_options"/> + </packing> + </child> + + </object> </child> </object> |