| 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)
|