Mercurial > pidgin
diff src/gtkconv.c @ 12594:3d34460ecfd6
[gaim-migrate @ 14924]
Fix (part of) SF Bug #1384217
"3. Even when sounds or showing buddy icons are
disabled, the Options menu in the instant message
window still has them checked by default."
This code greys out (and unchecks) the options when the respective preferences are disabled.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Wed, 21 Dec 2005 07:59:45 +0000 |
parents | 5e81ae0736c9 |
children | e856f985a0b9 |
line wrap: on
line diff
--- a/src/gtkconv.c Wed Dec 21 07:27:04 2005 +0000 +++ b/src/gtkconv.c Wed Dec 21 07:59:45 2005 +0000 @@ -2570,10 +2570,60 @@ return _((char *)path); } +static void +sound_method_pref_changed_cb(const char *name, GaimPrefType type, gpointer value, gpointer data) +{ + GaimGtkWindow *win = data; + const char *method = value; + + if (!strcmp(method, "none")) + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), + FALSE); + gtk_widget_set_sensitive(win->menu.sounds, FALSE); + } + else + { + GaimGtkConversation *gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); + + if (gtkconv != NULL) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), + TRUE); + gtk_widget_set_sensitive(win->menu.sounds, TRUE); + + } +} + +static void +show_buddy_icons_pref_changed_cb(const char *name, GaimPrefType type, gpointer value, gpointer data) +{ + GaimGtkWindow *win = data; + gboolean show_icons = GPOINTER_TO_INT(value); + + if (!show_icons) + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), + FALSE); + gtk_widget_set_sensitive(win->menu.show_icon, FALSE); + } + else + { + GaimGtkConversation *gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); + + if (gtkconv != NULL) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), + TRUE); + gtk_widget_set_sensitive(win->menu.show_icon, TRUE); + + } +} + + static GtkWidget * setup_menubar(GaimGtkWindow *win) { GtkAccelGroup *accel_group; + const char *method; accel_group = gtk_accel_group_new (); gtk_window_add_accel_group(GTK_WINDOW(win->window), accel_group); @@ -2656,6 +2706,16 @@ win->menu.sounds = gtk_item_factory_get_widget(win->menu.item_factory, N_("/Options/Enable Sounds")); + method = gaim_prefs_get_string("/gaim/gtk/sound/method"); + if (!strcmp(method, "none")) + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), + FALSE); + gtk_widget_set_sensitive(win->menu.sounds, FALSE); + } + gaim_prefs_connect_callback(win, "/gaim/gtk/sound/method", + sound_method_pref_changed_cb, win); + win->menu.show_formatting_toolbar = gtk_item_factory_get_widget(win->menu.item_factory, N_("/Options/Show Formatting Toolbars")); @@ -2665,7 +2725,14 @@ win->menu.show_icon = gtk_item_factory_get_widget(win->menu.item_factory, N_("/Options/Show Buddy Icon")); - + if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons")) + { + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), + FALSE); + gtk_widget_set_sensitive(win->menu.show_icon, FALSE); + } + gaim_prefs_connect_callback(win, "/gaim/gtk/conversations/im/show_buddy_icons", + show_buddy_icons_pref_changed_cb, win); win->menu.tray = gaim_gtk_menu_tray_new(); gtk_menu_shell_append(GTK_MENU_SHELL(win->menu.menubar), @@ -6713,6 +6780,7 @@ GaimGtkWindow *win; GaimConversation *conv; GaimGtkConversation *gtkconv; + const char *sound_method; win = user_data; gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, page_num); @@ -6735,8 +6803,10 @@ gaim_gtkconv_switch_active_conversation(conv); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), - gtkconv->make_sound); + sound_method = gaim_prefs_get_string("/gaim/gtk/sound/method"); + if (strcmp(sound_method, "none") != 0) + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), + gtkconv->make_sound); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_formatting_toolbar), gaim_prefs_get_bool("/gaim/gtk/conversations/show_formatting_toolbar")); @@ -6744,9 +6814,12 @@ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_timestamps), gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")); - if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) + if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM && + gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons")) + { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), gtkconv->u.im->show_icon); + } /* * We pause icons when they are not visible. If this icon should @@ -6843,6 +6916,7 @@ void gaim_gtk_conv_window_destroy(GaimGtkWindow *win) { + gaim_prefs_disconnect_by_handle(win); window_list = g_list_remove(window_list, win); if (win->gtkconvs) {