Mercurial > pidgin.yaz
diff pidgin/gtkmedia.c @ 25643:befeece4dd48
Change a few things:
* call purple_media_wait to notify that we are waiting on a response from the
remote end
* fix the /call command in finch
* keep track of the PidginMedia for a PidginConversation
* fix the two-widget bug in pidgin.
We probably should have a way to get the PidginMedia from a PurpleMedia. Should
we use _set/_get_ui_data for this?
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sat, 22 Mar 2008 09:17:34 +0000 |
parents | 92e71f6e10d4 |
children | e1c8ec1259de |
line wrap: on
line diff
--- a/pidgin/gtkmedia.c Sat Mar 22 05:10:29 2008 +0000 +++ b/pidgin/gtkmedia.c Sat Mar 22 09:17:34 2008 +0000 @@ -34,6 +34,18 @@ #include <farsight/farsight.h> +typedef enum +{ + /* Waiting for response */ + PIDGIN_MEDIA_WAITING = 1, + /* Got request */ + PIDGIN_MEDIA_REQUESTED, + /* Accepted call */ + PIDGIN_MEDIA_ACCEPTED, + /* Rejected call */ + PIDGIN_MEDIA_REJECTED, +} PidginMediaState; + struct _PidginMediaPrivate { PurpleMedia *media; @@ -58,6 +70,7 @@ static void pidgin_media_finalize (GObject *object); static void pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); static void pidgin_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); +static void pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state); static GtkHBoxClass *parent_class = NULL; @@ -164,15 +177,20 @@ gtk_widget_show(media->priv->send_progress); gtk_widget_show(media->priv->recv_progress); - /* - gtk_widget_show_all(media->priv->accept); - gtk_widget_show_all(media->priv->reject); - */ + gtk_widget_show_all(media->priv->accept); + gtk_widget_show_all(media->priv->reject); } static void pidgin_media_finalize (GObject *media) { + PidginMedia *gtkmedia = PIDGIN_MEDIA(media); + if (gtkmedia->priv->media) + g_object_unref(gtkmedia->priv->media); + if (gtkmedia->priv->send_level) + gst_object_unref(gtkmedia->priv->send_level); + if (gtkmedia->priv->recv_level) + gst_object_unref(gtkmedia->priv->recv_level); } static void @@ -227,6 +245,12 @@ printf("\n\nbus: %p\n", gst_pipeline_get_bus(GST_PIPELINE(element))); } +static void +pidgin_media_wait_cb(PurpleMedia *media, PidginMedia *gtkmedia) +{ + pidgin_media_set_state(gtkmedia, PIDGIN_MEDIA_WAITING); +} + /* maybe we should have different callbacks for when we received the accept and we accepted ourselves */ static void @@ -281,6 +305,8 @@ G_CALLBACK(pidgin_media_accept_cb), media); g_signal_connect(G_OBJECT(media->priv->media) ,"ready", G_CALLBACK(pidgin_media_ready_cb), media); + g_signal_connect(G_OBJECT(media->priv->media) ,"wait", + G_CALLBACK(pidgin_media_wait_cb), media); g_signal_connect(G_OBJECT(media->priv->media), "hangup", G_CALLBACK(pidgin_media_hangup_cb), media); g_signal_connect(G_OBJECT(media->priv->media), "reject", @@ -333,17 +359,15 @@ } GtkWidget * -pidgin_media_new(PurpleMedia *media, PidginMediaState state, - GstElement *sendlevel, GstElement *recvlevel) +pidgin_media_new(PurpleMedia *media, GstElement *sendlevel, GstElement *recvlevel) { PidginMedia *gtkmedia = g_object_new(pidgin_media_get_type(), "media", media, "send-level", sendlevel, "recv-level", recvlevel, NULL); - pidgin_media_set_state(gtkmedia, state); return GTK_WIDGET(gtkmedia); } -void +static void pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state) { gtkmedia->priv->state = state; @@ -352,12 +376,12 @@ gtk_widget_show(gtkmedia->priv->calling); gtk_widget_hide(gtkmedia->priv->accept); gtk_widget_hide(gtkmedia->priv->reject); - gtk_widget_hide(gtkmedia->priv->hangup); + gtk_widget_show(gtkmedia->priv->hangup); break; case PIDGIN_MEDIA_REQUESTED: + gtk_widget_hide(gtkmedia->priv->calling); gtk_widget_show(gtkmedia->priv->accept); gtk_widget_show(gtkmedia->priv->reject); - gtk_widget_hide(gtkmedia->priv->calling); gtk_widget_hide(gtkmedia->priv->hangup); break; case PIDGIN_MEDIA_ACCEPTED: @@ -366,12 +390,6 @@ gtk_widget_hide(gtkmedia->priv->accept); gtk_widget_hide(gtkmedia->priv->reject); break; - case PIDGIN_MEDIA_REJECTED: - gtk_widget_hide(gtkmedia->priv->calling); - gtk_widget_hide(gtkmedia->priv->hangup); - gtk_widget_hide(gtkmedia->priv->accept); - gtk_widget_hide(gtkmedia->priv->reject); - break; default: break; }