Mercurial > pidgin
changeset 19447:1a9b30a95fa6
Fix #2767 (per-conversation/chat mute option).
My limited testing makes me think it's working!
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sun, 26 Aug 2007 09:39:54 +0000 |
parents | 5d200fce4170 |
children | 64f226232133 |
files | finch/gntconv.c finch/gntconv.h finch/gntsound.c finch/gntsound.h |
diffstat | 4 files changed, 51 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/finch/gntconv.c Sun Aug 26 08:58:59 2007 +0000 +++ b/finch/gntconv.c Sun Aug 26 09:39:54 2007 +0000 @@ -37,6 +37,7 @@ #include "gntdebug.h" #include "gntplugin.h" #include "gntprefs.h" +#include "gntsound.h" #include "gntstatus.h" #include "gntpounce.h" @@ -387,6 +388,13 @@ } static void +toggle_sound_cb(GntMenuItem *item, gpointer ggconv) +{ + FinchConv *fc = ggconv; + fc->flags ^= FINCH_CONV_NO_SOUND; +} + +static void send_to_cb(GntMenuItem *m, gpointer n) { PurpleAccount *account = g_object_get_data(G_OBJECT(m), "purple_account"); @@ -498,6 +506,12 @@ purple_conversation_is_logging(ggc->active_conv)); gnt_menu_add_item(GNT_MENU(sub), item); gnt_menuitem_set_callback(item, toggle_logging_cb, ggc); + + item = gnt_menuitem_check_new(_("Enable Sounds")); + gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), + !(ggc->flags & FINCH_CONV_NO_SOUND)); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, toggle_sound_cb, ggc); } static void @@ -638,6 +652,9 @@ g_signal_connect(G_OBJECT(ggc->entry), "text_changed", G_CALLBACK(send_typing_notification), ggc); } + if (!finch_sound_is_enabled()) + ggc->flags |= FINCH_CONV_NO_SOUND; + gg_create_menu(ggc); g_free(title);
--- a/finch/gntconv.h Sun Aug 26 08:58:59 2007 +0000 +++ b/finch/gntconv.h Sun Aug 26 09:39:54 2007 +0000 @@ -43,6 +43,11 @@ typedef struct _FinchConvChat FinchConvChat; typedef struct _FinchConvIm FinchConvIm; +typedef enum +{ + FINCH_CONV_NO_SOUND = 1 << 0, +} FinchConversationFlag; + struct _FinchConv { GList *list; @@ -53,7 +58,7 @@ GntWidget *tv; /* text-view */ GntWidget *menu; GntWidget *info; - void *pad; + FinchConversationFlag flags; union {
--- a/finch/gntsound.c Sun Aug 26 08:58:59 2007 +0000 +++ b/finch/gntsound.c Sun Aug 26 09:39:54 2007 +0000 @@ -40,6 +40,8 @@ #include "sound.h" #include "util.h" +#include "gntconv.h" + #include "gntbox.h" #include "gntwindow.h" #include "gntcombobox.h" @@ -173,7 +175,8 @@ has_focus = purple_conversation_has_focus(conv); - if (has_focus && !purple_prefs_get_bool(make_pref("/conv_focus"))) + if ((gntconv->flags & FINCH_CONV_NO_SOUND) || + (has_focus && !purple_prefs_get_bool(make_pref("/conv_focus")))) { return; } @@ -1061,7 +1064,22 @@ load_pref_window(finch_sound_get_active_profile()); gnt_widget_show(win); -} +} + +gboolean finch_sound_is_enabled(void) +{ + const char *pref = make_pref("/method"); + const char *method = purple_prefs_get_string(pref); + + if (!method) + return FALSE; + if (strcmp(method, "nosound") == 0) + return FALSE; + if (purple_prefs_get_int(make_pref("/volume")) <= 0) + return FALSE; + + return TRUE; +} static PurpleSoundUiOps sound_ui_ops = {
--- a/finch/gntsound.h Sun Aug 26 08:58:59 2007 +0000 +++ b/finch/gntsound.h Sun Aug 26 09:39:54 2007 +0000 @@ -55,6 +55,14 @@ GList *finch_sound_get_profiles(void); /** + * Determine whether any sound will be played or not. + * + * @return Returns FALSE if preference is set to 'No sound', or if volume is + * set to zero. + */ +gboolean finch_sound_is_enabled(void); + +/** * Gets GNT sound UI ops. * * @return The UI operations structure.