aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2011-04-08 23:30:34 +0800
committerEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2011-04-08 23:30:34 +0800
commit14c784281eca531135cc07009fb6d4a463d04ac2 (patch)
tree0c796b27db8a6408f919e338dbddf2b26da833c9 /src
parent415e3772e7108b6dff7d3b89eef01d5b8cc61a47 (diff)
parente702ff444130b055249fde571d6532931a31e47e (diff)
downloadgsoc2013-empathy-14c784281eca531135cc07009fb6d4a463d04ac2.tar
gsoc2013-empathy-14c784281eca531135cc07009fb6d4a463d04ac2.tar.gz
gsoc2013-empathy-14c784281eca531135cc07009fb6d4a463d04ac2.tar.bz2
gsoc2013-empathy-14c784281eca531135cc07009fb6d4a463d04ac2.tar.lz
gsoc2013-empathy-14c784281eca531135cc07009fb6d4a463d04ac2.tar.xz
gsoc2013-empathy-14c784281eca531135cc07009fb6d4a463d04ac2.tar.zst
gsoc2013-empathy-14c784281eca531135cc07009fb6d4a463d04ac2.zip
Merge remote-tracking branch 'danni-public/sms-support' into empathy-skype
Diffstat (limited to 'src')
-rw-r--r--src/empathy-chat-manager.c10
-rw-r--r--src/empathy-chat-window.c89
-rw-r--r--src/empathy-chat-window.h3
3 files changed, 79 insertions, 23 deletions
diff --git a/src/empathy-chat-manager.c b/src/empathy-chat-manager.c
index cfa38ec84..4ff6b7d30 100644
--- a/src/empathy-chat-manager.c
+++ b/src/empathy-chat-manager.c
@@ -119,18 +119,16 @@ process_tp_chat (EmpathyTpChat *tp_chat,
gint64 user_action_time)
{
EmpathyChat *chat = NULL;
- const gchar *id;
+ const char *channel_path;
tell_chatroom_manager_if_needed (account, tp_chat);
- id = empathy_tp_chat_get_id (tp_chat);
- if (!tp_str_empty (id))
- {
- chat = empathy_chat_window_find_chat (account, id);
- }
+ channel_path = empathy_tp_chat_get_channel_path (tp_chat);
+ chat = empathy_chat_window_find_chat_by_channel (channel_path);
if (chat != NULL)
{
+ DEBUG ("found chat %p for path %s", chat, channel_path);
empathy_chat_set_tp_chat (chat, tp_chat);
}
else
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
index cb9de9b5b..aa7a1a152 100644
--- a/src/empathy-chat-window.c
+++ b/src/empathy-chat-window.c
@@ -146,6 +146,8 @@ static const GtkTargetEntry drag_types_dest_file[] = {
static void chat_window_update (EmpathyChatWindow *window,
gboolean update_contact_menu);
+static EmpathyChat *empathy_chat_window_find_chat (TpAccount *account,
+ const gchar *id);
G_DEFINE_TYPE (EmpathyChatWindow, empathy_chat_window, G_TYPE_OBJECT);
@@ -442,14 +444,14 @@ get_all_unread_messages (EmpathyChatWindowPriv *priv)
static gchar *
get_window_title_name (EmpathyChatWindowPriv *priv)
{
- const gchar *active_name;
+ gchar *active_name, *ret;
guint nb_chats;
guint current_unread_msgs;
nb_chats = g_list_length (priv->chats);
g_assert (nb_chats > 0);
- active_name = empathy_chat_get_name (priv->current_chat);
+ active_name = empathy_chat_dup_name (priv->current_chat);
current_unread_msgs = empathy_chat_get_nb_unread_messages (
priv->current_chat);
@@ -457,9 +459,9 @@ get_window_title_name (EmpathyChatWindowPriv *priv)
if (nb_chats == 1) {
/* only one tab */
if (current_unread_msgs == 0)
- return g_strdup (active_name);
+ ret = g_strdup (active_name);
else
- return g_strdup_printf (ngettext (
+ ret = g_strdup_printf (ngettext (
"%s (%d unread)",
"%s (%d unread)", current_unread_msgs),
active_name, current_unread_msgs);
@@ -471,7 +473,7 @@ get_window_title_name (EmpathyChatWindowPriv *priv)
if (all_unread_msgs == 0) {
/* no unread message */
- return g_strdup_printf (ngettext (
+ ret = g_strdup_printf (ngettext (
"%s (and %u other)",
"%s (and %u others)", nb_others),
active_name, nb_others);
@@ -479,7 +481,7 @@ get_window_title_name (EmpathyChatWindowPriv *priv)
else if (all_unread_msgs == current_unread_msgs) {
/* unread messages are in the current tab */
- return g_strdup_printf (ngettext (
+ ret = g_strdup_printf (ngettext (
"%s (%d unread)",
"%s (%d unread)", current_unread_msgs),
active_name, current_unread_msgs);
@@ -487,7 +489,7 @@ get_window_title_name (EmpathyChatWindowPriv *priv)
else if (current_unread_msgs == 0) {
/* unread messages are in other tabs */
- return g_strdup_printf (ngettext (
+ ret = g_strdup_printf (ngettext (
"%s (%d unread from others)",
"%s (%d unread from others)",
all_unread_msgs),
@@ -496,13 +498,17 @@ get_window_title_name (EmpathyChatWindowPriv *priv)
else {
/* unread messages are in all the tabs */
- return g_strdup_printf (ngettext (
+ ret = g_strdup_printf (ngettext (
"%s (%d unread from all)",
"%s (%d unread from all)",
all_unread_msgs),
active_name, all_unread_msgs);
}
}
+
+ g_free (active_name);
+
+ return ret;
}
static void
@@ -630,7 +636,7 @@ chat_window_update_chat_tab_full (EmpathyChat *chat,
EmpathyChatWindow *window;
EmpathyChatWindowPriv *priv;
EmpathyContact *remote_contact;
- const gchar *name;
+ gchar *name;
const gchar *id;
TpAccount *account;
const gchar *subject;
@@ -649,7 +655,7 @@ chat_window_update_chat_tab_full (EmpathyChat *chat,
priv = GET_PRIV (window);
/* Get information */
- name = empathy_chat_get_name (chat);
+ name = empathy_chat_dup_name (chat);
account = empathy_chat_get_account (chat);
subject = empathy_chat_get_subject (chat);
remote_contact = empathy_chat_get_remote_contact (chat);
@@ -668,6 +674,9 @@ chat_window_update_chat_tab_full (EmpathyChat *chat,
else if (g_list_find (priv->chats_composing, chat)) {
icon_name = EMPATHY_IMAGE_TYPING;
}
+ else if (empathy_chat_is_sms_channel (chat)) {
+ icon_name = EMPATHY_IMAGE_SMS;
+ }
else if (remote_contact) {
icon_name = empathy_icon_name_for_contact (remote_contact);
} else {
@@ -696,6 +705,10 @@ chat_window_update_chat_tab_full (EmpathyChat *chat,
id = name;
}
+ if (empathy_chat_is_sms_channel (chat)) {
+ append_markup_printf (tooltip, "%s ", _("SMS:"));
+ }
+
append_markup_printf (tooltip,
"<b>%s</b><small> (%s)</small>",
id,
@@ -731,6 +744,8 @@ chat_window_update_chat_tab_full (EmpathyChat *chat,
if (priv->current_chat == chat) {
chat_window_update (window, update_contact_menu);
}
+
+ g_free (name);
}
static void
@@ -858,21 +873,24 @@ chat_window_favorite_toggled_cb (GtkToggleAction *toggle_action,
EmpathyChatWindowPriv *priv = GET_PRIV (window);
gboolean active;
TpAccount *account;
+ gchar *name;
const gchar *room;
EmpathyChatroom *chatroom;
active = gtk_toggle_action_get_active (toggle_action);
account = empathy_chat_get_account (priv->current_chat);
room = empathy_chat_get_id (priv->current_chat);
+ name = empathy_chat_dup_name (priv->current_chat);
chatroom = empathy_chatroom_manager_ensure_chatroom (
priv->chatroom_manager,
account,
room,
- empathy_chat_get_name (priv->current_chat));
+ name);
empathy_chatroom_set_favorite (chatroom, active);
g_object_unref (chatroom);
+ g_free (name);
}
static void
@@ -882,21 +900,24 @@ chat_window_always_urgent_toggled_cb (GtkToggleAction *toggle_action,
EmpathyChatWindowPriv *priv = GET_PRIV (window);
gboolean active;
TpAccount *account;
+ gchar *name;
const gchar *room;
EmpathyChatroom *chatroom;
active = gtk_toggle_action_get_active (toggle_action);
account = empathy_chat_get_account (priv->current_chat);
room = empathy_chat_get_id (priv->current_chat);
+ name = empathy_chat_dup_name (priv->current_chat);
chatroom = empathy_chatroom_manager_ensure_chatroom (
priv->chatroom_manager,
account,
room,
- empathy_chat_get_name (priv->current_chat));
+ name);
empathy_chatroom_set_always_urgent (chatroom, active);
g_object_unref (chatroom);
+ g_free (name);
}
static void
@@ -1358,18 +1379,20 @@ chat_window_show_or_update_notification (EmpathyChatWindow *window,
static void
chat_window_set_highlight_room_tab_label (EmpathyChat *chat)
{
- gchar *markup;
+ gchar *markup, *name;
GtkWidget *widget;
if (!empathy_chat_is_room (chat))
return;
+ name = empathy_chat_dup_name (chat);
markup = g_markup_printf_escaped (
"<span color=\"red\" weight=\"bold\">%s</span>",
- empathy_chat_get_name (chat));
+ name);
widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-label");
gtk_label_set_markup (GTK_LABEL (widget), markup);
+ g_free (name);
g_free (markup);
}
@@ -2213,6 +2236,9 @@ empathy_chat_window_add_chat (EmpathyChatWindow *window,
g_signal_connect (chat, "notify::remote-contact",
G_CALLBACK (chat_window_chat_notify_cb),
NULL);
+ g_signal_connect (chat, "notify::sms-channel",
+ G_CALLBACK (chat_window_chat_notify_cb),
+ NULL);
chat_window_chat_notify_cb (chat);
gtk_notebook_append_page_menu (GTK_NOTEBOOK (priv->notebook), child, label, popup_label);
@@ -2329,7 +2355,7 @@ empathy_chat_window_has_focus (EmpathyChatWindow *window)
return has_focus;
}
-EmpathyChat *
+static EmpathyChat *
empathy_chat_window_find_chat (TpAccount *account,
const gchar *id)
{
@@ -2360,6 +2386,39 @@ empathy_chat_window_find_chat (TpAccount *account,
return NULL;
}
+EmpathyChat *
+empathy_chat_window_find_chat_by_channel (const char *channel_path)
+{
+ GList *l;
+
+ g_return_val_if_fail (!EMP_STR_EMPTY (channel_path), NULL);
+
+ for (l = chat_windows; l; l = l->next) {
+ EmpathyChatWindowPriv *priv;
+ EmpathyChatWindow *window;
+ GList *ll;
+
+ window = l->data;
+ priv = GET_PRIV (window);
+
+ for (ll = priv->chats; ll; ll = ll->next) {
+ EmpathyChat *chat;
+ EmpathyTpChat *tp_chat;
+ const char *path;
+
+ chat = ll->data;
+ tp_chat = empathy_chat_get_tp_chat (chat);
+ path = empathy_tp_chat_get_channel_path (tp_chat);
+
+ if (!tp_strdiff (channel_path, path)) {
+ return chat;
+ }
+ }
+ }
+
+ return NULL;
+}
+
void
empathy_chat_window_present_chat (EmpathyChat *chat,
gint64 timestamp)
diff --git a/src/empathy-chat-window.h b/src/empathy-chat-window.h
index 4cbd2094a..33caec70c 100644
--- a/src/empathy-chat-window.h
+++ b/src/empathy-chat-window.h
@@ -70,8 +70,7 @@ void empathy_chat_window_move_chat (EmpathyChatWindow *old_wi
void empathy_chat_window_switch_to_chat (EmpathyChatWindow *window,
EmpathyChat *chat);
gboolean empathy_chat_window_has_focus (EmpathyChatWindow *window);
-EmpathyChat * empathy_chat_window_find_chat (TpAccount *account,
- const gchar *id);
+EmpathyChat * empathy_chat_window_find_chat_by_channel (const char *path);
void empathy_chat_window_present_chat (EmpathyChat *chat,
gint64 timestamp);