+static void label_menu_item_activate_item_cb(GtkMenuItem *label_menu_item, gpointer data)
+{
+ SummaryView *summaryview;
+ GtkMenuShell *label_menu;
+ GtkCheckMenuItem **items;
+ int n;
+ GList *cur, *sel;
+
+ summaryview = (SummaryView *) data;
+ g_return_if_fail(summaryview);
+ if (NULL == (sel = GTK_CLIST(summaryview->ctree)->selection))
+ return;
+
+ label_menu = GTK_MENU_SHELL(summaryview->label_menu);
+ g_return_if_fail(label_menu);
+
+ items = alloca( (LABEL_COLORS_ELEMS + 1) * sizeof(GtkWidget *));
+ g_return_if_fail(items);
+
+ /* NOTE: don't return prematurely because we set the "dont_toggle" state
+ * for check menu items */
+ gtk_object_set_data(GTK_OBJECT(label_menu), "dont_toggle", GINT_TO_POINTER(1));
+
+ /* clear items. get item pointers. */
+ for (n = 0, cur = label_menu->children; cur != NULL; cur = cur->next) {
+ if (GTK_IS_CHECK_MENU_ITEM(cur->data)) {
+ gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(cur->data), FALSE);
+ items[n] = GTK_CHECK_MENU_ITEM(cur->data);
+ n++;
+ }
+ }
+
+ if (n == (LABEL_COLORS_ELEMS + 1)) {
+ /* iterate all messages and set the state of the appropriate items */
+ for (; sel != NULL; sel = sel->next) {
+ MsgInfo *msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree),
+ GTK_CTREE_NODE(sel->data));
+ gint menu_item;
+ if (msginfo) {
+ menu_item = ((msginfo->flags & MSG_LABEL) >> 7);
+ if (!items[menu_item]->active)
+ gtk_check_menu_item_set_state(items[menu_item], TRUE);
+ }
+ }
+ }
+ else
+ g_warning("invalid number of color elements (%d)\n", n);
+
+ /* reset "dont_toggle" state */
+ gtk_object_set_data(GTK_OBJECT(label_menu), "dont_toggle", GINT_TO_POINTER(0));
+}
+