Revision 241 src/summary_search.c
| summary_search.c (revision 241) | ||
|---|---|---|
| 39 | 39 |
#include <gtk/gtkbutton.h> |
| 40 | 40 |
#include <gtk/gtkmenuitem.h> |
| 41 | 41 |
#include <gtk/gtkstock.h> |
| 42 |
#include <gtk/gtktreemodel.h> |
|
| 43 |
#include <gtk/gtktreeselection.h> |
|
| 42 | 44 |
#include <stdio.h> |
| 43 | 45 |
#include <stdlib.h> |
| 44 | 46 |
#include <string.h> |
| ... | ... | |
| 240 | 242 |
|
| 241 | 243 |
static void summary_search_execute(GtkButton *button, gpointer data) |
| 242 | 244 |
{
|
| 243 |
#if 0 |
|
| 244 | 245 |
SummaryView *summaryview = data; |
| 246 |
GtkTreeModel *model; |
|
| 247 |
GtkTreeIter iter; |
|
| 245 | 248 |
MsgInfo *msginfo; |
| 246 | 249 |
gboolean bool_and; |
| 247 | 250 |
gboolean case_sens; |
| ... | ... | |
| 252 | 255 |
gboolean body_matched; |
| 253 | 256 |
const gchar *from_str, *to_str, *subject_str, *body_str; |
| 254 | 257 |
StrFindFunc str_find_func; |
| 258 |
gboolean valid; |
|
| 255 | 259 |
|
| 256 | 260 |
if (summary_is_locked(summaryview)) return; |
| 257 | 261 |
summary_lock(summaryview); |
| 258 | 262 |
|
| 263 |
model = GTK_TREE_MODEL(summaryview->store); |
|
| 264 |
|
|
| 259 | 265 |
bool_and = menu_get_option_menu_active_index |
| 260 | 266 |
(GTK_OPTION_MENU(bool_optmenu)); |
| 261 | 267 |
case_sens = gtk_toggle_button_get_active |
| ... | ... | |
| 276 | 282 |
body_str = gtk_entry_get_text(GTK_ENTRY(body_entry)); |
| 277 | 283 |
|
| 278 | 284 |
if (search_all) {
|
| 279 |
gtk_clist_freeze(GTK_CLIST(ctree)); |
|
| 280 |
gtk_clist_unselect_all(GTK_CLIST(ctree)); |
|
| 281 |
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); |
|
| 285 |
summary_unselect_all(summaryview); |
|
| 286 |
valid = gtk_tree_model_get_iter_first(model, &iter); |
|
| 282 | 287 |
backward = FALSE; |
| 283 | 288 |
} else if (!summaryview->selected) {
|
| 284 | 289 |
if (backward) |
| 285 |
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end);
|
|
| 290 |
valid = gtkut_tree_model_get_iter_last(model, &iter);
|
|
| 286 | 291 |
else |
| 287 |
node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); |
|
| 288 |
|
|
| 289 |
if (!node) {
|
|
| 292 |
valid = gtk_tree_model_get_iter_first(model, &iter); |
|
| 293 |
if (!valid) {
|
|
| 290 | 294 |
summary_unlock(summaryview); |
| 291 | 295 |
return; |
| 292 | 296 |
} |
| 293 | 297 |
} else {
|
| 298 |
valid = gtkut_tree_row_reference_get_iter |
|
| 299 |
(model, summaryview->selected, &iter); |
|
| 300 |
if (!valid) {
|
|
| 301 |
summary_unlock(summaryview); |
|
| 302 |
return; |
|
| 303 |
} |
|
| 304 |
|
|
| 294 | 305 |
if (backward) |
| 295 |
node = gtkut_ctree_node_prev |
|
| 296 |
(ctree, summaryview->selected); |
|
| 306 |
valid = gtkut_tree_model_prev(model, &iter); |
|
| 297 | 307 |
else |
| 298 |
node = gtkut_ctree_node_next |
|
| 299 |
(ctree, summaryview->selected); |
|
| 308 |
valid = gtkut_tree_model_next(model, &iter); |
|
| 300 | 309 |
} |
| 301 | 310 |
|
| 302 | 311 |
if (*body_str) |
| 303 | 312 |
main_window_cursor_wait(summaryview->mainwin); |
| 304 | 313 |
|
| 305 | 314 |
for (;;) {
|
| 306 |
if (!node) {
|
|
| 315 |
if (!valid) {
|
|
| 307 | 316 |
gchar *str; |
| 308 | 317 |
AlertValue val; |
| 309 | 318 |
|
| 310 | 319 |
if (search_all) {
|
| 311 |
gtk_clist_thaw(GTK_CLIST(ctree)); |
|
| 312 | 320 |
break; |
| 313 | 321 |
} |
| 314 | 322 |
|
| ... | ... | |
| 329 | 337 |
GTK_STOCK_YES, GTK_STOCK_NO, NULL); |
| 330 | 338 |
if (G_ALERTDEFAULT == val) {
|
| 331 | 339 |
if (backward) |
| 332 |
node = GTK_CTREE_NODE
|
|
| 333 |
(GTK_CLIST(ctree)->row_list_end);
|
|
| 340 |
valid = gtkut_tree_model_get_iter_last
|
|
| 341 |
(model, &iter);
|
|
| 334 | 342 |
else |
| 335 |
node = GTK_CTREE_NODE |
|
| 336 |
(GTK_CLIST(ctree)->row_list); |
|
| 337 |
|
|
| 343 |
valid = gtk_tree_model_get_iter_first |
|
| 344 |
(model, &iter); |
|
| 338 | 345 |
all_searched = TRUE; |
| 339 |
|
|
| 340 | 346 |
manage_window_focus_in(window, NULL, NULL); |
| 341 | 347 |
} else |
| 342 | 348 |
break; |
| 343 | 349 |
} |
| 344 | 350 |
|
| 345 |
|
|
| 346 |
msginfo = gtk_ctree_node_get_row_data(ctree, node); |
|
| 351 |
gtk_tree_model_get(model, &iter, S_COL_MSG_INFO, &msginfo, -1); |
|
| 347 | 352 |
body_matched = FALSE; |
| 348 | 353 |
|
| 349 | 354 |
if (bool_and) {
|
| ... | ... | |
| 397 | 402 |
} |
| 398 | 403 |
|
| 399 | 404 |
if (matched) {
|
| 400 |
if (search_all) |
|
| 401 |
gtk_ctree_select(ctree, node); |
|
| 402 |
else {
|
|
| 405 |
if (search_all) {
|
|
| 406 |
gtk_tree_selection_select_iter |
|
| 407 |
(summaryview->selection, &iter); |
|
| 408 |
} else {
|
|
| 403 | 409 |
if (messageview_is_visible |
| 404 | 410 |
(summaryview->messageview)) {
|
| 405 | 411 |
summary_unlock(summaryview); |
| 406 | 412 |
summary_select_row |
| 407 |
(summaryview, &iter, TRUE, TRUE); |
|
| 413 |
(summaryview, &iter, |
|
| 414 |
TRUE, TRUE); |
|
| 408 | 415 |
summary_lock(summaryview); |
| 409 | 416 |
if (body_matched) {
|
| 410 | 417 |
messageview_search_string |
| ... | ... | |
| 412 | 419 |
body_str, case_sens); |
| 413 | 420 |
} |
| 414 | 421 |
} else {
|
| 415 |
summary_select_node |
|
| 416 |
(summaryview, node, FALSE, TRUE); |
|
| 422 |
summary_select_row |
|
| 423 |
(summaryview, &iter, |
|
| 424 |
FALSE, TRUE); |
|
| 417 | 425 |
} |
| 418 | 426 |
break; |
| 419 | 427 |
} |
| 420 | 428 |
} |
| 421 | 429 |
|
| 422 |
node = backward ? gtkut_ctree_node_prev(ctree, node) |
|
| 423 |
: gtkut_ctree_node_next(ctree, node); |
|
| 430 |
if (backward) |
|
| 431 |
valid = gtkut_tree_model_prev(model, &iter); |
|
| 432 |
else |
|
| 433 |
valid = gtkut_tree_model_next(model, &iter); |
|
| 424 | 434 |
} |
| 425 | 435 |
|
| 426 | 436 |
if (*body_str) |
| 427 | 437 |
main_window_cursor_normal(summaryview->mainwin); |
| 428 | 438 |
|
| 429 | 439 |
summary_unlock(summaryview); |
| 430 |
#endif |
|
| 431 | 440 |
} |
| 432 | 441 |
|
| 433 | 442 |
static void summary_search_clear(GtkButton *button, gpointer data) |
Also available in: Unified diff