aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Terry <michael.terry@canonical.com>2011-03-17 00:57:25 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2011-03-17 20:33:00 +0800
commitd5b2820161428f145463e50b80fe0df4d7668176 (patch)
tree1a2e4c26010f49b9156c545392e571f5530f6a48
parent0f47819a414ea821e6eccafb678c399a39a901ec (diff)
downloadgsoc2013-empathy-d5b2820161428f145463e50b80fe0df4d7668176.tar
gsoc2013-empathy-d5b2820161428f145463e50b80fe0df4d7668176.tar.gz
gsoc2013-empathy-d5b2820161428f145463e50b80fe0df4d7668176.tar.bz2
gsoc2013-empathy-d5b2820161428f145463e50b80fe0df4d7668176.tar.lz
gsoc2013-empathy-d5b2820161428f145463e50b80fe0df4d7668176.tar.xz
gsoc2013-empathy-d5b2820161428f145463e50b80fe0df4d7668176.tar.zst
gsoc2013-empathy-d5b2820161428f145463e50b80fe0df4d7668176.zip
Don't update Contact menu on a focus-in (#644936)
-rw-r--r--src/empathy-chat-window.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
index 5e7428317..30a1f3183 100644
--- a/src/empathy-chat-window.c
+++ b/src/empathy-chat-window.c
@@ -144,7 +144,8 @@ static const GtkTargetEntry drag_types_dest_file[] = {
{ "text/uri-list", 0, DND_DRAG_TYPE_URI_LIST },
};
-static void chat_window_update (EmpathyChatWindow *window);
+static void chat_window_update (EmpathyChatWindow *window,
+ gboolean update_contact_menu);
G_DEFINE_TYPE (EmpathyChatWindow, empathy_chat_window, G_TYPE_OBJECT);
@@ -335,7 +336,7 @@ _submenu_notify_visible_changed_cb (GObject *object,
g_signal_handlers_disconnect_by_func (object,
_submenu_notify_visible_changed_cb,
userdata);
- chat_window_update (EMPATHY_CHAT_WINDOW (userdata));
+ chat_window_update (EMPATHY_CHAT_WINDOW (userdata), TRUE);
}
static void
@@ -568,7 +569,8 @@ chat_window_close_button_update (EmpathyChatWindowPriv *priv,
}
static void
-chat_window_update (EmpathyChatWindow *window)
+chat_window_update (EmpathyChatWindow *window,
+ gboolean update_contact_menu)
{
EmpathyChatWindowPriv *priv = GET_PRIV (window);
gint num_pages;
@@ -581,8 +583,14 @@ chat_window_update (EmpathyChatWindow *window)
chat_window_conversation_menu_update (priv, window);
- chat_window_contact_menu_update (priv,
- window);
+ /* If this update is due to a focus-in event, we know the menu will be
+ the same as when we last left it, so no work to do. Besides, if we
+ swap out the menu on a focus-in, we may confuse any external global
+ menu watching. */
+ if (update_contact_menu) {
+ chat_window_contact_menu_update (priv,
+ window);
+ }
chat_window_title_update (priv);
@@ -610,7 +618,8 @@ append_markup_printf (GString *string,
}
static void
-chat_window_update_chat_tab (EmpathyChat *chat)
+chat_window_update_chat_tab_full (EmpathyChat *chat,
+ gboolean update_contact_menu)
{
EmpathyChatWindow *window;
EmpathyChatWindowPriv *priv;
@@ -714,11 +723,17 @@ chat_window_update_chat_tab (EmpathyChat *chat)
/* Update the window if it's the current chat */
if (priv->current_chat == chat) {
- chat_window_update (window);
+ chat_window_update (window, update_contact_menu);
}
}
static void
+chat_window_update_chat_tab (EmpathyChat *chat)
+{
+ chat_window_update_chat_tab_full (chat, TRUE);
+}
+
+static void
chat_window_chat_notify_cb (EmpathyChat *chat)
{
EmpathyContact *old_remote_contact;
@@ -1597,7 +1612,7 @@ chat_window_page_removed_cb (GtkNotebook *notebook,
if (priv->chats == NULL) {
g_object_unref (window);
} else {
- chat_window_update (window);
+ chat_window_update (window, TRUE);
}
}
@@ -1616,7 +1631,7 @@ chat_window_focus_in_event_cb (GtkWidget *widget,
chat_window_set_urgency_hint (window, FALSE);
/* Update the title, since we now mark all unread messages as read. */
- chat_window_update_chat_tab (priv->current_chat);
+ chat_window_update_chat_tab_full (priv->current_chat, FALSE);
return FALSE;
}