From 069b663e8beb0733bfb98edf5c57ec8f8766a02f Mon Sep 17 00:00:00 2001 From: hiro Date: Tue, 10 May 2005 08:30:25 +0000 Subject: reimplemented summary search. git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@241 ee746299-78ed-0310-b773-934348b2243d --- src/summary_search.c | 71 +++++++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/summary_search.c b/src/summary_search.c index 57d2ed36..ed19ff47 100644 --- a/src/summary_search.c +++ b/src/summary_search.c @@ -39,6 +39,8 @@ #include #include #include +#include +#include #include #include #include @@ -240,8 +242,9 @@ static void summary_search_create(SummaryView *summaryview) static void summary_search_execute(GtkButton *button, gpointer data) { -#if 0 SummaryView *summaryview = data; + GtkTreeModel *model; + GtkTreeIter iter; MsgInfo *msginfo; gboolean bool_and; gboolean case_sens; @@ -252,10 +255,13 @@ static void summary_search_execute(GtkButton *button, gpointer data) gboolean body_matched; const gchar *from_str, *to_str, *subject_str, *body_str; StrFindFunc str_find_func; + gboolean valid; if (summary_is_locked(summaryview)) return; summary_lock(summaryview); + model = GTK_TREE_MODEL(summaryview->store); + bool_and = menu_get_option_menu_active_index (GTK_OPTION_MENU(bool_optmenu)); case_sens = gtk_toggle_button_get_active @@ -276,39 +282,41 @@ static void summary_search_execute(GtkButton *button, gpointer data) body_str = gtk_entry_get_text(GTK_ENTRY(body_entry)); if (search_all) { - gtk_clist_freeze(GTK_CLIST(ctree)); - gtk_clist_unselect_all(GTK_CLIST(ctree)); - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + summary_unselect_all(summaryview); + valid = gtk_tree_model_get_iter_first(model, &iter); backward = FALSE; } else if (!summaryview->selected) { if (backward) - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end); + valid = gtkut_tree_model_get_iter_last(model, &iter); else - node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); - - if (!node) { + valid = gtk_tree_model_get_iter_first(model, &iter); + if (!valid) { summary_unlock(summaryview); return; } } else { + valid = gtkut_tree_row_reference_get_iter + (model, summaryview->selected, &iter); + if (!valid) { + summary_unlock(summaryview); + return; + } + if (backward) - node = gtkut_ctree_node_prev - (ctree, summaryview->selected); + valid = gtkut_tree_model_prev(model, &iter); else - node = gtkut_ctree_node_next - (ctree, summaryview->selected); + valid = gtkut_tree_model_next(model, &iter); } if (*body_str) main_window_cursor_wait(summaryview->mainwin); for (;;) { - if (!node) { + if (!valid) { gchar *str; AlertValue val; if (search_all) { - gtk_clist_thaw(GTK_CLIST(ctree)); break; } @@ -329,21 +337,18 @@ static void summary_search_execute(GtkButton *button, gpointer data) GTK_STOCK_YES, GTK_STOCK_NO, NULL); if (G_ALERTDEFAULT == val) { if (backward) - node = GTK_CTREE_NODE - (GTK_CLIST(ctree)->row_list_end); + valid = gtkut_tree_model_get_iter_last + (model, &iter); else - node = GTK_CTREE_NODE - (GTK_CLIST(ctree)->row_list); - + valid = gtk_tree_model_get_iter_first + (model, &iter); all_searched = TRUE; - manage_window_focus_in(window, NULL, NULL); } else break; } - - msginfo = gtk_ctree_node_get_row_data(ctree, node); + gtk_tree_model_get(model, &iter, S_COL_MSG_INFO, &msginfo, -1); body_matched = FALSE; if (bool_and) { @@ -397,14 +402,16 @@ static void summary_search_execute(GtkButton *button, gpointer data) } if (matched) { - if (search_all) - gtk_ctree_select(ctree, node); - else { + if (search_all) { + gtk_tree_selection_select_iter + (summaryview->selection, &iter); + } else { if (messageview_is_visible (summaryview->messageview)) { summary_unlock(summaryview); summary_select_row - (summaryview, &iter, TRUE, TRUE); + (summaryview, &iter, + TRUE, TRUE); summary_lock(summaryview); if (body_matched) { messageview_search_string @@ -412,22 +419,24 @@ static void summary_search_execute(GtkButton *button, gpointer data) body_str, case_sens); } } else { - summary_select_node - (summaryview, node, FALSE, TRUE); + summary_select_row + (summaryview, &iter, + FALSE, TRUE); } break; } } - node = backward ? gtkut_ctree_node_prev(ctree, node) - : gtkut_ctree_node_next(ctree, node); + if (backward) + valid = gtkut_tree_model_prev(model, &iter); + else + valid = gtkut_tree_model_next(model, &iter); } if (*body_str) main_window_cursor_normal(summaryview->mainwin); summary_unlock(summaryview); -#endif } static void summary_search_clear(GtkButton *button, gpointer data) -- cgit v1.2.3