From a0ee1ca8fbbbe6d34c123eb46b32fc4f1e75779b Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 31 Aug 2009 01:13:00 +0100 Subject: Use char* not EmpathyMessage in TpChat:send-error The only consumer of this signal just extracts the body from the EmpathyMessage. It will be easier to handle the SendError D-Bus signal if we don't have to construct an EmpathyMessage from it. --- libempathy-gtk/empathy-chat.c | 4 ++-- libempathy/empathy-tp-chat.c | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index a979c9e76..c08b49c3f 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -523,7 +523,7 @@ chat_message_received_cb (EmpathyTpChat *tp_chat, static void chat_send_error_cb (EmpathyTpChat *tp_chat, - EmpathyMessage *message, + const gchar *message_body, TpChannelTextSendError error_code, EmpathyChat *chat) { @@ -552,7 +552,7 @@ chat_send_error_cb (EmpathyTpChat *tp_chat, } str = g_strdup_printf (_("Error sending message '%s': %s"), - empathy_message_get_body (message), + message_body, error); empathy_chat_view_append_event (chat->view, str); g_free (str); diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index 69057a878..7953b69e2 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -359,7 +359,8 @@ tp_chat_send_cb (TpChannel *proxy, if (error) { DEBUG ("Error: %s", error->message); - g_signal_emit (chat, signals[SEND_ERROR], 0, message, + g_signal_emit (chat, signals[SEND_ERROR], 0, + empathy_message_get_body (message), TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN); } } @@ -1168,9 +1169,9 @@ empathy_tp_chat_class_init (EmpathyTpChatClass *klass) G_SIGNAL_RUN_LAST, 0, NULL, NULL, - _empathy_marshal_VOID__OBJECT_UINT, + _empathy_marshal_VOID__STRING_UINT, G_TYPE_NONE, - 2, EMPATHY_TYPE_MESSAGE, G_TYPE_UINT); + 2, G_TYPE_STRING, G_TYPE_UINT); signals[CHAT_STATE_CHANGED] = g_signal_new ("chat-state-changed", -- cgit v1.2.3 From 2150f8ae4242fe2a26f29c96ddeb27ace1fe90fd Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 31 Aug 2009 00:17:55 +0100 Subject: Handle SendError signal correctly, not as a message Fixes Gnome bug #593095 - Send errors are printed as normal messages. --- libempathy/empathy-tp-chat.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index 7953b69e2..7429e1ddc 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -339,14 +339,9 @@ tp_chat_send_error_cb (TpChannel *channel, if (priv->channel == NULL) return; - DEBUG ("Message sent error: %s (%d)", message_body, error_code); + DEBUG ("Error sending '%s' (%d)", message_body, error_code); - tp_chat_build_message (EMPATHY_TP_CHAT (chat), - 0, - message_type, - timestamp, - 0, - message_body); + g_signal_emit (chat, signals[SEND_ERROR], 0, message_body, error_code); } static void -- cgit v1.2.3 From ad59f77dfdba77af558ae2d278c92b0a7ab747d7 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 31 Aug 2009 01:15:41 +0100 Subject: Ack received messages from ourself. Sumana Harihareswara reported that she had started a conversation with herself, sent a message, and then tried to close the window, but whenever she did so it reappeared. This was because Empathy did not acknowledge "incoming" messages from the user themself; hence, when it Close()d the channel, Gabble respawned it, because it still had pending messages. --- libempathy/empathy-message.c | 32 ++++++++++++++++++++++++++++++++ libempathy/empathy-message.h | 4 ++++ libempathy/empathy-tp-chat.c | 10 ++++++++-- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/libempathy/empathy-message.c b/libempathy/empathy-message.c index 34a466752..4b9413b1b 100644 --- a/libempathy/empathy-message.c +++ b/libempathy/empathy-message.c @@ -41,6 +41,7 @@ typedef struct { time_t timestamp; gboolean is_backlog; guint id; + gboolean incoming; } EmpathyMessagePriv; static void empathy_message_finalize (GObject *object); @@ -63,12 +64,14 @@ enum { PROP_BODY, PROP_TIMESTAMP, PROP_IS_BACKLOG, + PROP_INCOMING, }; static void empathy_message_class_init (EmpathyMessageClass *class) { GObjectClass *object_class; + GParamSpec *pspec; object_class = G_OBJECT_CLASS (class); object_class->finalize = empathy_message_finalize; @@ -123,6 +126,13 @@ empathy_message_class_init (EmpathyMessageClass *class) G_PARAM_READWRITE)); + pspec = g_param_spec_boolean ("incoming", + "Incoming", + "If this is an incoming (as opposed to sent) message", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (object_class, PROP_INCOMING, pspec); + g_type_class_add_private (object_class, sizeof (EmpathyMessagePriv)); } @@ -179,6 +189,9 @@ message_get_property (GObject *object, case PROP_BODY: g_value_set_string (value, priv->body); break; + case PROP_INCOMING: + g_value_set_boolean (value, priv->incoming); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; @@ -212,6 +225,9 @@ message_set_property (GObject *object, empathy_message_set_body (EMPATHY_MESSAGE (object), g_value_get_string (value)); break; + case PROP_INCOMING: + priv->incoming = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; @@ -579,6 +595,22 @@ empathy_message_set_id (EmpathyMessage *message, guint id) priv->id = id; } +void +empathy_message_set_incoming (EmpathyMessage *message, gboolean incoming) +{ + g_object_set (message, "incoming", incoming, NULL); +} + +gboolean +empathy_message_is_incoming (EmpathyMessage *message) +{ + EmpathyMessagePriv *priv = GET_PRIV (message); + + g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE); + + return priv->incoming; +} + gboolean empathy_message_equal (EmpathyMessage *message1, EmpathyMessage *message2) { diff --git a/libempathy/empathy-message.h b/libempathy/empathy-message.h index f9a488703..7ca624031 100644 --- a/libempathy/empathy-message.h +++ b/libempathy/empathy-message.h @@ -72,6 +72,10 @@ void empathy_message_set_timestamp (EmpathyMessage gboolean empathy_message_is_backlog (EmpathyMessage *message); void empathy_message_set_is_backlog (EmpathyMessage *message, gboolean is_backlog); +gboolean empathy_message_is_incoming (EmpathyMessage *message); +void empathy_message_set_incoming (EmpathyMessage *message, + gboolean incoming); + gboolean empathy_message_should_highlight (EmpathyMessage *message); TpChannelTextMessageType empathy_message_type_from_str (const gchar *type_str); const gchar * empathy_message_type_to_str (TpChannelTextMessageType type); diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c index 7429e1ddc..a64f06a2f 100644 --- a/libempathy/empathy-tp-chat.c +++ b/libempathy/empathy-tp-chat.c @@ -227,6 +227,7 @@ tp_chat_got_sender_cb (EmpathyTpContactFactory *factory, static void tp_chat_build_message (EmpathyTpChat *chat, + gboolean incoming, guint id, guint type, guint timestamp, @@ -243,6 +244,8 @@ tp_chat_build_message (EmpathyTpChat *chat, empathy_message_set_receiver (message, priv->user); empathy_message_set_timestamp (message, timestamp); empathy_message_set_id (message, id); + empathy_message_set_incoming (message, incoming); + g_queue_push_tail (priv->messages_queue, message); if (from_handle == 0) { @@ -294,6 +297,7 @@ tp_chat_received_cb (TpChannel *channel, } tp_chat_build_message (chat, + TRUE, message_id, message_type, timestamp, @@ -318,6 +322,7 @@ tp_chat_sent_cb (TpChannel *channel, DEBUG ("Message sent: %s", message_body); tp_chat_build_message (chat, + FALSE, 0, message_type, timestamp, @@ -456,6 +461,7 @@ tp_chat_list_pending_messages_cb (TpChannel *channel, } tp_chat_build_message (chat, + TRUE, message_id, message_type, timestamp, @@ -1369,7 +1375,7 @@ empathy_tp_chat_acknowledge_message (EmpathyTpChat *chat, g_return_if_fail (EMPATHY_IS_TP_CHAT (chat)); g_return_if_fail (priv->ready); - if (empathy_message_get_sender (message) == priv->user) + if (!empathy_message_is_incoming (message)) goto out; message_ids = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1); @@ -1415,7 +1421,7 @@ empathy_tp_chat_acknowledge_messages (EmpathyTpChat *chat, g_assert (m != NULL); g_queue_delete_link (priv->pending_messages_queue, m); - if (empathy_message_get_sender (message) != priv->user) { + if (empathy_message_is_incoming (message)) { guint id = empathy_message_get_id (message); g_array_append_val (message_ids, id); } -- cgit v1.2.3 From e92cc2a571051be566895ed3f09faebd8c56716f Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Mon, 31 Aug 2009 10:43:36 +0100 Subject: Be consistent with EmpathyMessage style. --- libempathy/empathy-message.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/libempathy/empathy-message.c b/libempathy/empathy-message.c index 4b9413b1b..a403766e4 100644 --- a/libempathy/empathy-message.c +++ b/libempathy/empathy-message.c @@ -71,7 +71,6 @@ static void empathy_message_class_init (EmpathyMessageClass *class) { GObjectClass *object_class; - GParamSpec *pspec; object_class = G_OBJECT_CLASS (class); object_class->finalize = empathy_message_finalize; @@ -126,12 +125,13 @@ empathy_message_class_init (EmpathyMessageClass *class) G_PARAM_READWRITE)); - pspec = g_param_spec_boolean ("incoming", - "Incoming", - "If this is an incoming (as opposed to sent) message", - FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); - g_object_class_install_property (object_class, PROP_INCOMING, pspec); + g_object_class_install_property (object_class, + PROP_INCOMING, + g_param_spec_boolean ("incoming", + "Incoming", + "If this is an incoming (as opposed to sent) message", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_type_class_add_private (object_class, sizeof (EmpathyMessagePriv)); @@ -598,7 +598,15 @@ empathy_message_set_id (EmpathyMessage *message, guint id) void empathy_message_set_incoming (EmpathyMessage *message, gboolean incoming) { - g_object_set (message, "incoming", incoming, NULL); + EmpathyMessagePriv *priv; + + g_return_if_fail (EMPATHY_IS_MESSAGE (message)); + + priv = GET_PRIV (message); + + priv->incoming = incoming; + + g_object_notify (G_OBJECT (message), "incoming"); } gboolean -- cgit v1.2.3