};
static void group_chat_finalize (GObject *object);
-static void group_chat_create_ui (EmpathyGroupChat *chat);
+static void group_chat_create_ui (EmpathyGroupChat *chat);
static void group_chat_widget_destroy_cb (GtkWidget *widget,
- EmpathyGroupChat *chat);
-static void group_chat_contact_added_cb (EmpathyTpChatroom *tp_chat,
- EmpathyContact *contact,
- EmpathyGroupChat *chat);
-static void group_chat_contact_removed_cb (EmpathyTpChatroom *tp_chat,
- EmpathyContact *contact,
- EmpathyGroupChat *chat);
-/*static void group_chat_topic_changed_cb (EmpathyTpChatroom *tp_chat,
- const gchar *new_topic,
- EmpathyGroupChat *chat);*/
+ EmpathyGroupChat *chat);
+static void group_chat_members_changed_cb (EmpathyTpChatroom *tp_chat,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_member,
+ EmpathyGroupChat *chat);
static void group_chat_topic_entry_activate_cb (GtkWidget *entry,
GtkDialog *dialog);
static void group_chat_topic_response_cb (GtkWidget *dialog,
gint response,
- EmpathyGroupChat *chat);
-static const gchar * group_chat_get_name (EmpathyChat *chat);
-static gchar * group_chat_get_tooltip (EmpathyChat *chat);
-static const gchar * group_chat_get_status_icon_name (EmpathyChat *chat);
-static GtkWidget * group_chat_get_widget (EmpathyChat *chat);
-static gboolean group_chat_is_group_chat (EmpathyChat *chat);
-static void group_chat_set_tp_chat (EmpathyChat *chat,
+ EmpathyGroupChat *chat);
+static const gchar * group_chat_get_name (EmpathyChat *chat);
+static gchar * group_chat_get_tooltip (EmpathyChat *chat);
+static const gchar * group_chat_get_status_icon_name (EmpathyChat *chat);
+static GtkWidget * group_chat_get_widget (EmpathyChat *chat);
+static gboolean group_chat_is_group_chat (EmpathyChat *chat);
+static void group_chat_set_tp_chat (EmpathyChat *chat,
EmpathyTpChat *tp_chat);
static void group_chat_subject_notify_cb (EmpathyTpChat *tp_chat,
GParamSpec *param,
- EmpathyGroupChat *chat);
+ EmpathyGroupChat *chat);
static void group_chat_name_notify_cb (EmpathyTpChat *tp_chat,
GParamSpec *param,
- EmpathyGroupChat *chat);
+ EmpathyGroupChat *chat);
/*static gboolean group_chat_key_press_event (GtkWidget *widget,
GdkEventKey *event,
- EmpathyGroupChat *chat);*/
+ EmpathyGroupChat *chat);*/
static gint group_chat_contacts_completion_func (const gchar *s1,
const gchar *s2,
gsize n);
EmpathyGroupChat *
empathy_group_chat_new (McAccount *account,
- TpChan *tp_chan)
+ TpChan *tp_chan)
{
EmpathyGroupChat *chat;
EmpathyGroupChatPriv *priv;
}
static void
-group_chat_contact_added_cb (EmpathyTpChatroom *tp_chat,
- EmpathyContact *contact,
- EmpathyGroupChat *chat)
-{
- EmpathyGroupChatPriv *priv;
- gchar *str;
-
- priv = GET_PRIV (chat);
-
- str = g_strdup_printf (_("%s has joined the room"),
- empathy_contact_get_name (contact));
- empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str);
- g_free (str);
-}
-
-static void
-group_chat_contact_removed_cb (EmpathyTpChatroom *tp_chat,
+group_chat_members_changed_cb (EmpathyTpChatroom *tp_chat,
EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_member,
EmpathyGroupChat *chat)
{
EmpathyGroupChatPriv *priv;
- gchar *str;
+ gchar *str;
priv = GET_PRIV (chat);
- str = g_strdup_printf (_("%s has left the room"),
- empathy_contact_get_name (contact));
+ if (is_member) {
+ str = g_strdup_printf (_("%s has joined the room"),
+ empathy_contact_get_name (contact));
+ } else {
+ str = g_strdup_printf (_("%s has left the room"),
+ empathy_contact_get_name (contact));
+ }
empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str);
g_free (str);
}
gtk_widget_show (GTK_WIDGET (priv->view));
/* Connect signals */
- g_signal_connect (priv->tp_chat, "contact-added",
- G_CALLBACK (group_chat_contact_added_cb),
- chat);
- g_signal_connect (priv->tp_chat, "contact-removed",
- G_CALLBACK (group_chat_contact_removed_cb),
+ g_signal_connect (priv->tp_chat, "members-changed",
+ G_CALLBACK (group_chat_members_changed_cb),
chat);
g_signal_connect (priv->tp_chat, "notify::subject",
G_CALLBACK (group_chat_subject_notify_cb),
EmpathyGroupChat *chat)
{
EmpathyGroupChatPriv *priv;
- gchar *str;
+ gchar *str = NULL;
priv = GET_PRIV (chat);
- g_free (priv->topic);
+ g_object_get (priv->tp_chat, "subject", &str, NULL);
+ if (!empathy_strdiff (priv->topic, str)) {
+ g_free (str);
+ return;
+ }
- g_object_get (priv->tp_chat, "subject", &priv->topic, NULL);
+ g_free (priv->topic);
+ priv->topic = str;
gtk_label_set_text (GTK_LABEL (priv->label_topic), priv->topic);
- str = g_strdup_printf (_("Topic set to: %s"), priv->topic);
+ if (!G_STR_EMPTY (priv->topic)) {
+ str = g_strdup_printf (_("Topic set to: %s"), priv->topic);
+ } else {
+ str = g_strdup (_("No topic defined"));
+ }
empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str);
g_free (str);
}