static void sort_summary_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
+static void sort_summary_type_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
static void attract_by_subject_cb(MainWindow *mainwin,
guint action,
GtkWidget *widget);
{N_("/_View/Ex_pand Message View"), "<shift>V", toggle_expand_messageview_cb, 0, "<ToggleItem>"},
{N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_View/_Sort"), NULL, NULL, 0, "<Branch>"},
- {N_("/_View/_Sort/by _number"), NULL, sort_summary_cb, SORT_BY_NUMBER, NULL},
- {N_("/_View/_Sort/by s_ize"), NULL, sort_summary_cb, SORT_BY_SIZE, NULL},
- {N_("/_View/_Sort/by _date"), NULL, sort_summary_cb, SORT_BY_DATE, NULL},
- {N_("/_View/_Sort/by _from"), NULL, sort_summary_cb, SORT_BY_FROM, NULL},
- {N_("/_View/_Sort/by _subject"), NULL, sort_summary_cb, SORT_BY_SUBJECT, NULL},
+ {N_("/_View/_Sort/by _number"), NULL, sort_summary_cb, SORT_BY_NUMBER, "<RadioItem>"},
+ {N_("/_View/_Sort/by s_ize"), NULL, sort_summary_cb, SORT_BY_SIZE, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _date"), NULL, sort_summary_cb, SORT_BY_DATE, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _from"), NULL, sort_summary_cb, SORT_BY_FROM, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _subject"), NULL, sort_summary_cb, SORT_BY_SUBJECT, "/View/Sort/by number"},
{N_("/_View/_Sort/by _color label"),
- NULL, sort_summary_cb, SORT_BY_LABEL, NULL},
- {N_("/_View/_Sort/by _mark"), NULL, sort_summary_cb, SORT_BY_MARK, NULL},
- {N_("/_View/_Sort/by _unread"), NULL, sort_summary_cb, SORT_BY_UNREAD, NULL},
+ NULL, sort_summary_cb, SORT_BY_LABEL, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _mark"), NULL, sort_summary_cb, SORT_BY_MARK, "/View/Sort/by number"},
+ {N_("/_View/_Sort/by _unread"), NULL, sort_summary_cb, SORT_BY_UNREAD, "/View/Sort/by number"},
{N_("/_View/_Sort/by a_ttachment"),
- NULL, sort_summary_cb, SORT_BY_MIME, NULL},
+ NULL, sort_summary_cb, SORT_BY_MIME, "/View/Sort/by number"},
+ {N_("/_View/_Sort/D_on't sort"), NULL, sort_summary_cb, SORT_BY_NONE, "/View/Sort/by number"},
+ {N_("/_View/_Sort/---"), NULL, NULL, 0, "<Separator>"},
+ {N_("/_View/_Sort/Ascending"), NULL, sort_summary_type_cb, SORT_ASCENDING, "<RadioItem>"},
+ {N_("/_View/_Sort/Descending"), NULL, sort_summary_type_cb, SORT_DESCENDING, "/View/Sort/Ascending"},
{N_("/_View/_Sort/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_View/_Sort/_Attract by subject"),
NULL, attract_by_subject_cb, 0, NULL},
n_menu_entries, "<Main>", mainwin);
gtk_widget_show(menubar);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
+ ifactory = gtk_item_factory_from_widget(menubar);
handlebox = gtk_handle_box_new();
gtk_widget_show(handlebox);
SensitiveCond state;
gboolean sensitive;
GtkWidget *menuitem;
+ FolderItem *item;
+ gchar *menu_path;
gint i;
static const struct {
}
main_window_menu_callback_block(mainwin);
- menuitem = gtk_item_factory_get_widget(ifactory, "/View/Show all header");
- gtk_check_menu_item_set_active
- (GTK_CHECK_MENU_ITEM(menuitem),
- mainwin->messageview->textview->show_all_headers);
- menuitem = gtk_item_factory_get_widget(ifactory, "/View/Thread view");
- gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem),
- (state & M_THREADED) != 0);
+
+#define SET_CHECK_MENU_ACTIVE(path, active) \
+{ \
+ menuitem = gtk_item_factory_get_widget(ifactory, path); \
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active); \
+}
+
+ item = mainwin->summaryview->folder_item;
+ menu_path = "/View/Sort/Don't sort";
+ if (item) {
+ switch (item->sort_key) {
+ case SORT_BY_NUMBER:
+ menu_path = "/View/Sort/by number"; break;
+ case SORT_BY_SIZE:
+ menu_path = "/View/Sort/by size"; break;
+ case SORT_BY_DATE:
+ menu_path = "/View/Sort/by date"; break;
+ case SORT_BY_FROM:
+ menu_path = "/View/Sort/by from"; break;
+ case SORT_BY_SUBJECT:
+ menu_path = "/View/Sort/by subject"; break;
+ case SORT_BY_LABEL:
+ menu_path = "/View/Sort/by color label"; break;
+ case SORT_BY_MARK:
+ menu_path = "/View/Sort/by mark"; break;
+ case SORT_BY_UNREAD:
+ menu_path = "/View/Sort/by unread"; break;
+ case SORT_BY_MIME:
+ menu_path = "/View/Sort/by attachment"; break;
+ case SORT_BY_NONE:
+ default:
+ menu_path = "/View/Sort/Don't sort"; break;
+ }
+ }
+ SET_CHECK_MENU_ACTIVE(menu_path, TRUE);
+
+ if (!item || item->sort_type == SORT_ASCENDING) {
+ SET_CHECK_MENU_ACTIVE("/View/Sort/Ascending", TRUE);
+ } else {
+ SET_CHECK_MENU_ACTIVE("/View/Sort/Descending", TRUE);
+ }
+
+ if (item && item->sort_key != SORT_BY_NONE) {
+ menu_set_sensitive(ifactory, "/View/Sort/Ascending", TRUE);
+ menu_set_sensitive(ifactory, "/View/Sort/Descending", TRUE);
+ } else {
+ menu_set_sensitive(ifactory, "/View/Sort/Ascending", FALSE);
+ menu_set_sensitive(ifactory, "/View/Sort/Descending", FALSE);
+ }
+
+ SET_CHECK_MENU_ACTIVE("/View/Show all header",
+ mainwin->messageview->textview->show_all_headers);
+ SET_CHECK_MENU_ACTIVE("/View/Thread view", (state & M_THREADED) != 0);
+
+#undef SET_CHECK_MENU_ACTIVE
+
main_window_menu_callback_unblock(mainwin);
}
static void sort_summary_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
- summary_sort(mainwin->summaryview, (FolderSortKey)action);
+ FolderItem *item = mainwin->summaryview->folder_item;
+ GtkItemFactory *ifactory;
+ GtkWidget *menuitem;
+
+ if (mainwin->menu_lock_count) return;
+ if (item) {
+ ifactory = gtk_item_factory_from_widget(mainwin->menubar);
+ menuitem = gtk_item_factory_get_item
+ (ifactory, "/View/Sort/Ascending");
+ summary_sort(mainwin->summaryview, (FolderSortKey)action,
+ GTK_CHECK_MENU_ITEM(menuitem)->active
+ ? SORT_ASCENDING : SORT_DESCENDING);
+ }
+}
+
+static void sort_summary_type_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ FolderItem *item = mainwin->summaryview->folder_item;
+
+ if (mainwin->menu_lock_count) return;
+ if (item)
+ summary_sort(mainwin->summaryview,
+ item->sort_key, (FolderSortType)action);
}
static void attract_by_subject_cb(MainWindow *mainwin, guint action,
g_slist_free(mlist);
- if (item->sort_key != SORT_BY_NONE) {
- if (item->sort_type == SORT_DESCENDING)
- item->sort_type = SORT_ASCENDING;
- else
- item->sort_type = SORT_DESCENDING;
- summary_sort(summaryview, item->sort_key);
- }
+ if (item->sort_key != SORT_BY_NONE)
+ summary_sort(summaryview, item->sort_key, item->sort_type);
summary_write_cache(summaryview);
}
}
-void summary_sort(SummaryView *summaryview, FolderSortKey sort_key)
+void summary_sort(SummaryView *summaryview,
+ FolderSortKey sort_key, FolderSortType sort_type)
{
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
GtkCList *clist = GTK_CLIST(summaryview->ctree);
case SORT_BY_LABEL:
cmp_func = (GtkCListCompareFunc)summary_cmp_by_label;
break;
+ case SORT_BY_NONE:
+ item->sort_key = sort_key;
+ item->sort_type = SORT_ASCENDING;
+ summary_set_column_titles(summaryview);
+ summary_set_menu_sensitive(summaryview);
+ return;
default:
return;
}
gtk_clist_set_compare_func(clist, cmp_func);
- /* toggle sort type if the same column is selected */
- if (item->sort_key == sort_key)
- item->sort_type =
- item->sort_type == SORT_ASCENDING
- ? SORT_DESCENDING : SORT_ASCENDING;
- else
- item->sort_type = SORT_ASCENDING;
- gtk_clist_set_sort_type(clist, (GtkSortType)item->sort_type);
+ gtk_clist_set_sort_type(clist, (GtkSortType)sort_type);
item->sort_key = sort_key;
+ item->sort_type = sort_type;
summary_set_column_titles(summaryview);
+ summary_set_menu_sensitive(summaryview);
gtk_ctree_sort_recursive(ctree, NULL);
summary_filter_open(summaryview, (PrefsFilterType)action);
}
+static void summary_sort_by_column_click(SummaryView *summaryview,
+ FolderSortKey sort_key)
+{
+ FolderItem *item = summaryview->folder_item;
+
+ if (!item) return;
+
+ if (item->sort_key == sort_key)
+ summary_sort(summaryview, sort_key,
+ item->sort_type == SORT_ASCENDING
+ ? SORT_DESCENDING : SORT_ASCENDING);
+ else
+ summary_sort(summaryview, sort_key, SORT_ASCENDING);
+}
+
static void summary_mark_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_MARK);
+ summary_sort_by_column_click(summaryview, SORT_BY_MARK);
}
static void summary_unread_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_UNREAD);
+ summary_sort_by_column_click(summaryview, SORT_BY_UNREAD);
}
static void summary_mime_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_MIME);
+ summary_sort_by_column_click(summaryview, SORT_BY_MIME);
}
static void summary_num_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_NUMBER);
+ summary_sort_by_column_click(summaryview, SORT_BY_NUMBER);
}
-static void summary_score_clicked(GtkWidget *button,
- SummaryView *summaryview)
+static void summary_size_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_SCORE);
+ summary_sort_by_column_click(summaryview, SORT_BY_SIZE);
}
-static void summary_locked_clicked(GtkWidget *button,
- SummaryView *summaryview)
+static void summary_date_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_LOCKED);
+ summary_sort_by_column_click(summaryview, SORT_BY_DATE);
}
-static void summary_size_clicked(GtkWidget *button, SummaryView *summaryview)
+static void summary_from_clicked(GtkWidget *button, SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_SIZE);
+ summary_sort_by_column_click(summaryview, SORT_BY_FROM);
}
-static void summary_date_clicked(GtkWidget *button, SummaryView *summaryview)
+static void summary_subject_clicked(GtkWidget *button,
+ SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_DATE);
+ summary_sort_by_column_click(summaryview, SORT_BY_SUBJECT);
}
-static void summary_from_clicked(GtkWidget *button, SummaryView *summaryview)
+static void summary_score_clicked(GtkWidget *button,
+ SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_FROM);
+ summary_sort_by_column_click(summaryview, SORT_BY_SCORE);
}
-static void summary_subject_clicked(GtkWidget *button,
- SummaryView *summaryview)
+static void summary_locked_clicked(GtkWidget *button,
+ SummaryView *summaryview)
{
- summary_sort(summaryview, SORT_BY_SUBJECT);
+ summary_sort_by_column_click(summaryview, SORT_BY_LOCKED);
}
static void summary_start_drag(GtkWidget *widget, gint button, GdkEvent *event,