aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-chat.c
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@src.gnome.org>2008-04-14 21:01:24 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2008-04-14 21:01:24 +0800
commit150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3 (patch)
tree9989ee7c38720b16bc050eacc70584ae07adcc68 /libempathy-gtk/empathy-chat.c
parent68703c3fc1665588318d717539c8cf965e67b57c (diff)
downloadgsoc2013-empathy-150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3.tar
gsoc2013-empathy-150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3.tar.gz
gsoc2013-empathy-150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3.tar.bz2
gsoc2013-empathy-150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3.tar.lz
gsoc2013-empathy-150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3.tar.xz
gsoc2013-empathy-150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3.tar.zst
gsoc2013-empathy-150dc07ffeaefc877a3f8c48ba861a93fcb9e6f3.zip
Various fixes for chats
svn path=/trunk/; revision=938
Diffstat (limited to 'libempathy-gtk/empathy-chat.c')
-rw-r--r--libempathy-gtk/empathy-chat.c59
1 files changed, 57 insertions, 2 deletions
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index fce7856c4..3dbda9aea 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -66,6 +66,7 @@ struct _EmpathyChatPriv {
gchar *id;
gchar *name;
gchar *subject;
+ EmpathyContact *remote_contact;
EmpathyLogManager *log_manager;
MissionControl *mc;
@@ -116,6 +117,7 @@ enum {
PROP_ID,
PROP_NAME,
PROP_SUBJECT,
+ PROP_REMOTE_CONTACT,
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -146,6 +148,9 @@ chat_get_property (GObject *object,
case PROP_SUBJECT:
g_value_set_string (value, priv->subject);
break;
+ case PROP_REMOTE_CONTACT:
+ g_value_set_object (value, priv->remote_contact);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -587,7 +592,12 @@ chat_property_changed_cb (EmpathyTpChat *tp_chat,
priv->subject = g_value_dup_string (value);
g_object_notify (G_OBJECT (chat), "subject");
- gtk_label_set_text (GTK_LABEL (priv->label_topic), priv->subject);
+ if (G_STR_EMPTY (priv->subject)) {
+ gtk_widget_hide (priv->hbox_topic);
+ } else {
+ gtk_label_set_text (GTK_LABEL (priv->label_topic), priv->subject);
+ gtk_widget_show (priv->hbox_topic);
+ }
if (priv->block_events_timeout_id == 0) {
gchar *str;
@@ -1246,6 +1256,24 @@ chat_members_changed_cb (EmpathyTpChat *tp_chat,
}
static void
+chat_remote_contact_changed_cb (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ if (priv->remote_contact) {
+ g_object_unref (priv->remote_contact);
+ priv->remote_contact = NULL;
+ }
+
+ priv->remote_contact = empathy_tp_chat_get_remote_contact (priv->tp_chat);
+ if (priv->remote_contact) {
+ g_object_ref (priv->remote_contact);
+ }
+
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+}
+
+static void
chat_create_ui (EmpathyChat *chat)
{
EmpathyChatPriv *priv = GET_PRIV (chat);
@@ -1325,6 +1353,9 @@ chat_create_ui (EmpathyChat *chat)
GTK_WIDGET (priv->view));
gtk_widget_show (GTK_WIDGET (priv->view));
+ /* Initialy hide the topic, will be shown if not empty */
+ gtk_widget_hide (priv->hbox_topic);
+
/* Set widget focus order */
list = g_list_append (NULL, priv->scrolled_window_input);
gtk_container_set_focus_chain (GTK_CONTAINER (priv->vbox_left), list);
@@ -1414,10 +1445,12 @@ chat_finalize (GObject *object)
if (priv->tp_chat) {
g_object_unref (priv->tp_chat);
}
-
if (priv->account) {
g_object_unref (priv->account);
}
+ if (priv->remote_contact) {
+ g_object_unref (priv->remote_contact);
+ }
if (priv->block_events_timeout_id) {
g_source_remove (priv->block_events_timeout_id);
@@ -1489,6 +1522,13 @@ empathy_chat_class_init (EmpathyChatClass *klass)
"The subject or topic of the chat",
NULL,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_REMOTE_CONTACT,
+ g_param_spec_object ("remote-contact",
+ "The remote contact",
+ "The remote contact is any",
+ EMPATHY_TYPE_CONTACT,
+ G_PARAM_READABLE));
signals[COMPOSING] =
g_signal_new ("composing",
@@ -1609,10 +1649,15 @@ empathy_chat_set_tp_chat (EmpathyChat *chat,
g_signal_connect (tp_chat, "members-changed",
G_CALLBACK (chat_members_changed_cb),
chat);
+ g_signal_connect_swapped (tp_chat, "notify::remote-contact",
+ G_CALLBACK (chat_remote_contact_changed_cb),
+ chat);
g_signal_connect (tp_chat, "destroy",
G_CALLBACK (chat_destroy_cb),
chat);
+ chat_remote_contact_changed_cb (chat);
+
if (chat->input_text_view) {
gtk_widget_set_sensitive (chat->input_text_view, TRUE);
if (priv->block_events_timeout_id == 0) {
@@ -1665,6 +1710,16 @@ empathy_chat_get_subject (EmpathyChat *chat)
return priv->subject;
}
+EmpathyContact *
+empathy_chat_get_remote_contact (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ return priv->remote_contact;
+}
+
void
empathy_chat_clear (EmpathyChat *chat)
{