Mercurial > pidgin
diff pidgin/gtkconv.c @ 19778:959b3aaba0b6
Remember the 'Enable Sounds' setting for a conversation. Closes #312.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Thu, 13 Sep 2007 02:15:05 +0000 |
parents | c35e8c057441 |
children | a2b4eac83902 |
line wrap: on
line diff
--- a/pidgin/gtkconv.c Wed Sep 12 15:59:22 2007 +0000 +++ b/pidgin/gtkconv.c Thu Sep 13 02:15:05 2007 +0000 @@ -183,6 +183,25 @@ return &col; } +static PurpleBlistNode * +get_conversation_blist_node(PurpleConversation *conv) +{ + PurpleBlistNode *node = NULL; + + switch (purple_conversation_get_type(conv)) { + case PURPLE_CONV_TYPE_IM: + node = (PurpleBlistNode*)purple_find_buddy(conv->account, conv->name); + node = node ? node->parent : NULL; + break; + case PURPLE_CONV_TYPE_CHAT: + node = (PurpleBlistNode*)purple_blist_find_chat(conv->account, conv->name); + break; + default: + break; + } + return node; +} + /************************************************************************** * Callbacks **************************************************************************/ @@ -1379,6 +1398,7 @@ PidginWindow *win = data; PurpleConversation *conv; PidginConversation *gtkconv; + PurpleBlistNode *node; conv = pidgin_conv_window_get_active_conversation(win); @@ -1389,6 +1409,9 @@ gtkconv->make_sound = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); + node = get_conversation_blist_node(conv); + if (node) + purple_blist_node_set_bool(node, "gtk-mute-sound", !gtkconv->make_sound); } static void @@ -2948,7 +2971,7 @@ if (gtkconv != NULL) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), - TRUE); + gtkconv->make_sound); gtk_widget_set_sensitive(win->menu.sounds, TRUE); } @@ -4927,6 +4950,7 @@ PurpleConversationType conv_type = purple_conversation_get_type(conv); GtkWidget *pane = NULL; GtkWidget *tab_cont; + PurpleBlistNode *convnode; if (conv_type == PURPLE_CONV_TYPE_IM && (gtkconv = pidgin_conv_find_gtkconv(conv))) { conv->ui_data = gtkconv; @@ -5004,7 +5028,9 @@ gtk_container_add(GTK_CONTAINER(tab_cont), pane); gtk_widget_show(pane); - gtkconv->make_sound = TRUE; + convnode = get_conversation_blist_node(conv); + if (convnode == NULL || !purple_blist_node_get_bool(convnode, "gtk-mute-sound")) + gtkconv->make_sound = TRUE; if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/show_formatting_toolbar")) gtk_widget_show(gtkconv->toolbar);