# HG changeset patch # User Richard Laager # Date 1134415811 0 # Node ID 13f351a0096e97e330c5d7da2b9299e5366be940 # Parent f4efe0c0de8845b51eb93eb311d99f5cb88c5c70 [gaim-migrate @ 14780] SF Patch #1362633 from charkins "This patch adds a submenu (Unread Messages) in the docklet menu which shows conversations with unseen messages. The submenu will be insensitive when there are no conversations with unread messages. I also removed a second GtkWidget* variable from the menu building function (s/entry/menuitem), only one was necessary. A second is now necessary (submenu), but the scope is limited to an if block." Plus changes from me so it'd actually compile and work. ;) committer: Tailor Script diff -r f4efe0c0de88 -r 13f351a0096e plugins/docklet/docklet.c --- a/plugins/docklet/docklet.c Mon Dec 12 19:28:06 2005 +0000 +++ b/plugins/docklet/docklet.c Mon Dec 12 19:30:11 2005 +0000 @@ -285,7 +285,6 @@ static void docklet_menu() { static GtkWidget *menu = NULL; - GtkWidget *entry; GtkWidget *menuitem; if (menu) { @@ -294,10 +293,29 @@ menu = gtk_menu_new(); - entry = gtk_check_menu_item_new_with_label(_("Show Buddy List")); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(entry), gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")); - g_signal_connect(G_OBJECT(entry), "toggled", G_CALLBACK(docklet_toggle_blist), NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), entry); + menuitem = gtk_check_menu_item_new_with_label(_("Show Buddy List")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")); + g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_blist), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + menuitem = gtk_menu_item_new_with_label(_("Unread Messages")); + + if (status == DOCKLET_STATUS_ONLINE_PENDING || status == DOCKLET_STATUS_AWAY_PENDING) { + GtkWidget *submenu = gtk_menu_new(); + GList *l = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, GAIM_UNSEEN_TEXT, FALSE, 0); + if (l == NULL) { + gtk_widget_set_sensitive(menuitem, FALSE); + gaim_debug_warning("docklet", + "status indicates messages pending, but no conversations with unseen messages were found."); + } else { + gaim_gtk_conversations_fill_menu(submenu, l); + g_list_free(l); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); + } + } else { + gtk_widget_set_sensitive(menuitem, FALSE); + } + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gaim_separator(menu); @@ -318,12 +336,12 @@ gaim_new_item_from_stock(menu, _("File Transfers"), GAIM_STOCK_FILE_TRANSFER, G_CALLBACK(gaim_show_xfer_dialog), NULL, 0, 0, NULL); - entry = gtk_check_menu_item_new_with_label(_("Mute Sounds")); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(entry), gaim_prefs_get_bool("/gaim/gtk/sound/mute")); + menuitem = gtk_check_menu_item_new_with_label(_("Mute Sounds")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), gaim_prefs_get_bool("/gaim/gtk/sound/mute")); if (!strcmp(gaim_prefs_get_string("/gaim/gtk/sound/method"), "none")) - gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE); - g_signal_connect(G_OBJECT(entry), "toggled", G_CALLBACK(docklet_toggle_mute), NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), entry); + gtk_widget_set_sensitive(GTK_WIDGET(menuitem), FALSE); + g_signal_connect(G_OBJECT(menuitem), "toggled", G_CALLBACK(docklet_toggle_mute), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gaim_separator(menu);